diagrams-js
Version:
A TypeScript port of the diagrams Python library for drawing cloud system architecture diagrams as code
2 lines (1 loc) • 3.73 kB
JavaScript
import{Node as b}from "../../index.js";function d(e={}){let s=e.node,n=e.forward??!1,r=e.reverse??!1,o={},i=e.className,c=e.dataAttrs?{...e.dataAttrs}:{},f="",p="";e.label&&(o.label=e.label),e.color&&(o.color=e.color),e.style&&(o.style=e.style);for(let[t,l]of Object.entries(e))t!=="node"&&t!=="forward"&&t!=="reverse"&&t!=="label"&&t!=="color"&&t!=="style"&&t!=="className"&&t!=="dataAttrs"&&(o[t]=String(l));let u={get node(){return s},set node(t){s=t},get forward(){return n},set forward(t){n=t},get reverse(){return r},set reverse(t){r=t},get attrs(){let t;return n&&r?t="both":n?t="forward":r?t="back":t="none",{...o,dir:t}},to(t){return n=!0,m(t)?(Object.assign(o,t.attrs),u):s?(s["~connect"](t,u),t):(s=t,t)},get edgeAttrs(){return o},set edgeAttrs(t){for(let l of Object.keys(o))delete o[l];Object.assign(o,t)},get className(){return i},get dataAttrs(){return{...c}},get"~fromNodeId"(){return f},set"~fromNodeId"(t){f=t},get"~toNodeId"(){return p},set"~toNodeId"(t){p=t},getElement(t){let l;return t===void 0?l=typeof document<"u"?document:null:typeof t=="string"?l=new DOMParser().parseFromString(t,"image/svg+xml").documentElement:l=t,l?l.querySelector(`[data-edge-from="${f}"][data-edge-to="${p}"]`):null},from(t){return r=!0,m(t)?(Object.assign(o,t.attrs),u):s?(t["~connect"](s,u),t):(s=t,t)}};return u}function m(e){return typeof e=="object"&&e!==null&&"attrs"in e&&"forward"in e&&"reverse"in e}function E(e){return d({label:e})}function N(e){return d({color:e})}function y(e){return d({style:e})}d.label=E;d.color=N;d.style=y;function g(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function R(e){let s=e.split(/\s+/),n=[],r="";for(let o of s){let i=r?`${r} ${o}`:o;if(i.length<=40)r=i;else if(r&&n.push(g(r)),r=o,n.length>=3)return n[2]=n[2].substring(0,Math.max(0,37-r.length))+"...",n.slice(0,3).join("<br/>")}for(r&&n.push(g(r));n.length<3;)n.push("");return n.slice(0,3).join("<br/>")}function h(e){let s=e.split(/\s+/),n=[],r="";for(let o of s){let i=r?`${r} ${o}`:o;if(i.length<=24)r=i;else if(r&&n.push(g(r)),r=o,n.length>=3)return n[2]=n[2].substring(0,Math.max(0,21-r.length))+"...",`<<font point-size="10">${n.slice(0,3).join("<br/>")}</font>>`}return r&&n.push(g(r)),`<<font point-size="10">${n.join("<br/>")}</font>>`}function T(e,s,n){let r=`<TR><TD ALIGN="CENTER" VALIGN="MIDDLE"><FONT POINT-SIZE="12"><B>${g(e)}</B></FONT></TD></TR>`;return s&&(r+=`<TR><TD ALIGN="CENTER" VALIGN="MIDDLE"><FONT POINT-SIZE="9">[${g(s)}]</FONT></TD></TR>`),n&&(r+=`<TR><TD ALIGN="CENTER" VALIGN="MIDDLE"><FONT POINT-SIZE="10">${R(n)}</FONT></TD></TR>`),`<<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="2" CELLPADDING="2" FIXEDSIZE="FALSE" WIDTH="0" HEIGHT="0">${r}</TABLE>>`}function a(e,s,n,r={}){let o=T(e,s,n),i=!!n,c={labelloc:"c",shape:"rect",width:i?"2.6":"2",height:i?"1.6":"1",fixedsize:"true",style:"filled",fillcolor:"dodgerblue3",fontcolor:"white",...r};return b(o,c)}function x(e,s,n=!1,r={}){return a(e,n?"External Person":"Person",s,{fillcolor:n?"gray60":"dodgerblue4",style:"rounded,filled",...r})}function k(e,s,n,r={}){let o=s?`Container: ${s}`:"Container";return a(e,o,n,r)}function S(e,s,n,r={}){let o=s?`Database: ${s}`:"Database";return a(e,o,n,{shape:"cylinder",labelloc:"b",...r})}function $(e,s,n=!1,r={}){return a(e,n?"External System":"System",s,{fillcolor:n?"gray60":"dodgerblue4",...r})}function v(e,s={}){return d({style:"dashed",color:"gray60",...e&&{label:h(e)},...s})}function P(e,s,n={}){let r=s.cluster(e);return Object.assign(r.graphAttr,{bgcolor:"white",margin:"16",style:"dashed",labeljust:"l",...n}),r}export{k as Container,S as Database,x as Person,v as Relationship,$ as System,P as SystemBoundary};