@likec4/core 1.59.2 → 1.59.3
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 -2
- package/dist/chunks/Builder.view-element.mjs +2 -2
- package/dist/chunks/LikeC4Model.d.mts +5 -0
- package/dist/chunks/_types.d.mts +9 -2
- package/dist/chunks/assignTagColors.mjs +1 -1
- package/dist/chunks/calcDriftsFromSnapshot.mjs +1 -1
- package/dist/chunks/index.d.mts +15 -2
- package/dist/chunks/index3.d.mts +2 -2
- package/dist/chunks/libs/chroma-js.mjs +1 -1
- package/dist/chunks/libs/graphology-dag.mjs +1 -1
- package/dist/chunks/libs/graphology.mjs +1 -1
- package/dist/chunks/libs/hast-util-sanitize.mjs +1 -1
- package/dist/chunks/libs/hast-util-to-html.mjs +2 -2
- package/dist/chunks/libs/hastscript.mjs +1 -0
- package/dist/chunks/libs/mdast.mjs +9 -9
- package/dist/chunks/libs/mnemonist.mjs +1 -1
- package/dist/chunks/libs/ohash.mjs +1 -1
- package/dist/chunks/libs/parse-entities.mjs +1 -0
- package/dist/chunks/libs/refractor.mjs +3 -0
- package/dist/chunks/libs/rehype-prism-plus.mjs +4 -0
- package/dist/chunks/libs/remark.mjs +3 -3
- package/dist/chunks/libs/remeda.mjs +1 -1
- package/dist/chunks/libs/unified.mjs +1 -1
- package/dist/chunks/model.mjs +4 -4
- package/dist/chunks/rolldown-runtime.mjs +1 -1
- package/dist/chunks/types.mjs +2 -2
- package/dist/compute-view/index.d.mts +1 -1
- package/dist/compute-view/index.mjs +2 -2
- package/package.json +13 -12
package/dist/builder/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as
|
|
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 };
|
|
1
|
+
import { $ as AddDeployedInstance, A as ElementViewRulesBuilder, B as $include, C as mkViewBuilder, D as AddViewOfHelper, E as AddViewHelper, F as AddDeploymentViewRules, G as AddElementHelpers, H as $style, I as DeploymentRulesBuilderOp, J as ModelHelpers, K as ModelBuilder, L as DeploymentViewBuilder, M as $deploymentExpr, N as $includeAncestors, O as AddViewRules, P as AddDeploymentViewHelper, Q as AddElement, R as $autoLayout, S as ViewsHelpers, T as $expr, U as LikeC4ViewBuilder, V as $rules, W as ViewPredicate, X as RelationshipHelper, Y as NestedRelationshipHelper, Z as model, _ as Builder, a as BuilderSpecification, at as deployment, b as ViewsBuilder, c as NewDeploymentNodeProps, d as NewRelationProps, et as AddDeploymentNodeHelpers, f as NewViewProps, g as Warn, h as ValidId, i as BuilderProjectSpecification, it as DeploymentModelBuilder, j as TypedAddViewOfHelper, k as ElementViewBuilder, l as NewDeploymentRelationProps, m as TypesNested, n as AnyTypesNested, nt as DeloymentModelBuildFunction, o as Invalid, ot as AddDeploymentNode, p as Types, q as ModelBuilderFunction, r as BuilderMode, rt as DeloymentModelHelpers, s as Metadata, t as AnyTypes, tt as AddDeploymentRelation, u as NewElementProps, v as assertSpecificationCompatible, w as views, x as ViewsBuilderFunction, y as BuilderMethods, z as $exclude } 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 NewDeploymentRelationProps, 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,2 +1,2 @@
|
|
|
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{
|
|
2
|
-
- `)}`)}function toMarkdownOrString(r){return
|
|
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{C as y,E as b,J as x,L as S,M as C,S as w,X as T,Z as E,it as D,k as O,q as k,u as A,x 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 D(Object.fromEntries,r)}r(t$1,`t`);function t(...r){return D(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(b(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:y(r.and,parseWhere)};if(r.or)return{or:y(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:(S(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(!b(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(b(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 S(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 x(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 x(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=>O(r)?[]:S(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 O(r)?null:typeof r==`string`?{txt:r}:r}function builder(r,l=new Map,p=[],b=new Map,x={predicates:{},dynamicPredicates:{},styles:{}},S=new Map,D=[],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||!T(r,1)))return y(r,r=>typeof r==`string`?{url:r}:r)},createGenericView=(r,a,o)=>{C(a)&&(o=a,a={}),a??={};let{links:c=[],title:l=null,description:u=null,tags:d=[],...f}=typeof a==`string`?{title:a}:{...a};i(f.order===void 0||Number.isInteger(f.order)&&f.order>=0,`View order must be a non-negative integer`);let p=mapLinks(c);return[s({id:r,title:l,description:toMarkdownOrString(u),tags:d,links:p,_stage:`parsed`,...f}),o]},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(b),structuredClone(x),structuredClone(S),structuredClone(D),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(b),structuredClone(x),structuredClone(S),structuredClone(D),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(b.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`),b.set(r.id,r),L},__addDeployment:r=>{if(S.has(r.id))throw Error(`Deployment with id "${r.id}" already exists`);let a=d(r.id);return a&&i(S.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}"`)),S.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(S.has(r.source.deployment),`Relation "${r.source.deployment} -> ${r.target.deployment}" references non-existing source`),i(S.has(r.target.deployment),`Relation "${r.source.deployment} -> ${r.target.deployment}" references non-existing target`),D.push({id:`deploy_rel${D.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:w(p,r=>[r.id,structuredClone(r)]),globals:structuredClone(x),deployments:{elements:t$1(structuredClone(Array.from(S.entries()))),relations:w(D,r=>[r.id,structuredClone(r)])},views:t$1(structuredClone(Array.from(b.entries()))),imports:E(Array.from(A.entries()),y(([r,i])=>[r,structuredClone([...i.values()])]),k(([r,i])=>i.length>0),t$1())}),toLikeC4Model:r=>{let i=L.build(r);return N(i)},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},...j(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=>{O(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},...j(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};
|
|
@@ -1,2 +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
|
+
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 we,B as Te,C as N,E as P,F as Ee,G as De,H as F,I as Oe,L as ke,N as Ae,P as je,R as Me,S as Ne,T as I,V as L,W as Pe,X as R,Y as Fe,Z as z,_ as B,a as Ie,b as Le,et as Re,g as ze,h as Be,i as Ve,j as He,k as V,l as Ue,m as We,n as Ge,nt as H,o as Ke,p as qe,q as U,r as Je,t as Ye,tt as Xe,u as W,v as G,w as Ze,x as Qe,y as $e,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?Ze(o(Ue(a),Ue(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=z(r,N(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}})),[o,s]=B(a,({source:e,target:t})=>e.children.length===0&&t.children.length===0),c=[],addEdgeToGraph=e=>{i.mergeNode(e.source),i.mergeNode(e.target),c.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 o)if(addEdgeToGraph(t),r.parent&&r.parent!==t.parent&&z(ancestorsOfNode(r,e.nodes),Ie(e=>e.inEdges.includes(t.id)),L(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 s)addEdgeToGraph(e);n(c.length===r.length,`Not all edges were added to the graph`);let l=(0,Ot.topologicalSort)(i),u=[],d=t.slice();for(let e of l){let t=d.findIndex(t=>t.id===e);n(t>=0,`Node "${e}" not found`),u.push(...d.splice(t,1))}return d.length>0&&u.length>0&&(u=u.flatMap(e=>{if(d.length===0)return e;let n=t.slice(0,t.indexOf(e)).filter(e=>d.includes(e));return n.length>0?(d=d.filter(e=>!n.includes(e)),[...n,e]):e})),u.push(...d),{nodes:updateChildren(ensureParentsFirst(u)),edges:c}}function calcViewLayoutHash(e){let t={id:e.id,__:e._type??`element`,autoLayout:e.autoLayout,nodes:z(e.nodes,N(e=>({id:e.id,icon:I(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})),Ne(({id:e,...t})=>[e,t])),edges:z(e.edges,N(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})),Ne(e=>[e.id,{...e}]))};return e.hash=_(t),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(Oe(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=z(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]=B(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=!je(o);z(n,U(we(ye)),U(t),L(t=>{t.shape=r??t.shape,t.color=i??t.color,Ee(a)&&(t.icon=a),Ee(e.notation)&&(t.notation=e.notation),s&&(t.style={...t.style,...o})}))}function applyViewRuleStyles(e,t){for(let n of e){if(!ee(n)||n.targets.length===0)continue;let e=n.targets.map(elementExprToPredicate);applyViewRuleStyle(n,H(e),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 z(this.memory.connections,U(t=>l(t.relations,e)),L(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)||z(e,L(({source:e,target:t,boundary:n})=>{z(Ye([...d(e.ancestors()).reverse(),e],[...d(t.ancestors()).reverse(),t]),Fe(([e,t])=>e===t),Ke(1),L(([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}=Le(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},...ze(e,[`color`,`technology`,`head`,`line`,`tail`,`kind`,`navigateTo`])}}function mergePropsFromRelationships(e,t){let n=z(e,W((e,t)=>(I(t.title)&&!e.title.includes(t.title)&&e.title.push(t.title),I(t.description)&&!e.description.some(et(t.description))&&e.description.push(t.description),I(t.technology)&&!e.technology.includes(t.technology)&&e.technology.push(t.technology),I(t.kind)&&!e.kind.includes(t.kind)&&e.kind.push(t.kind),I(t.color)&&!e.color.includes(t.color)&&e.color.push(t.color),I(t.line)&&!e.line.includes(t.line)&&e.line.push(t.line),I(t.head)&&!e.head.includes(t.head)&&e.head.push(t.head),I(t.tail)&&!e.tail.includes(t.tail)&&e.tail.push(t.tail),I(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=Ve(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=Be({...a,...e},I)}return V(a.title)&&I(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:R(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:Le(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:R(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(R(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]=z(e,B(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(U(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,je(t.tags)&&(t.tags=[...r.tags]),(!t.links||je(t.links))&&R(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){if(!ee(n)||n.targets.length===0)continue;let e=n.targets.map(deploymentExpressionToPredicate);applyViewRuleStyle(n,H(e),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)R(r,2)&&z(r,F(e=>[{group:`$source-${e.source.id}`,conn:e},{group:`$target-${e.target.id}`,conn:e}]),Te(qe(`group`)),Je(),U(R(2)),L(We(N(qe(`conn`)),st(`desc`),Fe((e,t,n)=>t===0||e.boundary===n[t-1].boundary),L(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=i.internalModelRelationships(),s=p(a,o);for(let e of s)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 z(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 z(e,it,W((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=z(e,cleanCrossBoundary,cleanRedundantRelationships);return z(t,L(({source:e,target:t,boundary:n})=>{z(Ye([...d(e.ancestors()).reverse(),e],[...d(t.ancestors()).reverse(),t]),Fe(([e,t])=>e===t),Ke(1),L(([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&&et(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=[...resolveAscendingSiblings(e)],n=applyPredicate(Y(e,t,`directed`),a);i.addConnections(n)}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=z(n.connections,U(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=z(n.connections,U(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=z(X(i.instances()),applyPredicate(o),N(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=z(t,F(e=>{let t=resolveAscendingSiblings(e);return Y(e,t,l)}),U(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=z(e,F(e=>[...resolveAscendingSiblings(e)].flatMap(t=>Ft(t,e,l))),U(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=z(r,F(e=>Y(e,a,l)),U(e=>d(e)&&f(e)),applyPredicate(o))}}return a.addConnections(u),C.isDeploymentRef(e)&&He(e.selector)&&a.addImplicit(i.element(e.ref.deployment)),C.isDeploymentRef(t)&&He(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=z(n.connections,U(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=[...resolveAscendingSiblings(e)],n=matchConnections(Y(e,t,`both`),a);i.addConnections(n)}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=z(n.connections,U(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?z([...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=z([...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=z(n.connections,U(e=>i(e)),U(t=>l(t.relations.model,e)),N(t=>t.update({deployment:null,model:p(t.relations.model,e)})),applyPredicate(r),U(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:ke(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 ke(t)?n==null?t:t.filter(e=>n(toFilterable(e,e))):n?.(toFilterable(t,t))??!0}function matchConnections(e,t){return t?z(e,U(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 ze(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 ze(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=z([...n.elements],U(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);z(r,U(e=>i.has(e)),L(e=>t.addExplicit(e)))}function findConnectedElements(e){return z(e.mergedConnections(),cleanCrossBoundary,cleanRedundantRelationships,W((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=z(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 z(v(t,i),D(e=>e.isDeploymentNode()),d(),Ce,L(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=De(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:N(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}=$e(t,V),m=f({border:n,opacity:i,multiple:a,iconColor:o,iconSize:s,iconPosition:c,padding:l,size:u,textSize:d}),h=!Ae(m),g=!Ae(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 V(r)?e:e.concat(r)}if(se(n)){let r=t.styles[n.styleId];return V(r)?e:e.concat(r)}return fe(n)?(e.push({...n,groupRules:resolveGlobalRulesInGroup(n.groupRules,t)}),e):(e.push(n),e)},[])}function resolveGlobalRulesInGroup(e,t){return e.reduce((e,n)=>{if(le(n)){let r=t.predicates[n.predicateId];return V(r)?e:e.concat(r)}return fe(n)?(e.push({...n,groupRules:resolveGlobalRulesInGroup(n.groupRules,t)}),e):(e.push(n),e)},[])}function resolveGlobalRulesInDynamicView(e,t){return e.reduce((e,n)=>{if(le(n)){let r=t.dynamicPredicates[n.predicateId];return V(r)?e:e.concat(r)}if(se(n)){let r=t.styles[n.styleId];return V(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 F(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]=F(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}n.push(e)}n.includes(t)||n.push(t)};for(let r of F(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=z(i,F(e=>e.tags),Ve()),o=R(a,1)?a:void 0,s=N(i,e=>e.id),c=Pe(i).$relationship.navigateTo;c===n&&(c=void 0),c||=z(i,F(e=>e.$relationship.navigateTo&&e.$relationship.navigateTo!==n?e.$relationship.navigateTo:[]),Ve(),G());let l=z(i,W((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 I(t)&&e.title.add(t),I(o)&&e.color.add(o),I(s)&&e.line.add(s),I(c)&&e.head.add(c),I(l)&&e.tail.add(l),I(r)&&e.kind.add(r),I(n)&&e.technology.add(n),I(i.description)&&!e.description.some(et(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=z(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,W(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=I(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)}};W(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=De(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:N(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=We(Me(),N(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(V(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=$e(c,V),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,...ze(e,[`kind`,`tags`])})&&(i[a]={...e,...l,...r,...s,label:n??e.label,isCustomized:!0})})}return i}function findRedundantConnections(e){return z([...e],it,W((e,t,n,r)=>{let i=wt(r,t),a=M(...i.map(qe(`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 z(v(t,r),d(),Ce,L(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 isBidirectionalRelation(e){return e.isBidirectional||e.tail===`normal`}function findConnectionsFrom(e,t){return Z(e,t).flatMap(t=>{if(t.source===e)return[t];let n=new Set([...t.relations].filter(isBidirectionalRelation));return n.size>0?[t.update(n)]:[]})}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(R(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=U(r,e=>e.source.id===a&&e.target.id===o);if(t&&r.length>1){let[n,s]=z(r,B(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(U(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=z(a.relationships(),D(c),d(),N(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=resolveElements(a,e),n=z(t,F(e=>z(e,Ge(Re(r===!0),{onTrue:e=>M(e.allIncoming,e.allOutgoing),onFalse:e=>e.allOutgoing}),D(c),s(),d(),B(t=>t.source===e),([t,n])=>Xe(z(t,U(t=>!isAncestorOrDescendantOf(e,t.target)),N(t=>new J(e,t.target,new Set([t])))),z(n,U(t=>!isAncestorOrDescendantOf(e,t.source)),N(t=>new J(t.source,e,new Set([t]))))))));return o.addConnections(n),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=resolveElements(a,t),n=z(e,F(e=>z(e,Ge(Re(r===!0),{onTrue:e=>M(e.allIncoming,e.allOutgoing),onFalse:e=>e.allIncoming}),D(c),d(),B(t=>t.target===e),([t,n])=>Xe(z(n,U(t=>!isAncestorOrDescendantOf(e,t.target)),N(t=>new J(e,t.target,new Set([t])))),z(t,U(t=>!isAncestorOrDescendantOf(e,t.source)),N(t=>new J(t.source,e,new Set([t]))))))));return o.addConnections(n),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=z(a.connections,F(We(qe(`relations`),D(s),d())),k());break;case!c&&l:{let t=resolveElements(i,e);u=z(t,F(e=>z(e,Ge(Re(r===!0),{onTrue:e=>M(e.allIncoming,e.allOutgoing),onFalse:e=>e.allOutgoing}),D(s),d())),k());break}case c&&!l:{let e=resolveElements(i,t);u=z(e,F(e=>z(e,Ge(Re(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(!R(i,1))return[[],[]];if(x.isModelRef(e)){let t=r.element(O.flatten(e.ref)),a=d(t.ascendingSiblings());return[includeDescendantsFromMemory(i,n),includeDescendantsFromMemory(a,n)]}return[i,z(i,N(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(...findConnectionsFrom(e,[t]))}else{let e=resolveAndIncludeFromMemory(o,{memory:r,model:n}),t=[...r.elements];t.length===0&&t.push(...Ve(e.flatMap(e=>[...e.ascendingSiblings()])));let i=incomingConnectionPredicate(n,o);for(let n of t)s.push(...findConnectionsFrom(n,e).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(...incomingRelations(n))}else{let n=resolveElements(t,e);a.push(...n.flatMap(incomingRelations))}return r.excludeRelations(new Set(a.filter(i))),r}};function incomingConnectionPredicate(e,t){let isIncomingOrBidirectional=e=>{let t=q.isIncoming(e),n=q.isOutgoing(e);return e=>t(e)||n(e)&&[...e.relations].some(isBidirectionalRelation)};switch(!0){case x.isElementKindExpr(t):case x.isElementTagExpr(t):{let e=elementExprToPredicate(t);return t=>e(t.target)||e(t.source)&&[...t.relations].some(isBidirectionalRelation)}case x.isModelRef(t)&&t.selector===`children`:{let n=O.flatten(t.ref);return H([...e.children(n)].map(e=>isIncomingOrBidirectional(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=>isIncomingOrBidirectional(e.id))])}case x.isModelRef(t)&&t.selector===`expanded`:{let e=O.flatten(t.ref);return H([isIncomingOrBidirectional(e),q.isInside(e)])}case x.isModelRef(t):return isIncomingOrBidirectional(O.flatten(t.ref));default:m(t)}}function incomingRelations(e){return[...e.allIncoming,...[...e.allOutgoing].filter(isBidirectionalRelation)]}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=Ve(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(...Ve(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]=B(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(U([...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=>U(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(U([...e],r)),filterWhere=e=>z(e,N(e=>new J(e.source,e.target,filterRelations(e.relations))),U(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=De(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:N(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=H(r.targets.map(elementExprToPredicate)),i=z(t,U(e),N(e=>e.id));R(i,1)&&n.push({type:r.rank,nodes:i})}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(z(i([...e.explicitFirstSeenIn.keys()]),L(r=>{if(!isAncestorAssigned(r)){let i=E(e.explicitFirstSeenIn.get(r));n.set(r,i),t.get(i).add(r)}})),z(i([...e.lastSeenIn.keys()]),U(e=>!n.has(e)),L(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=Qe(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};
|
|
@@ -68,6 +68,7 @@ declare class RelationshipModel<A extends Any = Any> implements AnyRelationshipM
|
|
|
68
68
|
get line(): RelationshipLineType;
|
|
69
69
|
get head(): RelationshipArrowType;
|
|
70
70
|
get tail(): RelationshipArrowType | undefined;
|
|
71
|
+
get isBidirectional(): boolean;
|
|
71
72
|
/**
|
|
72
73
|
* Iterate over all views that include this relationship.
|
|
73
74
|
*/
|
|
@@ -413,6 +414,10 @@ declare class LikeC4ViewModel<A extends Any = Any, V extends ProcessedView<A> =
|
|
|
413
414
|
* The title of the view
|
|
414
415
|
*/
|
|
415
416
|
readonly title: string | null;
|
|
417
|
+
/**
|
|
418
|
+
* Optional per-view navigation order.
|
|
419
|
+
*/
|
|
420
|
+
readonly order: number | undefined;
|
|
416
421
|
/**
|
|
417
422
|
* View folder this view belongs to.
|
|
418
423
|
* If view is top-level, this is the root folder.
|
package/dist/chunks/_types.d.mts
CHANGED
|
@@ -124,7 +124,7 @@ type AddDeploymentRelation<Props = unknown> =
|
|
|
124
124
|
<T extends AnyTypes, Source extends string & T['DeploymentFqn'], Target extends string & T['DeploymentFqn']>(source: Source, target: Target, titleOrProps?: string | Props) => (builder: DeploymentModelBuilder<T>) => DeploymentModelBuilder<T>;
|
|
125
125
|
type DeloymentModelHelpers<T extends AnyTypes> = AddDeploymentNodeHelpers<T> & {
|
|
126
126
|
instanceOf: AddDeployedInstance<T['NewDeploymentNodeProps']>;
|
|
127
|
-
rel: AddDeploymentRelation<T['
|
|
127
|
+
rel: AddDeploymentRelation<T['NewDeploymentRelationshipProps']>;
|
|
128
128
|
deployment: typeof deployment;
|
|
129
129
|
};
|
|
130
130
|
type DeloymentModelBuildFunction<A extends AnyTypes, B extends AnyTypes> = (helpers: DeloymentModelHelpers<A> & {
|
|
@@ -950,6 +950,10 @@ type NewDeploymentNodeProps<Tag, Metadata> = {
|
|
|
950
950
|
type NewViewProps<Tag> = {
|
|
951
951
|
title?: string;
|
|
952
952
|
description?: MarkdownOrString | string;
|
|
953
|
+
/**
|
|
954
|
+
* Optional per-view navigation order.
|
|
955
|
+
*/
|
|
956
|
+
order?: number;
|
|
953
957
|
tags?: [Tag, ...Tag[]];
|
|
954
958
|
links?: Array<string | {
|
|
955
959
|
title?: string;
|
|
@@ -964,6 +968,7 @@ type NewRelationProps<Kind, Tag, Metadata> = {
|
|
|
964
968
|
notes?: MarkdownOrString | string;
|
|
965
969
|
tags?: [Tag, ...Tag[]];
|
|
966
970
|
metadata?: Metadata;
|
|
971
|
+
isBidirectional?: boolean;
|
|
967
972
|
head?: RelationshipArrowType;
|
|
968
973
|
tail?: RelationshipArrowType;
|
|
969
974
|
line?: RelationshipLineType;
|
|
@@ -973,6 +978,7 @@ type NewRelationProps<Kind, Tag, Metadata> = {
|
|
|
973
978
|
url: string;
|
|
974
979
|
}>;
|
|
975
980
|
};
|
|
981
|
+
type NewDeploymentRelationProps<Kind, Tag, Metadata> = Omit<NewRelationProps<Kind, Tag, Metadata>, 'isBidirectional'>;
|
|
976
982
|
type Invalid<Message extends string> = Tagged<Message, 'Error'>;
|
|
977
983
|
type Warn<Id, Existing> = IsLiteral<Existing> extends true ? Id extends Existing ? Invalid<'Already exists'> : Id : Id;
|
|
978
984
|
type ValidId<Id> = Id extends `${number}${string}` ? Invalid<'Id must not start with number'> : IsLiteral<Id> extends true ? Id : Invalid<'Id must be a literal'>;
|
|
@@ -991,6 +997,7 @@ interface Types<ElementKind extends string, Fqn extends string, ViewId extends s
|
|
|
991
997
|
Tags: IfNever<Tag, never, [Tag, ...Tag[]]>;
|
|
992
998
|
NewElementProps: NewElementProps<Tag, Metadata<MetadataKey>>;
|
|
993
999
|
NewRelationshipProps: NewRelationProps<RelationshipKind, Tag, Metadata<MetadataKey>>;
|
|
1000
|
+
NewDeploymentRelationshipProps: NewDeploymentRelationProps<RelationshipKind, Tag, Metadata<MetadataKey>>;
|
|
994
1001
|
NewViewProps: NewViewProps<Tag>;
|
|
995
1002
|
NewDeploymentNodeProps: NewDeploymentNodeProps<Tag, Metadata<MetadataKey>>;
|
|
996
1003
|
}
|
|
@@ -1031,4 +1038,4 @@ declare namespace Types {
|
|
|
1031
1038
|
type DeploymentRules<B> = DeploymentRulesBuilderOp<From<B>>;
|
|
1032
1039
|
}
|
|
1033
1040
|
//#endregion
|
|
1034
|
-
export {
|
|
1041
|
+
export { AddDeployedInstance as $, ElementViewRulesBuilder as A, $include as B, mkViewBuilder as C, AddViewOfHelper as D, AddViewHelper as E, AddDeploymentViewRules as F, AddElementHelpers as G, $style as H, DeploymentRulesBuilderOp as I, ModelHelpers as J, ModelBuilder as K, DeploymentViewBuilder as L, $deploymentExpr as M, $includeAncestors as N, AddViewRules as O, AddDeploymentViewHelper as P, AddElement as Q, $autoLayout as R, ViewsHelpers as S, $expr as T, LikeC4ViewBuilder as U, $rules as V, ViewPredicate as W, RelationshipHelper as X, NestedRelationshipHelper as Y, model as Z, Builder as _, BuilderSpecification as a, deployment as at, ViewsBuilder as b, NewDeploymentNodeProps as c, NewRelationProps as d, AddDeploymentNodeHelpers as et, NewViewProps as f, Warn as g, ValidId as h, BuilderProjectSpecification as i, DeploymentModelBuilder as it, TypedAddViewOfHelper as j, ElementViewBuilder as k, NewDeploymentRelationProps as l, TypesNested as m, AnyTypesNested as n, DeloymentModelBuildFunction as nt, Invalid as o, AddDeploymentNode as ot, Types as p, ModelBuilderFunction as q, BuilderMode as r, DeloymentModelHelpers as rt, Metadata as s, AnyTypes as t, AddDeploymentRelation as tt, NewElementProps as u, assertSpecificationCompatible as v, views as w, ViewsBuilderFunction as x, BuilderMethods as y, $exclude as z };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime.mjs";import{U as e,jn as t,wn as n}from"./types.mjs";import{
|
|
1
|
+
import"./rolldown-runtime.mjs";import{U as e,jn as t,wn as n}from"./types.mjs";import{C as r,J as i,T as a,Z as o,c as s,f as c,p as l,tt as u}from"./libs/remeda.mjs";function assignTagColors(d){let f=[],p=[];for(let[e,t]of i(d))a(t.color)?f.push({tag:e,spec:{color:t.color}}):p.push(e);return o(p,s(n),r((n,r)=>({tag:n,spec:{color:t(e[r%e.length])}})),u(f),s((e,t)=>n(e.tag,t.tag)),c(l(`tag`),l(`spec`)))}export{assignTagColors as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime.mjs";import{An as e,Rt as t,St as n,Zt as r,b as i,nn as a,x as o}from"./types.mjs";import{
|
|
1
|
+
import"./rolldown-runtime.mjs";import{An as e,Rt as t,St as n,Zt as r,b as i,nn as a,x as o}from"./types.mjs";import{B as s,C as c,H as l,J as u,O as d,T as f,X as p,Z as m,g as h,i as g,k as _,m as v,p as y,q as b,s as x,x as S,z as C}from"./libs/remeda.mjs";import{castDraft as w,produce as T}from"immer";function buildElementNotations(e){return m(e,b(e=>!!e.notation),s(y(`notation`)),S(v(s(y(`shape`)),S(v(s(y(`color`)),S(v(c(y(`kind`)),g())),u(),c(([e,t])=>({kinds:t,color:e})))),u(),l(([e,t])=>t.map(({color:t,kinds:n})=>({shape:e,color:t,kinds:n}))))),u(),l(([e,t])=>t.map(({shape:t,color:n,kinds:r})=>({title:e,shape:t,color:n,kinds:r}))),x(y(`shape`),y(`title`),[e=>e.kinds.length,`desc`]))}const changed=(e,t)=>e===t||_(e)&&_(t)?!1:!C(e,t);function autoApplyMetaAndStyles(e,t){e.color=t.color,e.kind=t.kind,e.navigateTo=t.navigateTo??null,e.links=t.links?[...t.links]:null,e.tags=[...t.tags],_(t.style.border)?delete e.style.border:e.style.border=t.style.border,d(t.style.opacity)?e.style.opacity=t.style.opacity:delete e.style.opacity,_(t.style.multiple)?delete e.style.multiple:e.style.multiple=t.style.multiple}function autoApplyIcon(e,t,n){if(changed(t.icon??`none`,e.icon??`none`)){let r=f(e.icon)&&e.icon!==`none`;switch(!0){case r&&f(t.icon)&&t.icon!==`none`:return e.icon=t.icon,!0;case r&&(_(t.icon)||t.icon===`none`):return e.icon=`none`,!0;case!r&&f(t.icon)&&t.icon!==`none`:return n?(e.icon=t.icon,!0):!1}}return!0}function autoApplyIconStyles(e,t,n){let r=!0;return changed(e.style.iconColor,t.style.iconColor)&&(_(t.style.iconColor)?delete e.style.iconColor:e.style.iconColor=t.style.iconColor),changed(e.style.iconSize,t.style.iconSize)&&(n?_(t.style.iconSize)?delete e.style.iconSize:e.style.iconSize=t.style.iconSize:r=!1),changed(e.style.iconPosition,t.style.iconPosition)&&(n?_(t.style.iconPosition)?delete e.style.iconPosition:e.style.iconPosition=t.style.iconPosition:r=!1),r}function patchMarkdownOrString(e,t){return e?`md`in t?(e.md=t.md,delete e.txt,e):(`txt`in t&&(e.txt=t.txt,delete e.md),e):t}function autoApplyLabelsToLeaf(e,t,n){let r=!0;return changed(e.title,t.title)&&(n?e.title=t.title:r=!1),changed(e.description,t.description)&&(_(t.description)?delete e.description:n?e.description=patchMarkdownOrString(e.description,t.description):r=!1),changed(e.technology,t.technology)&&(_(t.technology)?delete e.technology:n?e.technology=t.technology:r=!1),r}function autoApplyLabelsToCompound(e,t,n){return e.title=t.title,_(t.description)?delete e.description:e.description=patchMarkdownOrString(e.description,t.description),_(t.technology)?delete e.technology:e.technology=t.technology,!0}function applyManualLayout(t,r){e(t.id===r.id,`applyManualLayout: view ids do not match`),e(t._stage===`layouted`,`applyManualLayout: expected layouted view`),e(r._stage===`layouted`,`applyManualLayout: expected layouted snapshot`),e(t._layout!==`manual`,`applyManualLayout: expected auto-layouted view`);let a=new Set;t._type!==r._type&&a.add(`type-changed`);let s=applyNodesManualLayout(r.nodes,t.nodes,a),c=applyEdgesManualLayout(r.edges,t.edges,a),l=buildElementNotations(s);return T(r,e=>{e.title=t.title??r.title,e.description=t.description??r.description,e.tags=t.tags?[...t.tags]:null,e.links=t.links?[...t.links]:null,e.sourcePath=t.sourcePath,e[n]=`manual`,l&&l.length>0?e.notation={nodes:l}:delete e.notation,e.nodes=w(s),e.edges=w(c),i(t)&&e._type===`dynamic`&&(e.variant=t.variant),o(t)&&e._type===`element`&&(t.viewOf?e.viewOf=t.viewOf:delete e.viewOf,t.extends?e.extends=t.extends:delete e.extends);let u=[...a];p(u,1)?e.drifts=u:(e.hash=t.hash,delete e.drifts)})}function applyNodesManualLayout(e,n,r){let i=new Map(n.map(e=>[e.id,e])),a=e.map(e=>{let n=i.get(e.id);return n?(i.delete(n.id),T(e,i=>{autoApplyMetaAndStyles(i,n);let a=new Set,o=e.children.length>0,s=n.children.length>0;(changed(i.modelRef,n.modelRef)||changed(i.deploymentRef,n.deploymentRef))&&a.add(`modelRef-changed`),s&&!o&&a.add(`became-compound`),!s&&o&&a.add(`became-leaf`),changed(i.parent,n.parent)&&a.add(`parent-changed`);let c=i.width+5>=n.width&&i.height+5>=n.height;changed(i.shape,n.shape)&&(c?i.shape=n.shape:a.add(`shape-changed`)),autoApplyIconStyles(i,n,c)||a.add(`label-changed`),autoApplyIcon(i,n,c&&s===o)||a.add(`label-changed`),(o?autoApplyLabelsToCompound:autoApplyLabelsToLeaf)(i,n,c)||a.add(`label-changed`),changed(i.notes,n.notes)&&(_(n.notes)?delete i.notes:i.notes=patchMarkdownOrString(i.notes,n.notes)),changed(e.notation,n.notation)&&(i.notation=n.notation??null),o&&s&&t(new Set(e.children),new Set(n.children)).size>0&&a.add(`children-changed`);let l=[...a];p(l,1)?(r.add(`nodes-drift`),i.drifts=l):delete i.drifts})):(r.add(`nodes-removed`),{...e,drifts:[`removed`]})});return i.size>0&&r.add(`nodes-added`),a}function applyEdgesManualLayout(t,n,i){let o=new Map(n.map(e=>[e.id,e])),s=t.map(t=>{let n=o.get(t.id)??m(o.values(),a(e=>e.source===t.source&&e.target===t.target),r());return n&&o.delete(n.id),T(t,r=>{if(!n){r.drifts=[`removed`],i.add(`edges-removed`);return}let a=new Set,o=t.id===n.id;switch(!0){case o&&t.source==n.source&&t.target==n.target:changed(r.dir??`forward`,n.dir??`forward`)&&a.add(`direction-changed`);break;case o&&t.source==n.target&&t.target==n.source:t.source!==t.target&&a.add(`direction-changed`);break;case o:t.source!=n.source&&a.add(`source-changed`),t.target!=n.target&&a.add(`target-changed`);break;default:e(t.id!=n.id,`Unexpected case in edge drift detection, ids should not match`),e(t.source==n.source,`Unexpected case in edge drift detection, sources should match`),e(t.target==n.target,`Unexpected case in edge drift detection, targets should match`),changed(r.dir??`forward`,n.dir??`forward`)&&a.add(`direction-changed`)}r.color=n.color,r.line=n.line,r.navigateTo=n.navigateTo??null,r.tags=n.tags?[...n.tags]:null,changed(t.notes,n.notes)&&(_(t.notes)!==_(n.notes)&&a.add(`notes-changed`),r.notes=n.notes??t.notes),n.astPath?r.astPath=n.astPath:delete r.astPath;let s=h(t,[`label`,`description`,`technology`,`labelBBox`]),c=h(n,[`label`,`description`,`technology`,`labelBBox`]);if(changed(s,c))switch(!0){case n.labelBBox&&!t.labelBBox:a.add(`label-added`);break;case t.labelBBox&&!n.labelBBox:a.add(`label-removed`);break;case!!t.labelBBox&&!!n.labelBBox:n.labelBBox.width*n.labelBBox.height>(t.labelBBox.width+5)*(t.labelBBox.height+5)&&(r.labelBBox.width=Math.round(n.labelBBox.width),r.labelBBox.height=Math.round(n.labelBBox.height)),changed(t.label,n.label)&&(_(n.label)!==_(t.label)&&a.add(`label-changed`),r.label=n.label??t.label),changed(t.description,n.description)&&(_(n.description)!==_(t.description)&&a.add(`label-changed`),n.description&&(r.description=patchMarkdownOrString(t.description,n.description))),changed(t.technology,n.technology)&&(_(n.technology)!==_(t.technology)&&a.add(`label-changed`),r.technology=n.technology??t.technology??null);break;default:e(!t.labelBBox,`Unexpected case in edge labelBBox drift detection`),e(!n.labelBBox,`Unexpected case in next labelBBox drift detection`)}let l=[...a];p(l,1)?(i.add(`edges-drift`),r.drifts=l):delete r.drifts})});return o.size>0&&i.add(`edges-added`),s}function calcDriftsFromSnapshot(e,t){let{drifts:i,...o}=applyManualLayout(e,t);if(!i||i.length===0)return T(e,e=>{delete e.drifts,e[n]=`auto`});let s=new Set;i.includes(`type-changed`)&&s.add(`type-changed`);let c=new Map(o.nodes.map(e=>[e.id,e])),l=new Map(o.edges.map(e=>[e.id,e])),u=e.nodes.map(e=>{let t=c.get(e.id);return t&&c.delete(t.id),T(e,e=>{if(!t){s.add(`nodes-added`),e.drifts=[`added`];return}t.drifts?(s.add(`nodes-drift`),e.drifts=[...t.drifts]):delete e.drifts})});c.size>0&&s.add(`nodes-removed`);let d=e.edges.map(e=>{let t=l.get(e.id)??m(l.values(),a(t=>t.source===e.source&&t.target===e.target),r());return t&&l.delete(t.id),T(e,e=>{if(!t){s.add(`edges-added`),e.drifts=[`added`];return}t.drifts?(s.add(`edges-drift`),e.drifts=[...t.drifts]):delete e.drifts})});l.size>0&&s.add(`edges-removed`);let f=[...s];return T(e,e=>{p(f,1)?e.drifts=f:delete e.drifts,e.nodes=w(u),e.edges=w(d),e[n]=`auto`})}export{applyManualLayout as n,buildElementNotations as r,calcDriftsFromSnapshot as t};
|