@likec4/core 1.58.0 → 1.59.0

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