@likec4/core 1.58.0 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder/index.d.mts +2 -2
- package/dist/builder/index.mjs +2 -1
- package/dist/chunks/Builder.view-element.mjs +2 -0
- package/dist/{_chunks → chunks}/LikeC4Model.d.mts +24 -26
- package/dist/{_chunks → chunks}/_types.d.mts +302 -57
- package/dist/{_chunks → chunks}/_types2.d.mts +2 -2
- package/dist/chunks/assignTagColors.mjs +1 -0
- package/dist/chunks/calcDriftsFromSnapshot.mjs +1 -0
- package/dist/chunks/default-map.d.mts +29 -0
- package/dist/{_chunks → chunks}/index.d.mts +933 -194
- package/dist/{_chunks → chunks}/index2.d.mts +21 -19
- package/dist/{_chunks → chunks}/index3.d.mts +2 -2
- package/dist/{_chunks/index5.d.mts → chunks/index4.d.mts} +153 -4
- package/dist/{_chunks/index4.d.mts → chunks/index5.d.mts} +2 -2
- package/dist/chunks/libs/chroma-js.mjs +15 -0
- package/dist/chunks/libs/graphology-dag.mjs +1 -0
- package/dist/chunks/libs/graphology.mjs +1 -0
- package/dist/chunks/libs/hast-util-sanitize.mjs +1 -0
- package/dist/chunks/libs/hast-util-to-html.mjs +9 -0
- package/dist/chunks/libs/mdast.mjs +29 -0
- package/dist/chunks/libs/mnemonist.mjs +1 -0
- package/dist/chunks/libs/ohash.mjs +1 -0
- package/dist/chunks/libs/remark.mjs +3 -0
- package/dist/chunks/libs/remeda.mjs +1 -0
- package/dist/chunks/libs/unified.mjs +1 -0
- package/dist/chunks/model.mjs +4 -0
- package/dist/chunks/rolldown-runtime.mjs +1 -0
- package/dist/chunks/types.mjs +9 -0
- package/dist/compute-view/index.d.mts +56 -18
- package/dist/compute-view/index.mjs +2 -2
- package/dist/geometry/index.d.mts +2 -2
- package/dist/geometry/index.mjs +1 -1
- package/dist/index.d.mts +10 -10
- package/dist/index.mjs +1 -1
- package/dist/model/index.d.mts +3 -3
- package/dist/model/index.mjs +1 -1
- package/dist/styles/index.d.mts +3 -3
- package/dist/styles/index.mjs +1 -1
- package/dist/types/index.d.mts +3 -3
- package/dist/types/index.mjs +1 -1
- package/dist/utils/graphology/index.d.mts +618 -1
- package/dist/utils/graphology/index.mjs +1 -1
- package/dist/utils/index.d.mts +4 -4
- package/dist/utils/index.mjs +1 -1
- package/package.json +13 -14
- package/dist/THIRD-PARTY-LICENSES.md +0 -1034
- package/dist/_chunks/Builder.view-element.mjs +0 -2
- package/dist/_chunks/assignTagColors.mjs +0 -1
- package/dist/_chunks/libs/@ungap/structured-clone.mjs +0 -1
- package/dist/_chunks/libs/bail.mjs +0 -1
- package/dist/_chunks/libs/ccount.mjs +0 -1
- package/dist/_chunks/libs/character-entities-html4.mjs +0 -1
- package/dist/_chunks/libs/character-entities-legacy.mjs +0 -1
- package/dist/_chunks/libs/character-entities.mjs +0 -2
- package/dist/_chunks/libs/chroma-js.mjs +0 -15
- package/dist/_chunks/libs/comma-separated-tokens.mjs +0 -1
- package/dist/_chunks/libs/decode-named-character-reference.mjs +0 -1
- package/dist/_chunks/libs/defu.mjs +0 -1
- package/dist/_chunks/libs/devlop.mjs +0 -1
- package/dist/_chunks/libs/escape-string-regexp.mjs +0 -1
- package/dist/_chunks/libs/extend.mjs +0 -1
- package/dist/_chunks/libs/graphology-dag.d.mts +0 -607
- package/dist/_chunks/libs/graphology-dag.mjs +0 -1
- package/dist/_chunks/libs/graphology.mjs +0 -1
- package/dist/_chunks/libs/hast-util-sanitize.mjs +0 -1
- package/dist/_chunks/libs/hast-util-to-html.mjs +0 -9
- package/dist/_chunks/libs/is-plain-obj.mjs +0 -1
- package/dist/_chunks/libs/longest-streak.mjs +0 -1
- package/dist/_chunks/libs/markdown-table.mjs +0 -2
- package/dist/_chunks/libs/mdast-util-find-and-replace.mjs +0 -1
- package/dist/_chunks/libs/mdast-util-from-markdown.mjs +0 -3
- package/dist/_chunks/libs/mdast-util-gfm.mjs +0 -15
- package/dist/_chunks/libs/mdast-util-to-hast.mjs +0 -11
- package/dist/_chunks/libs/micromark-extension-gfm.mjs +0 -1
- package/dist/_chunks/libs/mnemonist.d.mts +0 -164
- package/dist/_chunks/libs/mnemonist.mjs +0 -1
- package/dist/_chunks/libs/natural-compare-lite.mjs +0 -9
- package/dist/_chunks/libs/ohash.mjs +0 -1
- package/dist/_chunks/libs/rehype-sanitize.mjs +0 -1
- package/dist/_chunks/libs/rehype-stringify.mjs +0 -1
- package/dist/_chunks/libs/remark-gfm.mjs +0 -1
- package/dist/_chunks/libs/remark-github-blockquote-alert.mjs +0 -3
- package/dist/_chunks/libs/remark-parse.mjs +0 -1
- package/dist/_chunks/libs/remark-rehype.mjs +0 -1
- package/dist/_chunks/libs/remeda.mjs +0 -2
- package/dist/_chunks/libs/trough.mjs +0 -1
- package/dist/_chunks/libs/unified.mjs +0 -1
- package/dist/_chunks/manual-layout.mjs +0 -1
- package/dist/_chunks/mnemonist.d.mts +0 -1
- package/dist/_chunks/model.mjs +0 -4
- package/dist/_chunks/rolldown-runtime.mjs +0 -1
- package/dist/_chunks/types.mjs +0 -1
- /package/dist/{_chunks → chunks}/libs/@radix-ui/colors.mjs +0 -0
package/dist/builder/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
export { $autoLayout, $deploymentExpr, $exclude, $expr, $include, $includeAncestors, $rules, $style, AddDeployedInstance, AddDeploymentNode, AddDeploymentNodeHelpers, AddDeploymentRelation, AddDeploymentViewHelper, AddDeploymentViewRules, AddElement, AddElementHelpers, AddViewHelper, AddViewOfHelper, AddViewRules, AnyTypes, AnyTypesNested, Builder, BuilderMethods, BuilderProjectSpecification, BuilderSpecification, DeloymentModelBuildFunction, DeloymentModelHelpers, DeploymentModelBuilder, DeploymentRulesBuilderOp, DeploymentViewBuilder, ElementViewBuilder, ElementViewRulesBuilder, Invalid, LikeC4ViewBuilder, Metadata, ModelBuilder, ModelBuilderFunction, ModelHelpers, NestedRelationshipHelper, NewDeploymentNodeProps, NewElementProps, NewRelationProps, NewViewProps, RelationshipHelper, TypedAddViewOfHelper, Types, TypesNested, ValidId, ViewPredicate, ViewsBuilder, ViewsBuilderFunction, ViewsHelpers, Warn, deployment, mkViewBuilder, model, views };
|
|
1
|
+
import { $ as AddDeploymentNodeHelpers, A as TypedAddViewOfHelper, B as $rules, C as views, D as AddViewRules, E as AddViewOfHelper, F as DeploymentRulesBuilderOp, G as ModelBuilder, H as LikeC4ViewBuilder, I as DeploymentViewBuilder, J as NestedRelationshipHelper, K as ModelBuilderFunction, L as $autoLayout, M as $includeAncestors, N as AddDeploymentViewHelper, O as ElementViewBuilder, P as AddDeploymentViewRules, Q as AddDeployedInstance, R as $exclude, S as mkViewBuilder, T as AddViewHelper, U as ViewPredicate, V as $style, W as AddElementHelpers, X as model, Y as RelationshipHelper, Z as AddElement, _ as assertSpecificationCompatible, a as BuilderSpecification, at as AddDeploymentNode, b as ViewsBuilderFunction, c as NewDeploymentNodeProps, d as NewViewProps, et as AddDeploymentRelation, f as Types, g as Builder, h as Warn, i as BuilderProjectSpecification, it as deployment, j as $deploymentExpr, k as ElementViewRulesBuilder, l as NewElementProps, m as ValidId, n as AnyTypesNested, nt as DeloymentModelHelpers, o as Invalid, p as TypesNested, q as ModelHelpers, r as BuilderMode, rt as DeploymentModelBuilder, s as Metadata, t as AnyTypes, tt as DeloymentModelBuildFunction, u as NewRelationProps, v as BuilderMethods, w as $expr, x as ViewsHelpers, y as ViewsBuilder, z as $include } from "../chunks/_types.mjs";
|
|
2
|
+
export { type $autoLayout, type $deploymentExpr, type $exclude, type $expr, type $include, type $includeAncestors, type $rules, type $style, type AddDeployedInstance, type AddDeploymentNode, type AddDeploymentNodeHelpers, type AddDeploymentRelation, type AddDeploymentViewHelper, type AddDeploymentViewRules, type AddElement, type AddElementHelpers, type AddViewHelper, type AddViewOfHelper, type AddViewRules, type AnyTypes, type AnyTypesNested, Builder, type BuilderMethods, type BuilderMode, type BuilderProjectSpecification, type BuilderSpecification, type DeloymentModelBuildFunction, type DeloymentModelHelpers, type DeploymentModelBuilder, type DeploymentRulesBuilderOp, type DeploymentViewBuilder, type ElementViewBuilder, type ElementViewRulesBuilder, type Invalid, type LikeC4ViewBuilder, type Metadata, type ModelBuilder, type ModelBuilderFunction, type ModelHelpers, type NestedRelationshipHelper, type NewDeploymentNodeProps, type NewElementProps, type NewRelationProps, type NewViewProps, type RelationshipHelper, type TypedAddViewOfHelper, type Types, type TypesNested, type ValidId, type ViewPredicate, type ViewsBuilder, type ViewsBuilderFunction, type ViewsHelpers, type Warn, assertSpecificationCompatible, type deployment, type mkViewBuilder, type model, type views };
|
package/dist/builder/index.mjs
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{t as e}from"../_chunks/libs/defu.mjs";import{B as t,C as n,F as r,M as i,Q as a,T as o,U as s,W as c,X as l,Y as u,et as d,k as f,w as p}from"../_chunks/libs/remeda.mjs";import{K as m,U as h,Z as g,bt as _,fn as v,ft as y,g as b,gt as x,jn as S,mn as C,pn as w,wn as T,yt as E}from"../_chunks/types.mjs";import{t as D}from"../_chunks/libs/mnemonist.mjs";import"../_chunks/model.mjs";import{n as O,t as k}from"../_chunks/Builder.view-element.mjs";import{t as A}from"../_chunks/assignTagColors.mjs";function j(e){if(f(e)){let t=e;switch(!0){case t.startsWith(`tag is not #`):return{tag:{neq:t.replace(`tag is not #`,``)}};case t.startsWith(`tag is #`):return{tag:{eq:t.replace(`tag is #`,``)}};case t.startsWith(`kind is not `):return{kind:{neq:t.replace(`kind is not `,``)}};case t.startsWith(`kind is `):return{kind:{eq:t.replace(`kind is `,``)}};case t.startsWith(`source.`):return{operator:j(t.replace(`source.`,``)),participant:`source`};case t.startsWith(`target.`):return{operator:j(t.replace(`target.`,``)),participant:`target`};default:throw Error(`Unknown where operator: ${e}`)}}if(e.and)return{and:o(e.and,j)};if(e.or)return{or:o(e.or,j)};if(e.not)return{not:j(e.not)};throw Error(`Unknown where operator: ${e}`)}function M(...e){return t=>{if(e.length===2&&typeof e[1]!=`string`&&(`where`in e[1]||`with`in e[1])){let n=t.$expr(e[0]),r=e[1].where?j(e[1].where):void 0;r&&(n={where:{expr:n,condition:r}});let i=e[1].with;return i&&(n=m.is(n)?{custom:{...i,expr:n}}:{customRelation:{...i,expr:n}}),t.include(n),t}return t.include(...e.map(e=>t.$expr(e))),t}}function N(...e){return t=>{let n=t.$expr(e[0]);if(e.length===2&&e[1].where){let t=j(e[1].where);n={where:{expr:n,condition:t}}}return t.exclude(n),t}}function P(e,{notation:n,...r}){return i=>i.style({targets:(t(e)?e:[e]).map(e=>i.$expr(e)),...n?{notation:n}:{},style:{...r}})}function F(e,t){return n=>n.autoLayout(e,t)}function I(...e){return t=>e.reduce((e,t)=>t(e),t)}function L(e){if(!f(e))return e;let t=e=>e;if(e===`*`)return t({wildcard:!0});if(e.startsWith(`->`))return e.endsWith(`->`)?t({inout:L(e.replace(/->/g,``).trim())}):t({incoming:L(e.replace(`-> `,``))});if(e.endsWith(` ->`))return t({outgoing:L(e.replace(` ->`,``))});if(e.includes(` <-> `)){let[n,r]=e.split(` <-> `);return t({source:L(n),target:L(r),isBidirectional:!0})}if(e.includes(` -> `)){let[n,r]=e.split(` -> `);return t({source:L(n),target:L(r)})}return e.endsWith(`._`)?t({ref:{deployment:e.replace(`._`,``)},selector:`expanded`}):e.endsWith(`.**`)?t({ref:{deployment:e.replace(`.**`,``)},selector:`descendants`}):e.endsWith(`.*`)?t({ref:{deployment:e.replace(`.*`,``)},selector:`children`}):t({ref:{deployment:e}})}function R(e){return t=>t.includeAncestors(e)}function z(e){let t={$expr:e._type===`deployment`?L:k,autoLayout(t,n){return e.rules.push(S({direction:t,rankSep:n?.rank,nodeSep:n?.node})),this},exclude(...t){return e.rules.push({exclude:t}),this},include(...t){return e.rules.push({include:t}),this},style(t){return e.rules.push(t),this},get Expr(){throw Error(`Expr is not available in runtime`)},get Types(){throw Error(`Types are not available in runtime`)},get ElementExpr(){throw Error(`ElementExpr is not available in runtime`)},get TypedExpr(){throw Error(`TypedExpr is not available in runtime`)}};return e._type===`deployment`?Object.assign(t,{includeAncestors(t){return e.rules.push({includeAncestors:t}),this}}):t}function B(e){return t(e)?s(e,e=>({})):e}function V({tags:e,elements:t,deployments:n,relationships:r,...i}){let a={};e&&Object.assign(a,B(e));let o=B(t);for(let[e,t]of l(o))if(t.tags)for(let n of t.tags)T(n in a,`Invalid specification for element kind "${e}": tag "${n}" not found`);let s=B(n??{});for(let[e,t]of l(s))if(t.tags)for(let n of t.tags)T(n in a,`Invalid specification for deployment kind "${e}": tag "${n}" not found`);return{...i,tags:a,elements:o,deployments:s,relationships:B(r??{})}}function H(e){return i(e)?null:typeof e==`string`?{txt:e}:e}function U(t,s=new Map,l=[],f=new Map,m={predicates:{},dynamicPredicates:{},styles:{}},k=new Map,j=[],L=new D.default(()=>new Map)){let B=V(t),W=()=>({elements:structuredClone(B.elements),deployments:structuredClone(B.deployments),relationships:structuredClone(B.relationships),tags:A(structuredClone(B.tags)),...B.metadataKeys?{metadataKeys:B.metadataKeys}:{},customColors:{}}),G=e=>{if(!(!e||!a(e,1)))return o(e,e=>typeof e==`string`?{url:e}:e)},K=(e,t,n)=>{r(t)&&(n=t,t={}),t??={};let{links:i=[],title:a=null,description:o=null,tags:s=[],...c}=typeof t==`string`?{title:t}:{...t},l=G(i);return[S({id:e,title:a,description:H(o),tags:s,links:l,_stage:`parsed`,...c}),n]},q=e=>{let[t,n]=x(e),r=(t?L.get(t):s).get(n);return T(r,`Element with id "${e}" not found`),r},J=e=>{if(typeof e==`string`){let[t,n]=x(e);return t?{project:t,model:n}:{model:n}}return`project`in e||`deployment`in e?e:J(e.model)},Y={get Types(){throw Error(`Types are not available in runtime`)},clone:()=>{let e=new D.default(()=>new Map);for(let[t,n]of L)e.set(t,structuredClone(n));return U(structuredClone(B),structuredClone(s),structuredClone(l),structuredClone(f),structuredClone(m),structuredClone(k),structuredClone(j),e)},__addElement:e=>{let[t,n]=x(e.id),r=C(n),i=t?L.get(t):s;if(r&&T(i.get(r),`Parent element with id "${r}" not found for element with id "${e.id}"`),i.has(n))throw Error(`Element with id "${e.id}" already exists`);return i.set(n,t?{...e,id:n}:e),Y},__addRelation(e){let t=J(e.source),n=g.flatten(t),r=J(e.target),i=g.flatten(r),a=q(n),o=q(i);if(y(n)&&y(i))throw Error(`Cannot create relationship between global elements`);return!y(n)&&!y(i)&&T(!v(a,o),`Cannot create relationship between elements in the same hierarchy`),l.push({id:`rel${l.length+1}`,...e,source:t,target:r}),Y},__fqn(e){return T(e.trim()!==``,`Id must be non-empty`),e},__deploymentFqn(e){return T(e.trim()!==``,`Id must be non-empty`),e},__addSourcelessRelation(){throw Error(`Can be called only in nested model`)},__addView:e=>{if(f.has(e.id))throw Error(`View with id "${e.id}" already exists`);return b(e)&&`viewOf`in e&&T(s.get(e.viewOf),`Invalid scoped view ${e.id}, wlement with id "${e.viewOf}" not found`),f.set(e.id,e),Y},__addDeployment:e=>{if(k.has(e.id))throw Error(`Deployment with id "${e.id}" already exists`);let t=C(e.id);return t&&T(k.get(t),`Parent element with id "${t}" not found for node with id "${e.id}"`),h(e)&&(T(t,`Instance ${e.id} of ${e.element} must be deployed under a parent node`),T(s.get(e.element),`Instance "${e.id}" references non-existing element "${e.element}"`)),k.set(e.id,e),Y},__addDeploymentRelation:e=>(T(!v(e.source.deployment,e.target.deployment),`Cannot create relationship between elements in the same hierarchy`),T(k.has(e.source.deployment),`Relation "${e.source.deployment} -> ${e.target.deployment}" references non-existing source`),T(k.has(e.target.deployment),`Relation "${e.source.deployment} -> ${e.target.deployment}" references non-existing target`),j.push({id:`deploy_rel${j.length+1}`,...e}),Y),build:e=>({[E]:`parsed`,projectId:typeof e==`string`?e:e?.id??`from-builder`,project:{id:typeof e==`string`?e:`from-builder`,...typeof e==`object`&&e?e:{}},specification:W(),elements:c(structuredClone(Array.from(s.entries()))),relations:p(l,e=>[e.id,structuredClone(e)]),globals:structuredClone(m),deployments:{elements:c(structuredClone(Array.from(k.entries()))),relations:p(j,e=>[e.id,structuredClone(e)])},views:c(structuredClone(Array.from(f.entries()))),imports:d(Array.from(L.entries()),o(([e,t])=>[e,structuredClone([...t.values()])]),u(([e,t])=>t.length>0),c())}),toLikeC4Model:e=>O(Y.build(e)),helpers:()=>({model:{model:(...e)=>t=>e.reduce((e,t)=>t(e),t),rel:(t,n,r)=>i=>{let{title:a=``,links:o=[],description:s=null,notes:c=null,...l}=e(typeof r==`string`?{title:r}:{...r},{title:null,links:null}),u=G(o);return i.__addRelation(S({source:{model:t},target:{model:n},title:a,...s&&{description:H(s)},...c&&{notes:H(c)},links:u,...l})),i},relTo:(t,n)=>r=>{let{title:i=``,links:a,description:o=null,notes:s=null,...c}=e(typeof n==`string`?{title:n}:{...n},{title:null,links:null});return r.__addSourcelessRelation(S({target:{model:t},title:i,...o&&{description:H(o)},...s&&{notes:H(s)},links:G(a),...c})),r},...n(B.elements,({style:e,...t},n)=>(r,i)=>{let a=(a=>{let{links:o,icon:s,color:c,shape:l,style:u,title:d,description:f,summary:p,...m}=typeof i==`string`?{title:i}:{...i},h=s??e?.icon,g=G(o),_=a.__fqn(r);return a.__addElement(S({id:_,kind:n,...t,title:d??t.title??w(_),...f&&{description:H(f)},...p&&{summary:H(p)},style:S({icon:h,color:c??e?.color,shape:l??e?.shape,border:e?.border,opacity:e?.opacity,size:e?.size,padding:e?.padding,textSize:e?.textSize,...u}),...g&&{links:g},...m})),a});return a.with=(...e)=>t=>{a(t);let{__fqn:n,__addSourcelessRelation:i}=t;try{t.__fqn=e=>`${n(r)}.${e}`,t.__addSourcelessRelation=e=>t.__addRelation({...e,source:{model:n(r)}}),e.reduce((e,t)=>t(e),t)}finally{t.__fqn=n,t.__addSourcelessRelation=i}return t},a})},views:{views:(...e)=>t=>e.reduce((e,t)=>t(e),t),view:(e,t,n)=>{let[r,i]=K(e,t,n),a={...r,[_]:`element`,rules:[]},o=e=>(e.__addView(a),i&&i(z(a)),e);return o.with=(...e)=>t=>{o(t);let n=z(a);for(let t of e)t(n);return t},o},viewOf:(e,t,n,r)=>{let[i,a]=K(e,n,r),o={...i,viewOf:t,[_]:`element`,rules:[]},s=e=>(e.__addView(o),a&&a(z(o)),e);return s.with=(...e)=>t=>{s(t);let n=z(o);for(let t of e)t(n);return t},s},deploymentView:(e,t,n)=>{let[r,i]=K(e,t,n),a={...r,[_]:`deployment`,rules:[]},o=e=>(e.__addView(a),i&&i(z(a)),e);return o.with=(...e)=>t=>{o(t);let n=z(a);for(let t of e)t(n);return t},o},$autoLayout:F,$exclude:N,$include:M,$rules:I,$style:P,$includeAncestors:R},deployment:{deployment:(...e)=>t=>e.reduce((e,t)=>t(e),t),instanceOf:(e,t,n)=>r=>{i(t)?(t=e,e=w(e)):typeof t==`string`?n??={}:(n=t,t=e,e=w(e));let{links:a,title:o,description:s,summary:c,icon:l,color:u,shape:d,style:f,...p}=typeof n==`string`?{title:n}:{...n},m=r.__deploymentFqn(e);return r.__addDeployment(S({id:m,element:t,...o&&{title:o},...c&&{summary:H(c)},...s&&{description:H(s)},style:S({icon:l,color:u,shape:d,...f}),links:G(a),...p})),r},rel:(e,t,n)=>r=>{let{title:i=null,links:a,description:o=null,notes:s=null,...c}=typeof n==`string`?{title:n}:{...n};return r.__addDeploymentRelation(S({source:{deployment:e},target:{deployment:t},title:i,...o&&{description:H(o)},...s&&{notes:H(s)},links:G(a),...c})),r},...n(B.deployments??{},({style:e,...t},n)=>(r,i)=>{let a=(a=>{let{links:o,icon:s,style:c,title:l,description:u,summary:d,color:f,shape:p,...m}=typeof i==`string`?{title:i}:{...i},h=s??e?.icon,g=G(o),_=a.__deploymentFqn(r);return a.__addDeployment(S({id:_,kind:n,...t,title:l??t.title??w(_),...u&&{description:H(u)},...d&&{summary:H(d)},style:S({icon:h,color:f??e?.color,shape:p??e?.shape,border:e?.border,opacity:e?.opacity,size:e?.size,padding:e?.padding,textSize:e?.textSize,...c}),...g&&{links:g},...m})),a});return a.with=(...e)=>t=>{a(t);let{__deploymentFqn:n}=t;try{t.__deploymentFqn=e=>`${n(r)}.${e}`,e.reduce((e,t)=>t(e),t)}finally{t.__deploymentFqn=n}return t},a})}}),with:(...e)=>{let t=Y.clone();return e.reduce((e,t)=>t(e),t)},model:e=>{let t=Y.clone(),n=t.helpers().model,r=n.model;return e({...n,_:r},r)(t)},deployment:e=>{let t=Y.clone(),n=t.helpers().deployment,r=n.deployment;return e({...n,_:r},r)(t)},views:e=>{let t=Y.clone(),n=t.helpers().views;return e({...n,_:n.views},n.views)(t)}};return Y}const W={forSpecification(e){let t=U(e);return{...t.helpers(),builder:t}},specification(e){return U(e)}};export{W as Builder};
|
|
1
|
+
import{r}from"../chunks/rolldown-runtime.mjs";import{An as i,Ct as a,J as o,Ln as s,Rn as c,Z as l,_t as u,bn as d,nt as f,sn as p,vn as m,wt as h,x as g,xt as _,yn as v}from"../chunks/types.mjs";import{A as y,C as b,D as x,J as S,N as C,Q as w,R as T,S as E,Y as D,Z as O,at as k,d as A,w as j}from"../chunks/libs/remeda.mjs";import{t as M}from"../chunks/libs/mnemonist.mjs";import{n as N,t as P}from"../chunks/Builder.view-element.mjs";import{t as F}from"../chunks/assignTagColors.mjs";function t$1(...r){return k(Object.fromEntries,r)}r(t$1,`t`);function t(...r){return k(n,r)}function n(r,i){let a={};for(let[o,s]of r.entries())a[s]=i(s,o,r);return a}function e(r){if(typeof r!=`object`||!r)return!1;let i=Object.getPrototypeOf(r);return i===null||i===Object.prototype}function parseWhere(r){if(x(r)){let i=r;switch(!0){case i.startsWith(`tag is not #`):return{tag:{neq:i.replace(`tag is not #`,``)}};case i.startsWith(`tag is #`):return{tag:{eq:i.replace(`tag is #`,``)}};case i.startsWith(`kind is not `):return{kind:{neq:i.replace(`kind is not `,``)}};case i.startsWith(`kind is `):return{kind:{eq:i.replace(`kind is `,``)}};case i.startsWith(`source.`):return{operator:parseWhere(i.replace(`source.`,``)),participant:`source`};case i.startsWith(`target.`):return{operator:parseWhere(i.replace(`target.`,``)),participant:`target`};default:throw Error(`Unknown where operator: ${r}`)}}if(r.and)return{and:j(r.and,parseWhere)};if(r.or)return{or:j(r.or,parseWhere)};if(r.not)return{not:parseWhere(r.not)};throw Error(`Unknown where operator: ${r}`)}function $include(...r){return i=>{if(r.length===2&&typeof r[1]!=`string`&&(`where`in r[1]||`with`in r[1])){let a=i.$expr(r[0]),o=r[1].where?parseWhere(r[1].where):void 0;o&&(a={where:{expr:a,condition:o}});let s=r[1].with;return s&&(a=l.is(a)?{custom:{...s,expr:a}}:{customRelation:{...s,expr:a}}),i.include(a),i}return i.include(...r.map(r=>i.$expr(r))),i}}function $exclude(...r){return i=>{let a=i.$expr(r[0]);if(r.length===2&&r[1].where){let i=parseWhere(r[1].where);a={where:{expr:a,condition:i}}}return i.exclude(a),i}}function $style(r,{notation:i,...a}){return o=>o.style({targets:(T(r)?r:[r]).map(r=>o.$expr(r)),...i?{notation:i}:{},style:{...a}})}function $autoLayout(r,i){return a=>a.autoLayout(r,i)}function $rules(...r){return i=>r.reduce((r,i)=>i(r),i)}function $deploymentExpr(r){if(!x(r))return r;let asTypedDeploymentExpression=r=>r;if(r===`*`)return asTypedDeploymentExpression({wildcard:!0});if(r.startsWith(`->`))return r.endsWith(`->`)?asTypedDeploymentExpression({inout:$deploymentExpr(r.replace(/->/g,``).trim())}):asTypedDeploymentExpression({incoming:$deploymentExpr(r.replace(`-> `,``))});if(r.endsWith(` ->`))return asTypedDeploymentExpression({outgoing:$deploymentExpr(r.replace(` ->`,``))});if(r.includes(` <-> `)){let[i,a]=r.split(` <-> `);return asTypedDeploymentExpression({source:$deploymentExpr(i),target:$deploymentExpr(a),isBidirectional:!0})}if(r.includes(` -> `)){let[i,a]=r.split(` -> `);return asTypedDeploymentExpression({source:$deploymentExpr(i),target:$deploymentExpr(a)})}return r.endsWith(`._`)?asTypedDeploymentExpression({ref:{deployment:r.replace(`._`,``)},selector:`expanded`}):r.endsWith(`.**`)?asTypedDeploymentExpression({ref:{deployment:r.replace(`.**`,``)},selector:`descendants`}):r.endsWith(`.*`)?asTypedDeploymentExpression({ref:{deployment:r.replace(`.*`,``)},selector:`children`}):asTypedDeploymentExpression({ref:{deployment:r}})}function $includeAncestors(r){return i=>i.includeAncestors(r)}function $step(...r){let[i,a,o]=r;if(x(a)){let r;return o!=null&&(r=typeof o==`string`?{title:o}:{...o.title&&{title:o.title},...o.with}),o=>o.step({source:i,target:a,...r})}let[s,c]=i.split(` -> `),l=e(a)?{...a.title&&{title:a.title},...a.with}:{};return r=>r.step({source:s,target:c,...l})}function accumulateSteps(r){let a=[],o={step:r=>(a.push(r),o)};return A(r,(r,i)=>{if(typeof i==`function`)return i(r);let[a,o]=i.split(` -> `);return r.step({source:a,target:o})},o),i(p(a),`At least one step is required`),a}$step.series=(...r)=>a=>{let[o,...s]=r,{steps:c}=A(s,(r,i)=>{let a=i.substring(3);return r.steps.push({source:r.source,target:a,astPath:``}),r.source=a,r},{source:o,steps:[]});return i(p(c),`At least one step is required`),a.step({_type:`series`,steps:c})},$step.try=r=>i=>{let a={steps:accumulateSteps(r.try)},o=r.catch?{catch:{steps:accumulateSteps(r.catch)}}:void 0,s=r.finally?{finally:{steps:accumulateSteps(r.finally)}}:void 0;return i.step({_type:`try`,try:a,...o,...s})};function blockBuilder(r){return(...i)=>a=>{let o=accumulateSteps(i);return a.step({_type:r,steps:o})}}$step.parallel=blockBuilder(`par`),$step.loop=blockBuilder(`loop`),$step.opt=blockBuilder(`opt`),$step.break=blockBuilder(`break`),$step.alt=(...r)=>a=>{let o=[],s={Types:{},addBranch:r=>(o.push(r),s)};return r.forEach(r=>{r(s)}),i(p(o),`At least one branch is required`),a.step({_type:`alt`,branches:o})};function branchBuilder(r){return(...i)=>a=>{let o=accumulateSteps(i);return a.addBranch({_type:r,steps:o})}}$step.when=branchBuilder(`when`),$step.if=branchBuilder(`if`),$step.else=branchBuilder(`else`);function mkViewBuilder(r){let i={$expr:r._type===`deployment`?$deploymentExpr:P,autoLayout(i,a){return r.rules.push(s({direction:i,rankSep:a?.rank,nodeSep:a?.node})),this},include(...i){return r.rules.push({include:i}),this},style(i){return r.rules.push(i),this},get Expr(){throw Error(`Expr is not available in runtime`)},get Types(){throw Error(`Types are not available in runtime`)},get ElementExpr(){throw Error(`ElementExpr is not available in runtime`)},get TypedExpr(){throw Error(`TypedExpr is not available in runtime`)}};return r._type===`element`?Object.assign(i,{exclude(...i){return r.rules.push({exclude:i}),this}}):r._type===`deployment`?Object.assign(i,{exclude(...i){return r.rules.push({exclude:i}),this},includeAncestors(i){return r.rules.push({includeAncestors:i}),this}}):r._type===`dynamic`?Object.assign(i,{step(i){return r.steps.push(i),this}}):i}function ensureObj(r){return T(r)?t(r,r=>({})):r}function validateSpec({tags:r,elements:a,deployments:o,relationships:s,...c}){let l={};r&&Object.assign(l,ensureObj(r));let u=ensureObj(a??{});for(let[r,a]of D(u))if(a.tags)for(let o of a.tags)i(o in l,`Invalid specification for element kind "${r}": tag "${o}" not found`);let d=ensureObj(o??{});for(let[r,a]of D(d))if(a.tags)for(let o of a.tags)i(o in l,`Invalid specification for deployment kind "${r}": tag "${o}" not found`);return{...c,tags:l,elements:u,deployments:d,relationships:ensureObj(s??{})}}const specKeysOf=r=>y(r)?[]:T(r)?r:Object.keys(r);function assertSpecificationCompatible(r,i){let a=[],compare=(r,i,o)=>{for(let s of i)o.has(s)||a.push(`${r} "${s}"`)};if(compare(`element kind`,specKeysOf(r.elements),new Set(specKeysOf(i.elements))),compare(`deployment kind`,specKeysOf(r.deployments),new Set(specKeysOf(i.deployments))),compare(`relationship kind`,specKeysOf(r.relationships),new Set(specKeysOf(i.relationships))),compare(`tag`,specKeysOf(r.tags),new Set(specKeysOf(i.tags))),compare(`metadata key`,r.metadataKeys??[],new Set(i.metadataKeys??[])),a.length>0)throw Error(`Specification mismatch — declared but not present in the loaded model:\n - ${a.join(`
|
|
2
|
+
- `)}`)}function toMarkdownOrString(r){return y(r)?null:typeof r==`string`?{txt:r}:r}function builder(r,l=new Map,p=[],x=new Map,T={predicates:{},dynamicPredicates:{},styles:{}},D=new Map,k=[],A=new M.default(()=>new Map),P=`editable`){let I=validateSpec(r),toLikeC4Specification=()=>({elements:structuredClone(I.elements),deployments:structuredClone(I.deployments),relationships:structuredClone(I.relationships),tags:F(structuredClone(I.tags)),...I.metadataKeys?{metadataKeys:I.metadataKeys}:{},customColors:{}}),mapLinks=r=>{if(!(!r||!O(r,1)))return j(r,r=>typeof r==`string`?{url:r}:r)},createGenericView=(r,i,a)=>{C(i)&&(a=i,i={}),i??={};let{links:o=[],title:c=null,description:l=null,tags:u=[],...d}=typeof i==`string`?{title:i}:{...i},f=mapLinks(o);return[s({id:r,title:c,description:toMarkdownOrString(l),tags:u,links:f,_stage:`parsed`,...d}),a]},checkElementExists=r=>{let[a,o]=_(r),s=(a?A.get(a):l).get(o);return i(s,`Element with id "${r}" not found`),s},parseRelEndpoint=r=>{if(typeof r==`string`){let[i,a]=_(r);return i?{project:i,model:a}:{model:a}}return`project`in r||`deployment`in r?r:parseRelEndpoint(r.model)},L={get Types(){throw Error(`Types are not available in runtime`)},specification:r=>{let i=c(validateSpec(r),I),a=new M.default(()=>new Map);for(let[r,i]of A)a.set(r,structuredClone(i));return builder(i,structuredClone(l),structuredClone(p),structuredClone(x),structuredClone(T),structuredClone(D),structuredClone(k),a,P)},clone:()=>{let r=new M.default(()=>new Map);for(let[i,a]of A)r.set(i,structuredClone(a));return builder(structuredClone(I),structuredClone(l),structuredClone(p),structuredClone(x),structuredClone(T),structuredClone(D),structuredClone(k),r,P)},__addElement:r=>{let[a,o]=_(r.id),s=d(o),c=a?A.get(a):l;s&&i(c.get(s),`Parent element with id "${s}" not found for element with id "${r.id}"`);let u=c.get(o);if(u){if(P===`strict`)throw Error(`Element with id "${r.id}" already exists`);i(u.kind===r.kind,`Element with id "${r.id}" already exists with kind "${u.kind}", cannot redeclare as "${r.kind}"`)}return c.set(o,a?{...r,id:o}:r),L},__addRelation(r){let a=parseRelEndpoint(r.source),o=f.flatten(a),s=parseRelEndpoint(r.target),c=f.flatten(s),l=checkElementExists(o),d=checkElementExists(c);if(u(o)&&u(c))throw Error(`Cannot create relationship between global elements`);return!u(o)&&!u(c)&&i(!m(l,d),`Cannot create relationship between elements in the same hierarchy`),p.push({id:`rel${p.length+1}`,...r,source:a,target:s}),L},__fqn(r){return i(r.trim()!==``,`Id must be non-empty`),r},__deploymentFqn(r){return i(r.trim()!==``,`Id must be non-empty`),r},__addSourcelessRelation(){throw Error(`Can be called only in nested model`)},__addView:r=>{if(x.has(r.id))throw Error(`View with id "${r.id}" already exists`);return g(r)&&`viewOf`in r&&i(l.get(r.viewOf),`Invalid scoped view ${r.id}, wlement with id "${r.viewOf}" not found`),x.set(r.id,r),L},__addDeployment:r=>{if(D.has(r.id))throw Error(`Deployment with id "${r.id}" already exists`);let a=d(r.id);return a&&i(D.get(a),`Parent element with id "${a}" not found for node with id "${r.id}"`),o(r)&&(i(a,`Instance ${r.id} of ${r.element} must be deployed under a parent node`),i(l.get(r.element),`Instance "${r.id}" references non-existing element "${r.element}"`)),D.set(r.id,r),L},__addDeploymentRelation:r=>(i(!m(r.source.deployment,r.target.deployment),`Cannot create relationship between elements in the same hierarchy`),i(D.has(r.source.deployment),`Relation "${r.source.deployment} -> ${r.target.deployment}" references non-existing source`),i(D.has(r.target.deployment),`Relation "${r.source.deployment} -> ${r.target.deployment}" references non-existing target`),k.push({id:`deploy_rel${k.length+1}`,...r}),L),build:r=>({[a]:`parsed`,projectId:typeof r==`string`?r:r?.id??`from-builder`,project:{id:typeof r==`string`?r:`from-builder`,...typeof r==`object`&&r?r:{}},specification:toLikeC4Specification(),elements:t$1(structuredClone(Array.from(l.entries()))),relations:b(p,r=>[r.id,structuredClone(r)]),globals:structuredClone(T),deployments:{elements:t$1(structuredClone(Array.from(D.entries()))),relations:b(k,r=>[r.id,structuredClone(r)])},views:t$1(structuredClone(Array.from(x.entries()))),imports:w(Array.from(A.entries()),j(([r,i])=>[r,structuredClone([...i.values()])]),S(([r,i])=>i.length>0),t$1())}),toLikeC4Model:r=>N(L.build(r)),helpers:()=>({model:{model:(...r)=>i=>r.reduce((r,i)=>i(r),i),rel:(r,i,a)=>o=>{let{title:l=``,links:u=[],description:d=null,notes:f=null,...p}=c(typeof a==`string`?{title:a}:{...a},{title:null,links:null}),m=mapLinks(u);return o.__addRelation(s({source:{model:r},target:{model:i},title:l,...d&&{description:toMarkdownOrString(d)},...f&&{notes:toMarkdownOrString(f)},links:m,...p})),o},relTo:(r,i)=>a=>{let{title:o=``,links:l,description:u=null,notes:d=null,...f}=c(typeof i==`string`?{title:i}:{...i},{title:null,links:null});return a.__addSourcelessRelation(s({target:{model:r},title:o,...u&&{description:toMarkdownOrString(u)},...d&&{notes:toMarkdownOrString(d)},links:mapLinks(l),...f})),a},...E(I.elements,({style:r,...i},a)=>(o,c)=>{let add=(l=>{let{links:u,icon:d,color:f,shape:p,style:m,title:h,description:g,summary:_,...y}=typeof c==`string`?{title:c}:{...c},b=d??r?.icon,x=mapLinks(u),S=l.__fqn(o);return l.__addElement(s({id:S,kind:a,...i,title:h??i.title??v(S),...g&&{description:toMarkdownOrString(g)},..._&&{summary:toMarkdownOrString(_)},style:s({icon:b,color:f??r?.color,shape:p??r?.shape,border:r?.border,opacity:r?.opacity,size:r?.size,padding:r?.padding,textSize:r?.textSize,...m}),...x&&{links:x},...y})),l});return add.with=(...r)=>i=>{add(i);let{__fqn:a,__addSourcelessRelation:s}=i;try{i.__fqn=r=>`${a(o)}.${r}`,i.__addSourcelessRelation=r=>i.__addRelation({...r,source:{model:a(o)}}),r.reduce((r,i)=>i(r),i)}finally{i.__fqn=a,i.__addSourcelessRelation=s}return i},add})},views:{views:(...r)=>i=>r.reduce((r,i)=>i(r),i),view:(r,i,a)=>{let[o,s]=createGenericView(r,i,a),c={...o,[h]:`element`,rules:[]},add=r=>(r.__addView(c),s&&s(mkViewBuilder(c)),r);return add.with=(...r)=>i=>{add(i);let a=mkViewBuilder(c);for(let i of r)i(a);return i},add},viewOf:(r,i,a,o)=>{let[s,c]=createGenericView(r,a,o),l={...s,viewOf:i,[h]:`element`,rules:[]},add=r=>(r.__addView(l),c&&c(mkViewBuilder(l)),r);return add.with=(...r)=>i=>{add(i);let a=mkViewBuilder(l);for(let i of r)i(a);return i},add},deploymentView:(r,i,a)=>{let[o,s]=createGenericView(r,i,a),c={...o,[h]:`deployment`,rules:[]},add=r=>(r.__addView(c),s&&s(mkViewBuilder(c)),r);return add.with=(...r)=>i=>{add(i);let a=mkViewBuilder(c);for(let i of r)i(a);return i},add},dynamicView:(r,i,a)=>{let[o,s]=createGenericView(r,i,a),c={...o,[h]:`dynamic`,rules:[],steps:[]},add=r=>(r.__addView(c),s&&s(mkViewBuilder(c)),r);return add.with=(...r)=>i=>{add(i);let a=mkViewBuilder(c);for(let i of r)i(a);return i},add},$autoLayout,$exclude,$include,$rules,$style,$step,$includeAncestors},deployment:{deployment:(...r)=>i=>r.reduce((r,i)=>i(r),i),instanceOf:(r,i,a)=>o=>{y(i)?(i=r,r=v(r)):typeof i==`string`?a??={}:(a=i,i=r,r=v(r));let{links:c,title:l,description:u,summary:d,icon:f,color:p,shape:m,style:h,...g}=typeof a==`string`?{title:a}:{...a},_=o.__deploymentFqn(r);return o.__addDeployment(s({id:_,element:i,...l&&{title:l},...d&&{summary:toMarkdownOrString(d)},...u&&{description:toMarkdownOrString(u)},style:s({icon:f,color:p,shape:m,...h}),links:mapLinks(c),...g})),o},rel:(r,i,a)=>o=>{let{title:c=null,links:l,description:u=null,notes:d=null,...f}=typeof a==`string`?{title:a}:{...a};return o.__addDeploymentRelation(s({source:{deployment:r},target:{deployment:i},title:c,...u&&{description:toMarkdownOrString(u)},...d&&{notes:toMarkdownOrString(d)},links:mapLinks(l),...f})),o},...E(I.deployments??{},({style:r,...i},a)=>(o,c)=>{let add=(l=>{let{links:u,icon:d,style:f,title:p,description:m,summary:h,color:g,shape:_,...y}=typeof c==`string`?{title:c}:{...c},b=d??r?.icon,x=mapLinks(u),S=l.__deploymentFqn(o);return l.__addDeployment(s({id:S,kind:a,...i,title:p??i.title??v(S),...m&&{description:toMarkdownOrString(m)},...h&&{summary:toMarkdownOrString(h)},style:s({icon:b,color:g??r?.color,shape:_??r?.shape,border:r?.border,opacity:r?.opacity,size:r?.size,padding:r?.padding,textSize:r?.textSize,...f}),...x&&{links:x},...y})),l});return add.with=(...r)=>i=>{add(i);let{__deploymentFqn:a}=i;try{i.__deploymentFqn=r=>`${a(o)}.${r}`,r.reduce((r,i)=>i(r),i)}finally{i.__deploymentFqn=a}return i},add})}}),with:(...r)=>{let i=L.clone();return r.reduce((r,i)=>i(r),i)},model:r=>{let i=L.clone(),a=i.helpers().model,o=a.model;return r({...a,_:o},o)(i)},deployment:r=>{let i=L.clone(),a=i.helpers().deployment,o=a.deployment;return r({...a,_:o},o)(i)},views:r=>{let i=L.clone(),a=i.helpers().views;return r({...a,_:a.views},a.views)(i)}};return L}function fromParsedImpl(r,i=`editable`){let{specification:a}=r,o={elements:a.elements,deployments:a.deployments,relationships:a.relationships,tags:a.tags,metadataKeys:a.metadataKeys},s=new Map(Object.entries(structuredClone(r.elements))),c=Object.values(structuredClone(r.relations)),l=new Map(Object.entries(structuredClone(r.views))),u=structuredClone(r.globals),d=new Map(Object.entries(structuredClone(r.deployments.elements))),f=Object.values(structuredClone(r.deployments.relations)),p=new M.default(()=>new Map);for(let[i,a]of Object.entries(r.imports??{})){let r=structuredClone(a);p.set(i,new Map(r.map(r=>[r.id,r])))}return builder(o,s,c,l,u,d,f,p,i)}const I={forSpecification(r){let i=builder(r);return{...i.helpers(),builder:i}},specification(r){return builder(r)},fromParsed:fromParsedImpl};export{I as Builder,assertSpecificationCompatible};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime.mjs";import{$t as t,An as n,Bt as r,Cn as i,Ct as a,Dn as o,Gt as s,In as c,It as l,Jt as u,Kt as d,Ln as f,Lt as p,Mn as m,Mt as h,N as g,Nt as _,Pt as v,Q as y,T as ee,X as b,Xt as te,Z as x,_n as ne,b as re,bn as S,ct as ie,dn as ae,et as C,fn as oe,g as se,gn as w,gt as ce,h as le,i as T,jn as E,m as ue,mt as de,n as fe,nn as D,nt as O,qt as k,r as pe,rn as A,sn as me,st as he,tt as j,un as ge,v as _e,vn as ve,vt as ye,w as be,wt as xe,x as Se,xn as Ce,zt as M}from"./types.mjs";import{A as N,B as we,C as Te,D as P,E as F,F as Ee,G as De,H as I,I as Oe,J as L,K as ke,L as Ae,M as je,P as Me,Q as R,R as Ne,S as Pe,T as Fe,U as z,V as Ie,X as Le,Z as B,_ as Re,a as ze,b as Be,d as V,g as Ve,h as He,i as Ue,j as We,m as Ge,n as Ke,nt as qe,o as Je,r as Ye,rt as H,t as Xe,tt as Ze,u as Qe,v as U,w as W,x as $e,y as G,z as et}from"./libs/remeda.mjs";import{c as tt,t as K}from"./libs/mnemonist.mjs";import{A as nt,C as rt,D as it,E as at,M as q,N as ot,O as st,T as ct,_ as lt,c as ut,d as dt,f as ft,g as pt,h as J,j as mt,m as ht,n as gt,o as _t,p as vt,q as yt,r as bt,t as xt,v as St,w as Ct,y as wt}from"./model.mjs";import{r as Tt}from"./calcDriftsFromSnapshot.mjs";import{t as Et}from"./libs/graphology.mjs";import{n as Dt,t as Ot}from"../utils/graphology/index.mjs";function ancestorsOfNode(e,t){let n=[],r=e.parent;for(;r;){let e=E(t.get(r),`Parent node ${r} not found`);n.push(e),r=e.parent}return n}function linkNodesWithEdges(e,t){for(let r of t){let t=e.get(r.source),i=e.get(r.target);n(t,`Source node ${r.source} not found`),n(i,`Target node ${r.target} not found`),t.outEdges.push(r.id),i.inEdges.push(r.id);let a=ancestorsOfNode(t,e),s=ancestorsOfNode(i,e),c=a.length>0&&s.length>0?Fe(o(Qe(a),Qe(s))):null;r.parent=c?c.id:null;for(let e of a){if(e===c)break;e.outEdges.push(r.id)}for(let e of s){if(e===c)break;e.inEdges.push(r.id)}}}function elementExprToPredicate(e){if(x.isCustom(e))return elementExprToPredicate(e.custom.expr);if(x.isWhere(e)){let t=elementExprToPredicate(e.where.expr),n=g(e.where.condition);return e=>t(e)&&n(e)}if(x.isElementKindExpr(e))return e.isEqual?t=>t.kind===e.elementKind:t=>t.kind!==e.elementKind;if(x.isElementTagExpr(e))return e.isEqual?({tags:t})=>t.includes(e.elementTag):({tags:t})=>!t.includes(e.elementTag);if(x.isWildcard(e))return()=>!0;if(x.isModelRef(e)){let t=O.flatten(e.ref);if(e.selector===`expanded`)return e=>e.id===t||S(e.id)===t;if(e.selector===`descendants`||e.selector===`children`){let e=t+`.`;return t=>t.id.startsWith(e)}return e=>e.id===t}m(e)}function createRelationExpressionToPredicates(e){return function relationExpressionToPredicates(t){switch(!0){case y.isCustom(t):return relationExpressionToPredicates(t.customRelation.expr);case y.isWhere(t):{let e=relationExpressionToPredicates(t.where.expr),n=g(t.where.condition);return t=>e(t)&&n({source:{tags:t.source.tags,kind:t.source.kind,metadata:t.source.metadata},target:{tags:t.target.tags,kind:t.target.kind,metadata:t.target.metadata},...t.tags&&{tags:t.tags},...t.kind&&{kind:t.kind},...t.metadata&&{metadata:t.metadata}})}case y.isDirect(t):{let n=e(t.source),r=e(t.target);return e=>n(e.source)&&r(e.target)||!!t.isBidirectional&&n(e.target)&&r(e.source)}case y.isInOut(t):{let n=e(t.inout);return e=>n(e.source)||n(e.target)}case y.isIncoming(t):{let n=e(t.incoming);return e=>n(e.target)}case y.isOutgoing(t):{let n=e(t.outgoing);return e=>n(e.source)}default:m(t)}}}const kt=createRelationExpressionToPredicates(elementExprToPredicate);function ensureParentsFirst(e){let t=[],n=[...e],r;for(;r=n.shift();){let e=r.parent;if(e){let r=[];for(;e;){let t=n.findIndex(t=>t.id===e);if(t<0)break;let[i]=n.splice(t,1);if(!i)throw Error(`Invalid state, should not happen`);r.unshift(i),e=i.parent}t.push(...r)}t.push(r)}return t}function updateChildren(e){return e.forEach(t=>{t.children.length>0&&(t.children=e.reduce((e,n)=>(n.parent===t.id&&e.push(n.id),e),[]))}),e}function topologicalSort(e){let t=ensureParentsFirst([...e.nodes.values()]),r=[...e.edges];if(t.length<2||r.length===0)return{nodes:t,edges:r};let getNode=t=>E(e.nodes.get(t)),i=new Et({multi:!0,allowSelfLoops:!0,type:`directed`}),[a,o]=U(R(r,W(e=>{let t=getNode(e.source),n=getNode(e.target),r=e.parent?getNode(e.parent):null;return{id:e.id,edge:e,parent:r,source:t,target:n}})),({source:e,target:t})=>e.children.length===0&&t.children.length===0),s=[],addEdgeToGraph=e=>{i.mergeNode(e.source),i.mergeNode(e.target),s.push(e),(0,Dt.default)(i,e.source,e.target)||i.mergeDirectedEdge(e.source,e.target)};for(let{edge:t,source:n,target:r}of a)if(addEdgeToGraph(t),r.parent&&r.parent!==t.parent&&R(ancestorsOfNode(r,e.nodes),ze(e=>e.inEdges.includes(t.id)),I(e=>{i.mergeNode(e.id),(0,Dt.default)(i,t.source,e.id)||i.mergeDirectedEdge(t.source,e.id),(0,Dt.default)(i,e.id,t.target)||i.mergeDirectedEdge(e.id,t.target)})),n.parent){let e=getNode(n.parent);i.mergeNode(e.id),(0,Dt.default)(i,e.id,n.id)||i.mergeDirectedEdge(e.id,n.id),r.parent&&r.parent!==n.parent&&((0,Dt.default)(i,e.id,r.parent)||i.mergeDirectedEdge(e.id,r.parent))}for(let{edge:e}of o)addEdgeToGraph(e);n(s.length===r.length,`Not all edges were added to the graph`);let c=(0,Ot.topologicalSort)(i),l=[],u=t.slice();for(let e of c){let t=u.findIndex(t=>t.id===e);n(t>=0,`Node "${e}" not found`),l.push(...u.splice(t,1))}return u.length>0&&l.length>0&&(l=l.flatMap(e=>{if(u.length===0)return e;let n=t.slice(0,t.indexOf(e)).filter(e=>u.includes(e));return n.length>0?(u=u.filter(e=>!n.includes(e)),[...n,e]):e})),l.push(...u),{nodes:updateChildren(ensureParentsFirst(l)),edges:s}}function calcViewLayoutHash(e){return e.hash=_({id:e.id,__:e._type??`element`,autoLayout:e.autoLayout,nodes:R(e.nodes,W(e=>({id:e.id,icon:F(e.icon)&&e.icon!==`none`?`Y`:`N`,title:e.title,description:ce(e.description),technology:e.technology??null,shape:e.shape,size:e.style.size??null,iconSize:e.style.iconSize??null,iconColor:e.style.iconColor??null,iconPosition:e.style.iconPosition??null,border:e.style.border??null,opacity:e.style.opacity??null,multiple:e.style.multiple??null,textSize:e.style.textSize??null,padding:e.style.padding??null,children:e.children})),Te(({id:e,...t})=>[e,t])),edges:R(e.edges,W(e=>({id:e.id,source:e.source,target:e.target,label:e.label,description:ce(e.description),technology:e.technology??null,dir:e.dir,head:e.head,tail:e.tail,line:e.line})),Te(e=>[e.id,{...e}]))}),e}var AbstractMemory=class{state;get Ctx(){throw Error(`Should not be called in runtime`)}constructor(e){this.state=e}get elements(){return this.state.elements}get explicits(){return this.state.explicits}get final(){return this.state.final}get connections(){return this.state.connections}isEmpty(){return this.elements.size===0&&this.connections.length===0&&this.explicits.size===0&&this.final.size===0}},AbstractStageExclude=class{memory;expression;excluded={elements:new Set,connections:[]};constructor(e,t){this.memory=e,this.expression=t}markedToMoveExplicitToImplicit=!1;_removeElement(e){this.excluded.elements.add(e)}exclude(e){if(!e)return this;if(A(e)){for(let t of e)this._removeElement(t);return this}return this._removeElement(e),this}_removeConnection(e){this.excluded.connections.push(e)}excludeConnections(e,t){if(Ae(t)&&(n(!this.markedToMoveExplicitToImplicit,`Already marked to move explicits`),this.markedToMoveExplicitToImplicit=t),A(e)){for(let t of e)this._removeConnection(t);return this}return this._removeConnection(e),this}isDirty(){return this.excluded.elements.size>0||this.excluded.connections.length>0}isEmpty(){return!this.isDirty()}filterForMoveToImplicits(e){return this.markedToMoveExplicitToImplicit||this.excluded.elements.size>0?e:new Set}moveDisconnectedExplicitsToImplicits(e){let t=v(new Set(this.memory.connections.flatMap(e=>[e.source,e.target])),new Set(e.connections.flatMap(e=>[e.source,e.target])));return t=p(t,e.elements),t=R(t,D(t=>e.explicits.has(t)&&!u(e.final,ne(t))),k()),t.size>0&&(t=this.filterForMoveToImplicits(t),e.explicits=v(e.explicits,t),e.final=v(e.final,t)),e}removeElements(e){return e.elements=v(e.elements,this.excluded.elements),e.explicits=v(e.explicits,this.excluded.elements),e.final=v(e.final,this.excluded.elements),e}removeConnections(e){let t=this.excluded.connections.reduce((e,t)=>{let n=e.get(t.id);return n?e.set(t.id,n.mergeWith(t)):e.set(t.id,t),e},new Map),n=new Set;e.connections=e.connections.reduce((e,r)=>{let i=t.get(r.id);if(i){n.add(r.source),n.add(r.target);let t=r.difference(i);t.nonEmpty()&&e.push(t)}else e.push(r);return e},[]);for(let t of e.connections)n.delete(t.source),n.delete(t.target),t.boundary&&e.elements.has(t.boundary)&&n.delete(t.boundary);return n.size===0?e:(n=v(n,e.explicits),e.final=v(e.final,n),e)}precommit(e){return e}postcommit(e){return n(v(e.explicits,e.elements).size===0,`Explicits must be subset of elements`),n(v(e.final,e.elements).size===0,`Final elements must be subset of elements`),e}commit(){let e=this.precommit(this.memory.mutableState());if(this.excluded.elements.size>0){let t=e.connections.filter(e=>this.excluded.elements.has(e.source)||this.excluded.elements.has(e.target)).flatMap(t=>[t,...lt(e.connections,t).map(e=>e.intersect(t))]).filter(e=>e.nonEmpty());this.excludeConnections(t)}return this.excluded.connections.length>0&&(e=this.removeConnections(e)),this.excluded.elements.size>0&&(e=this.removeElements(e)),this.memory.update(this.postcommit(e))}},AbstractStageInclude=class{memory;expression;explicits=new Set;implicits=new Set;_ordered=new Set;_connections=[];constructor(e,t){this.memory=e,this.expression=t}get elements(){return this.explicits}get connections(){return this._connections}mergedConnections(){return it([...this.memory.connections,...this._connections])}connectWithExisting(e,t){throw Error(`Method not implements, depends on the model`)}_addExplicit(e){this._ordered.add(e),this.explicits.add(e),this.implicits.delete(e)}addExplicit(e){if(!e)return this;if(A(e)){for(let t of e)this._addExplicit(t);return this}return this._addExplicit(e),this}_addImplicit(e){this.explicits.has(e)||(this._ordered.add(e),this.implicits.add(e))}addImplicit(e){if(!e)return this;if(A(e)){for(let t of e)this._addImplicit(t);return this}return this._addImplicit(e),this}_addConnection(e){this._connections.push(e),this._addImplicit(e.source),this._addImplicit(e.target)}addConnections(e){if(A(e)){for(let t of e)this._addConnection(t);return this}return this._addConnection(e),this}isDirty(){return this.explicits.size>0||this.implicits.size>0||this._connections.length>0}isEmpty(){return!this.isDirty()}precommit(e){return e}postcommit(e){return e}processConnections(e){return e}commit(){let e=this.precommit(this.memory.mutableState()),t=new Set;if(this._connections.length>0){let[n,r]=U(this._connections,t=>e.final.has(t.source));e.connections=this.processConnections(it([...e.connections,...n,...r])),t=new Set(e.connections.flatMap(e=>[e.source,e.target]))}return e.elements=M(e.elements,this._ordered,this.explicits,t,this.implicits),e.explicits=p(e.elements,M(e.explicits,this.explicits)),e.final=p(e.elements,M(e.final,this.explicits,t)),this.memory.update(this.postcommit(e))}};function treeFromMemoryState(e,t=`final`){let n=i(d(t===`final`?e.final:e.elements)),r=new Set(e.connections.flatMap(e=>[e.source,e.target])),a=new Set(n),o=new K.default(()=>null),s=n.reduce((e,t,n,r)=>(e.set(t,r.slice(n+1).filter(e=>w(t,e)).map(e=>(a.delete(e),e)).reduce((e,n)=>(e.some(e=>w(e,n))||(e.push(n),o.set(n,t)),e),[])),e),new K.default(()=>[]));return{root:a,connected:r,hasInOut:t=>e.connections.some(q.isAnyInOut(t.id)),parent:e=>o.get(e),children:e=>s.get(e)}}var StageExclude$1=class extends AbstractStageExclude{static{e(this,`StageExclude`)}};function applyViewRuleStyle(e,t,n){let{shape:r,color:i,icon:a,...o}=e.style,s=!Ee(o);R(n,L(We(ye)),L(t),I(t=>{t.shape=r??t.shape,t.color=i??t.color,Oe(a)&&(t.icon=a),Oe(e.notation)&&(t.notation=e.notation),s&&(t.style={...t.style,...o})}))}function applyViewRuleStyles(e,t){for(let n of e)!ee(n)||n.targets.length===0||applyViewRuleStyle(n,H(n.targets.map(elementExprToPredicate)),t);return t}var At=class NodesGroup{id;viewRule;parent;elements;static kind=he;constructor(e,t,n=null,r=new Set){this.id=e,this.viewRule=t,this.parent=n,this.elements=r}isEmpty(){return this.elements.size===0}update(e){return new NodesGroup(this.id,this.viewRule,this.parent,e)}clone(){return new NodesGroup(this.id,this.viewRule,this.parent,new Set(this.elements))}},StageExclude=class extends AbstractStageExclude{excludeRelations(e){return R(this.memory.connections,L(t=>l(t.relations,e)),I(t=>{this.excludeConnections(t.update(p(t.relations,e)))})),this}precommit(e){if(this.excluded.elements.size>0){let e=new Set([...this.excluded.elements].flatMap(e=>[...e.incoming(`direct`),...e.outgoing(`direct`)]));this.excludeRelations(e)}return e}postcommit(e){let t=v(this.memory.explicits,e.explicits);for(let n of t)e.explicitFirstSeenIn.delete(n);let n=v(this.memory.elements,e.elements);for(let t of n)e.lastSeenIn.delete(t);return e}},ActiveGroupStageExclude=class extends StageExclude{memory;expression;constructor(e,t){super(e,t),this.memory=e,this.expression=t}};const{findConnection:jt,findConnectionsBetween:Mt}=vt;var StageInclude$1=class extends AbstractStageInclude{static{e(this,`StageInclude`)}connectWithExisting(e,t=`both`){let n=this._connections.length,hasChanged=()=>this._connections.length>n;if(!A(e)){if(t===`in`||t===`both`)for(let t of this.memory.elements)this.addConnections(jt(t,e,`directed`));return(t===`out`||t===`both`)&&this.addConnections(Mt(e,this.memory.elements,`directed`)),hasChanged()}let r=[...e];if(t===`in`||t===`both`)for(let e of this.memory.elements)this.addConnections(Mt(e,r,`directed`));if(t===`out`||t===`both`)for(let e of r)this.addConnections(Mt(e,this.memory.elements,`directed`));return hasChanged()}addImplicitWithinScope(e){e&&(!this.memory.scope||w(this.memory.scope,e))&&this.addImplicit(e)}processConnections(e){return b.isRelationExpr(this.expression)||R(e,I(({source:e,target:t,boundary:n})=>{R(Xe([...d(e.ancestors()).reverse(),e],[...d(t.ancestors()).reverse(),t]),Le(([e,t])=>e===t),Je(1),I(([r,i])=>{if(r===e&&i===t){this.addImplicitWithinScope(n);return}r!==e&&this.addImplicitWithinScope(r),i!==t&&this.addImplicitWithinScope(i)}))})),e}postcommit(e){let t=v(e.explicits,this.memory.explicits);for(let n of t)e.explicitFirstSeenIn.set(n,`@root`);return e}},ActiveGroupStageInclude=class extends StageInclude$1{memory;expression;constructor(e,t){super(e,t),this.memory=e,this.expression=t}postcommit(e){let t=v(e.explicits,this.memory.explicits);for(let n of t)e.explicitFirstSeenIn.set(n,this.memory.activeGroupId);for(let t of[...this.explicits,...this.implicits])e.lastSeenIn.set(t,this.memory.activeGroupId);return e}},Nt=class Memory$1 extends AbstractMemory{static{e(this,`Memory`)}state;scope;static empty(e){return new Memory$1({elements:new Set,explicits:new Set,final:new Set,connections:[],groups:[],explicitFirstSeenIn:new Map,lastSeenIn:new Map},e)}constructor(e,t){super(e),this.state=e,this.scope=t}get groups(){return this.state.groups}get explicitFirstSeenIn(){return this.state.explicitFirstSeenIn}get lastSeenIn(){return this.state.lastSeenIn}stageInclude(e){return new StageInclude$1(this,e)}stageExclude(e){return new StageExclude(this,e)}mutableState(){return{elements:new Set(this.state.elements),explicits:new Set(this.state.explicits),final:new Set(this.state.final),connections:[...this.state.connections],groups:this.state.groups.map(e=>e.clone()),explicitFirstSeenIn:new Map(this.state.explicitFirstSeenIn),lastSeenIn:new Map(this.state.lastSeenIn)}}update(e){return new Memory$1({...this.state,...e},this.scope)}},Pt=class ActiveGroupMemory extends Nt{state;scope;stack;static enter(e,t){let n=`@gr${e.groups.length+1}`;if(e instanceof ActiveGroupMemory){let r=tt.default.from([...e.stack].reverse()),i=e.mutableState();return i.groups.push(new At(n,t,e.activeGroupId)),r.push(n),new ActiveGroupMemory(i,e.scope,r)}let r=e.mutableState();r.groups.push(new At(n,t,null));let i=tt.default.of(n);return new ActiveGroupMemory(r,e.scope,i)}constructor(e,t,n){super(e,t),this.state=e,this.scope=t,this.stack=n}get activeGroupId(){return E(this.stack.peek(),`Stack must not be empty`)}mutableState(){return{...super.mutableState()}}update(e){let t={...this.state,...e};return new ActiveGroupMemory(t,this.scope,this.stack)}stageInclude(e){return new ActiveGroupStageInclude(this,e)}stageExclude(e){return new ActiveGroupStageExclude(this,e)}leave(){let e=this.mutableState();return this.stack.pop(),this.stack.peek()?new ActiveGroupMemory(e,this.scope,this.stack):new Nt(e,this.scope)}};function updateDepthOfAncestors(e,t){let n;for(;e.parent&&(n=t.get(e.parent));){let t=n.depth??1;if(n.depth=Math.max(t,(e.depth??0)+1),n.depth===t)break;e=n}}function elementModelToNodeSource(e){let{id:t,title:n,...r}=$e(e.$element,[`summary`,`description`,`metadata`,`style`,`tags`]),{color:i,icon:a,shape:o,...s}=e.style;return f({id:t,title:n,modelRef:t,shape:o,color:i,icon:a,style:s,description:c(e.$element),tags:[...e.tags],metadata:e.$element.metadata,...r})}function buildComputedNodes({defaults:e},t,n){let r=new Map,i=new Map;n?.forEach(({id:t,parent:n,viewRule:a,elements:o})=>{n&&E(r.get(n),`Parent group node ${n} not found`).children.push(t),r.set(t,{id:t,parent:n,kind:he,title:a.title??``,color:a.color??e.group.color??e.color,shape:`rectangle`,children:[],inEdges:[],outEdges:[],level:0,depth:0,tags:[],style:f({border:a.border??e.group.border,opacity:a.opacity??e.group.opacity,size:a.size,multiple:a.multiple,padding:a.padding,textSize:a.textSize})});for(let e of o)i.set(e.id,t)}),Array.from(t).sort(oe).forEach(({id:e,...t})=>{let n=S(e),a=0,o;for(;n&&(o=r.get(n),!o);)n=S(n);let s=t.modelRef??e;if(!o&&i.has(s)){let e=E(i.get(s));o=r.get(e),n=e}o&&(o.children.length==0&&(o.depth=1,updateDepthOfAncestors(o,r)),o.children.push(e),a=o.level+1);let c=f({id:e,parent:n,level:a,children:[],inEdges:[],outEdges:[],...t});r.set(e,c)});let a=new Map;return n?.forEach(({id:e})=>{a.set(e,E(r.get(e)))}),t.forEach(({id:e})=>{a.set(e,E(r.get(e)))}),a}function pickRelationshipProps(e){let{title:t,description:n=null}=e;return{...t&&{title:t,description:n},...Re(e,[`color`,`technology`,`head`,`line`,`tail`,`kind`,`navigateTo`])}}function mergePropsFromRelationships(e,t){let n=R(e,V((e,t)=>(F(t.title)&&!e.title.includes(t.title)&&e.title.push(t.title),F(t.description)&&!e.description.some(we(t.description))&&e.description.push(t.description),F(t.technology)&&!e.technology.includes(t.technology)&&e.technology.push(t.technology),F(t.kind)&&!e.kind.includes(t.kind)&&e.kind.push(t.kind),F(t.color)&&!e.color.includes(t.color)&&e.color.push(t.color),F(t.line)&&!e.line.includes(t.line)&&e.line.push(t.line),F(t.head)&&!e.head.includes(t.head)&&e.head.push(t.head),F(t.tail)&&!e.tail.includes(t.tail)&&e.tail.push(t.tail),F(t.navigateTo)&&!e.navigateTo.includes(t.navigateTo)&&e.navigateTo.push(t.navigateTo),t.tags&&e.tags.push(...t.tags),e),{title:[],description:[],technology:[],kind:[],head:[],tail:[],color:[],tags:[],line:[],navigateTo:[]})),r=G(n.title)??(n.title.length>1?`[...]`:void 0),i=Ue(n.tags),a=f({title:r,description:G(n.description),technology:G(n.technology),kind:G(n.kind),head:G(n.head),tail:G(n.tail),color:G(n.color),line:G(n.line),navigateTo:G(n.navigateTo),...me(i)&&{tags:i}});if(t){let e=pickRelationshipProps(t);a=Ve({...a,...e},F)}return N(a.title)&&F(a.technology)&&(a.title=`[${a.technology}]`,delete a.technology),a}const{findConnection:Ft,findConnectionsBetween:Y,findConnectionsWithin:X}=ht;function resolveElements$1(e,t){let n=e.element(t.ref.deployment);if(n.isDeploymentNode()){if(t.selector===`children`)return[...n.children()];if(t.selector===`expanded`)return[n,...n.children()];if(t.selector===`descendants`)return[...n.descendants()]}return[n]}e(resolveElements$1,`resolveElements`);function resolveModelElements(e,t){let n=e.$model.element(t.ref.model);return t.selector===`children`?[...n.children()]:t.selector===`expanded`?[n,...n.children()]:t.selector===`descendants`?[...n.descendants()]:[n]}function deploymentExpressionToPredicate(e){if(C.isWildcard(e))return()=>!0;if(C.isElementTagExpr(e)||C.isElementKindExpr(e))throw Error(`element kind and tag expressions are not supported in deployment view rules`);if(C.isDeploymentRef(e)){let t=e.ref.deployment;if(e.selector===`expanded`){let e=t+`.`;return n=>n.id===t||n.id.startsWith(e)}if(e.selector===`descendants`){let e=t+`.`;return t=>t.id.startsWith(e)}return e.selector===`children`?e=>S(e.id)===t:e=>e.id===t}if(C.isModelRef(e)){let t=e.ref.model;if(e.selector===`expanded`){let e=t+`.`;return n=>{let r=n.modelRef??null;return!r||r===t||r.startsWith(e)}}if(e.selector===`descendants`){let e=t+`.`;return t=>{let n=t.modelRef??null;return!n||n.startsWith(e)}}return e.selector===`children`?e=>{let n=e.modelRef??null;return!n||S(n)===t}:e=>{let n=e.modelRef??null;return!n||n===t}}m(e)}function instanceSummary(e){return c(e.$instance)??c(e.element.$element)}function deploymentNodeToNodeSource(e){let t=e.id,n=e.onlyOneInstance();return f({id:t,deploymentRef:t,title:e.title,kind:e.kind,technology:e.technology??void 0,links:B(e.links,1)?[...e.links]:void 0,notation:e.$node.notation??void 0,color:e.color,shape:e.shape,modelRef:n?.element.id,icon:e.style.icon,description:c(e.$node)??void 0,tags:[...e.tags],style:$e(e.style,[`icon`,`shape`,`color`])})}function instanceToNodeSource(e){let t=e.$instance,n=e.element,{icon:r,color:i,shape:a,...o}=e.style,s=[...n.links,...t.links??[]];return f({id:e.id,kind:`instance`,title:e.title,description:instanceSummary(e)??void 0,technology:e.technology??void 0,tags:[...e.tags],links:B(s,1)?s:void 0,icon:r,color:i,shape:a,style:o,deploymentRef:t.id,modelRef:n.id,notation:t.notation})}function toNodeSource(e){return e.isInstance()?instanceToNodeSource(e):deploymentNodeToNodeSource(e)}const It=e((e,t,n)=>h(`model:${e}:${t}:${n}`),`hashEdgeId`);function mergeBidirectionalEdges(e){let t=new Set;for(let n=0;n<e.length;n++){if(t.has(n))continue;let r=e[n];for(let i=n+1;i<e.length;i++){if(t.has(i))continue;let n=e[i];if(r.source===n.target&&r.target===n.source&&r.label===n.label){r.dir=`both`;let e=r.head??n.head;e&&(r.head||=e,r.tail||=e),n.color&&(r.color||=n.color),n.line&&(r.line||=n.line),t.add(i);break}}}return t.size>0?e.filter((e,n)=>!t.has(n)):e}function toComputedEdges$1(e,t){let r=[],i=[];for(let a of e){let e=[...a.relations.model,...a.relations.deployment];n(B(e,1),`Edge must have at least one relation`);let o=a.source.$model.$styles.defaults,s=a.source.id,c=a.target.id;if(t&&e.length>1){let[n,l]=R(e,U(e=>t(e,a)));if(n.length>0){for(let e of n){let{title:t,color:n=o.relationship.color,line:i=o.relationship.line,head:l=o.relationship.arrow,...u}=mergePropsFromRelationships([e.$relationship],e.$relationship);r.push({id:It(s,c,e.id),parent:a.boundary?.id??null,source:s,target:c,label:t??null,relations:[e.id],color:n,line:i,head:l,...u})}if(l.length>0){let e=G(L(l,e=>e.source.id===s&&e.target.id===c)),{title:t,color:n=o.relationship.color,line:r=o.relationship.line,head:u=o.relationship.arrow,...d}=mergePropsFromRelationships(l.map(e=>e.$relationship),e?.$relationship);i.push({id:a.id,parent:a.boundary?.id??null,source:s,target:c,label:t??null,relations:l.map(e=>e.id),color:n,line:r,head:u,...d})}continue}}let{title:l,color:u=o.relationship.color,line:d=o.relationship.line,head:p=o.relationship.arrow,...m}=mergePropsFromRelationships(e.map(e=>e.$relationship)),h=f({id:a.id,parent:a.boundary?.id??null,source:s,target:c,label:l??null,relations:e.map(e=>e.id),color:u,line:d,head:p,...m});i.push(h)}return[...r,...mergeBidirectionalEdges(i)]}e(toComputedEdges$1,`toComputedEdges`);function buildNodes$1(e,t){let n=buildComputedNodes(e.$styles,[...t.final].map(toNodeSource));for(let t of n.values()){if(!t.deploymentRef||!t.modelRef||t.children.length>0)continue;let n=e.deployment.element(t.deploymentRef),r=n.isDeploymentNode()&&n.onlyOneInstance();if(!r)continue;t.title===n.name&&(t.title=r.title),t.description??=instanceSummary(r)??null,t.technology??=r.technology,Ee(t.tags)&&(t.tags=[...r.tags]),(!t.links||Ee(t.links))&&B(r.links,1)&&(t.links=[...r.links]);let i=e.$styles.defaults;t.shape===i.shape&&t.shape!==r.shape&&(t.shape=r.shape,t.notation=null),t.color===i.color&&t.color!==r.color&&(t.color=r.color,t.notation=null),!t.icon&&r.icon&&(t.icon=r.icon)}return n}e(buildNodes$1,`buildNodes`);function applyDeploymentViewRuleStyles(e,t){for(let n of e)!ee(n)||n.targets.length===0||applyViewRuleStyle(n,H(n.targets.map(deploymentExpressionToPredicate)),t);return t}function findCrossBoundarySameSourceOrTarget(e){let t=new K.default(()=>[]);for(let n of e)for(let e of n.relations.model)t.get(e).push(n);let n=new K.default(()=>new Set);for(let[e,r]of t)B(r,2)&&R(r,z(e=>[{group:`$source-${e.source.id}`,conn:e},{group:`$target-${e.target.id}`,conn:e}]),Ie(Ge(`group`)),Ye(),L(B(2)),I(He(W(Ge(`conn`)),st(`desc`),Le((e,t,n)=>t===0||e.boundary===n[t-1].boundary),I(t=>{n.get(t).add(e)}))));return n}function findCrossBoundaryConnections(e){e=it(e);let t=findCrossBoundarySameSourceOrTarget(e);for(let r of e){let{source:e,target:i}=r,a=r.relations.model;if(e.isDeploymentNode()!==i.isDeploymentNode()){let i=e.isDeploymentNode()?e:r.target;n(i.isDeploymentNode());let o=p(a,i.internalModelRelationships());for(let e of o)t.get(r).add(e);continue}if(e.isDeploymentNode()&&i.isDeploymentNode()){let n=M(p(r.relations.model,e.internalModelRelationships()),p(r.relations.model,i.internalModelRelationships()));for(let e of n)t.get(r).add(e)}}return R(t.entries(),te(([e,t])=>e.update({model:t,deployment:null})),d())}function cleanCrossBoundary(e){return pt(e,findCrossBoundaryConnections(e))}function findRedundantConnections$1(e){return R(e,it,V((t,n)=>{let{source:r,target:i,relations:a}=n;if(r.isInstance()&&i.isInstance())return t;let o=yt.empty();if(r.isDeploymentNode()&&i.isDeploymentNode()){let[e]=Ft(i,r,`directed`);e&&(o=a.intersect(e.relations))}for(let t of e)ct(t,n)&&(o=o.union(a.intersect(t.relations)));return o.nonEmpty&&t.push(new nt(r,i,o)),t},[]))}e(findRedundantConnections$1,`findRedundantConnections`);function cleanRedundantRelationships(e){return pt(e,findRedundantConnections$1(e))}var StageInclude=class extends AbstractStageInclude{connectWithExisting(e,t=`both`){let n=this._connections.length,hasChanged=()=>this._connections.length>n;if(!A(e)){if(t===`in`||t===`both`)for(let t of this.memory.elements)this.addConnections(Ft(t,e,`directed`));return(t===`out`||t===`both`)&&this.addConnections(Y(e,this.memory.elements,`directed`)),hasChanged()}let r=[...e];if(t===`in`||t===`both`)for(let e of this.memory.elements)this.addConnections(Y(e,r,`directed`));if(t===`out`||t===`both`)for(let e of r)this.addConnections(Y(e,this.memory.elements,`directed`));return hasChanged()}processConnections(e){let t=R(e,cleanCrossBoundary,cleanRedundantRelationships);return R(t,I(({source:e,target:t,boundary:n})=>{R(Xe([...d(e.ancestors()).reverse(),e],[...d(t.ancestors()).reverse(),t]),Le(([e,t])=>e===t),Je(1),I(([r,i])=>{if(e===r&&t===i){this.addImplicit(n);return}r!==e&&r.isDeploymentNode()&&!r.onlyOneInstance()&&this.addImplicit(r),i!==t&&i.isDeploymentNode()&&!i.onlyOneInstance()&&this.addImplicit(i)}))})),t}},Lt=class Memory extends AbstractMemory{static empty(){return new Memory({elements:new Set,explicits:new Set,final:new Set,connections:[]})}stageInclude(e){return new StageInclude(this,e)}stageExclude(e){return new StageExclude$1(this,e)}mutableState(){return{elements:new Set(this.state.elements),explicits:new Set(this.state.explicits),final:new Set(this.state.final),connections:[...this.state.connections]}}update(e){return new Memory({...this.state,...e})}equals(e){return e instanceof Memory&&we(this.state,e.state)}diff(e){return{added:{elements:d(v(e.elements,this.elements)),explicits:d(v(e.explicits,this.explicits)),final:d(v(e.final,this.final)),connections:d(pt(e.connections,this.connections))},removed:{elements:d(v(this.elements,e.elements)),explicits:d(v(this.explicits,e.explicits)),final:d(v(this.final,e.final)),connections:pt(this.connections,e.connections)}}}toString(){return[`final:`,...[...this.final].map(e=>` `+e.id),`connections:`,...this.connections.map(e=>` `+e.expression)].join(`
|
|
2
|
+
`)}[mt](e,t,n){return this.toString()}};const Rt={include:({expr:e,model:t,memory:n,stage:r})=>{let i=g(e.where.condition);return E(predicateToPatch(`include`,{expr:e.where.expr,model:t,stage:r,memory:n,where:i}))},exclude:({expr:e,model:t,memory:n,stage:r})=>{let i=g(e.where.condition);return E(predicateToPatch(`exclude`,{expr:e.where.expr,model:t,stage:r,memory:n,where:i}))}},zt={include:({expr:e,model:t,memory:r,stage:i,where:a})=>{let o=[...r.elements];if(C.isWildcard(e.incoming)){for(let e of o){if(e.allOutgoing.isEmpty)continue;let t=applyPredicate(Y(e,[...resolveAscendingSiblings(e)],`directed`),a);i.addConnections(t)}return i}n(C.isDeploymentRef(e.incoming),`Only deployment refs are supported in include`);let s=resolveElements$1(t,e.incoming);for(let e of o){let t=applyPredicate(Y(e,s,`directed`),a);i.addConnections(t)}return i},exclude:({expr:e,model:t,memory:n,stage:r,where:i})=>{if(C.isElementTagExpr(e.incoming)||C.isElementKindExpr(e.incoming))throw Error(`element kind and tag expressions are not supported in exclude`);if(C.isModelRef(e.incoming))return excludeModelRelations(resolveAllIncomingRelations(t,e.incoming),{stage:r,memory:n},i);if(C.isWildcard(e.incoming))return r;let a=filterIncomingConnections(resolveElements$1(t,e.incoming)),o=R(n.connections,L(a),applyPredicate(i));return r.excludeConnections(o),r}};function filterIncomingConnections(e){return H(e.map(e=>{let satisfies=t=>t===e||w(e,t);return e=>!satisfies(e.source)&&satisfies(e.target)}))}function resolveAllIncomingRelations(e,t){let n=resolveModelElements(e,t);return new Set(n.flatMap(e=>[...e.allIncoming]))}const Bt={include:({expr:e,model:t,memory:r,stage:i,where:a})=>{let o=[...r.elements];if(C.isWildcard(e.outgoing)){for(let e of o)if(!e.allIncoming.isEmpty)for(let t of resolveAscendingSiblings(e)){let n=applyPredicate(Ft(t,e,`directed`),a);i.addConnections(n)}return i}n(C.isDeploymentRef(e.outgoing),`Only deployment refs are supported in include`);let s=resolveElements$1(t,e.outgoing);for(let e of s){let t=applyPredicate(Y(e,o,`directed`),a);i.addConnections(t)}return i},exclude:({expr:e,model:t,memory:n,stage:r,where:i})=>{if(C.isElementTagExpr(e.outgoing)||C.isElementKindExpr(e.outgoing))throw Error(`element kind and tag expressions are not supported in exclude`);if(C.isModelRef(e.outgoing))return excludeModelRelations(resolveAllOutgoingRelations(t,e.outgoing),{stage:r,memory:n},i);if(C.isWildcard(e.outgoing))return r;let a=filterOutgoingConnections(resolveElements$1(t,e.outgoing)),o=R(n.connections,L(a),applyPredicate(i));return r.excludeConnections(o),r}};function filterOutgoingConnections(e){return H(e.map(e=>{let satisfies=t=>t===e||w(e,t);return e=>satisfies(e.source)&&!satisfies(e.target)}))}function resolveAllOutgoingRelations(e,t){let n=resolveModelElements(e,t);return new Set(n.flatMap(e=>[...e.allOutgoing]))}const Vt={include:({expr:{source:e,target:t,isBidirectional:r=!1},model:i,stage:a,where:o})=>{if(C.isElementTagExpr(e)||C.isElementKindExpr(e)||C.isElementTagExpr(t)||C.isElementKindExpr(t))throw Error(`element kind and tag expressions are not supported in include`);n(!C.isModelRef(e),`Invalid source model ref in direct relation`),n(!C.isModelRef(t),`Invalid target model ref in direct relation`);let s=C.isWildcard(e),c=C.isWildcard(t),l=r?`both`:`directed`,u;switch(!0){case s&&c:u=R(X(i.instances()),applyPredicate(o),W(e=>(a.addImplicit(e.boundary),e)));break;case!s&&c:{let t=resolveElements$1(i,e),n=filterOutgoingConnections(t),postFilter=n;if(r){let e=filterIncomingConnections(t);postFilter=t=>n(t)!==e(t)}u=R(t,z(e=>Y(e,resolveAscendingSiblings(e),l)),L(postFilter),applyPredicate(o));break}case s&&!c:{let e=resolveElements$1(i,t),n=filterIncomingConnections(e),postFilter=n;if(r){let t=filterOutgoingConnections(e);postFilter=e=>t(e)!==n(e)}u=R(e,z(e=>[...resolveAscendingSiblings(e)].flatMap(t=>Ft(t,e,l))),L(postFilter),applyPredicate(o));break}default:{n(!s,`Inference failed - source should be a deployment ref`),n(!c,`Inference failed - target should be a deployment ref`);let r=resolveElements$1(i,e),a=resolveElements$1(i,t),d=filterOutgoingConnections(r),f=filterIncomingConnections(a);u=R(r,z(e=>Y(e,a,l)),L(e=>d(e)&&f(e)),applyPredicate(o))}}return a.addConnections(u),C.isDeploymentRef(e)&&je(e.selector)&&a.addImplicit(i.element(e.ref.deployment)),C.isDeploymentRef(t)&&je(t.selector)&&a.addImplicit(i.element(t.ref.deployment)),a},exclude:({expr:e,model:t,memory:n,stage:r,where:i})=>{let a=deploymentExpressionToPredicate(e.target),o=deploymentExpressionToPredicate(e.source),s;switch(!0){case C.isWildcard(e.source)&&C.isWildcard(e.target):return r.excludeConnections(applyPredicate(n.connections,i)),r;case C.isModelRef(e.source)&&C.isModelRef(e.target):return s=resolveRelationsBetweenModelElements({source:e.source,target:e.target,expr:e,model:t}),excludeModelRelations(s,{stage:r,memory:n},i);case C.isModelRef(e.source)&&C.isWildcard(e.target):return s=resolveAllOutgoingRelations(t,e.source),excludeModelRelations(s,{stage:r,memory:n},i);case C.isModelRef(e.source):return s=resolveAllOutgoingRelations(t,e.source),excludeModelRelations(s,{stage:r,memory:n},i,e=>a(e.target));case C.isModelRef(e.target):return s=resolveAllIncomingRelations(t,e.target),excludeModelRelations(s,{stage:r,memory:n},i,e=>o(e.source));default:let satisfies=t=>o(t.source)&&a(t.target)||e.isBidirectional===!0&&o(t.target)&&a(t.source),c=R(n.connections,L(satisfies),applyPredicate(i));return c.length===0||r.excludeConnections(c),r}}};function resolveRelationsBetweenModelElements({source:e,target:t,expr:n,model:r}){let i=resolveModelElements(r,e),a=resolveModelElements(r,t),o=n.isBidirectional?`both`:`directed`,s=[];for(let e of i)s.push(...ft(e,a,o));return new Set(s.flatMap(e=>[...e.relations]))}const Ht={include:({expr:e,model:t,memory:r,stage:i,where:a})=>{let o=[...r.elements];if(C.isWildcard(e.inout)){for(let e of o){let t=matchConnections(Y(e,[...resolveAscendingSiblings(e)],`both`),a);i.addConnections(t)}return i}n(C.isDeploymentRef(e.inout),`Only deployment refs are supported in include`);let s=resolveElements$1(t,e.inout);for(let e of o){let t=matchConnections(Y(e,s,`both`),a);i.addConnections(t)}return i},exclude:({expr:e,model:t,memory:n,stage:r,where:i})=>{if(C.isElementTagExpr(e.inout)||C.isElementKindExpr(e.inout))throw Error(`element kind and tag expressions are not supported in exclude`);if(C.isModelRef(e.inout)){let a=resolveModelElements(t,e.inout);return a.length===0?r:excludeModelRelations(M(new Set,...a.flatMap(e=>[e.allIncoming,e.allOutgoing])),{stage:r,memory:n},i)}if(C.isWildcard(e.inout))return r;let a=resolveElements$1(t,e.inout),o=filterIncomingConnections(a),s=filterOutgoingConnections(a),c=R(n.connections,L(e=>o(e)!==s(e)),applyPredicate(i));return r.excludeConnections(c),r}},Ut={include:({expr:e,model:t,memory:n,stage:r})=>{let i=g(e.where.condition);return predicateToPatch(`include`,{expr:e.where.expr,model:t,stage:r,memory:n,where:i})},exclude:({expr:e,model:t,memory:n,stage:r})=>{let i=g(e.where.condition);return predicateToPatch(`exclude`,{expr:e.where.expr,model:t,stage:r,memory:n,where:i})}},Wt={include:({model:e,stage:t,where:n})=>{let r=[],i;return i=n?R([...e.elements()],applyElementPredicate(n)):d(te(e.roots(),e=>(e.onlyOneInstance()||r.push(...e.children()),e))),t.addExplicit(i),r.length>1?(t.addConnections(X([...i,...r])),t.connectWithExisting(r)):t.addConnections(X(i)),t.connectWithExisting(i),t},exclude:({stage:e,memory:t,where:n})=>{let r=R([...t.elements],applyElementPredicate(n));return e.exclude(r),e}};function predicateToPatch(e,{expr:t,where:n,...r}){switch(!0){case C.isElementTagExpr(t):case C.isElementKindExpr(t):throw Error(`element kind and tag expressions are not supported in deployment view rules`);case j.isCustom(t):case C.isCustom(t):case C.isModelRef(t):return;case C.isWhere(t):return Rt[e]({...r,expr:t,where:n});case j.isWhere(t):return Ut[e]({...r,expr:t,where:n});case C.isDeploymentRef(t):return Gt[e]({...r,expr:t,where:n});case C.isWildcard(t):return Wt[e]({...r,expr:t,where:n});case j.isDirect(t):return Vt[e]({...r,expr:t,where:n});case j.isInOut(t):return Ht[e]({...r,expr:t,where:n});case j.isOutgoing(t):return Bt[e]({...r,expr:t,where:n});case j.isIncoming(t):return zt[e]({...r,expr:t,where:n});default:m(t)}}function excludeModelRelations(e,{stage:t,memory:n},r,i=()=>!0){if(e.size===0)return t;let a=R(n.connections,L(e=>i(e)),L(t=>l(t.relations.model,e)),W(t=>t.update({deployment:null,model:p(t.relations.model,e)})),applyPredicate(r),L(e=>e.nonEmpty()));return a.length===0?t:t.excludeConnections(a)}function matchConnection(e,t){return applyPredicate(e,t).nonEmpty()}function applyPredicate(...e){if(e.length===1)return t=>applyPredicate(t,e[0]);let[t,n]=e;return n===null?t:Ne(t)?t.map(e=>applyPredicate(e,n)).filter(e=>e.nonEmpty()):t.update({model:new Set([...t.relations.model.values()].filter(e=>n(toFilterableRelation(t)(e)))),deployment:new Set([...t.relations.deployment.values()].filter(e=>n(toFilterableRelation(t)(e))))})}function applyElementPredicate(...e){if(e.length===1){let t=e[0];return t==null?e=>e:e=>e.filter(e=>t(toFilterable(e,e)))}let[t,n]=e;return Ne(t)?n==null?t:t.filter(e=>n(toFilterable(e,e))):n?.(toFilterable(t,t))??!0}function matchConnections(e,t){return t?R(e,L(e=>matchConnection(e,t))):e}function toFilterable(e,t){if(_t(e)){let n=gt(t)&&xt(t)?t:null;return{kind:e.kind,tags:[...e.tags,...n?.tags??[]],metadata:n?.metadata??e.metadata}}if(ut(e))return Re(e.element,[`tags`,`kind`,`metadata`]);if(xt(e))return{kind:e.element.kind,tags:[...e.tags,...e.element.tags],metadata:e.metadata};if(bt(e))return Re(e,[`tags`,`kind`,`metadata`]);m(e)}function toFilterableRelation(e){return t=>({tags:t.tags,kind:t.kind,metadata:t.metadata,source:toFilterable(t.source,e.source),target:toFilterable(t.target,e.target)})}function resolveAscendingSiblings(e){let t=new Set;for(let n of e.descendingSiblings())t.add(n);return t}const Gt={include:e=>{let{expr:t,where:n}=e,r=e.model.element(t.ref.deployment);if(xt(r))return applyElementPredicate(r,n)&&(e.stage.addExplicit(r),e.stage.connectWithExisting(r)),e.stage;switch(!0){case t.selector===`expanded`:includeDeployedNodeWithExpanded(r,e);break;case t.selector===`children`:includeDeployedNodeChildren(r,e);break;case t.selector===`descendants`:includeDeployedNodeDescendants(r,e);break;default:applyElementPredicate(r,n)&&(e.stage.addExplicit(r),e.stage.connectWithExisting(r))}return e.stage},exclude:({expr:e,stage:t,memory:n,where:r})=>{let i=deploymentExpressionToPredicate(e),a=R([...n.elements],L(i),applyElementPredicate(r));return t.exclude(a),t}};function includeDeployedNodeChildren(e,{stage:t,where:n}){let r=applyElementPredicate([...e.children()],n);r.length!==0&&(t.addImplicit(e),t.addConnections(X(r)),t.connectWithExisting(r),t.addExplicit(r))}function includeDeployedNodeWithExpanded(e,{memory:t,stage:n,where:r}){n.addImplicit(e),n.connectWithExisting(e);let i=applyElementPredicate([...e.children()],r),a=!1;for(let e of i)if(Y(e,t.elements).length>0){a=!0;break}a&&(n.connectWithExisting(i,`in`),n.addConnections(X(i)),n.connectWithExisting(i,`out`)),n.addImplicit(i),n.connections.length>0&&n.addExplicit(e)}function includeDeployedNodeDescendants(e,{stage:t,where:n}){let dfs=e=>{let r=[];for(let t of e.children())t.isDeploymentNode()&&r.push(...dfs(t)),applyElementPredicate(t,n)&&r.push(t);return t.connectWithExisting(r,`in`),t.addConnections(X(r)),t.addImplicit(r),r},r=dfs(e);if(r.length===0)return;t.connectWithExisting(r,`out`);let i=findConnectedElements(t);R(r,L(e=>i.has(e)),I(e=>t.addExplicit(e)))}function findConnectedElements(e){return R(e.mergedConnections(),cleanCrossBoundary,cleanRedundantRelationships,V((e,t)=>(e.add(t.source),e.add(t.target),e),new Set))}var Kt=class StageFinal$1{static{e(this,`StageFinal`)}memory;includeAncestors;static for(e,t){return new StageFinal$1(e,t)}constructor(e,t){this.memory=e,this.includeAncestors=t}step1CleanConnections(e){if(e.connections.length<2)return e;let t=R(e.connections,cleanCrossBoundary,cleanRedundantRelationships),n=pt(e.connections,t);if(n.length===0)return e;let r=e.stageExclude({});return r.excludeConnections(n,!0),r.commit()}step2ProcessImplicits(e){let t=M(this.memory.elements,e.elements),n=M(e.final,this.memory.explicits),r=new K.default(()=>new Set);for(let t of e.connections)if(t.boundary)for(let e of t.relations.model)r.get(e).add(t.boundary);for(let[e,i]of r)if(!(i.size<2))for(let e of i)t.delete(e)&&n.add(e);let i=new Set(n),isFinalOrHasIncludedDescendant=e=>{for(let t of i)if(e===t||w(e,t))return!0;return!1};return R(v(t,i),D(e=>e.isDeploymentNode()),d(),Ce,I(e=>{let t=[...e.children()].filter(isFinalOrHasIncludedDescendant).length;if(t>=2){n.add(e);return}t===1&&u(e.siblings(),isFinalOrHasIncludedDescendant)&&n.add(e)})),e.update({final:n})}step3ProcessBoundaries(e){let t=new Set;for(let n of e.connections)n.boundary&&t.add(n.boundary);let n=treeFromMemoryState(e,`final`),r=e.stageExclude({}),isRemovable=r=>!(t.has(r)||e.explicits.has(r)||n.hasInOut(r)||n.root.has(r)),i=G([...n.root]);i&&!e.explicits.has(i)&&r.exclude(i);for(let t of e.final){let e=G(n.children(t));e&&!n.hasInOut(e)&&isRemovable(t)&&r.exclude(t)}return r.isDirty()?r.commit():e}step4AddAncestor(e){let t=new Set;for(let n of e.final)for(let e of n.ancestors())t.add(e);if(t.size>0){let n=M(e.final,t);return e.update({final:n})}return e}commit(){let e=this.step1CleanConnections(this.memory),t=this.step2ProcessImplicits(e),n=this.step3ProcessBoundaries(t);return this.includeAncestors===!0?this.step4AddAncestor(n):n}};const qt=createRelationExpressionToPredicates(deploymentExpressionToPredicate);function buildExpandPredicate$1(e,t){let n=[],r=[];for(let e of t)if(be(e)&&`include`in e)for(let t of e.include)j.isCustom(t)&&(t.customRelation.multiple===!0?n.push(t):t.customRelation.multiple===!1&&r.push(t));let i=new Set,a=e.specification.relationships;for(let e of Object.keys(a)){let t=a[e];(t?.style??t)?.multiple&&i.add(e)}if(n.length===0&&r.length===0&&i.size===0)return;let o=n.map(e=>({pred:qt(e.customRelation.expr)})),s=r.map(e=>({pred:qt(e.customRelation.expr)}));return(e,t)=>{let resolveEndpoint=e=>{if(e&&typeof e==`object`){if(`tags`in e&&`kind`in e&&`metadata`in e)return e;if(e.instance&&e.element)return{id:e.id,tags:e.instance.tags,kind:e.element.kind,metadata:e.instance.metadata}}return e??{}},n=resolveEndpoint(t?.source??e.source),r=resolveEndpoint(t?.target??e.target);if(s.length>0){for(let{pred:t}of s)if(t({source:n,target:r,kind:e.kind,tags:e.tags,metadata:e.metadata}))return!1}if(i.size>0){let t=e.kind;if(t&&i.has(t))return!0}if(o.length>0){for(let{pred:t}of o)if(t({source:n,target:r,kind:e.kind,tags:e.tags,metadata:e.metadata}))return!0}return!1}}e(buildExpandPredicate$1,`buildExpandPredicate`);function processPredicates$1(e,t){let n=Lt.empty(),r=!1;for(let i of t){if(be(i)){let t=`include`in i?`include`:`exclude`,r=i.include??i.exclude;for(let i of r){let r=t===`include`?n.stageInclude(i):n.stageExclude(i);r=predicateToPatch(t,{expr:i,model:e,stage:r,memory:n,where:null})??r,n=r.commit()}}`includeAncestors`in i&&(r=i.includeAncestors)}return Kt.for(n,r).commit()}e(processPredicates$1,`processPredicates`);function computeDeploymentView(e,{docUri:t,rules:n,...r}){let i=processPredicates$1(e.deployment,n),o=buildNodes$1(e,i),s=buildExpandPredicate$1(e,n),c=toComputedEdges$1(i.connections,s);linkNodesWithEdges(o,c);let l=topologicalSort({nodes:o,edges:c}),u=applyDeploymentViewRuleStyles(n,l.nodes),d=ke(n,ue),f=Tt(u);return calcViewLayoutHash({...r,[a]:`computed`,[xe]:`deployment`,autoLayout:{direction:d?.direction??`TB`,...d?.nodeSep&&{nodeSep:d.nodeSep},...d?.rankSep&&{rankSep:d.rankSep}},edges:l.edges,nodes:W(u,e=>(e.icon===`none`&&delete e.icon,e)),...f.length>0&&{notation:{nodes:f}}})}function flattenGroupRules(e){return t=>fe(t)?t.groupRules.flatMap(flattenGroupRules(e)):be(t)&&`include`in t?t.include.filter(e):[]}function applyCustomElementProperties(e,t){let n=e.flatMap(flattenGroupRules(x.isCustom));if(n.length===0)return t;let r=[...t];for(let{custom:{expr:e,...t}}of n){let{border:n,opacity:i,multiple:a,iconColor:o,iconSize:s,iconPosition:c,padding:l,size:u,textSize:d,...p}=Be(t,N),m=f({border:n,opacity:i,multiple:a,iconColor:o,iconSize:s,iconPosition:c,padding:l,size:u,textSize:d}),h=!Me(m),g=!Me(p),_=elementExprToPredicate(e);r.forEach((e,t)=>{ye(e)||!_(e)||(g&&(e={...e,...p,isCustomized:!0}),h&&(e={...e,isCustomized:!0,style:{...e.style,...m}}),r[t]=e)})}return r}function resolveGlobalRulesInElementView(e,t){return e.reduce((e,n)=>{if(le(n)){let r=t.predicates[n.predicateId];return N(r)?e:e.concat(r)}if(se(n)){let r=t.styles[n.styleId];return N(r)?e:e.concat(r)}return e.push(n),e},[])}function resolveGlobalRulesInDynamicView(e,t){return e.reduce((e,n)=>{if(le(n)){let r=t.dynamicPredicates[n.predicateId];return N(r)?e:e.concat(r)}if(se(n)){let r=t.styles[n.styleId];return N(r)?e:e.concat(r)}return e.push(n),e},[])}function elementsFromIncludeProperties(e,t){let n=new Set;for(let r of t)if(be(r))for(let t of r.include){let r=elementExprToPredicate(t);for(let t of e.elements())r(t)&&n.add(t)}return n}const flattenSteps=e=>{switch(!0){case T.isStep(e):return[e];case T.isParallel(e):{let t=[],n=[];for(let r of e.steps){let[e,...i]=flattenSteps(r);e&&t.push(e),n.push(...i)}return[...t,...n]}case T.isSeries(e):return[...e.steps];case T.isBreak(e):case T.isLoop(e):case T.isOpt(e):return z(e.steps,flattenSteps);case T.isAlt(e):case T.isTry(e):{let t=[],n=[],r=e._type===`try`?[e.try,e.catch,e.finally]:[...e.branches];for(let e of r){if(!e)continue;let[r,...i]=z(e.steps,flattenSteps);r&&(t.push(r),n.push(...i))}return[...t,...n]}default:m(e)}};function elementsFromSteps(e,t){let n=[],addActor=(...[e,t])=>{if(!n.includes(e)){let r=n.indexOf(t);if(r>0){n.splice(r,0,e);return}else n.push(e)}n.includes(t)||n.push(t)};for(let r of z(t,flattenSteps)){let t=e.element(r.source),i=e.element(r.target),a=n.indexOf(t),o=n.indexOf(i);a>=0&&o>=0||(r.isBackward?addActor(i,t):addActor(t,i))}return new Set(n)}function findRelations(e,t,n){let i=dt(e,t,`directed`).flatMap(e=>[...e.relations]).sort(r);if(!me(i))return{};let specificationOf=t=>t?e.$model.specification.relationships[t]:void 0;if(i.length===1){let e=i[0],t=specificationOf(e.kind);return f({title:e.title??void 0,kind:e.kind??void 0,tags:e.tags,relations:[e.id],navigateTo:e.$relationship.navigateTo,color:e.$relationship.color??t?.color,line:e.$relationship.line??t?.line,head:e.$relationship.head??t?.head,tail:e.$relationship.tail??t?.tail,technology:e.technology??void 0,description:e.$relationship.description??void 0})}let a=R(i,z(e=>e.tags),Ue()),o=B(a,1)?a:void 0,s=W(i,e=>e.id),c=De(i).$relationship.navigateTo;c===n&&(c=void 0),c||=R(i,z(e=>e.$relationship.navigateTo&&e.$relationship.navigateTo!==n?e.$relationship.navigateTo:[]),Ue(),G());let l=R(i,V((e,{title:t,technology:n,kind:r,$relationship:i})=>{let a=specificationOf(r),o=i.color??a?.color,s=i.line??a?.line,c=i.head??a?.head,l=i.tail??a?.tail;return F(t)&&e.title.add(t),F(o)&&e.color.add(o),F(s)&&e.line.add(s),F(c)&&e.head.add(c),F(l)&&e.tail.add(l),F(r)&&e.kind.add(r),F(n)&&e.technology.add(n),F(i.description)&&!e.description.some(we(i.description))&&e.description.push(i.description),e},{kind:new Set,color:new Set,line:new Set,head:new Set,tail:new Set,title:new Set,technology:new Set,description:[]}));return f({tags:o??void 0,relations:s,navigateTo:c,kind:G([...l.kind]),title:G([...l.title]),color:G([...l.color]),line:G([...l.line]),head:G([...l.head]),tail:G([...l.tail]),technology:G([...l.technology]),description:G(l.description)})}var DynamicViewCompute=class{model;view;steps=[];constructor(e,t){this.model=e,this.view=t}compute(){let{docUri:e,rules:t,steps:r,...o}=this.view,s=resolveGlobalRulesInDynamicView(t,this.model.globals),c=elementsFromIncludeProperties(this.model,s),l=elementsFromSteps(this.model,r),u=R(M(p(c,l),l,c),d(),i),h={actors:new Set,flow:[],id:null,_type:null},g=new tt.default;g.push(h);let flowStackHead=()=>g.peek()??h,addToFlow=e=>(flowStackHead().flow.push(e),e),addActorToFlow=e=>{flowStackHead().actors.add(e)},newFlow=e=>({actors:new Set,flow:[],...e}),pushFlow=e=>(g.push(e),e),popFlow=()=>{let e=g.pop();return e&&e!==h&&e.flow.length>0&&addToFlow(e),e},processSteps=({steps:e,newflow:t,prefix:n})=>{pushFlow(t),n??=t.id,V(e,(e,t)=>processStep(t,e,n),1),popFlow()},flowId=(e,t,n)=>de(e,[t,n]),processTryStep=(e,t)=>{let n=1;processSteps({steps:e.try.steps,newflow:newFlow({_type:`try-block`,id:flowId(t,n++,`block`),title:e.try.title})}),e.catch&&processSteps({steps:e.catch.steps,newflow:newFlow({_type:`try-catch`,id:flowId(t,n++,`catch`),title:e.catch.title})}),e.finally&&processSteps({steps:e.finally.steps,newflow:newFlow({_type:`try-finally`,id:flowId(t,n,`finally`),title:e.finally.title})})},processStep=(e,t,r)=>{switch(!0){case T.isSeries(e):for(let n of e.steps)t=processStep(n,t,r);return t;case T.isLoop(e):case T.isOpt(e):case T.isBreak(e):case T.isParallel(e):return processSteps({steps:e.steps,newflow:newFlow({_type:e._type,id:flowId(r,t,e._type),title:e.title})}),t+1;case T.isTry(e):{let{id:n}=pushFlow(newFlow({_type:`try`,id:flowId(r,t,`try`)}));return processTryStep(e,n),popFlow(),t+1}case T.isAlt(e):{let{id:n}=pushFlow(newFlow({_type:`alt`,id:flowId(r,t,`alt`),title:e.title}));return e.branches.forEach((e,t)=>{processSteps({steps:e.steps,newflow:newFlow({_type:`alt-${e._type}`,id:flowId(n,t+1,e._type),title:e.title})})}),popFlow(),t+1}case T.isStep(e):{let i=addToFlow(de(r,t)),{source:a,target:o,title:s,isBackward:c,navigateTo:l,notation:d,...p}=e,m=this.model.element(a),h=u.indexOf(m);n(h>=0,`Source ${a} not found`);let g=this.model.element(o),_=u.indexOf(g);n(_>=0,`Target ${o} not found`),addActorToFlow(m),addActorToFlow(g);let{title:v,relations:y,navigateTo:ee,...b}=findRelations(m,g,this.view.id),te=F(l)&&l!==this.view.id?l:ee,x=e.kind?this.model.specification.relationships[e.kind]:void 0;return this.steps.push(f({...b,...!e.technology&&!b.technology&&x?.technology&&{technology:x.technology},...!e.color&&!b.color&&x?.color&&{color:x.color},...!e.line&&!b.line&&x?.line&&{line:x.line},...!e.head&&x?.head&&{head:x.head},...!e.tail&&x?.tail&&{tail:x.tail},...p,id:i,source:m,target:g,navigateTo:te,title:s??v,relations:y??[],isBackward:_<h})),t+1}default:m(e)}};V(r,(e,t)=>processStep(t,e),1);let _=buildComputedNodes(this.model.$styles,u.map(elementModelToNodeSource)),v=this.model.$styles.defaults.relationship,y=this.steps.map(({id:e,source:t,target:n,relations:r,title:i,isBackward:a,tags:o,...s})=>{let c=E(_.get(t.id),`Source node ${t.id} not found`),l=E(_.get(n.id),`Target node ${n.id} not found`),u={id:e,parent:ae(t.id,n.id),source:c.id,target:l.id,label:i??null,relations:r,color:v.color,line:v.line,head:v.arrow,tags:o??[],...s};for(a&&(u.dir=`back`);u.parent&&!_.has(u.parent);)u.parent=S(u.parent);c.outEdges.push(u.id),l.inEdges.push(u.id);for(let e of ge(u.source)){if(e===u.parent)break;_.get(e)?.outEdges.push(u.id)}for(let e of ge(u.target)){if(e===u.parent)break;_.get(e)?.inEdges.push(u.id)}return u}),ee=applyCustomElementProperties(s,applyViewRuleStyles(s,u.map(e=>E(_.get(e.id))))),b=ke(s,ue),te=Tt(ee);return calcViewLayoutHash({...o,[xe]:`dynamic`,[a]:`computed`,variant:o.variant??`diagram`,flow:toFlowSteps(h),autoLayout:{direction:b?.direction??`LR`,...b?.nodeSep&&{nodeSep:b.nodeSep},...b?.rankSep&&{rankSep:b.rankSep}},nodes:W(ee,e=>(e.icon===`none`&&delete e.icon,e)),edges:y,...te.length>0&&{notation:{nodes:te}}})}};function computeDynamicView(e,t){return new DynamicViewCompute(e,t).compute()}const Jt=He(et(),W(e=>P(e)?e:subflow(e)));function subflow(e){let t={id:e.id,...e.title&&{title:e.title}};if(e._type===`try`){let[r,i,a]=Jt(e.flow);if(N(r)||P(r)||P(i)||P(a))throw Error(`Try block, catch block, and finally block must be subflows`);n(r._type===`try-block`,`Try block is required`);let o={_type:e._type,flow:[r],...t};return a?(n(a._type===`try-finally`,`3rd party must be a finally block`),n(i&&i._type===`try-catch`,`2nd must be a catch block`),o.flow=[r,i,a],o):i?(n(i._type===`try-catch`||i._type===`try-finally`,`2nd element must be a catch or finally block, it is ${i._type}`),o.flow=[r,i],o):o}return{flow:Jt(e.flow),_type:e._type,...t}}function toFlowSteps(e){return e.flow.map(e=>{if(P(e))return e;let t=subflow(e);if(t._type===`alt-else`||t._type===`alt-if`||t._type===`alt-when`||t._type===`try-block`||t._type===`try-catch`||t._type===`try-finally`)throw Error(`Unsupported root-level subflow type: ${t._type}`);return t})}function applyCustomRelationProperties(e,t,n){let r=e.flatMap(flattenGroupRules(y.isCustom)),i=Array.from(n);if(r.length===0||i.length===0)return i;for(let{customRelation:{expr:e,title:n,description:a,notes:o,multiple:s,...c}}of r){let r=a?{description:ie(a)}:{},s=o?{notes:ie(o)}:{},l=Be(c,N),u=kt(e);i.forEach((e,a)=>{let o,c;for(let n of t)if(n.id===e.source&&(o=n),n.id===e.target&&(c=n),o&&c)break;!o||!c||u({source:o,target:c,...Re(e,[`kind`,`tags`])})&&(i[a]={...e,...l,...r,...s,label:n??e.label,isCustomized:!0})})}return i}function findRedundantConnections(e){return R([...e],it,V((e,t,n,r)=>{let i=wt(r,t),a=M(...i.map(Ge(`relations`))),o=p(t.relations,a);if(i.length>0&&(o=M(o,t.directRelations)),St(r,t.reversed())&&(o=M(o,t.directRelations)),o.size<t.relations.size){let e=r.some(rt(t.source)),n=r.some(rt(t.target));e&&(o=M(o,k(D(t.relations,at(t.source))))),n&&(o=M(o,k(D(t.relations,Ct(t.target)))))}return o.size>0&&e.push(t.update(o)),e},[]))}var Yt=class StageFinal{memory;static for(e){return new StageFinal(e)}constructor(e){this.memory=e}step1CleanConnections(e){if(e.connections.length<2)return e;let t=findRedundantConnections(e.connections);if(t.length===0)return e;let n=e.stageExclude({});return n.excludeConnections(t,!0),n.commit()}step2ProcessImplicits(e){let t=M(this.memory.elements,e.elements),n=M(e.final,this.memory.explicits),r=new Set(n),isFinalOrHasIncludedDescendant=e=>{for(let t of r)if(e===t||w(e,t))return!0;return!1};return R(v(t,r),d(),Ce,I(e=>{let t=[...e.children()].filter(isFinalOrHasIncludedDescendant).length;if(t>=2){n.add(e);return}t===1&&u(e.siblings(),isFinalOrHasIncludedDescendant)&&n.add(e)})),e.update({final:n})}step3ProcessBoundaries(e){let t=new Set;for(let n of e.connections)n.boundary&&n.boundary!==n.source&&n.boundary!==n.target&&t.add(n.boundary);let n=treeFromMemoryState(e,`final`),r=e.stageExclude({}),isRemovable=r=>!(t.has(r)||e.explicits.has(r)||n.hasInOut(r)||n.root.has(r)),i=G([...n.root]);i&&!e.explicits.has(i)&&r.exclude(i);for(let t of e.final){let e=G(n.children(t));e&&!n.hasInOut(e)&&isRemovable(t)&&r.exclude(t)}return r.isDirty()?r.commit():e}commit(){let e=this.step1CleanConnections(this.memory),t=this.step2ProcessImplicits(e);return this.step3ProcessBoundaries(t)}};const{findConnection:Xt,findConnectionsBetween:Z,findConnectionsWithin:Q}=vt;function resolveElements(e,t){switch(!0){case x.isElementKindExpr(t):return[...D(e.elements(),e=>t.isEqual===(e.kind===t.elementKind))];case x.isElementTagExpr(t):return[...D(e.elements(),e=>t.isEqual===e.tags.includes(t.elementTag))];case t.selector===`expanded`:{let n=e.element(O.flatten(t.ref));return[n,...n.children()]}case t.selector===`children`:case t.selector===`descendants`:{let n=e.element(O.flatten(t.ref)),r=t.selector===`children`?d(n.children()):d(n.descendants());return r&&r.length>0?r:[n]}case x.isModelRef(t):return[e.element(O.flatten(t.ref))];default:m(t)}}function includeDescendantsFromMemory(e,t){if(t.isEmpty()||e.length===0)return e;let n=H(e.map(e=>ne(e))),r=d(D(t.elements,t=>!e.includes(t)&&n(t)));return[...e,...r]}function resolveAndIncludeFromMemory(e,{memory:t,model:n}){let r=resolveElements(n,e);return x.isModelRef(e)?e.selector===`descendants`?r:includeDescendantsFromMemory(r,t):r}const Zt={include:({expr:e,model:t,stage:n,where:r})=>{let i=t.element(O.flatten(e.ref));r(i)&&(n.addExplicit(i),n.connectWithExisting(i));let a=[...i.children()].filter(r),o=[];for(let e of a)n.addImplicit(e),n.connectWithExisting(e)&&o.push(e);return n.addConnections(Q(o)),n},exclude:({expr:e,model:t,stage:n,filterWhere:r})=>{let i=r(resolveElements(t,e));return n.exclude(i),n}},Qt={include:({expr:e,model:t,stage:n,filterWhere:r})=>{let i=r(resolveElements(t,e));if(i.length!==0)return n.addExplicit(i),n.connectWithExisting(i),n.addConnections(Q(i)),n},exclude:({expr:e,model:t,stage:n,filterWhere:r})=>{let i=r(resolveElements(t,e));return n.exclude(i),n}},$t={include:({expr:e,model:t,stage:n,filterWhere:r})=>{let i=r(resolveElements(t,e));if(i.length!==0)return n.addExplicit(i),n.connectWithExisting(i),n.addConnections(Q(i)),n},exclude:({expr:e,model:t,stage:n,filterWhere:r})=>{let i=r(resolveElements(t,e));return n.exclude(i),n}},NoWhere=()=>!0,NoFilter=e=>e,hashEdgeId=(e,t,n)=>h(`model:${e}:${t}:${n}`);function toComputedEdges(e,t){return e.flatMap(e=>{let r=[...e.relations];n(B(r,1),`Edge must have at least one relation`);let i=e.source.$model.$styles.defaults,a=e.source.id,o=e.target.id,s=L(r,e=>e.source.id===a&&e.target.id===o);if(t&&r.length>1){let[n,s]=R(r,U(n=>t(n,e)));if(n.length>0){let t=n.map(t=>{let{title:n,color:r=i.relationship.color,line:s=i.relationship.line,head:c=i.relationship.arrow,...l}=mergePropsFromRelationships([t.$relationship],t.$relationship);return{id:hashEdgeId(a,o,t.id),parent:e.boundary?.id??null,source:a,target:o,label:n??null,relations:[t.id],color:r,line:s,head:c,...l}});if(s.length>0){let{title:n,color:r=i.relationship.color,line:c=i.relationship.line,head:l=i.relationship.arrow,...u}=mergePropsFromRelationships(s.map(e=>e.$relationship),G(L(s,e=>e.source.id===a&&e.target.id===o))?.$relationship);t.push({id:e.id,parent:e.boundary?.id??null,source:a,target:o,label:n??null,relations:s.map(e=>e.id),color:r,line:c,head:l,...u})}return t}}let{title:c,color:l=i.relationship.color,line:u=i.relationship.line,head:d=i.relationship.arrow,...p}=mergePropsFromRelationships(r.map(e=>e.$relationship),G(s)?.$relationship);return[f({id:e.id,parent:e.boundary?.id??null,source:a,target:o,label:c??null,relations:r.map(e=>e.id),color:l,line:u,head:d,...p})]})}function buildNodes(e,t){return buildComputedNodes(e.$styles,[...t.final].map(elementModelToNodeSource),t.groups)}const $=x.isWildcard,isAncestorOrDescendantOf=(e,t)=>e.isAncestorOf(t)||e.isDescendantOf(t),en={include:({expr:{source:e,target:t,isBidirectional:r=!1},memory:i,model:a,stage:o,where:c,filterWhere:l})=>{let u=$(e),f=$(t),p=[];switch(!0){case u&&f&&i.isEmpty()&&c!==NoWhere:{let e=R(a.relationships(),D(c),d(),W(e=>new J(e.source,e.target,new Set([e]))));return o.addConnections(e),o}case u&&f&&!i.isEmpty()&&c!==NoWhere:p.push(...Q(i.elements));break;case u&&f:p.push(...Q(a.roots()));break;case!u&&f&&c!==NoWhere:{let t=R(resolveElements(a,e),z(e=>R(e,Ke(Ze(r===!0),{onTrue:e=>M(e.allIncoming,e.allOutgoing),onFalse:e=>e.allOutgoing}),D(c),s(),d(),U(t=>t.source===e),([t,n])=>qe(R(t,L(t=>!isAncestorOrDescendantOf(e,t.target)),W(t=>new J(e,t.target,new Set([t])))),R(n,L(t=>!isAncestorOrDescendantOf(e,t.source)),W(t=>new J(t.source,e,new Set([t]))))))));return o.addConnections(t),o}case!u&&f:{let[t,n]=resolveWildcard(e,{memory:i,model:a}),o=r?`both`:`directed`;for(let e of t)p.push(...Z(e,n,o));break}case u&&!f&&c!==NoWhere:{let e=R(resolveElements(a,t),z(e=>R(e,Ke(Ze(r===!0),{onTrue:e=>M(e.allIncoming,e.allOutgoing),onFalse:e=>e.allIncoming}),D(c),d(),U(t=>t.target===e),([t,n])=>qe(R(n,L(t=>!isAncestorOrDescendantOf(e,t.target)),W(t=>new J(e,t.target,new Set([t])))),R(t,L(t=>!isAncestorOrDescendantOf(e,t.source)),W(t=>new J(t.source,e,new Set([t]))))))));return o.addConnections(e),o}case u&&!f:{let[e,n]=resolveWildcard(t,{memory:i,model:a}),o=r?`both`:`directed`;for(let t of n)p.push(...Z(t,e,o));break}default:{n(!$(e),`Inference failed - source must be not a wildcard`),n(!$(t),`Inference failed - target must be not a wildcard`);let o=resolveAndIncludeFromMemory(e,{memory:i,model:a}),s=resolveAndIncludeFromMemory(t,{memory:i,model:a}),c=r?`both`:`directed`;for(let e of o)p.push(...Z(e,s,c))}}return o.addConnections(l(p)),o},exclude:({expr:{source:e,target:t,isBidirectional:r},model:i,memory:a,stage:o,where:s})=>{let c=$(e),l=$(t),u;switch(!0){case c&&l:u=R(a.connections,z(He(Ge(`relations`),D(s),d())),k());break;case!c&&l:u=R(resolveElements(i,e),z(e=>R(e,Ke(Ze(r===!0),{onTrue:e=>M(e.allIncoming,e.allOutgoing),onFalse:e=>e.allOutgoing}),D(s),d())),k());break;case c&&!l:u=R(resolveElements(i,t),z(e=>R(e,Ke(Ze(r===!0),{onTrue:e=>M(e.allIncoming,e.allOutgoing),onFalse:e=>e.allIncoming}),D(s),d())),k());break;default:{n(!$(e),`Inference failed - source must be not a wildcard`),n(!$(t),`Inference failed - target must be not a wildcard`);let a=resolveElements(i,e),o=resolveElements(i,t),c=new Set;for(let e of a)for(let t of o)ve(e,t)||(c=M(c,p(e.allOutgoing,t.allIncoming),r?p(t.allOutgoing,e.allIncoming):new Set));u=k(D(c,s))}}return o.excludeRelations(u),o}};function resolveWildcard(e,{memory:n,model:r}){let i=resolveElements(r,e);if(!B(i,1))return[[],[]];if(x.isModelRef(e)){let t=d(r.element(O.flatten(e.ref)).ascendingSiblings());return[includeDescendantsFromMemory(i,n),includeDescendantsFromMemory(t,n)]}return[i,R(i,W(e=>e.ascendingSiblings()),t(),s(),d(),e=>includeDescendantsFromMemory(e,n))]}const tn={include:({expr:e,scope:t,model:n,memory:r,stage:i,filterWhere:a})=>{let o=e.incoming,s=[];if(x.isWildcard(o)){if(!t)return;for(let e of t.ascendingSiblings())s.push(...Xt(e,t,`directed`))}else{let e=resolveAndIncludeFromMemory(o,{memory:r,model:n}),t=[...r.elements];t.length===0&&t.push(...Ue(e.flatMap(e=>[...e.ascendingSiblings()])));let i=incomingConnectionPredicate(n,o);for(let n of t)s.push(...Z(n,e,`directed`).filter(i))}return i.addConnections(a(s)),i},exclude:({expr:{incoming:e},model:t,scope:n,stage:r,where:i})=>{let a=[];if(x.isWildcard(e)){if(!n)return;a.push(...n.allIncoming)}else{let n=resolveElements(t,e);a.push(...n.flatMap(e=>[...e.allIncoming]))}return r.excludeRelations(new Set(a.filter(i))),r}};function incomingConnectionPredicate(e,t){switch(!0){case x.isElementKindExpr(t):case x.isElementTagExpr(t):{let e=elementExprToPredicate(t);return t=>e(t.target)}case x.isModelRef(t)&&t.selector===`children`:{let n=O.flatten(t.ref);return H([...e.children(n)].map(e=>q.isIncoming(e.id)))}case x.isModelRef(t)&&t.selector===`descendants`:{let n=O.flatten(t.ref);return H([q.isInside(n),...[...e.children(n)].map(e=>q.isIncoming(e.id))])}case x.isModelRef(t)&&t.selector===`expanded`:{let e=O.flatten(t.ref);return H([q.isIncoming(e),q.isInside(e)])}case x.isModelRef(t):{let e=O.flatten(t.ref);return q.isIncoming(e)}default:m(t)}}const nn={include:({expr:{inout:e},scope:t,model:n,memory:r,stage:i,filterWhere:a})=>{let o=[];if(x.isWildcard(e)){if(!t)return;o.push(...Z(t,t.ascendingSiblings()))}else{let t=resolveAndIncludeFromMemory(e,{memory:r,model:n}),i=[...r.elements];i.length===0&&(i=Ue(t.flatMap(e=>d(e.ascendingSiblings()))));for(let e of t)o.push(...Z(e,i))}return i.addConnections(a(o)),i},exclude:({expr:{inout:e},model:t,scope:n,stage:r,where:i})=>{let a=[];if(x.isWildcard(e)){if(!n)return;a.push(...n.allOutgoing),a.push(...n.allIncoming)}else{let n=resolveElements(t,e);a.push(...n.flatMap(e=>[...e.allOutgoing,...e.allIncoming]))}return r.excludeRelations(k(a.filter(i))),r}},rn={include:({expr:e,scope:t,model:n,memory:r,stage:i,filterWhere:a})=>{let o=e.outgoing,s=[];if(x.isWildcard(o)){if(!t)return;s.push(...Z(t,t.ascendingSiblings(),`directed`))}else{let e=resolveAndIncludeFromMemory(o,{memory:r,model:n}),t=[...r.elements];t.length===0&&t.push(...Ue(e.flatMap(e=>[...e.ascendingSiblings()])));let i=outgoingConnectionPredicate(n,o);for(let n of e)s.push(...Z(n,t,`directed`).filter(i))}return i.addConnections(a(s)),i},exclude:({expr:{outgoing:e},model:t,scope:n,stage:r,where:i})=>{let a=[];if(x.isWildcard(e)){if(!n)return;a.push(...n.allOutgoing)}else{let n=resolveElements(t,e);a.push(...n.flatMap(e=>[...e.allOutgoing]))}return r.excludeRelations(k(a.filter(i))),r}};function outgoingConnectionPredicate(e,t){switch(!0){case x.isElementKindExpr(t):case x.isElementTagExpr(t):{let e=elementExprToPredicate(t);return t=>e(t.source)}case x.isModelRef(t)&&t.selector===`children`:{let n=O.flatten(t.ref);return H([...e.children(n)].map(e=>q.isOutgoing(e.id)))}case x.isModelRef(t)&&t.selector===`descendants`:{let n=O.flatten(t.ref);return H([q.isInside(n),...[...e.children(n)].map(e=>q.isOutgoing(e.id))])}case x.isModelRef(t)&&t.selector===`expanded`:{let e=O.flatten(t.ref);return H([q.isOutgoing(e),q.isInside(e)])}case x.isModelRef(t):{let e=O.flatten(t.ref);return q.isOutgoing(e)}default:m(t)}}const an={include:({scope:e,model:t,stage:n,memory:r,where:i})=>{if(!e){let e=i===NoWhere?[...t.roots()]:d(D(t.elements(),i));if(e.length===0)return;let[r,a]=U(e,e=>!e.imported);return n.addExplicit(r),n.addImplicit(a),n.addConnections(Q(e)),n.connectWithExisting(e),n}let a=d(D(e.children(),i)),o=a.length>0;if(!o){let t=Z(e,e.siblings()),r=e.parent;t.length===0&&r&&n.addExplicit(r),a.push(e)}n.addExplicit(e);let s=k([...r.elements,...e.descendingSiblings()]);for(let e of s)n.addConnections(Z(e,a,`directed`));o&&(n.addConnections(Q(a)),n.addExplicit(a));for(let e of a)n.addConnections(Z(e,s,`directed`));return n},exclude:({scope:e,memory:t,stage:n,where:r})=>r===NoWhere?e?(n.exclude([e,...e.descendants()]),n):Nt.empty(t.scope).stageExclude(n.expression):(n.exclude(L([...t.elements],r)),n)};function processElementPredicate(e,t,n){switch(!0){case x.isCustom(e):return t===`include`?processElementPredicate(e.custom.expr,t,n):n.stage;case x.isWhere(e):{let r=g(e.where.condition),filterWhere=e=>L(e,r);return processElementPredicate(e.where.expr,t,{...n,where:r,filterWhere})}case x.isModelRef(e)&&e.selector===`expanded`:return Zt[t]({...n,expr:e})??n.stage;case x.isWildcard(e):return an[t]({...n,expr:e})??n.stage;case x.isElementKindExpr(e):case x.isElementTagExpr(e):return Qt[t]({...n,expr:e})??n.stage;case x.isModelRef(e):return $t[t]({...n,expr:e})??n.stage;default:m(e)}}function processRelationtPredicate(e,t,n){switch(!0){case y.isCustom(e):return t===`include`?processRelationtPredicate(e.customRelation.expr,t,n):n.stage;case y.isWhere(e):{let r=g(e.where.condition),filterRelations=e=>new Set(L([...e],r)),filterWhere=e=>R(e,W(e=>new J(e.source,e.target,filterRelations(e.relations))),L(e=>e.nonEmpty()));return processRelationtPredicate(e.where.expr,t,{...n,where:r,filterWhere})}case y.isInOut(e):return nn[t]({...n,expr:e})??n.stage;case y.isDirect(e):return en[t]({...n,expr:e})??n.stage;case y.isOutgoing(e):return rn[t]({...n,expr:e})??n.stage;case y.isIncoming(e):return tn[t]({...n,expr:e})??n.stage;default:m(e)}}function process_predicates(e,t,r){let i={model:e,scope:t.scope,where:NoWhere,filterWhere:NoFilter};for(let a of r){if(fe(a)){t=process_predicates(e,Pt.enter(t,a),a.groupRules),n(t instanceof Pt,`processPredicates must return ActiveGroupMemory`),t=t.leave();continue}if(be(a)){let e=`include`in a?`include`:`exclude`,n=a.include??a.exclude;for(let r of n){let n=e===`include`?t.stageInclude(r):t.stageExclude(r);switch(!0){case b.isFqnExpr(r):n=processElementPredicate(r,e,{...i,stage:n,memory:t})??n;break;case b.isRelationExpr(r):n=processRelationtPredicate(r,e,{...i,stage:n,memory:t})??n;break;default:m(r)}t=n.commit()}}}return t}function processPredicates(e,t,n){return t=process_predicates(e,t,n),Yt.for(t).commit()}function buildExpandPredicate(e,t){let n=t.flatMap(flattenGroupRules(y.isCustom)).filter(e=>e.customRelation.multiple===!0),r=t.flatMap(flattenGroupRules(y.isCustom)).filter(e=>e.customRelation.multiple===!1),i=new Set,a=e.specification.relationships;for(let e of Object.keys(a)){let t=a[e];(t?.style??t)?.multiple&&i.add(e)}if(n.length===0&&r.length===0&&i.size===0)return;let o=n.map(e=>({pred:kt(e.customRelation.expr)})),s=r.map(e=>({pred:kt(e.customRelation.expr)}));return(e,t)=>{let n=t?.source??e.source,r=t?.target??e.target;if(s.length>0){for(let{pred:t}of s)if(t({source:n,target:r,kind:e.kind,tags:e.tags,metadata:e.metadata}))return!1}if(i.size>0){let t=e.kind;if(t&&i.has(t))return!0}if(o.length>0){for(let{pred:t}of o)if(t({source:n,target:r,kind:e.kind,tags:e.tags,metadata:e.metadata}))return!0}return!1}}function computeElementView(e,{docUri:t,rules:n,...r}){let i=resolveGlobalRulesInElementView(n,e.globals),a=r.viewOf?e.asComputed.element(r.viewOf):null,o=processPredicates(e,Nt.empty(a),i);o.isEmpty()&&a&&(o=o.update({final:new Set([a])})),o=assignElementsToGroups(o);let s=buildNodes(e,o),c=buildExpandPredicate(e,i),l=toComputedEdges(o.connections,c);linkNodesWithEdges(s,l);let u=topologicalSort({nodes:s,edges:l}),d=applyCustomElementProperties(i,applyViewRuleStyles(i,u.nodes)),f=ke(i,ue),p=Tt(d),m=collectRankConstraints(i,d);return calcViewLayoutHash({...r,_stage:`computed`,autoLayout:{direction:f?.direction??`TB`,...f?.nodeSep&&{nodeSep:f.nodeSep},...f?.rankSep&&{rankSep:f.rankSep}},edges:applyCustomRelationProperties(i,d,u.edges),nodes:W(d,e=>(e.icon===`none`&&delete e.icon,e)),...p.length>0&&{notation:{nodes:p}},...m.length>0&&{ranks:m}})}function collectRankConstraints(e,t){let n=[];for(let r of e){if(!pe(r)||r.targets.length===0)continue;let e=R(t,L(H(r.targets.map(elementExprToPredicate))),W(e=>e.id));B(e,1)&&n.push({type:r.rank,nodes:e})}return n}function assignElementsToGroups(e){if(e.groups.length===0)return e;let t=new K.default(()=>new Set),n=new Map,isAncestorAssigned=e=>{for(let r of e.ancestors()){let i=n.get(r);if(i)return n.set(e,i),t.get(i).add(e),!0}return!1},isDescendantAssigned=e=>{for(let r of e.descendants(`asc`)){let i=n.get(r);if(i)return n.set(e,i),t.get(i).add(e),!0}return!1};if(R(i([...e.explicitFirstSeenIn.keys()]),I(r=>{if(!isAncestorAssigned(r)){let i=E(e.explicitFirstSeenIn.get(r));n.set(r,i),t.get(i).add(r)}})),R(i([...e.lastSeenIn.keys()]),L(e=>!n.has(e)),I(r=>{if(isAncestorAssigned(r)||isDescendantAssigned(r))return;let i=E(e.lastSeenIn.get(r));n.set(r,i),t.get(i).add(r)})),t.size===0)return e;let r=e.groups.map(e=>{let n=t.get(e.id);return n?e.update(n):e});return e.update({groups:r})}function unsafeComputeView(e,t){switch(!0){case Se(e):return computeElementView(t,e);case _e(e):return computeDeploymentView(t,e);case re(e):return computeDynamicView(t,e);default:m(e)}}function computeView(e,t){try{return{isSuccess:!0,view:unsafeComputeView(e,t)}}catch(e){return{isSuccess:!1,error:e instanceof Error?e:Error(`Unknown error: ${e}`),view:void 0}}}function computeParsedModelData(e){let t=ot.create(e),{views:n,_stage:r,...i}=e,o=Pe(n,e=>unsafeComputeView(e,t));return{[a]:`computed`,...i,views:o}}function computeLikeC4Model(e){return ot.create(computeParsedModelData(e))}const asTypedExpr=e=>e;function $expr(e){if(!P(e))return e;if(e===`*`)return asTypedExpr({wildcard:!0});if(e.startsWith(`->`))return e.endsWith(`->`)?asTypedExpr({inout:$expr(e.replace(/->/g,``).trim())}):asTypedExpr({incoming:$expr(e.replace(`-> `,``))});if(e.endsWith(` ->`))return asTypedExpr({outgoing:$expr(e.replace(` ->`,``))});if(e.includes(` <-> `)){let[t,n]=e.split(` <-> `);return asTypedExpr({source:$expr(t),target:$expr(n),isBidirectional:!0})}if(e.includes(` -> `)){let[t,n]=e.split(` -> `);return asTypedExpr({source:$expr(t),target:$expr(n)})}return e.endsWith(`._`)?asTypedExpr({ref:{model:e.replace(`._`,``)},selector:`expanded`}):e.endsWith(`.**`)?asTypedExpr({ref:{model:e.replace(`.**`,``)},selector:`descendants`}):e.endsWith(`.*`)?asTypedExpr({ref:{model:e.replace(`.*`,``)},selector:`children`}):asTypedExpr({ref:{model:e}})}export{unsafeComputeView as a,linkNodesWithEdges as c,computeView as i,computeLikeC4Model as n,computeElementView as o,computeParsedModelData as r,topologicalSort as s,$expr as t};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as __name } from "./rolldown-runtime.mjs";
|
|
2
|
+
import { Bi as NodeId, Bt as DeploymentRelationship, C as ComputedView, Ct as ViewManualLayoutSnapshot, Di as toComputed, Er as RelationshipArrowType, Ft as DeployedInstance, Gr as Any, Gt as ElementStyle, Hi as ProjectId, Ii as GroupElementKind, It as DeploymentElement, Jr as AnyParsed, Kr as AnyComputed, M as ViewWithType, Mi as EdgeId, Mt as Specification, O as ProcessedView, Qr as DeploymentKind, Ri as IconUrl, Rt as DeploymentNode, Si as ViewId, T as LayoutedView, Ui as RelationId, Wt as Element, Xr as DeploymentFqn, Yi as ViewId$1, Yr as Aux, Zr as DeploymentId, _ as AuxFromLikeC4ModelData, _a as Link, _i as Tags, aa as _stage, b as LikeC4ModelData, bi as UnknownLayouted, ci as Metadata, di as RelationId$1, ei as ElementId, en as ModelGlobals, et as ComputedNodeStyle, f as AuxFromDump, fi as RelationKind, fr as FqnRef, gi as Tag, ha as IteratorLike, hi as StrictViewId, ii as LooseElementId, kr as RelationshipLineType, li as MetadataKey, mi as Stage, mr as Color, ni as Fqn, nn as DynamicViewDisplayVariant, oa as _type, oi as LooseTag, p as LikeC4ModelDump, qr as AnyLayouted, qt as Relationship, ri as LooseDeploymentId, rr as WhereOperator, si as LooseViewId, ti as ElementKind, u as RichTextOrEmpty, ui as ProjectId$1, v as ComputedLikeC4ModelData, vi as Unknown, wt as LikeC4Project, x as ParsedLikeC4ModelData, xi as UnknownParsed, y as LayoutedLikeC4ModelData, ya as NonEmptyArray, yi as UnknownComputed, yr as ElementShape } from "./index.mjs";
|
|
2
3
|
import { i as BBox } from "./index2.mjs";
|
|
3
4
|
import { o as LikeC4Styles } from "./index3.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import "./mnemonist.mjs";
|
|
5
|
+
import { t as DefaultMap } from "./default-map.mjs";
|
|
6
6
|
import { IsAny, SetRequired, Tagged } from "type-fest";
|
|
7
|
-
|
|
8
7
|
//#region src/model/RelationModel.d.ts
|
|
9
8
|
type RelationshipsIterator<A extends Any> = IteratorLike<RelationshipModel<A>>;
|
|
10
9
|
/**
|
|
@@ -195,8 +194,8 @@ declare class ElementModel<A extends Any = Any> implements WithTags<A>, WithMeta
|
|
|
195
194
|
}
|
|
196
195
|
//#endregion
|
|
197
196
|
//#region src/model/view/NodeModel.d.ts
|
|
198
|
-
type NodesIterator<M extends Any, V extends $View<M>> = IteratorLike<NodeModel<M, V>>;
|
|
199
|
-
declare class NodeModel<A extends Any = Any, V extends
|
|
197
|
+
type NodesIterator<M extends Any, V extends ProcessedView<M> = $View<M>> = IteratorLike<NodeModel<M, V>>;
|
|
198
|
+
declare class NodeModel<A extends Any = Any, V extends ProcessedView<A> = $View<A>> implements WithTags<A> {
|
|
200
199
|
readonly Aux: A;
|
|
201
200
|
readonly $viewModel: LikeC4ViewModel<A, V>;
|
|
202
201
|
readonly $view: V;
|
|
@@ -262,23 +261,23 @@ declare namespace NodeModel {
|
|
|
262
261
|
width: number;
|
|
263
262
|
height: number;
|
|
264
263
|
} : never;
|
|
265
|
-
interface WithParent<A extends Any, V extends
|
|
264
|
+
interface WithParent<A extends Any, V extends ProcessedView<A> = $View<A>> extends NodeModel<A, V> {
|
|
266
265
|
readonly parent: NodeModel<A, V>;
|
|
267
266
|
}
|
|
268
|
-
interface WithElement<A extends Any, V extends
|
|
267
|
+
interface WithElement<A extends Any, V extends ProcessedView<A> = $View<A>> extends NodeModel<A, V> {
|
|
269
268
|
readonly kind: ElementKind<A>;
|
|
270
269
|
readonly element: ElementModel<A>;
|
|
271
270
|
}
|
|
272
|
-
interface WithDeploymentElement<A extends Any, V extends
|
|
271
|
+
interface WithDeploymentElement<A extends Any, V extends ProcessedView<A> = $View<A>> extends NodeModel<A, V> {
|
|
273
272
|
readonly kind: DeploymentKind<A>;
|
|
274
273
|
readonly deployment: DeploymentElementModel<A>;
|
|
275
274
|
}
|
|
276
|
-
interface WithDeployedInstance<A extends Any, V extends
|
|
275
|
+
interface WithDeployedInstance<A extends Any, V extends ProcessedView<A> = $View<A>> extends NodeModel<A, V> {
|
|
277
276
|
readonly kind: 'instance';
|
|
278
277
|
readonly element: ElementModel<A>;
|
|
279
278
|
readonly deployment: DeployedInstanceModel<A>;
|
|
280
279
|
}
|
|
281
|
-
interface IsGroup<A extends Any, V extends
|
|
280
|
+
interface IsGroup<A extends Any, V extends ProcessedView<A> = $View<A>> extends NodeModel<A, V> {
|
|
282
281
|
readonly kind: typeof GroupElementKind;
|
|
283
282
|
readonly element: null;
|
|
284
283
|
readonly deployment: null;
|
|
@@ -286,8 +285,8 @@ declare namespace NodeModel {
|
|
|
286
285
|
}
|
|
287
286
|
//#endregion
|
|
288
287
|
//#region src/model/view/EdgeModel.d.ts
|
|
289
|
-
type EdgesIterator<A extends Any, V extends $View<A>> = IteratorLike<EdgeModel<A, V>>;
|
|
290
|
-
declare class EdgeModel<A extends Any = Any, V extends
|
|
288
|
+
type EdgesIterator<A extends Any, V extends ProcessedView<A> = $View<A>> = IteratorLike<EdgeModel<A, V>>;
|
|
289
|
+
declare class EdgeModel<A extends Any = Any, V extends ProcessedView<A> = $View<A>> implements WithTags<A> {
|
|
291
290
|
readonly source: NodeModel<A, V>;
|
|
292
291
|
readonly target: NodeModel<A, V>;
|
|
293
292
|
readonly Aux: A;
|
|
@@ -302,13 +301,12 @@ declare class EdgeModel<A extends Any = Any, V extends $View<A> = $View<A>> impl
|
|
|
302
301
|
get technology(): string | null;
|
|
303
302
|
hasParent(): this is EdgeModel.WithParent<A, V>;
|
|
304
303
|
get tags(): Tags<A>;
|
|
305
|
-
get stepNumber(): number | null;
|
|
306
304
|
get navigateTo(): LikeC4ViewModel<A> | null;
|
|
307
305
|
get color(): Color;
|
|
308
306
|
get line(): RelationshipLineType;
|
|
309
307
|
get head(): RelationshipArrowType;
|
|
310
308
|
get tail(): RelationshipArrowType | undefined;
|
|
311
|
-
isStep():
|
|
309
|
+
isStep(): boolean;
|
|
312
310
|
relationships(type: 'model'): IteratorLike<RelationshipModel<A>>;
|
|
313
311
|
relationships(type: 'deployment'): IteratorLike<DeploymentRelationModel<A>>;
|
|
314
312
|
relationships(type?: 'model' | 'deployment'): IteratorLike<RelationshipModel<A> | DeploymentRelationModel<A>>;
|
|
@@ -318,11 +316,7 @@ declare class EdgeModel<A extends Any = Any, V extends $View<A> = $View<A>> impl
|
|
|
318
316
|
isTagged(tag: LooseTag<A>): boolean;
|
|
319
317
|
}
|
|
320
318
|
declare namespace EdgeModel {
|
|
321
|
-
interface
|
|
322
|
-
readonly id: StepEdgeId;
|
|
323
|
-
readonly stepNumber: number;
|
|
324
|
-
}
|
|
325
|
-
interface WithParent<A extends Any, V extends $View<A>> extends EdgeModel<A, V> {
|
|
319
|
+
interface WithParent<A extends Any, V extends ProcessedView<A>> extends EdgeModel<A, V> {
|
|
326
320
|
readonly parent: NodeModel<A, V>;
|
|
327
321
|
}
|
|
328
322
|
}
|
|
@@ -403,8 +397,8 @@ declare class LikeC4ViewsFolder<A extends Any = Any> {
|
|
|
403
397
|
}
|
|
404
398
|
//#endregion
|
|
405
399
|
//#region src/model/view/LikeC4ViewModel.d.ts
|
|
406
|
-
type ViewsIterator<A extends Any, V extends
|
|
407
|
-
declare class LikeC4ViewModel<A extends Any = Any, V extends
|
|
400
|
+
type ViewsIterator<A extends Any, V extends ProcessedView<A> = $View<A>> = IteratorLike<LikeC4ViewModel<A, V>>;
|
|
401
|
+
declare class LikeC4ViewModel<A extends Any = Any, V extends ProcessedView<A> = $View<A>> implements WithTags<A> {
|
|
408
402
|
#private;
|
|
409
403
|
/**
|
|
410
404
|
* Don't use in runtime, only for type inference
|
|
@@ -569,7 +563,7 @@ declare class LikeC4ViewModel<A extends Any = Any, V extends $View<A> = $View<A>
|
|
|
569
563
|
declare namespace LikeC4ViewModel {
|
|
570
564
|
type Computed<A> = A extends AnyComputed ? LikeC4ViewModel<A, ComputedView<A>> : never;
|
|
571
565
|
type Layouted<A> = A extends AnyLayouted ? LikeC4ViewModel<A, LayoutedView<A>> : never;
|
|
572
|
-
interface ElementView<A extends Any, V extends
|
|
566
|
+
interface ElementView<A extends Any, V extends ProcessedView<A> = $View<A>> extends LikeC4ViewModel<A, ViewWithType<V, 'element'>> {
|
|
573
567
|
readonly mode: never;
|
|
574
568
|
}
|
|
575
569
|
interface ScopedElementView<A extends Any> extends LikeC4ViewModel<A, ViewWithType<$View<A>, 'element'> & {
|
|
@@ -578,10 +572,10 @@ declare namespace LikeC4ViewModel {
|
|
|
578
572
|
readonly mode: never;
|
|
579
573
|
readonly viewOf: ElementModel<A>;
|
|
580
574
|
}
|
|
581
|
-
interface DeploymentView<A extends Any, V extends
|
|
575
|
+
interface DeploymentView<A extends Any, V extends ProcessedView<A> = $View<A>> extends LikeC4ViewModel<A, ViewWithType<V, 'deployment'>> {
|
|
582
576
|
readonly mode: never;
|
|
583
577
|
}
|
|
584
|
-
interface DynamicView<A extends Any, V extends $View<A>> extends LikeC4ViewModel<A, ViewWithType<V, 'dynamic'>> {
|
|
578
|
+
interface DynamicView<A extends Any, V extends ProcessedView<A> = $View<A>> extends LikeC4ViewModel<A, ViewWithType<V, 'dynamic'>> {
|
|
585
579
|
readonly mode: DynamicViewDisplayVariant;
|
|
586
580
|
readonly viewOf: never;
|
|
587
581
|
}
|
|
@@ -1006,6 +1000,10 @@ declare class LikeC4Model<A extends Any = Any> {
|
|
|
1006
1000
|
static create<T extends AnyParsed>(model: ParsedLikeC4ModelData<T>): LikeC4Model<T>;
|
|
1007
1001
|
static create<T extends AnyComputed>(model: ComputedLikeC4ModelData<T>): LikeC4Model<T>;
|
|
1008
1002
|
static create<T extends AnyLayouted>(model: LayoutedLikeC4ModelData<T>): LikeC4Model<T>;
|
|
1003
|
+
static create<T extends Any>(model: ParsedLikeC4ModelData<T>): LikeC4Model.Parsed<T>;
|
|
1004
|
+
static create<T extends Any>(model: ComputedLikeC4ModelData<T>): LikeC4Model.Computed<T>;
|
|
1005
|
+
static create<T extends Any>(model: LayoutedLikeC4ModelData<T>): LikeC4Model.Layouted<T>;
|
|
1006
|
+
static create<M extends LikeC4ModelData<any>>(model: M): LikeC4Model<AuxFromLikeC4ModelData<M>>;
|
|
1009
1007
|
static create<T extends Any>(model: $ModelData<T>): LikeC4Model<T>;
|
|
1010
1008
|
/**
|
|
1011
1009
|
* Creates a new LikeC4Model instance and infers types from a model dump.\
|
|
@@ -1075,7 +1073,7 @@ declare class LikeC4Model<A extends Any = Any> {
|
|
|
1075
1073
|
* Use {@link findElement} if you don't want to throw an error
|
|
1076
1074
|
*
|
|
1077
1075
|
* @note Method is type-safe for typed model
|
|
1078
|
-
|
|
1076
|
+
* @example
|
|
1079
1077
|
* model.element('cloud.frontend')
|
|
1080
1078
|
* // or object with id property of scalar.Fqn
|
|
1081
1079
|
* model.element({
|