From 2055f89bf7c2f523b620244c250e79df499cb303 Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Sat, 17 Dec 2022 11:30:41 +0000 Subject: [PATCH 001/595] feat(flowchart): add classDef group definition enable to add styles to many classDef in a single statement --- demos/flowchart.html | 28 +++++++++++++++++ .../mermaid/src/diagrams/flowchart/flowDb.js | 30 ++++++++++--------- .../src/diagrams/flowchart/flowDb.spec.js | 23 ++++++++++++++ 3 files changed, 67 insertions(+), 14 deletions(-) diff --git a/demos/flowchart.html b/demos/flowchart.html index 7251e586e5..0aefb139ec 100644 --- a/demos/flowchart.html +++ b/demos/flowchart.html @@ -1505,6 +1505,34 @@

flowchart


+
+    graph TD
+      A([Start]) ==> B[Step 1]
+      B ==> C{Flow 1}
+      C -- Choice 1.1 --> D[Step 2.1]
+      C -- Choice 1.3 --> I[Step 2.3]
+      C == Choice 1.2 ==> E[Step 2.2]
+      D --> F{Flow 2}
+      E ==> F{Flow 2}
+      F{Flow 2} == Choice 2.1 ==> H[Feedback node]
+      H[Feedback node] ==> B[Step 1]
+      F{Flow 2} == Choice 2.2 ==> G((Finish))
+      
+      linkStyle 0,1,4,6,7,8,9 stroke:gold, stroke-width:4px
+
+      classDef active_node fill:#0CF,stroke:#09F,stroke-width:6px
+      classDef unactive_node fill:#e0e0e0,stroke:#bdbdbd,stroke-width:3px      
+      classDef bugged_node fill:#F88,stroke:#F22,stroke-width:3px
+      classDef start_node,finish_node fill:#3B1,stroke:#391,stroke-width:8px
+
+      class A start_node;
+      class B,C,E,F,H active_node;
+      class D unactive_node;
+      class G finish_node;
+      class I bugged_node
+    
+
+

Anchor for "link-clicked" test

diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.js b/packages/mermaid/src/diagrams/flowchart/flowDb.js index 9181ab9cca..7e48a4da89 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.js +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.js @@ -202,21 +202,23 @@ export const updateLink = function (positions, style) { }); }; -export const addClass = function (id, style) { - if (classes[id] === undefined) { - classes[id] = { id: id, styles: [], textStyles: [] }; - } +export const addClass = function (ids, style) { + ids.split(',').forEach(function (_id) { + if (classes[_id] === undefined) { + classes[_id] = { id: _id, styles: [], textStyles: [] }; + } - if (style !== undefined && style !== null) { - style.forEach(function (s) { - if (s.match('color')) { - const newStyle1 = s.replace('fill', 'bgFill'); - const newStyle2 = newStyle1.replace('color', 'fill'); - classes[id].textStyles.push(newStyle2); - } - classes[id].styles.push(s); - }); - } + if (style !== undefined && style !== null) { + style.forEach(function (s) { + if (s.match('color')) { + const newStyle1 = s.replace('fill', 'bgFill'); + const newStyle2 = newStyle1.replace('color', 'fill'); + classes[_id].textStyles.push(newStyle2); + } + classes[_id].styles.push(s); + }); + } + }); }; /** diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.spec.js b/packages/mermaid/src/diagrams/flowchart/flowDb.spec.js index c1aa640fcd..d2d382b52d 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.spec.js @@ -41,3 +41,26 @@ describe('flow db subgraphs', () => { }); }); }); + +describe('flow db addClass', () => { + beforeEach(() => { + flowDb.clear(); + }); + it('should detect many classes', () => { + flowDb.addClass('a,b', ['stroke-width: 8px']); + const classes = flowDb.getClasses(); + + expect(classes.hasOwnProperty('a')).toBe(true); + expect(classes.hasOwnProperty('b')).toBe(true); + expect(classes['a']['styles']).toEqual(['stroke-width: 8px']); + expect(classes['b']['styles']).toEqual(['stroke-width: 8px']); + }); + + it('should detect single class', () => { + flowDb.addClass('a', ['stroke-width: 8px']); + const classes = flowDb.getClasses(); + + expect(classes.hasOwnProperty('a')).toBe(true); + expect(classes['a']['styles']).toEqual(['stroke-width: 8px']); + }); +}); From c0391c8a152018aae5da69eacb5c5003c4baed8b Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Thu, 22 Dec 2022 13:47:53 +0100 Subject: [PATCH 002/595] docs(flowchart): add docs on multiple classDef/linkStyle definition --- docs/book/class.png | Bin 34954 -> 0 bytes docs/book/cover.jpg | Bin 17803 -> 0 bytes docs/book/er.png | Bin 13419 -> 0 bytes docs/book/flowchart.png | Bin 14794 -> 0 bytes docs/book/gantt.png | Bin 43239 -> 0 bytes docs/book/index.html | 340 ------------------ docs/book/sequence-diagram.png | Bin 19823 -> 0 bytes docs/book/state.png | Bin 15574 -> 0 bytes docs/syntax/flowchart.md | 10 +- packages/mermaid/src/docs/syntax/flowchart.md | 14 +- 10 files changed, 22 insertions(+), 342 deletions(-) delete mode 100644 docs/book/class.png delete mode 100644 docs/book/cover.jpg delete mode 100644 docs/book/er.png delete mode 100644 docs/book/flowchart.png delete mode 100644 docs/book/gantt.png delete mode 100644 docs/book/index.html delete mode 100644 docs/book/sequence-diagram.png delete mode 100644 docs/book/state.png diff --git a/docs/book/class.png b/docs/book/class.png deleted file mode 100644 index 5b2f663d86f967ca5d96c5fffca73b6e8efb3ad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34954 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

y{(-`u^dIjWHRrLfhUK$DDj6 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 QcZx_!PE8grZTjKA0f;sM5dZ)H diff --git a/docs/book/flowchart.png b/docs/book/flowchart.png deleted file mode 100644 index 714626b70e398905987bec0c460308fa7a84471f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14794 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 diff --git a/docs/book/gantt.png b/docs/book/gantt.png deleted file mode 100644 index 95c8d08a14bc4306426530921fd538b404dfc1da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43239 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 - - - - - - The Official Guide to Mermaid.js - - - - - - - - - - - - - - - - -

-
- - - - - - - - - - - - -
-
-
-

- Get up to speed with using Mermaid diagrams along with real-world examples and expert tips - from the authors to facilitate a seamless development workflow -

-
-
-
-
-
-

- Flowcharts is a diagram type that visualizes a process or an algorithm by showing the - steps in order, as well as the different paths the execution can take. -

-
-
- -
-
-
-
- -
-
-
-

- Sequence diagrams lets you model and visualize interactions between different actors - or objects in a system, as well as the order of those interactions -

-
-
-
-
-
-

- A class diagram is a graphical representation that is used to visualize and describe - an object-oriented system. -

-
-
- -
-
-
-
- -
-
-
-

- An entity-relationship diagram is a graphical representation that is used to - visualize the different types of entities that exist within a system. -

-
-
-
-
-
-

- Use State diagrams to model and document state machines, an abstract way of - representing a system or an algorithm. -

-
-
- -
-
-
-
- -
-
-
-

- A Gantt chart is a graphical representation that is used to visualize and describe - tasks (events or activities) over time. -

-
-
-
-
-

- These were a few of the diagrams supported by Mermaid. -

-
- -
-
-

- Book description -

-
-

- Mermaid lets you represent diagrams using text and code which simplifies the maintenance - of complex diagrams. This is a great option for developers as they’re more familiar with - code, rather than special tools for generating diagrams. Besides, diagrams in code - simplify maintenance and ensure that the code is supported by version control systems. - In some cases, Mermaid makes refactoring support for name changes possible while also - enabling team collaboration for review distribution and updates. -

-

- Developers working with any system will be able to put their knowledge to work with this - practical guide to using Mermaid for documentation. The book is also a great reference - for looking up the syntax for specific diagrams when authoring diagrams. -

-

- You’ll start by getting up to speed with the importance of accurate and visual - documentation. Next, the book introduces Mermaid and establishes how to use it to create - effective documentation. By using different tools, editors, or a custom documentation - platform, you’ll also learn how to use Mermaid syntax for various diagrams. Later - chapters cover advanced configuration settings and theme options to manipulate your - diagram as per your needs. -

-

- By the end of this Mermaid book, you’ll have become well-versed with the different types - of Mermaid diagrams and how they can be used in your workflows. -

-
-
-
-
-
-

- What you will learn -

-
-
-
-
-
-
-
    -
  • - Understand good and bad documentation, and the art of effective documentation -
  • -
  • - Become well-versed with maintaining complex diagrams with ease -
  • -
  • - Learn how to set up a custom documentation system -
  • -
  • - Learn how to implement Mermaid diagrams in your workflows -
  • -
  • - Understand how to set up themes for a Mermaid diagram for an entire site -
  • -
  • - Discover how to draw different types of diagrams such as flowcharts, class - diagrams, Gantt charts, and more -
  • -
-
-
-
-
-
- - - - - - - - - - - - - - - - - -
-

- Purchase The Official Guide to Mermaid.js -

-
-
-
-

-

Written by Knut Sveidqvist and Ashish Jain.

-

- Knut is the creator of Mermaid and both authors are active core team members of the - Mermaid open-source project. -

-

- - - -
- - - diff --git a/docs/book/sequence-diagram.png b/docs/book/sequence-diagram.png deleted file mode 100644 index 8c51ac1c5d6601960112784757061943d9d6dc8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19823 zcmdpe2T)T{+hza(=_1mlD~NRI9YsZ?DjlRF#n5Z$0R%*vfPi!mr1vT$bO^mjuc7yn zgx*3n?tc5%+1Y<~|DD<0nat$o+~nlkd(S=Z^FHtM+z3r|B{E_LVgLX@ru^pRdjJ3* z3IO1C+{HEk1UufA0RU=Z$}gX5gXRtvz5OO8n=z>Al$1va->BJ*X4uns-`=sJzSEA+ zr&~1z=lA?m?9g1+s%v!c6TVy4P#0NWuUk?_T{<^Ky&J~!^$TxsHDT1}$Gkz0zR3!^ z1q2R0dh}>nVU^V8C_s+6Z0T~?tL0cSeNdXqX4tPs|K-ar(M%96D?59S`U)TWDr;!N zmoFg?;Oy+=??I7YB;NdIG@9CHa%vlDQAK$fX*k0tCKg^^8y5#)toTnMSH}t6u6!(8bJ{Gs^%LL+`+s~!Rtap)WfiQL`o}n5upFq&R-BT?6^5w%kBn_p@w+^G1 zUC)V~C@BfKp|AcwZ)^e4j=Jb3yBVs3Y6|H%Il~+DbOfb1;C0HS2S#|Rawluer3{>p zyCF{{1Au3tn6#v%KT4MBZwiqCD>^OmJkZP0_rFU30AHYJ>{F<8hME_kRk93a-5nd$ zp;ouOv|Y)_X@d4;n;4N?C~nxa;sI_J?ngvAD(Dir^a#}Vq`>{U4H?-^K-@=iHBP8@%v z+LO2vD7~iCUVR)C?+UvJYU?P7WNld9Tf{kBkU8XWTjH@seira1VKFsP%R)rqXCs%= zB7@qKv#90l_Y>WcY2rM0C()~m5|Y*h2mHn$hYP|R(bp+sNVq@d1B7zh4>N{P4HzH1`{n)6m7Hrc^rdM1~DRLzWBV6kF=(9oz$7tu=erfCep?Unw8YN(eV zh^ewn;y8&~;dJa5Mw}B~mSDM&fqHqGiVHRdN?xBLhr1g>F-Av7#z56z|8AKRiMBAK z7L+N9U;n2koLG(kbY=pWD)+w*D_1y;{Tg(nr>mnE9)npgf0KtCX8545KZ&2zDF~yj zGPhd$?u9I8A8V1Rv{-o-FuU~tTxT^x*K|m~Is9=fZx_E?=7Q^DTj=-A$;8-}9&$e& z4gkJ^)Hokk24{-kh=oo04mMY=_Jc=i;5**e*hp-u3E2Ses zBqULcRAf(AKspWFwoung*MPCZVM`xpIlm3!A6L=49bu0)JIS_iw46-4`r!a8Oe3Qz z2C*AGf87P~a4iixc}g^r28DfoBPhVXwZIsJ!aFoqmVh>v0Qhg7v#AWn{vDR;4BgSh z5{_N~4otN%=VZ}~6V<`~dLeFjTX{OU2hyhhCQqD~9)HgaFDk^mlI|?YIiHZGb8-=9 zB>777Hw_rEj+4N8?V3G*=Sk>QyT3I+5Wl#i09wpA>cqPr>9w~0BZXeO0_Q7eW)v2Wuhd6|r}Zj7(d?)saPsrUL5bT2aEGcm#(iM`Em z-=rwKd%R~xdPn!0EInYUyAltK3oaKF!Dpq~U4hBV?&Ix>mj;<#d|yd?+WdTg@}WB? zlnhE{^YU!4@!Av(HbX(wj33@Uu#U~2Uj;L;CVDtW(1Pvk9(07CFcP#$qRIt0?|+)> zlDF>u3U(4|M1!jk??G4Lg2eTT7-ZU?_2;07cX|MdlRIsUlAZ16a&soyxc3a0XUM>% z*dF79{ObjvQ#~*8^TiKHN@uj8b%nFfS4NhspF)kR8ONF`DLZP?K-Z3?<&_&RImNYH zr8~3U5mCdVOxmYP**S63$r&|Fp9hFnexsLUC+Rm7k$E`3Vq5RF#T@WD5SsSrz~zi% z5=bmJ2Nwb2Mjn#1mW~%Qo_}^*?1E@Z(m>c)UW|ffe=bCS*JJT%_S6DFtRL8)gwqm^ z2{gDnbbG?^c1ADWmq|=4mZ8z_-bjmL*5g7OV35aSZ22-BKZ6^x?aD@d8}K*?&spO9 z4WPgT&l!OCH|k7zoEbvn8%@f_Mrk-c?1e?>d0XvnhvpjZX4fT)J@}7;_zZ)jg}_6X z=lUDD$YukRWsmJU123h6aL`{((Pt&;ODBXA9D;lE0cII+nDb1gw;;Vw=ON{aZ1=aF z(6T9jHg=)Wlx=S4+-Jh+Y`#jweQ?b4djE%z0O__aU3W}$P>Q>q9@Wub8G|2*^x z{-J!D@K_ZHHK?O(*(01O=J%XY9JRq+Zzow{Lg*x9?K3^!c?QUg^$HS-(_a~)`}&rS z1ujQM;}*uU{Ni^j!E$1>Qlq*K!1FV}#D{EmZSld*-Gr6rW3NTwr1uR@3@&Uus%pME z`jEA(2fdpuHN2yF%9>7Q`uW-uXK$;7J^%RLR(*Vl!=@YHY6r+9?e)@OSo9(+Wukvmt3ajUp zowNxPSG4G9z813v3Q%UXRE( zdfR|`0G@}jpxR|OWx5kIa8-RnCUy5H?zc-)v>Ajuns_m)B;%4U>KQgEEsd=tO{y80 zHsXSd+%hfTGT?Xe=Xebm3xm^ywjb2)!4*)IN;@jfjy%|_`CK+gAjl0Fl7+wgU7D*i z=i_1~ED*p#_xsrmn(VUmrVsSCo>_{tA}PKxzY55ucqRxC0GS<)xZ+f|`i}fUGG8$G z&W@KtHeOE9>DYyEnO?t?fCw#J>Bxg?CFM2n-(W7i3O4hj8#iMVBSWZuM6^T1fQ))$ zJ&B7oi%aM{4T(a}b9iYB>cf0<0;P-JS&WCp$@L1Zuh;cergL((YtE9!;BB7ue2`;v zN5$;i`kM|tznH#;?wZ0MCpN)qX%9np{;VZX9GxRr5KK7n%tcYRro)3Yx=n>ZQ zOiOaaPsH%G{QahoS!Z5xgV%l#G&fd_}C{{A2Du_94NbKA`G zQ*l#swpnwAK*b>^r$4Hu88 zIfd^%U)>pq5og7IH%@U6swW=%X5U0R1som}c5L2NO0~T3?XCSXzg+(wcu@Q#&`o5{ z%_#!kaE;H@Kvq}9O>c-YuHt)gIR z`0GHcTGdbY{3LtM7$qw|Ny07!3ZF* z9R}={MYz6Tz2eASXY%YDKgqZyLP!%p`C!mV1enS1TH#ZCE;Grr(ND4~Pl-}ZO1szC zE)s!Nq^&s=gBNqhAqjw=8tLRC`HoAF>~hnQ+*s(joQ$RRv10{qJ;>%<^x=RZ)i|my z&?1L@EXw5JfwmC=X&-@VMTNyv+JN8Wpc1x}3A+NiVsXB-)`SIvgzy3!&%KV2yeN&p z>#XZ>u8$M-64iX|2RxZ38k<{O>8r8(+{ULj>=*kdS~Z3bf1|tc=vs>i^d-^Xmv_Aw znud1ez3T zwGS{I@EMT;T70??f|xA)X4!9@2JQF+@Pqj-FLpMf8m(S{cZTW&)g z`F7DGGcc}F@9IZK_k6PO6=ul*Ji4Ul*?ScC^icyA;82o;K#+QJlEd6_?;61AVO3li z@#!P;(w+kP2XQpD*!k78jx(?%Rom8S2&|$Z$vF@FJ^8w{(L0iCiAk>OY{1^rD(wuj z;>ajB)#Baxnxt+7uE`*|*fT94Rjc~z2&Gs0@q~Iur0m&=;q^iiGDoLXpQ^+0YK3qr zEbF0VF?qAbr&9b5otd9TnKf}+eiy^Ce7i#|DHEj;wWSMTv=WXNSr*xj?Oye-cgrDb z?IC<~wQFZRo#zjW;>t))A2CJ>qMI#Q52vlA;c z#NoIEKuTj7B_u4I#x$EWmz-4(W3VKhiDh~6`1kH1GG5M-RJ3(*few6HaXZ9tRKDjV z$a%kz`HPIOHq@}Yh0s%<0daU$;&!8^VHu4>%1PAEV(8Eri+2rkn;hE9m@L_03$PSq zwiM)!lO?c>s>??v8sZKdR?j#m!iN2GFN=?>uajTyR5`a0p$@TFcwv-K@wZc->5LL+FeQ76KZv@Pbp3o8ujAMAHT65!C3Ue5KB3B+W% z>(+1>Wz7VfRCcG56g+nD&Yr5=hSFbeP6cuQNT@rn;`^~Ea8AZTr|**7?RnYmd}UmB z8EwraxMpo*e^C=EzLn>of5*MmwN2@qNzgM;XS{8C98sJxqBz!z>vW#ic0^lNwOLG= zvk_~4x%GKvXje8@sIadQmAfRqoF)ucd9QA@^n2D0Ase(2>UNzdqe)`DZlm$k-#WT` zm}h%l`#pMft167h#tV%^tl(f)qSL3EG)>DxC)Pn;wY@}t7mm&KlE6>x)wX}4oKBA~ zNUjE#i1A?ITJYc0b$M!U%6tD0O6=eU$#w(q;cW?JuX&o8-^ zbzeAUuJdf4aa0;{ikv~5`oBl3sH}91JbJ$4Hudc!QaFKrX^Y=}b}VRU&*2I`K~_%M zQa&nu9j_zM`Nqss%2N22!D{-Dd0;B&a#ycPMfim?}2He z4kE5E_g?rLx4WNmun%Du>E`&6TMq#|*qmO4iT6d%W4H3A;=QSc+p|#ul0ND<)M58p zJnB>({rQ+#pZQt3j4YlX$1q;~zJXJjTH|lRA1%q=Lf4)IIJ&pCv_F8>%t?+gccu(- z?oLJ6XYwfoAdK{Ag)!C1+$N1ByTMn?>;T^~zFpoWTPR0V=iSu2hr3i><{^%ei?ig9 z8=^^RuftO23^Mr7Fj!}BD2u*~>8+~Nh3lN7mEGQpW=Z8y4tz>Gbq<85iX5<)rEXc>j~0dMP09a;Xk zBcmc?1p~y5-uZ- z)7EQgAUp7_Y9UUW*|XeBr3TSN1(RoBaq+u-gepNMMF38oMNKb3KiMZFrB7wY;;93P z3H%m=m_E`NRT0W?)iru{>Ux)n8p{Hd{lUdjj2_KqQ9aE258kdZ#8s#H(Q) zW|bawbYq=Nn>axNbMfL#Ax{MS z##$PW=hi%0v{QZ@auRzTd-_?K8;7x!g2IT8Mx&ZV#RF8!L`=s>?i$(S6TJDWNH}IH zvBezk>+M3O9bJgfu0u}kl#@tf!1?x=K0CyE7m_qIR9dtTimd^DCqQ+`z%X+1x*@!H>#+?xri zD(X{e{Jl@PW!I$5c>N1F?-Mwl9QiTu^bbSISgS{lo$R!=HI}xSKcast=Xka=tQ$Re+Q2VzX%*)A{H38Ls6lU1v32QV&=Ecxkl~pOXE%fA6i!g8 z6t868y{CL3y4;KVy_+he(T|buzLmaX)^B9Hn=|Buqj((lsQvbFU0XR=%RpSz^eJWD9`3fFjZ@M6*zuuK+mvA=MTzSH>m5~^* z?35k#Es%@MEsRe%E_&!*1HJA^mVV!pZf57&}MDBC_*>z7I{53oNns4Z#wN?m(1sV z_KUwD-P6`@nNiAu%(}CoRanMux^sn!3EsQUR7T9#QbNZ(0MTa|$F5h{s6tkvQYFxQ z2P{gP^>VH^(EI=qKqyHYbt`BaSz#-4lA&TaEGjO2G^R*P-Y4bV@N3tL0^>LnI)eYC zH3E5Z^!typKmVm@k}m?Em($Y6XRUBb_$D%t{Ai_PAohaZ)yO-0rz6yNzI~n0?I5=@`l!28N@ zv{qUAvczCFVgJpTD^{`QK2{@bKq-rRn#HII0c ziL^ERX%l$sJC@*|ASS)c%A&b_oyt5t0y=xedJwsFc8=SpKm&FOD2HcLE7~I&O&T?F(ZNvugrOuSD)u^P2CFGNOqfty|oP+eqQ$XKdQlO6Q}14WsI{;qwwh^NID{;Y=HP{ z?P&WFc<&p&r>9az@sSzdZIrc&@C$0usWhg{yt492<7Z@_`+@$FW#yxPZh95%U)A-! z#k-p{IiI&lQA1c<%C$AK70846b6rXbmK85=_dD2AV(y(v#*e}z$UmTZQo<#<^`-TO zhe98lmzNctYQ7>X;+t}4u(e_gol3l{k=l2KGtD4eaksnBMR8t)Z{+=yGq|=!A?|i@ zdxG9g^{1noO3W73ScD2+=tT5Ob-a(uCE@iIoVcEgYdnR}l;S&0=brew#ug55OYh9w zs>O`0Z${gfjDFAT8Mlh-%10hPtVhdr#UP(jkQ5c9SJLjdyx35gmpExo z*o;(Ep9t{6HiO22xms_eG4E9`q=y7I`v=D61N+rY3g1Anpi2u$dU3m-jG=^QUS7s= z9rlyi5K~8phk9|vJ#$?bl|IMs+n$`9zpW|4cBBRJVm2nAi18vK(k*=R&~ErYQXchy z$B)9s_EJZ>Aa~<5f?mVpXYBhNYH0s{j441Sby=6L8r_fYFuI@q&QImVdyq?E;f%6VhUe6p{Dj(ieQsmq(L6z)Q2xl!eP=EP2M zYr5Bi6`hPWG0Z}OjM+z-b;vTDti!$jqy_hT0h0rah%=VR(U>ikB0Tlh&04EUBgYxS z&cl5wMD@dbB#oqF&_P^u!%`TKf7h{XE>|}Dj3dmw3pi}}kkOM6-gwGN1H#Nz1d1{h zHfYi!iqrEYo#H$z!F5v>2k51FI;q{NoOmvQW(#1COofZX!bfP`iYahP?&gy}v_$zX zc6^>ybe2*0kjvo=CE03Zn%7~BSDnimlV^E5on@O`l{kFz(VftSH`2!L8zNCSQ~YvQ zG78OgG11A=np35v2$@FbL*5GWYsdN9W92Qh!TlY&=GJ(PgSl{c%@kB}Z9AM{+PYZ! zo7XxE!Q+I}S-m|qkLUv^hMY+W3j+ggg$%@LEF1K$7|*qNd10g(Nd%q)B|3Sk2WLkx zv>B!urZRo(i+h@uEK`*glpG~HHuwFY;xG)S<{7x{I`XxeGLHR9WS#pCj^^3n0LHxS z@wo4+U_m5mEbx#OQL{$)3vg`;kMQd1E5X!7a3@&1%kIOiUqIwQryf59*P`Ie*=J>S zY**>;P8R0VrBDmEutP)C{`G}G<};bKQOi#>4xd=pf@J{YEx*Y$DpD2=#R?BID1uKU z&L5c}1|XZeevywf&qCV7N#pi4!&CcCL4L-5@`f_e4BOFA_FGp3m5j)XdIl-j@ z4x22=IXC#19E(HdGxXZ!Xc;S>1af;`MPmnVqWSvn$t_J=27m=~*lxtdh4Wobiq@sI6va>=}#WjYPYY`EfN3P7+yw&cj$AP84<_s%_iG-%D3#WknM=dwXm;b1NH9Af9L zW%%gV4O8#l3f_Lq^}vdeUASm(fC#O+97*=!Z0xcT70wJsfTUUdNWX#>X$OFlrykSn z+{0;GvfrqytGAoYj^=&aZs7n5efx)R#DGz5dqw)Z)*E)>qJQQ<1m-j8Q`*B*=q}Nh zW+SxyBGVa^RYr_EAMk8C%xk85$(R zBk*Qv_f3jXYjb4|>Rn4aM_FCP!#j6NE5P65`pOt4{Qg+2c}}(_nZ@UCT0l)m`_#*{ z<^Mc^zLI)z>BDPqYwbIjWB#k1@E`1n=I!VwlFxdkP}Bzxqkoa1CC05@E((H`kcvV7UUL z8(%vaJ;v0Uv3p^x)wFiK(pEyK=lL`*b$j0nE-NsSeR_+4MbB+vK1DNuOlaSrEY)H* zHRhg=bFwpKpCIPJY&&&IGVEKh*nlOl(=bRtSu$utz|e9?hvUTnOXtxD5yxDr!nPc0 z3D#no+MOBNRvlX->oKsGgUNmiIBHn{4&c=xP2Nqn83}-U0$fB&HdF4EEHyuI{c2!y zkR>jB@T(KyK&-aZYv&|r?{}7oPsqD5KyZ!2yICulX`_D7c!&cmO%aks=PI2WXr1l1 z4fb}vCm!P|{2(&q*4-l`$?Exm4WhId0ldYeTf&;P0J z_X++iQ_J@Bsg2&1jDI3D-e%Q=<(a0Z3|`22nGYn9A2p!9)e2|U?k_H6c}NS@pAF?0 zpS9ZYYPs^@AZ#jj+dsp_jb0d$oXG_Jnl8)rOZVQ?IJclxBgtCX#q?L&T%R>Gi8t&> zy7J##V4_h}sh0^EmF4{u`hzE!=`>;BixIuxMu+^YJ}rdL^bx!qh7|KJ7!235-k_WT zjgEeNdAdUOY0nMuIIuA2B(3KP{M|kqa#X-{63aCvr-M-fS+q&}xW9L&sKU}4jb^IP zF1W}SUf8PX7_A&Iie!HoU5y|cvE=227Gio>3kYqaziDCYy^O3yPo(-}J z({3yj)s4J(X3LlKKNd#AbkCWIotAc5`$`smdl-ELSbDt*IM4HI;j*$0xM>MJCO9DU z8&9%0KX^DJp`0P-9rW=yDHHxxk59FC-UAde?6jEP7S7nVAk#Ef669a?G^%3!)v_Gbjk zx7Um+)svGuX8T2wfYUOBL;bK6qV$3X)5Or=;1+bVA7M9n}sPBDY#O!wc-=eHm0@;BG)d^jbu1BpGHz@aRnFPfVzN z;zBOH8B2A#ZF1vb-poXPFMfd;}L05>0QFmPo-?!vj7lO!Cx`0$NMs(+Fw8XBlacTF%Ej>-f3lJm*FLiU2f*K@{F!mht60A6jlG3=ZL9XZk(?jdJb^w zj~0-ntcF=Aks@muCVZ+(?W){f>TVaFi#Z$y7Eb7QZWM3{`0&pZzjexf)wJm)FY^9u zUBhp2jy7T1a){neES2CFxv{#UzZDFYkmw@FWxTRTj*ZM`%DZv2==PO+qD2J3i8QR0 zc$QiT^D#mgyUcIhtFlhZ-)%mTE~lj~UI{u`yEgazcCxKW*q7REj(+iKpfXeVcBu~@ z=0Cy|P_VNqG<6+m=MesKb3$D441LZ=%DhkVa-0=Yr1_44xTmSFS7wIiRBJz}t3Z+~ zE=HFEbfe&XH#Kl#bWSr7A1Vt?S`H%sA5rTcJqv1D^u-I$=o2>k+|AGwqsAnG17x#% z$;e`_e0UHP!pNbx^)31eK3dLtQNb{?*|y~SKK}9VN7cC9%$`+8dFIV!Rdi4-Nd2E| z(k$9yM!<_W-Am44$aQQd0|%G?laQ0gwg)-bDEh|4%z+8yR{GIR(s? zaCe>j88VAWVX@lcjT9e~(MczXP2E+t-AlHjE)0(PeV_|Vw<(85QnZQ9Y%S0k2k>H=RsuDeP}<}{>4BT6Hnlg zl@&}^m@&{n-rP^QVpg*kH;(m&{k74Yk&38nO(N?iMEA08SeAU4Ya;eypFOs7_j4G?W{C8bqx`dKgrN$~iTvHH)9+B9xlC^Cm> z4{&|BubpkKc=xU&U9O52lQ>qbAoUFs<=z%-vu)2FS)yi@V)Ea~hqG3x@o~_~bK%WZ z)i;dWLO9ow1rBh#y>64l}CX#d;&G}2+(JF01bk_qP z`NBGy%OBd3M$?k`p(=B{&PXYy-04$rM~j~~%hBFSSp$VumQ3N=;1lP~yhrq^)tt@q z&sX?dZ=&p~zzi}RtqvVa$qDF7yEsb#6+ou5LYTl(h>!`oS3+?Q)|Q(zy!nwoj<8BxEp&`ye`#0dFFO6=BNdN zSMbX^Cf#iBW{e$gkIb*G|5@5|fWop{he&|luC8-){$@+k=LSE?Ra1$rTfqA|| z#Fy>E39JsCD|k7TB{BXcTJAtzOLaodhee;1YJ4v6nIwOz>wQVe{ToH@8~2}zx!gc9 zKgaKi)Le9-4ZRWB)3n=H11aQu88t97IZSl=S(b84Y=Fbp^t*m*fg(2#lI5x_%&var zy4w|9V2Q!>d(ZeIz3_WF#J%->M#{g&g2q}~zC09O!e*ul|Dl|FOv;JU1*Y#~e4GNJ zbqOBrHF~*VuHu;1%nE;%PKP~`RdP$}B}%Lg+~vzVKP7Ca?Bf245X5HP60cEYf1AIp zV#$7X^{-v$#h__QdBZKfjH%)4HRGV#@b>pdgM0Zk<=46(l>(ikWRM=~fn}xkf@dHX zdL{--O?25!!63mG*ngEOGs$pk+pJ9r!Aodgt;JOMjG{i((HYM&}q=Pv;XO zuw6P^W=BQo5?2R1fqJy>pvpM{up%hREqzkiik;dJM+NLyhTpk|VAbmnbGOO0ux7S{O|LXb}u~4!1uIu8Na?UN)yYpYZ5)DZ_ElY_+xb3-zPwJUy5+uW$s5A(!ht^VQFg z=@}th#@x$~u)$=0cuZmpqYqNP1%LG_H-oF%v$Yi@u9!D$hef9NMf(wSJX|o(#UkVNM(@15;^gI6}Ek+wH z=v;?4OnfCZ0_7O-5R2&^t#XFgz-~dj2qB~D1uFP|>gTW`I_#@nXXSv~gQy(Pw z?665^*sHCf8Sw^k)%Nt#=2(aJ{ea6O7w^4f@wVC^>+G?4HSAeXx+KU?eg|nBnP-y` z`&=|TgJue0`o2})i){FR(sh;l=m)h5Mt_ zU2(Bp6B?O(h9v`k_mBGueg2b@+v)1 zW&v;NnGo$#c94GQfm9nwUx1m@Jyz|NAhS<2l@&N`y1GVVH$EHE8pcmnd7WDQ+J4~5 zyJu{-cN8*X>$>9|#ZSSzUcuio#OY?<6Wp88jxIu!z3Ldou57<~Y-AKnS}5N47_!=_ zN_`XU$Kw&d!&ZCAXJ!lk_GqRxk7nld(P){52yJvCRVwz}7~hVQ&Y-w(;5eP&?`+Bn zyT2b{3w5XQ#ubbD_?!C+Ip`o?W&!y1ZS3Dd-TIDY;_x_&2K(U=*|uJkjVgn}G&f@i z>7D}sfh5Ty(F~w63v$U#xcYDeN5o@QL@n)$#9-P|#YI%_!#8K^lLcoHq&+ePH%svax@NtYo7xX}qia|6 zBQ1CH{IPtW8bWt>o`(s`wYvO}yll~Yy{?mf)OeiWntIqL<792ntk$pmX<&9L!=u5WoCc zP(u6_AczTy2PLz*l42*==iK?-w2xhE*!0lZJ$Iib`3dybxR!flz$9?vFirV-aR7&|#6hXv>7cg4(qG0zii;#wh%y;l1CaV4kIOW+RmB2Q#`k%ROCI(}7LWNM4AY>rV3nV=DcNnk4DNl$mn*to{HKT=|`O z8R$9sILBp)$#upc1aU)pvCtsAhNfU;&$gp#Hv}5)7Y6LI!LOGx026-&q5)Ql&=Tr6 zEadX_n-X&npO098lcOPsw-pNQ-qNj+c0c43LJs7Hq zNT)k7bT>Vy5&u3{8Czlc0049tfBHQ?`mqW-1atFR)_J+YYs%8jbDb?NW6F?s$^s{9 z`X@CPI~Qp*bn#^78Q{hy!y>rkus(V~-G0c)mjYi=i#-i#6hjk5gqgneRb{Rlk++Bz z{V`QSmLRwy8-NGX7vu&jlj!&Up@`~@cwX^Jy!qPkqP4(KOX^?7&_<^;3c)0(!1)~d zoT;+BuwWLM-JNl)a3$P32 zAU*%&xQO1F5)gHUdo))T+~$qW(F*iB9<#wmOeRAVhAH@3jB}dw`rAI7O=f<6eUtsO zdla%oO-L?7`0XFm?Sor-A-mhRs!6(8U()GBwhq|G?-rW=Yn|A<&z;PO#%0D)Muw-s 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 DRc_Wx diff --git a/docs/syntax/flowchart.md b/docs/syntax/flowchart.md index 8b3859f8a1..44d538bc2d 100644 --- a/docs/syntax/flowchart.md +++ b/docs/syntax/flowchart.md @@ -839,6 +839,10 @@ In the example below the style defined in the linkStyle statement will belong to linkStyle 3 stroke:#ff3,stroke-width:4px,color:red; +It is also possible to add style to multiple links in a single statement, by separating link numbers with commas: + + linkStyle 1,2,7 color:blue; + ### Styling line curves It is possible to style the type of curve used for lines between items, if the default method does not meet your needs. @@ -877,10 +881,14 @@ flowchart LR More convenient than defining the style every time is to define a class of styles and attach this class to the nodes that should have a different look. -a class definition looks like the example below: +A class definition looks like the example below: classDef className fill:#f9f,stroke:#333,stroke-width:4px; +Also, it is possible to define style to multiple classes in one statement: + + classDef firstClassName,secondClassName font-size:12pt; + Attachment of a class to a node is done as per below: class nodeId1 className; diff --git a/packages/mermaid/src/docs/syntax/flowchart.md b/packages/mermaid/src/docs/syntax/flowchart.md index 7f8284a2fb..5cd8f1089c 100644 --- a/packages/mermaid/src/docs/syntax/flowchart.md +++ b/packages/mermaid/src/docs/syntax/flowchart.md @@ -544,6 +544,12 @@ In the example below the style defined in the linkStyle statement will belong to linkStyle 3 stroke:#ff3,stroke-width:4px,color:red; ``` +It is also possible to add style to multiple links in a single statement, by separating link numbers with commas: + +``` +linkStyle 1,2,7 color:blue; +``` + ### Styling line curves It is possible to style the type of curve used for lines between items, if the default method does not meet your needs. @@ -577,12 +583,18 @@ flowchart LR More convenient than defining the style every time is to define a class of styles and attach this class to the nodes that should have a different look. -a class definition looks like the example below: +A class definition looks like the example below: ``` classDef className fill:#f9f,stroke:#333,stroke-width:4px; ``` +Also, it is possible to define style to multiple classes in one statement: + +``` + classDef firstClassName,secondClassName font-size:12pt; +``` + Attachment of a class to a node is done as per below: ``` From c15326b8969c8a02d279b1f0b56f3a353d1e429f Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Thu, 22 Dec 2022 13:59:49 +0100 Subject: [PATCH 003/595] test(flowchart): add test on multiple classes declaration --- .../diagrams/flowchart/parser/flow-style.spec.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js index 050d64f917..c5017da968 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js @@ -113,6 +113,22 @@ describe('[Style] when parsing', () => { expect(classes['exClass'].styles[1]).toBe('border:1px solid red'); }); + it('should be possible to declare multiple classes', function () { + const res = flow.parser.parse( + 'graph TD;classDef firstClass,secondClass background:#bbb,border:1px solid red;' + ); + + const classes = flow.parser.yy.getClasses(); + + expect(classes['firstClass'].styles.length).toBe(2); + expect(classes['firstClass'].styles[0]).toBe('background:#bbb'); + expect(classes['firstClass'].styles[1]).toBe('border:1px solid red'); + + expect(classes['secondClass'].styles.length).toBe(2); + expect(classes['secondClass'].styles[0]).toBe('background:#bbb'); + expect(classes['secondClass'].styles[1]).toBe('border:1px solid red'); + }); + it('should be possible to declare a class with a dot in the style', function () { const res = flow.parser.parse( 'graph TD;classDef exClass background:#bbb,border:1.5px solid red;' From c9da36dc8b1e3e5cb14f34724ebd8541011f0a9e Mon Sep 17 00:00:00 2001 From: Garen Torikian Date: Sun, 14 May 2023 14:27:08 -0400 Subject: [PATCH 004/595] Fix a typo --- docs/config/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config/usage.md b/docs/config/usage.md index 0ab60012f6..8d48c12462 100644 --- a/docs/config/usage.md +++ b/docs/config/usage.md @@ -228,7 +228,7 @@ mermaid fully supports webpack. Here is a [working demo](https://github.com/merm The main idea of the API is to be able to call a render function with the graph definition as a string. The render function will render the graph and call a callback with the resulting SVG code. With this approach it is up to the site creator to fetch the graph definition from the site (perhaps from a textarea), render it and place the graph somewhere in the site. -The example below show an outline of how this could be used. The example just logs the resulting SVG to the JavaScript console. +The example below shows an example of how this could be used. The example just logs the resulting SVG to the JavaScript console. ```html From ea3fbbd58d2180440844752518ac6634cdf55ba1 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Fri, 16 Jun 2023 23:05:06 +0300 Subject: [PATCH 029/595] initial converting pie files --- __mocks__/pieRenderer.js | 13 -- __mocks__/pieRenderer.ts | 8 + cypress/integration/rendering/info.spec.ts | 2 + .../src/diagram-api/diagram-orchestration.ts | 2 +- packages/mermaid/src/diagrams/pie/amonts.csv | 10 -- .../src/diagrams/pie/parser/pie.spec.js | 132 ---------------- packages/mermaid/src/diagrams/pie/pie.spec.ts | 148 ++++++++++++++++++ packages/mermaid/src/diagrams/pie/pieDb.js | 69 -------- packages/mermaid/src/diagrams/pie/pieDb.ts | 88 +++++++++++ .../mermaid/src/diagrams/pie/pieDetector.ts | 4 +- .../mermaid/src/diagrams/pie/pieDiagram.ts | 6 +- .../pie/{pieRenderer.js => pieRenderer.ts} | 148 +++++++++--------- packages/mermaid/src/diagrams/pie/pieTypes.ts | 54 +++++++ .../src/diagrams/pie/{styles.js => styles.ts} | 4 +- 14 files changed, 382 insertions(+), 306 deletions(-) delete mode 100644 __mocks__/pieRenderer.js create mode 100644 __mocks__/pieRenderer.ts delete mode 100644 packages/mermaid/src/diagrams/pie/amonts.csv delete mode 100644 packages/mermaid/src/diagrams/pie/parser/pie.spec.js create mode 100644 packages/mermaid/src/diagrams/pie/pie.spec.ts delete mode 100644 packages/mermaid/src/diagrams/pie/pieDb.js create mode 100644 packages/mermaid/src/diagrams/pie/pieDb.ts rename packages/mermaid/src/diagrams/pie/{pieRenderer.js => pieRenderer.ts} (52%) create mode 100644 packages/mermaid/src/diagrams/pie/pieTypes.ts rename packages/mermaid/src/diagrams/pie/{styles.js => styles.ts} (88%) diff --git a/__mocks__/pieRenderer.js b/__mocks__/pieRenderer.js deleted file mode 100644 index 317c69901d..0000000000 --- a/__mocks__/pieRenderer.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Mocked pie (picChart) diagram renderer - */ - -import { vi } from 'vitest'; - -export const draw = vi.fn().mockImplementation(() => { - return ''; -}); - -export default { - draw, -}; diff --git a/__mocks__/pieRenderer.ts b/__mocks__/pieRenderer.ts new file mode 100644 index 0000000000..439800f8c5 --- /dev/null +++ b/__mocks__/pieRenderer.ts @@ -0,0 +1,8 @@ +/** + * Mocked pie (picChart) diagram renderer + */ +import { vi } from 'vitest'; + +const draw = vi.fn().mockImplementation(() => ''); + +export const renderer = { draw }; diff --git a/cypress/integration/rendering/info.spec.ts b/cypress/integration/rendering/info.spec.ts index 3db74c9802..52763a8363 100644 --- a/cypress/integration/rendering/info.spec.ts +++ b/cypress/integration/rendering/info.spec.ts @@ -3,9 +3,11 @@ import { imgSnapshotTest } from '../../helpers/util.js'; describe('info diagram', () => { it('should handle an info definition', () => { imgSnapshotTest(`info`); + cy.get('svg'); }); it('should handle an info definition with showInfo', () => { imgSnapshotTest(`info showInfo`); + cy.get('svg'); }); }); diff --git a/packages/mermaid/src/diagram-api/diagram-orchestration.ts b/packages/mermaid/src/diagram-api/diagram-orchestration.ts index 0253be45d5..821ba63bfb 100644 --- a/packages/mermaid/src/diagram-api/diagram-orchestration.ts +++ b/packages/mermaid/src/diagram-api/diagram-orchestration.ts @@ -5,7 +5,7 @@ import er from '../diagrams/er/erDetector.js'; import git from '../diagrams/git/gitGraphDetector.js'; import gantt from '../diagrams/gantt/ganttDetector.js'; import { info } from '../diagrams/info/infoDetector.js'; -import pie from '../diagrams/pie/pieDetector.js'; +import { pie } from '../diagrams/pie/pieDetector.js'; import quadrantChart from '../diagrams/quadrant-chart/quadrantDetector.js'; import requirement from '../diagrams/requirement/requirementDetector.js'; import sequence from '../diagrams/sequence/sequenceDetector.js'; diff --git a/packages/mermaid/src/diagrams/pie/amonts.csv b/packages/mermaid/src/diagrams/pie/amonts.csv deleted file mode 100644 index 25cf919ddb..0000000000 --- a/packages/mermaid/src/diagrams/pie/amonts.csv +++ /dev/null @@ -1,10 +0,0 @@ -name,amounts -Foo, 33 -Rishab, 12 -Alexis, 41 -Tom, 16 -Courtney, 59 -Christina, 38 -Jack, 21 -Mickey, 25 -Paul, 30 diff --git a/packages/mermaid/src/diagrams/pie/parser/pie.spec.js b/packages/mermaid/src/diagrams/pie/parser/pie.spec.js deleted file mode 100644 index 5e5c0b4f51..0000000000 --- a/packages/mermaid/src/diagrams/pie/parser/pie.spec.js +++ /dev/null @@ -1,132 +0,0 @@ -import pieDb from '../pieDb.js'; -import pie from './pie.jison'; -import { setConfig } from '../../../config.js'; - -setConfig({ - securityLevel: 'strict', -}); - -describe('when parsing pie', function () { - beforeEach(function () { - pie.parser.yy = pieDb; - pie.parser.yy.clear(); - }); - it('should handle very simple pie', function () { - const res = pie.parser.parse(`pie -"ash" : 100 -`); - const sections = pieDb.getSections(); - const section1 = sections['ash']; - expect(section1).toBe(100); - }); - it('should handle simple pie', function () { - const res = pie.parser.parse(`pie -"ash" : 60 -"bat" : 40 -`); - const sections = pieDb.getSections(); - const section1 = sections['ash']; - expect(section1).toBe(60); - }); - it('should handle simple pie with comments', function () { - const res = pie.parser.parse(`pie - %% comments -"ash" : 60 -"bat" : 40 -`); - const sections = pieDb.getSections(); - const section1 = sections['ash']; - expect(section1).toBe(60); - }); - - it('should handle simple pie with a directive', function () { - const res = pie.parser.parse(`%%{init: {'logLevel':0}}%% -pie -"ash" : 60 -"bat" : 40 -`); - const sections = pieDb.getSections(); - const section1 = sections['ash']; - expect(section1).toBe(60); - }); - - it('should handle simple pie with a title', function () { - const res = pie.parser.parse(`pie title a 60/40 pie -"ash" : 60 -"bat" : 40 -`); - const sections = pieDb.getSections(); - const title = pieDb.getDiagramTitle(); - const section1 = sections['ash']; - expect(section1).toBe(60); - expect(title).toBe('a 60/40 pie'); - }); - - it('should handle simple pie without an acc description (accDescr)', function () { - const res = pie.parser.parse(`pie title a neat chart -"ash" : 60 -"bat" : 40 -`); - - const sections = pieDb.getSections(); - const title = pieDb.getDiagramTitle(); - const description = pieDb.getAccDescription(); - const section1 = sections['ash']; - expect(section1).toBe(60); - expect(title).toBe('a neat chart'); - expect(description).toBe(''); - }); - - it('should handle simple pie with an acc description (accDescr)', function () { - const res = pie.parser.parse(`pie title a neat chart - accDescr: a neat description -"ash" : 60 -"bat" : 40 -`); - - const sections = pieDb.getSections(); - const title = pieDb.getDiagramTitle(); - const description = pieDb.getAccDescription(); - const section1 = sections['ash']; - expect(section1).toBe(60); - expect(title).toBe('a neat chart'); - expect(description).toBe('a neat description'); - }); - it('should handle simple pie with a multiline acc description (accDescr)', function () { - const res = pie.parser.parse(`pie title a neat chart - accDescr { - a neat description - on multiple lines - } -"ash" : 60 -"bat" : 40 -`); - - const sections = pieDb.getSections(); - const title = pieDb.getDiagramTitle(); - const description = pieDb.getAccDescription(); - const section1 = sections['ash']; - expect(section1).toBe(60); - expect(title).toBe('a neat chart'); - expect(description).toBe('a neat description\non multiple lines'); - }); - - it('should handle simple pie with positive decimal', function () { - const res = pie.parser.parse(`pie -"ash" : 60.67 -"bat" : 40 -`); - const sections = pieDb.getSections(); - const section1 = sections['ash']; - expect(section1).toBe(60.67); - }); - - it('should handle simple pie with negative decimal', function () { - expect(() => { - pie.parser.parse(`pie -"ash" : 60.67 -"bat" : 40..12 -`); - }).toThrowError(); - }); -}); diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts new file mode 100644 index 0000000000..8f4a66bb08 --- /dev/null +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -0,0 +1,148 @@ +// @ts-ignore - jison doesn't export types +import { parser } from './parser/pie.jison'; +import { db } from './pieDb.js'; +import { setConfig } from '../../config.js'; + +setConfig({ + securityLevel: 'strict', +}); + +describe('pie chart', () => { + beforeEach(() => { + parser.yy = db; + parser.yy.clear(); + }); + + it('should handle very simple pie', () => { + parser.parse(`pie + "ash": 100 + `); + const sections = db.getSections(); + expect(sections['ash']).toBe(100); + }); + + it('should handle simple pie', () => { + parser.parse(`pie + "ash" : 60 + "bat" : 40 + `); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with comments', () => { + parser.parse(`pie + %% comments + "ash" : 60 + "bat" : 40 + `); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with a directive', () => { + parser.parse(`%%{init: {'logLevel':0}}%% + pie + "ash" : 60 + "bat" : 40 + `); + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with a title', () => { + parser.parse(`pie title a 60/40 pie + "ash" : 60 + "bat" : 40 + `); + + const title = db.getDiagramTitle(); + expect(title).toBe('a 60/40 pie'); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with an acc title (accTitle)', () => { + parser.parse(`pie title a neat chart + accTitle: a neat acc title + "ash" : 60 + "bat" : 40 + `); + + const title = db.getDiagramTitle(); + expect(title).toBe('a neat chart'); + + const accTitle = db.getAccTitle(); + expect(accTitle).toBe('a neat acc title'); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with an acc description (accDescr)', () => { + parser.parse(`pie title a neat chart + accDescr: a neat description + "ash" : 60 + "bat" : 40 + `); + + const title = db.getDiagramTitle(); + expect(title).toBe('a neat chart'); + + const description = db.getAccDescription(); + expect(description).toBe('a neat description'); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with a multiline acc description (accDescr)', () => { + parser.parse(`pie title a neat chart + accDescr { + a neat description + on multiple lines + } + "ash" : 60 + "bat" : 40 + `); + + const title = db.getDiagramTitle(); + expect(title).toBe('a neat chart'); + + const description = db.getAccDescription(); + expect(description).toBe('a neat description\non multiple lines'); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with positive decimal', () => { + parser.parse(`pie + "ash" : 60.67 + "bat" : 40 + `); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60.67); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with negative decimal', () => { + expect(() => { + parser.parse(`pie + "ash" : -60.67 + "bat" : 40.12 + `); + }).toThrowError(); + }); +}); diff --git a/packages/mermaid/src/diagrams/pie/pieDb.js b/packages/mermaid/src/diagrams/pie/pieDb.js deleted file mode 100644 index 2c86752c66..0000000000 --- a/packages/mermaid/src/diagrams/pie/pieDb.js +++ /dev/null @@ -1,69 +0,0 @@ -import { log } from '../../logger.js'; -import mermaidAPI from '../../mermaidAPI.js'; -import * as configApi from '../../config.js'; -import common from '../common/common.js'; -import { - setAccTitle, - getAccTitle, - setDiagramTitle, - getDiagramTitle, - getAccDescription, - setAccDescription, - clear as commonClear, -} from '../../commonDb.js'; - -let sections = {}; -let showData = false; - -export const parseDirective = function (statement, context, type) { - mermaidAPI.parseDirective(this, statement, context, type); -}; - -const addSection = function (id, value) { - id = common.sanitizeText(id, configApi.getConfig()); - if (sections[id] === undefined) { - sections[id] = value; - log.debug('Added new section :', id); - } -}; -const getSections = () => sections; - -const setShowData = function (toggle) { - showData = toggle; -}; - -const getShowData = function () { - return showData; -}; - -const cleanupValue = function (value) { - if (value.substring(0, 1) === ':') { - value = value.substring(1).trim(); - return Number(value.trim()); - } else { - return Number(value.trim()); - } -}; - -const clear = function () { - sections = {}; - showData = false; - commonClear(); -}; - -export default { - parseDirective, - getConfig: () => configApi.getConfig().pie, - addSection, - getSections, - cleanupValue, - clear, - setAccTitle, - getAccTitle, - setDiagramTitle, - getDiagramTitle, - setShowData, - getShowData, - getAccDescription, - setAccDescription, -}; diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts new file mode 100644 index 0000000000..b864093bb3 --- /dev/null +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -0,0 +1,88 @@ +import { log } from '../../logger.js'; +import { parseDirective as _parseDirective } from '../../directiveUtils.js'; +import { getConfig } from '../../config.js'; +import { sanitizeText } from '../common/common.js'; +import { + setAccTitle, + getAccTitle, + setDiagramTitle, + getDiagramTitle, + getAccDescription, + setAccDescription, + clear as commonClear, +} from '../../commonDb.js'; +import type { ParseDirectiveDefinition } from '../../diagram-api/types.js'; +import type { PieFields, PieDb, Sections } from './pieTypes.js'; +import type { PieDiagramConfig } from '../../config.type.js'; + +export const DEFAULT_PIE_CONFIG: PieDiagramConfig = { + useMaxWidth: true, + useWidth: 1200, + textPosition: 0.75, +} as const; + +export const DEFAULT_PIE_DB: PieFields = { + sections: {}, + showData: false, + config: DEFAULT_PIE_CONFIG, +} as const; + +let sections: Sections = DEFAULT_PIE_DB.sections; +let showData: boolean = DEFAULT_PIE_DB.showData; +const config: PieDiagramConfig = { + useWidth: DEFAULT_PIE_DB.config.useWidth, + useMaxWidth: DEFAULT_PIE_DB.config.useMaxWidth, + textPosition: DEFAULT_PIE_DB.config.textPosition, +}; + +export const parseDirective: ParseDirectiveDefinition = (statement, context, type) => { + _parseDirective(this, statement, context, type); +}; + +const addSection = (label: string, value: number): void => { + label = sanitizeText(label, getConfig()); + if (sections[label] === undefined) { + sections[label] = value; + log.debug(`added new section: ${label}, with value: ${value}`); + } +}; + +const getSections = (): Sections => sections; + +const setShowData = (toggle: boolean): void => { + showData = toggle; +}; + +const getShowData = (): boolean => showData; + +const cleanupValue = (value: string): number => { + if (value.substring(0, 1) === ':') { + value = value.substring(1).trim(); + return Number(value.trim()); + } else { + return Number(value.trim()); + } +}; + +const clear = (): void => { + sections = DEFAULT_PIE_DB.sections; + showData = DEFAULT_PIE_DB.showData; + commonClear(); +}; + +export const db: PieDb = { + clear, + getConfig: () => getConfig().pie, + parseDirective, + setDiagramTitle, + getDiagramTitle, + setAccTitle, + getAccTitle, + setAccDescription, + getAccDescription, + addSection, + getSections, + cleanupValue, + setShowData, + getShowData, +}; diff --git a/packages/mermaid/src/diagrams/pie/pieDetector.ts b/packages/mermaid/src/diagrams/pie/pieDetector.ts index 93eded52cd..f5acd1aa03 100644 --- a/packages/mermaid/src/diagrams/pie/pieDetector.ts +++ b/packages/mermaid/src/diagrams/pie/pieDetector.ts @@ -15,10 +15,8 @@ const loader: DiagramLoader = async () => { return { id, diagram }; }; -const plugin: ExternalDiagramDefinition = { +export const pie: ExternalDiagramDefinition = { id, detector, loader, }; - -export default plugin; diff --git a/packages/mermaid/src/diagrams/pie/pieDiagram.ts b/packages/mermaid/src/diagrams/pie/pieDiagram.ts index 4c6b7d3bc9..1cc45cff36 100644 --- a/packages/mermaid/src/diagrams/pie/pieDiagram.ts +++ b/packages/mermaid/src/diagrams/pie/pieDiagram.ts @@ -1,7 +1,7 @@ -import { DiagramDefinition } from '../../diagram-api/types.js'; -// @ts-ignore: TODO Fix ts errors +import type { DiagramDefinition } from '../../diagram-api/types.js'; +// @ts-ignore - jison doesn't export types import parser from './parser/pie.jison'; -import db from './pieDb.js'; +import { db } from './pieDb.js'; import styles from './styles.js'; import renderer from './pieRenderer.js'; diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.js b/packages/mermaid/src/diagrams/pie/pieRenderer.ts similarity index 52% rename from packages/mermaid/src/diagrams/pie/pieRenderer.js rename to packages/mermaid/src/diagrams/pie/pieRenderer.ts index 1ee34e192a..06ca6e313a 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.js +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -1,80 +1,71 @@ -/** Created by AshishJ on 11-09-2019. */ +// @ts-nocheck - placeholder to be handled import { select, scaleOrdinal, pie as d3pie, arc } from 'd3'; import { log } from '../../logger.js'; import { configureSvgSize } from '../../setupGraphViewbox.js'; -import * as configApi from '../../config.js'; +import { getConfig } from '../../config.js'; import { parseFontSize } from '../../utils.js'; - -let conf = configApi.getConfig(); +import type { DrawDefinition, HTML, SVG } from '../../diagram-api/types.js'; +import type { PieDb, Sections } from './pieTypes.js'; /** * Draws a Pie Chart with the data given in text. * - * @param text - * @param id + * @param text - pie chart code + * @param id - diagram id */ -let width; -const height = 450; -export const draw = (txt, id, _version, diagObj) => { +const draw: DrawDefinition = (txt, id, _version, diagObj) => { try { - conf = configApi.getConfig(); - log.debug('Rendering info diagram\n' + txt); + log.debug('rendering pie chart\n' + txt); + + const config = getConfig(); + let width: number | undefined = config.pie?.useWidth; + const height = 450; - const securityLevel = configApi.getConfig().securityLevel; - // Handle root and Document for when rendering in sandbox mode - let sandboxElement; + const { securityLevel } = config; + // handle root and document for when rendering in sandbox mode + let sandboxElement: HTML | undefined; + let document: Document | null | undefined; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); + document = sandboxElement.nodes()[0].contentDocument; + width = document?.parentElement?.offsetWidth; } - const root = - securityLevel === 'sandbox' - ? select(sandboxElement.nodes()[0].contentDocument.body) + + // @ts-ignore - figure out how to assign HTML to document type + const root: HTML = + sandboxElement !== undefined && document !== undefined && document !== null + ? select(document) : select('body'); - const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; - // Parse the Pie Chart definition - diagObj.db.clear(); + // parse the Pie Chart definition + const db = diagObj.db as PieDb; + db.clear(); + log.debug('parsing pie chart'); diagObj.parser.parse(txt); - log.debug('Parsed info diagram'); - const elem = doc.getElementById(id); - width = elem.parentElement.offsetWidth; if (width === undefined) { width = 1200; } - if (conf.useWidth !== undefined) { - width = conf.useWidth; - } - if (conf.pie.useWidth !== undefined) { - width = conf.pie.useWidth; - } - - const diagram = root.select('#' + id); - configureSvgSize(diagram, height, width, conf.pie.useMaxWidth); + const diagram: SVG = root.select('#' + id); + configureSvgSize(diagram, height, width, config.pie?.useMaxWidth || true); - // Set viewBox - elem.setAttribute('viewBox', '0 0 ' + width + ' ' + height); + // set viewBox + document?.parentElement?.setAttribute('viewBox', '0 0 ' + width + ' ' + height); - // Fetch the default direction, use TD if none was found - var margin = 40; - var legendRectSize = 18; - var legendSpacing = 4; + // fetch the default direction, use TD if none was found + const margin = 40; + const legendRectSize = 18; + const legendSpacing = 4; - var radius = Math.min(width, height) / 2 - margin; + const radius = Math.min(width, height) / 2 - margin; - var svg = diagram + const svg = diagram .append('g') .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')'); - var data = diagObj.db.getSections(); - var sum = 0; - Object.keys(data).forEach(function (key) { - sum += data[key]; - }); - - const themeVariables = conf.themeVariables; - var myGeneratedColors = [ + const themeVariables = config.themeVariables; + const myGeneratedColors = [ themeVariables.pie1, themeVariables.pie2, themeVariables.pie3, @@ -89,34 +80,41 @@ export const draw = (txt, id, _version, diagObj) => { themeVariables.pie12, ]; - const textPosition = conf.pie?.textPosition ?? 0.75; + const textPosition = config.pie?.textPosition ?? 0.75; let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth); outerStrokeWidth ??= 2; // Set the color scale - var color = scaleOrdinal().range(myGeneratedColors); + const color = scaleOrdinal().range(myGeneratedColors); - // Compute the position of each group on the pie: - var pieData = Object.entries(data).map(function (el, idx) { + const sections: Sections = db.getSections(); + let sum = 0; + Object.keys(sections).forEach((key: string) => { + sum += sections[key]; + }); + + // compute the position of each group on the pie: + const pieData = Object.entries(sections).map((el: [string, number], index: number) => { return { - order: idx, + order: index, name: el[0], value: el[1], }; }); - var pie = d3pie() - .value(function (d) { - return d.value; + const pie = d3pie() + // @ts-ignore: TODO Fix ts errors + .value((d) => { + return d; }) - .sort(function (a, b) { + .sort((a, b) => { // Sort slices in clockwise direction return a.order - b.order; }); - var dataReady = pie(pieData); + const dataReady = pie(pieData); // Shape helper to build arcs: - var arcGenerator = arc().innerRadius(0).outerRadius(radius); - var labelArcGenerator = arc() + const arcGenerator = arc().innerRadius(0).outerRadius(radius); + const labelArcGenerator = arc() .innerRadius(radius * textPosition) .outerRadius(radius * textPosition); @@ -134,7 +132,8 @@ export const draw = (txt, id, _version, diagObj) => { .enter() .append('path') .attr('d', arcGenerator) - .attr('fill', function (d) { + // @ts-ignore: TODO Fix ts errors + .attr('fill', (d) => { return color(d.data.name); }) .attr('class', 'pieCircle'); @@ -146,10 +145,12 @@ export const draw = (txt, id, _version, diagObj) => { .data(dataReady) .enter() .append('text') - .text(function (d) { + // @ts-ignore: TODO Fix ts errors + .text((d) => { return ((d.data.value / sum) * 100).toFixed(0) + '%'; }) - .attr('transform', function (d) { + // @ts-ignore: TODO Fix ts errors + .attr('transform', (d) => { return 'translate(' + labelArcGenerator.centroid(d) + ')'; }) .style('text-anchor', 'middle') @@ -157,23 +158,24 @@ export const draw = (txt, id, _version, diagObj) => { svg .append('text') - .text(diagObj.db.getDiagramTitle()) + .text(db.getDiagramTitle()) .attr('x', 0) .attr('y', -(height - 50) / 2) .attr('class', 'pieTitleText'); // Add the legends/annotations for each section - var legend = svg + const legend = svg .selectAll('.legend') .data(color.domain()) .enter() .append('g') .attr('class', 'legend') - .attr('transform', function (d, i) { + // @ts-ignore: TODO Fix ts errors + .attr('transform', (d, index: number) => { const height = legendRectSize + legendSpacing; const offset = (height * color.domain().length) / 2; const horizontal = 12 * legendRectSize; - const vertical = i * height - offset; + const vertical = index * height - offset; return 'translate(' + horizontal + ',' + vertical + ')'; }); @@ -189,19 +191,17 @@ export const draw = (txt, id, _version, diagObj) => { .append('text') .attr('x', legendRectSize + legendSpacing) .attr('y', legendRectSize - legendSpacing) - .text(function (d) { - if (diagObj.db.getShowData() || conf.showData || conf.pie.showData) { + // @ts-ignore: TODO Fix ts errors + .text((d) => { + if (db.getShowData()) { return d.data.name + ' [' + d.data.value + ']'; } else { return d.data.name; } }); } catch (e) { - log.error('Error while rendering info diagram'); - log.error(e); + log.error('error while rendering pie chart', e); } }; -export default { - draw, -}; +export const renderer = { draw }; diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts new file mode 100644 index 0000000000..695a3f4910 --- /dev/null +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -0,0 +1,54 @@ +import type { PieDiagramConfig } from '../../config.type.js'; +import type { DiagramDB, ParseDirectiveDefinition } from '../../diagram-api/types.js'; + +export interface PieFields { + sections: Sections; + showData: boolean; + config: PieDiagramConfig; +} + +export interface PieStyleOptions { + fontFamily: string; + pie1: string; + pie2: string; + pie3: string; + pie4: string; + pie5: string; + pie6: string; + pie7: string; + pie8: string; + pie9: string; + pie10: string; + pie11: string; + pie12: string; + pieTitleTextSize: string; + pieTitleTextColor: string; + pieSectionTextSize: string; + pieSectionTextColor: string; + pieLegendTextSize: string; + pieLegendTextColor: string; + pieStrokeColor: string; + pieStrokeWidth: string; + pieOuterStrokeWidth: string; + pieOuterStrokeColor: string; + pieOpacity: string; +} + +export type Sections = Record; + +export interface PieDb extends DiagramDB { + clear: () => void; + getConfig: () => PieDiagramConfig | undefined; + parseDirective: ParseDirectiveDefinition; + setDiagramTitle: (title: string) => void; + getDiagramTitle: () => string; + setAccTitle: (title: string) => void; + getAccTitle: () => string; + setAccDescription: (describetion: string) => void; + getAccDescription: () => string; + addSection: (label: string, value: number) => void; + cleanupValue: (value: string) => number; + getSections: () => Sections; + setShowData: (toggle: boolean) => void; + getShowData: () => boolean; +} diff --git a/packages/mermaid/src/diagrams/pie/styles.js b/packages/mermaid/src/diagrams/pie/styles.ts similarity index 88% rename from packages/mermaid/src/diagrams/pie/styles.js rename to packages/mermaid/src/diagrams/pie/styles.ts index 6f0f600061..83c8a5aa58 100644 --- a/packages/mermaid/src/diagrams/pie/styles.js +++ b/packages/mermaid/src/diagrams/pie/styles.ts @@ -1,4 +1,6 @@ -const getStyles = (options) => +import { PieStyleOptions } from './pieTypes.js'; + +const getStyles = (options: PieStyleOptions) => ` .pieCircle{ stroke: ${options.pieStrokeColor}; From bdb967e0a895bfc33ba6fc84faabcf0ef8e39e69 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Fri, 16 Jun 2023 23:09:10 +0300 Subject: [PATCH 030/595] fix renderer import in pieDiagram --- packages/mermaid/src/diagrams/pie/pieDiagram.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/pie/pieDiagram.ts b/packages/mermaid/src/diagrams/pie/pieDiagram.ts index 1cc45cff36..8bdb89a553 100644 --- a/packages/mermaid/src/diagrams/pie/pieDiagram.ts +++ b/packages/mermaid/src/diagrams/pie/pieDiagram.ts @@ -3,7 +3,7 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; import parser from './parser/pie.jison'; import { db } from './pieDb.js'; import styles from './styles.js'; -import renderer from './pieRenderer.js'; +import { renderer } from './pieRenderer.js'; export const diagram: DiagramDefinition = { parser, From 231a9630df0da7c7fa456eec665d6e674cee5168 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Fri, 16 Jun 2023 23:30:41 +0300 Subject: [PATCH 031/595] do deep cloning on section field in pie clear --- packages/mermaid/src/diagrams/pie/pieDb.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index b864093bb3..f8cc664ec4 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -65,7 +65,7 @@ const cleanupValue = (value: string): number => { }; const clear = (): void => { - sections = DEFAULT_PIE_DB.sections; + sections = JSON.parse(JSON.stringify(DEFAULT_PIE_DB.sections)); showData = DEFAULT_PIE_DB.showData; commonClear(); }; From c17b723295681443ed5292d3fe3f1e10a983efcf Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Fri, 16 Jun 2023 23:45:13 +0300 Subject: [PATCH 032/595] convert pie.spec.js to ts, remove cy.get and useless comment, add showData unit test case --- .../rendering/{pie.spec.js => pie.spec.ts} | 82 +++++++++---------- 1 file changed, 39 insertions(+), 43 deletions(-) rename cypress/integration/rendering/{pie.spec.js => pie.spec.ts} (54%) diff --git a/cypress/integration/rendering/pie.spec.js b/cypress/integration/rendering/pie.spec.ts similarity index 54% rename from cypress/integration/rendering/pie.spec.js rename to cypress/integration/rendering/pie.spec.ts index 8a89a0cde5..4e747f61cd 100644 --- a/cypress/integration/rendering/pie.spec.js +++ b/cypress/integration/rendering/pie.spec.ts @@ -1,89 +1,85 @@ import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; -describe('Pie Chart', () => { +describe('pie chart', () => { it('should render a simple pie diagram', () => { imgSnapshotTest( + `pie title Sports in Sweden + "Bandy": 40 + "Ice-Hockey": 80 + "Football": 90 ` - pie title Sports in Sweden - "Bandy" : 40 - "Ice-Hockey" : 80 - "Football" : 90 - `, - {} ); - cy.get('svg'); }); + it('should render a simple pie diagram with long labels', () => { imgSnapshotTest( + `pie title NETFLIX + "Time spent looking for movie": 90 + "Time spent watching it": 10 ` - pie title NETFLIX - "Time spent looking for movie" : 90 - "Time spent watching it" : 10 - `, - {} ); - cy.get('svg'); }); + it('should render a simple pie diagram with capital letters for labels', () => { imgSnapshotTest( + `pie title What Voldemort doesn't have? + "FRIENDS": 2 + "FAMILY": 3 + "NOSE": 45 ` - pie title What Voldemort doesn't have? - "FRIENDS" : 2 - "FAMILY" : 3 - "NOSE" : 45 - `, - {} ); - cy.get('svg'); }); + it('should render a pie diagram when useMaxWidth is true (default)', () => { renderGraph( - ` - pie title Sports in Sweden - "Bandy" : 40 - "Ice-Hockey" : 80 - "Football" : 90 + `pie title Sports in Sweden + "Bandy": 40 + "Ice-Hockey": 80 + "Football": 90 `, { pie: { useMaxWidth: true } } ); cy.get('svg').should((svg) => { expect(svg).to.have.attr('width', '100%'); - // expect(svg).to.have.attr('height'); - // const height = parseFloat(svg.attr('height')); - // expect(height).to.eq(450); const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); expect(maxWidthValue).to.eq(984); }); }); + it('should render a pie diagram when useMaxWidth is false', () => { renderGraph( - ` - pie title Sports in Sweden - "Bandy" : 40 - "Ice-Hockey" : 80 - "Football" : 90 + `pie title Sports in Sweden + "Bandy": 40 + "Ice-Hockey": 80 + "Football": 90 `, { pie: { useMaxWidth: false } } ); cy.get('svg').should((svg) => { - // const height = parseFloat(svg.attr('height')); const width = parseFloat(svg.attr('width')); - // expect(height).to.eq(450); expect(width).to.eq(984); expect(svg).to.not.have.attr('style'); }); }); - it('should render a pie diagram when textPosition is set', () => { + + it('should render a pie diagram when textPosition is setted', () => { imgSnapshotTest( - ` - pie - "Dogs": 50 - "Cats": 25 - `, + `pie + "Dogs": 50 + "Cats": 25 + `, { logLevel: 1, pie: { textPosition: 0.9 } } ); - cy.get('svg'); + }); + + it('should render a pie diagram with showData', () => { + imgSnapshotTest( + `pie showData + "Dogs": 50 + "Cats": 25 + ` + ); }); }); From bd6795032f6aecc85decbbb58c43d57fe1250774 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Fri, 16 Jun 2023 23:58:56 +0300 Subject: [PATCH 033/595] return pieRender back to original and update it partially --- .../mermaid/src/diagrams/pie/pieRenderer.ts | 114 +++++++++--------- 1 file changed, 56 insertions(+), 58 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts index 06ca6e313a..b7ef819e45 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -2,10 +2,10 @@ import { select, scaleOrdinal, pie as d3pie, arc } from 'd3'; import { log } from '../../logger.js'; import { configureSvgSize } from '../../setupGraphViewbox.js'; -import { getConfig } from '../../config.js'; +import * as configApi from '../../config.js'; import { parseFontSize } from '../../utils.js'; -import type { DrawDefinition, HTML, SVG } from '../../diagram-api/types.js'; -import type { PieDb, Sections } from './pieTypes.js'; + +let conf = configApi.getConfig(); /** * Draws a Pie Chart with the data given in text. @@ -13,47 +13,50 @@ import type { PieDb, Sections } from './pieTypes.js'; * @param text - pie chart code * @param id - diagram id */ -const draw: DrawDefinition = (txt, id, _version, diagObj) => { +let width; +const height = 450; +export const draw = (txt, id, _version, diagObj) => { try { - log.debug('rendering pie chart\n' + txt); - - const config = getConfig(); - let width: number | undefined = config.pie?.useWidth; - const height = 450; + conf = configApi.getConfig(); + log.debug('Rendering info diagram\n' + txt); - const { securityLevel } = config; - // handle root and document for when rendering in sandbox mode - let sandboxElement: HTML | undefined; - let document: Document | null | undefined; + const securityLevel = configApi.getConfig().securityLevel; + // Handle root and Document for when rendering in sandbox mode + let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); - document = sandboxElement.nodes()[0].contentDocument; - width = document?.parentElement?.offsetWidth; } - - // @ts-ignore - figure out how to assign HTML to document type - const root: HTML = - sandboxElement !== undefined && document !== undefined && document !== null - ? select(document) + const root = + securityLevel === 'sandbox' + ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); + const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; - // parse the Pie Chart definition - const db = diagObj.db as PieDb; - db.clear(); - log.debug('parsing pie chart'); + // Parse the Pie Chart definition + diagObj.db.clear(); diagObj.parser.parse(txt); + log.debug('Parsed info diagram'); + const elem = doc.getElementById(id); + width = elem.parentElement.offsetWidth; if (width === undefined) { width = 1200; } - const diagram: SVG = root.select('#' + id); - configureSvgSize(diagram, height, width, config.pie?.useMaxWidth || true); + if (conf.useWidth !== undefined) { + width = conf.useWidth; + } + if (conf.pie.useWidth !== undefined) { + width = conf.pie.useWidth; + } + + const diagram = root.select('#' + id); + configureSvgSize(diagram, height, width, conf.pie.useMaxWidth); - // set viewBox - document?.parentElement?.setAttribute('viewBox', '0 0 ' + width + ' ' + height); + // Set viewBox + elem.setAttribute('viewBox', '0 0 ' + width + ' ' + height); - // fetch the default direction, use TD if none was found + // Fetch the default direction, use TD if none was found const margin = 40; const legendRectSize = 18; const legendSpacing = 4; @@ -64,7 +67,13 @@ const draw: DrawDefinition = (txt, id, _version, diagObj) => { .append('g') .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')'); - const themeVariables = config.themeVariables; + const data = diagObj.db.getSections(); + let sum = 0; + Object.keys(data).forEach(function (key) { + sum += data[key]; + }); + + const themeVariables = conf.themeVariables; const myGeneratedColors = [ themeVariables.pie1, themeVariables.pie2, @@ -80,33 +89,26 @@ const draw: DrawDefinition = (txt, id, _version, diagObj) => { themeVariables.pie12, ]; - const textPosition = config.pie?.textPosition ?? 0.75; + const textPosition = conf.pie?.textPosition ?? 0.75; let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth); outerStrokeWidth ??= 2; // Set the color scale const color = scaleOrdinal().range(myGeneratedColors); - const sections: Sections = db.getSections(); - let sum = 0; - Object.keys(sections).forEach((key: string) => { - sum += sections[key]; - }); - - // compute the position of each group on the pie: - const pieData = Object.entries(sections).map((el: [string, number], index: number) => { + // Compute the position of each group on the pie: + const pieData = Object.entries(data).map(function (el, idx) { return { - order: index, + order: idx, name: el[0], value: el[1], }; }); const pie = d3pie() - // @ts-ignore: TODO Fix ts errors - .value((d) => { - return d; + .value(function (d) { + return d.value; }) - .sort((a, b) => { + .sort(function (a, b) { // Sort slices in clockwise direction return a.order - b.order; }); @@ -132,8 +134,7 @@ const draw: DrawDefinition = (txt, id, _version, diagObj) => { .enter() .append('path') .attr('d', arcGenerator) - // @ts-ignore: TODO Fix ts errors - .attr('fill', (d) => { + .attr('fill', function (d) { return color(d.data.name); }) .attr('class', 'pieCircle'); @@ -145,12 +146,10 @@ const draw: DrawDefinition = (txt, id, _version, diagObj) => { .data(dataReady) .enter() .append('text') - // @ts-ignore: TODO Fix ts errors - .text((d) => { + .text(function (d) { return ((d.data.value / sum) * 100).toFixed(0) + '%'; }) - // @ts-ignore: TODO Fix ts errors - .attr('transform', (d) => { + .attr('transform', function (d) { return 'translate(' + labelArcGenerator.centroid(d) + ')'; }) .style('text-anchor', 'middle') @@ -158,7 +157,7 @@ const draw: DrawDefinition = (txt, id, _version, diagObj) => { svg .append('text') - .text(db.getDiagramTitle()) + .text(diagObj.db.getDiagramTitle()) .attr('x', 0) .attr('y', -(height - 50) / 2) .attr('class', 'pieTitleText'); @@ -170,12 +169,11 @@ const draw: DrawDefinition = (txt, id, _version, diagObj) => { .enter() .append('g') .attr('class', 'legend') - // @ts-ignore: TODO Fix ts errors - .attr('transform', (d, index: number) => { + .attr('transform', function (d, i) { const height = legendRectSize + legendSpacing; const offset = (height * color.domain().length) / 2; const horizontal = 12 * legendRectSize; - const vertical = index * height - offset; + const vertical = i * height - offset; return 'translate(' + horizontal + ',' + vertical + ')'; }); @@ -191,16 +189,16 @@ const draw: DrawDefinition = (txt, id, _version, diagObj) => { .append('text') .attr('x', legendRectSize + legendSpacing) .attr('y', legendRectSize - legendSpacing) - // @ts-ignore: TODO Fix ts errors - .text((d) => { - if (db.getShowData()) { + .text(function (d) { + if (diagObj.db.getShowData() || conf.showData || conf.pie.showData) { return d.data.name + ' [' + d.data.value + ']'; } else { return d.data.name; } }); } catch (e) { - log.error('error while rendering pie chart', e); + log.error('Error while rendering info diagram'); + log.error(e); } }; From 5aba2fed8b408d3900d657897c4ac7afdd276ae5 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sat, 17 Jun 2023 00:01:54 +0300 Subject: [PATCH 034/595] remove cy.get of info diagram --- cypress/integration/rendering/info.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/cypress/integration/rendering/info.spec.ts b/cypress/integration/rendering/info.spec.ts index 52763a8363..3db74c9802 100644 --- a/cypress/integration/rendering/info.spec.ts +++ b/cypress/integration/rendering/info.spec.ts @@ -3,11 +3,9 @@ import { imgSnapshotTest } from '../../helpers/util.js'; describe('info diagram', () => { it('should handle an info definition', () => { imgSnapshotTest(`info`); - cy.get('svg'); }); it('should handle an info definition with showInfo', () => { imgSnapshotTest(`info showInfo`); - cy.get('svg'); }); }); From f2338f5b6615745a0bf54bae1a6f969d5f948615 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sat, 17 Jun 2023 00:42:29 +0300 Subject: [PATCH 035/595] remove vanilla-extract from dev dependencies --- packages/mermaid/package.json | 1 - pnpm-lock.yaml | 58 +++-------------------------------- 2 files changed, 5 insertions(+), 54 deletions(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index f4f2dc3011..c29ab82c75 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -85,7 +85,6 @@ "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.59.0", "@typescript-eslint/parser": "^5.59.0", - "@vanilla-extract/css": "^1.11.1", "chokidar": "^3.5.3", "concurrently": "^8.0.1", "coveralls": "^3.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec738f0540..0014d1c3f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -272,9 +272,6 @@ importers: '@typescript-eslint/parser': specifier: ^5.59.0 version: 5.59.0(eslint@8.39.0)(typescript@5.0.4) - '@vanilla-extract/css': - specifier: ^1.11.1 - version: 1.11.1 chokidar: specifier: ^3.5.3 version: 3.5.3 @@ -346,7 +343,7 @@ importers: version: 1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) vitepress-plugin-search: specifier: ^1.0.4-alpha.20 - version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.2.47) + version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.3.4) packages/mermaid-example-diagram: dependencies: @@ -866,6 +863,7 @@ packages: dependencies: '@applitools/eg-frpc': 1.0.2 '@applitools/eg-socks5-proxy-server': 0.5.4 + '@applitools/execution-grid-tunnel': 1.0.24 '@applitools/logger': 1.1.48 dotenv: 16.3.0 encoding: 0.1.13 @@ -2988,10 +2986,6 @@ packages: - search-insights dev: true - /@emotion/hash@0.9.1: - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: true - /@es-joy/jsdoccomment@0.37.1: resolution: {integrity: sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==} engines: {node: ^14 || ^16 || ^17 || ^18 || ^19 || ^20} @@ -4781,26 +4775,6 @@ packages: - rollup dev: true - /@vanilla-extract/css@1.11.1: - resolution: {integrity: sha512-iLalh4K4sXgkfzsiFUsiek4IY1/N4jtJKdr1ubpyszPE7W7G2v+DAl8KcmKkRA6vS7k5mFNW34e4fNki6T2cbQ==} - dependencies: - '@emotion/hash': 0.9.1 - '@vanilla-extract/private': 1.0.3 - ahocorasick: 1.0.2 - chalk: 4.1.2 - css-what: 6.1.0 - cssesc: 3.0.0 - csstype: 3.1.2 - deep-object-diff: 1.1.9 - deepmerge: 4.3.1 - media-query-parser: 2.0.2 - outdent: 0.8.0 - dev: true - - /@vanilla-extract/private@1.0.3: - resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==} - dev: true - /@vite-pwa/vitepress@0.0.5(vite-plugin-pwa@0.15.0): resolution: {integrity: sha512-B6xy9wxi9fen+/AnRkY2+XCrbhqh2b/TsVTka6qFQ3zJ8zHSoEUHUucYT3KHMcY5I124G0ZmPKNW+UF9Jx1k4w==} peerDependencies: @@ -5506,10 +5480,6 @@ packages: indent-string: 5.0.0 dev: true - /ahocorasick@1.0.2: - resolution: {integrity: sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==} - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -6964,15 +6934,11 @@ packages: source-map-js: 1.0.2 dev: true - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + dev: false /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -7552,10 +7518,6 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deep-object-diff@1.1.9: - resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} - dev: true - /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -11195,12 +11157,6 @@ packages: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: true - /media-query-parser@2.0.2: - resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} - dependencies: - '@babel/runtime': 7.22.5 - dev: true - /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -11935,10 +11891,6 @@ packages: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} dev: true - /outdent@0.8.0: - resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} - dev: true - /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -14791,7 +14743,7 @@ packages: fsevents: 2.3.2 dev: true - /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.2.47): + /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.3.4): resolution: {integrity: sha512-zG+ev9pw1Mg7htABlFCNXb8XwnKN+qfTKw+vU0Ers6RIrABx+45EAAFBoaL1mEpl1FRFn1o/dQ7F4b8GP6HdGQ==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} peerDependencies: @@ -14805,7 +14757,7 @@ packages: glob-to-regexp: 0.4.1 markdown-it: 13.0.1 vitepress: 1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) - vue: 3.2.47 + vue: 3.3.4 dev: true /vitepress@1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0): From 8794fa0b38a8af6a6dece3120be26520bdeb824d Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sat, 17 Jun 2023 03:28:08 +0300 Subject: [PATCH 036/595] clean up pieRenderer.ts --- .../mermaid/src/diagrams/pie/pieRenderer.ts | 78 +++++++++---------- 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts index b7ef819e45..80969016c2 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -2,10 +2,10 @@ import { select, scaleOrdinal, pie as d3pie, arc } from 'd3'; import { log } from '../../logger.js'; import { configureSvgSize } from '../../setupGraphViewbox.js'; -import * as configApi from '../../config.js'; +import { getConfig } from '../../config.js'; import { parseFontSize } from '../../utils.js'; - -let conf = configApi.getConfig(); +import { DrawDefinition } from '../../diagram-api/types.js'; +import { PieDb, Sections } from './pieTypes.js'; /** * Draws a Pie Chart with the data given in text. @@ -13,15 +13,15 @@ let conf = configApi.getConfig(); * @param text - pie chart code * @param id - diagram id */ -let width; -const height = 450; -export const draw = (txt, id, _version, diagObj) => { +export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { try { - conf = configApi.getConfig(); - log.debug('Rendering info diagram\n' + txt); + log.debug('rendering pie chart\n' + txt); - const securityLevel = configApi.getConfig().securityLevel; - // Handle root and Document for when rendering in sandbox mode + let width: number; + const height = 450; + const config = getConfig(); + const { securityLevel } = config; + // handle root and document for when rendering in sandbox mode let sandboxElement; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); @@ -31,32 +31,29 @@ export const draw = (txt, id, _version, diagObj) => { ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; - - // Parse the Pie Chart definition - diagObj.db.clear(); - diagObj.parser.parse(txt); - log.debug('Parsed info diagram'); const elem = doc.getElementById(id); width = elem.parentElement.offsetWidth; + // Parse the Pie Chart definition + const db = diagramObject.db as PieDb; + db.clear(); + + log.debug('parsing pie chart'); + diagramObject.parser.parse(txt); + if (width === undefined) { width = 1200; } - - if (conf.useWidth !== undefined) { - width = conf.useWidth; - } - if (conf.pie.useWidth !== undefined) { - width = conf.pie.useWidth; + if (config.pie?.useWidth !== undefined) { + width = config.pie.useWidth; } const diagram = root.select('#' + id); - configureSvgSize(diagram, height, width, conf.pie.useMaxWidth); + configureSvgSize(diagram, height, width, config.pie?.useMaxWidth ?? true); // Set viewBox elem.setAttribute('viewBox', '0 0 ' + width + ' ' + height); - // Fetch the default direction, use TD if none was found const margin = 40; const legendRectSize = 18; const legendSpacing = 4; @@ -67,13 +64,13 @@ export const draw = (txt, id, _version, diagObj) => { .append('g') .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')'); - const data = diagObj.db.getSections(); + const sections: Sections = db.getSections(); let sum = 0; - Object.keys(data).forEach(function (key) { - sum += data[key]; + Object.keys(sections).forEach((key: string): void => { + sum += sections[key]; }); - const themeVariables = conf.themeVariables; + const themeVariables = config.themeVariables; const myGeneratedColors = [ themeVariables.pie1, themeVariables.pie2, @@ -89,7 +86,7 @@ export const draw = (txt, id, _version, diagObj) => { themeVariables.pie12, ]; - const textPosition = conf.pie?.textPosition ?? 0.75; + const textPosition = config.pie?.textPosition ?? 0.75; let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth); outerStrokeWidth ??= 2; @@ -97,7 +94,7 @@ export const draw = (txt, id, _version, diagObj) => { const color = scaleOrdinal().range(myGeneratedColors); // Compute the position of each group on the pie: - const pieData = Object.entries(data).map(function (el, idx) { + const pieData = Object.entries(sections).map(function (el, idx) { return { order: idx, name: el[0], @@ -105,10 +102,10 @@ export const draw = (txt, id, _version, diagObj) => { }; }); const pie = d3pie() - .value(function (d) { + .value((d): number => { return d.value; }) - .sort(function (a, b) { + .sort((a, b): number => { // Sort slices in clockwise direction return a.order - b.order; }); @@ -134,7 +131,7 @@ export const draw = (txt, id, _version, diagObj) => { .enter() .append('path') .attr('d', arcGenerator) - .attr('fill', function (d) { + .attr('fill', (d) => { return color(d.data.name); }) .attr('class', 'pieCircle'); @@ -146,10 +143,10 @@ export const draw = (txt, id, _version, diagObj) => { .data(dataReady) .enter() .append('text') - .text(function (d) { + .text((d): string => { return ((d.data.value / sum) * 100).toFixed(0) + '%'; }) - .attr('transform', function (d) { + .attr('transform', (d): string => { return 'translate(' + labelArcGenerator.centroid(d) + ')'; }) .style('text-anchor', 'middle') @@ -157,7 +154,7 @@ export const draw = (txt, id, _version, diagObj) => { svg .append('text') - .text(diagObj.db.getDiagramTitle()) + .text(db.getDiagramTitle()) .attr('x', 0) .attr('y', -(height - 50) / 2) .attr('class', 'pieTitleText'); @@ -169,11 +166,11 @@ export const draw = (txt, id, _version, diagObj) => { .enter() .append('g') .attr('class', 'legend') - .attr('transform', function (d, i) { + .attr('transform', (d, index: number): string => { const height = legendRectSize + legendSpacing; const offset = (height * color.domain().length) / 2; const horizontal = 12 * legendRectSize; - const vertical = i * height - offset; + const vertical = index * height - offset; return 'translate(' + horizontal + ',' + vertical + ')'; }); @@ -189,16 +186,15 @@ export const draw = (txt, id, _version, diagObj) => { .append('text') .attr('x', legendRectSize + legendSpacing) .attr('y', legendRectSize - legendSpacing) - .text(function (d) { - if (diagObj.db.getShowData() || conf.showData || conf.pie.showData) { + .text((d): string => { + if (db.getShowData()) { return d.data.name + ' [' + d.data.value + ']'; } else { return d.data.name; } }); } catch (e) { - log.error('Error while rendering info diagram'); - log.error(e); + log.error('error while rendering pie chart\n', e); } }; From 23a5832fc947e0d79f30496de2a69c0e72bbb4f2 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sat, 17 Jun 2023 04:05:07 +0300 Subject: [PATCH 037/595] add null safety in pieRenderer --- packages/mermaid/src/diagrams/pie/pieRenderer.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts index 80969016c2..77f4e9587e 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -4,7 +4,7 @@ import { log } from '../../logger.js'; import { configureSvgSize } from '../../setupGraphViewbox.js'; import { getConfig } from '../../config.js'; import { parseFontSize } from '../../utils.js'; -import { DrawDefinition } from '../../diagram-api/types.js'; +import { DrawDefinition, HTML } from '../../diagram-api/types.js'; import { PieDb, Sections } from './pieTypes.js'; /** @@ -17,12 +17,12 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { try { log.debug('rendering pie chart\n' + txt); - let width: number; + let width: number | undefined; const height = 450; const config = getConfig(); const { securityLevel } = config; // handle root and document for when rendering in sandbox mode - let sandboxElement; + let sandboxElement: HTML | undefined; if (securityLevel === 'sandbox') { sandboxElement = select('#i' + id); } @@ -31,8 +31,8 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { ? select(sandboxElement.nodes()[0].contentDocument.body) : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; - const elem = doc.getElementById(id); - width = elem.parentElement.offsetWidth; + const elem = doc?.getElementById(id); + width = elem?.parentElement?.offsetWidth; // Parse the Pie Chart definition const db = diagramObject.db as PieDb; @@ -52,7 +52,7 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { configureSvgSize(diagram, height, width, config.pie?.useMaxWidth ?? true); // Set viewBox - elem.setAttribute('viewBox', '0 0 ' + width + ' ' + height); + elem?.setAttribute('viewBox', '0 0 ' + width + ' ' + height); const margin = 40; const legendRectSize = 18; From 6941814729f6f56716f5ad2301186850f8322df7 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sat, 17 Jun 2023 14:57:31 +0300 Subject: [PATCH 038/595] update pnpm-lock.yaml --- pnpm-lock.yaml | 4616 +++++++++++++++++++++++------------------------- 1 file changed, 2185 insertions(+), 2431 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dcfa0d7bed..ebd0d38ef1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,7 +22,7 @@ importers: version: 6.31.1 '@cypress/code-coverage': specifier: ^3.10.7 - version: 3.10.7(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.75.0) + version: 3.10.7(@babel/core@7.22.5)(@babel/preset-env@7.22.5)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.74.0) '@rollup/plugin-typescript': specifier: ^11.1.1 version: 11.1.1(typescript@5.1.3) @@ -205,7 +205,7 @@ importers: version: 2.1.0(cytoscape@3.23.0) d3: specifier: ^7.4.0 - version: 7.8.2 + version: 7.4.0 dagre-d3-es: specifier: 7.0.10 version: 7.0.10 @@ -281,10 +281,10 @@ importers: version: 9.0.1 '@typescript-eslint/eslint-plugin': specifier: ^5.59.0 - version: 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.39.0)(typescript@5.0.4) + version: 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.39.0)(typescript@5.1.3) '@typescript-eslint/parser': specifier: ^5.59.0 - version: 5.59.0(eslint@8.39.0)(typescript@5.0.4) + version: 5.59.0(eslint@8.39.0)(typescript@5.1.3) chokidar: specifier: ^3.5.3 version: 3.5.3 @@ -341,28 +341,28 @@ importers: version: 2.0.0 typedoc: specifier: ^0.24.5 - version: 0.24.5(typescript@5.0.4) + version: 0.24.5(typescript@5.1.3) typedoc-plugin-markdown: specifier: ^3.15.2 version: 3.15.2(typedoc@0.24.5) typescript: specifier: ^5.0.4 - version: 5.0.4 + version: 5.1.3 unist-util-flatmap: specifier: ^1.0.0 version: 1.0.0 vitepress: specifier: ^1.0.0-alpha.72 - version: 1.0.0-alpha.72(@algolia/client-search@4.14.2)(@types/node@18.16.0) + version: 1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) vitepress-plugin-search: specifier: ^1.0.4-alpha.20 - version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.3.4) + version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.2.47) packages/mermaid-example-diagram: dependencies: '@braintree/sanitize-url': specifier: ^6.0.0 - version: 6.0.0 + version: 6.0.2 cytoscape: specifier: ^3.23.0 version: 3.23.0 @@ -374,7 +374,7 @@ importers: version: 2.1.0(cytoscape@3.23.0) d3: specifier: ^7.0.0 - version: 7.8.2 + version: 7.4.0 khroma: specifier: ^2.0.0 version: 2.0.0 @@ -428,7 +428,7 @@ importers: version: 0.0.5(vite-plugin-pwa@0.15.0) '@vitejs/plugin-vue': specifier: ^4.2.1 - version: 4.2.1(vite@4.3.3)(vue@3.2.47) + version: 4.2.1(vite@4.3.9)(vue@3.2.47) fast-glob: specifier: ^3.2.12 version: 3.2.12 @@ -440,71 +440,19 @@ importers: version: 1.1.0 unocss: specifier: ^0.52.0 - version: 0.52.0(postcss@8.4.23)(rollup@2.79.1)(vite@4.3.3) + version: 0.52.0(postcss@8.4.24)(rollup@2.79.1)(vite@4.3.9) unplugin-vue-components: specifier: ^0.24.1 version: 0.24.1(rollup@2.79.1)(vue@3.2.47) vite: specifier: ^4.3.3 - version: 4.3.3(@types/node@18.16.0) + version: 4.3.9(@types/node@18.16.0) vite-plugin-pwa: specifier: ^0.15.0 - version: 0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4) + version: 0.15.0(vite@4.3.9)(workbox-build@6.6.0)(workbox-window@6.5.4) vitepress: specifier: 1.0.0-beta.1 - version: 1.0.0-beta.1(@algolia/client-search@4.14.2)(@types/node@18.16.0) - workbox-window: - specifier: ^6.5.4 - version: 6.5.4 - - packages/mermaid/src/vitepress: - dependencies: - '@vueuse/core': - specifier: ^10.1.0 - version: 10.1.0(vue@3.2.47) - jiti: - specifier: ^1.18.2 - version: 1.18.2 - vue: - specifier: ^3.2.47 - version: 3.2.47 - devDependencies: - '@iconify-json/carbon': - specifier: ^1.1.16 - version: 1.1.16 - '@unocss/reset': - specifier: ^0.52.0 - version: 0.52.0 - '@vite-pwa/vitepress': - specifier: ^0.0.5 - version: 0.0.5(vite-plugin-pwa@0.15.0) - '@vitejs/plugin-vue': - specifier: ^4.2.1 - version: 4.2.1(vite@4.3.3)(vue@3.2.47) - fast-glob: - specifier: ^3.2.12 - version: 3.2.12 - https-localhost: - specifier: ^4.7.1 - version: 4.7.1 - pathe: - specifier: ^1.1.0 - version: 1.1.0 - unocss: - specifier: ^0.52.0 - version: 0.52.0(postcss@8.4.23)(rollup@2.79.1)(vite@4.3.3) - unplugin-vue-components: - specifier: ^0.24.1 - version: 0.24.1(rollup@2.79.1)(vue@3.2.47) - vite: - specifier: ^4.3.3 - version: 4.3.3(@types/node@18.16.0) - vite-plugin-pwa: - specifier: ^0.15.0 - version: 0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4) - vitepress: - specifier: 1.0.0-beta.2 - version: 1.0.0-beta.2(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0) + version: 1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) workbox-window: specifier: ^6.5.4 version: 6.5.4 @@ -520,22 +468,16 @@ importers: devDependencies: webpack: specifier: ^5.74.0 - version: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + version: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 - version: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + version: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) webpack-dev-server: specifier: ^4.11.1 - version: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) + version: 4.11.1(webpack-cli@4.10.0)(webpack@5.74.0) packages: - /@algolia/autocomplete-core@1.8.2: - resolution: {integrity: sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==} - dependencies: - '@algolia/autocomplete-shared': 1.8.2 - dev: true - /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2)(search-insights@2.6.0): resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} dependencies: @@ -559,20 +501,8 @@ packages: - algoliasearch dev: true - /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2): resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - dependencies: - '@algolia/autocomplete-shared': 1.8.2 - '@algolia/client-search': 4.14.2 - algoliasearch: 4.14.2 - dev: true - - /@algolia/autocomplete-preset-algolia@1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2): - resolution: {integrity: sha512-pqgIm2GNqtCT59Y1ICctIPrYTi34+wNPiNWEclD/yDzp5uDUUsyGe5XrUjCNyQRTKonAlmYxoaEHOn8FWgmBHA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' @@ -582,108 +512,104 @@ packages: algoliasearch: 4.17.2 dev: true - /@algolia/autocomplete-shared@1.8.2: - resolution: {integrity: sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==} - dev: true - /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2): resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: - '@algolia/client-search': 4.14.2 - algoliasearch: 4.14.2 + '@algolia/client-search': 4.17.2 + algoliasearch: 4.17.2 dev: true - /@algolia/cache-browser-local-storage@4.14.2: - resolution: {integrity: sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==} + /@algolia/cache-browser-local-storage@4.17.2: + resolution: {integrity: sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==} dependencies: - '@algolia/cache-common': 4.14.2 + '@algolia/cache-common': 4.17.2 dev: true - /@algolia/cache-common@4.14.2: - resolution: {integrity: sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==} + /@algolia/cache-common@4.17.2: + resolution: {integrity: sha512-fojbhYIS8ovfYs6hwZpy1O4mBfVRxNgAaZRqsdVQd54hU4MxYDYFCxagYX28lOBz7btcDHld6BMoWXvjzkx6iQ==} dev: true - /@algolia/cache-in-memory@4.14.2: - resolution: {integrity: sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==} + /@algolia/cache-in-memory@4.17.2: + resolution: {integrity: sha512-UYQcMzPurNi+cPYkuPemTZkjKAjdgAS1hagC5irujKbrYnN4yscK4TkOI5tX+O8/KegtJt3kOK07OIrJ2QDAAw==} dependencies: - '@algolia/cache-common': 4.14.2 + '@algolia/cache-common': 4.17.2 dev: true - /@algolia/client-account@4.14.2: - resolution: {integrity: sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==} + /@algolia/client-account@4.17.2: + resolution: {integrity: sha512-doSk89pBPDpDyKJSHFADIGa2XSGrBCj3QwPvqtRJXDADpN+OjW+eTR8r4hEs/7X4GGfjfAOAES8JgDx+fZntYw==} dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/client-search': 4.14.2 - '@algolia/transporter': 4.14.2 + '@algolia/client-common': 4.17.2 + '@algolia/client-search': 4.17.2 + '@algolia/transporter': 4.17.2 dev: true - /@algolia/client-analytics@4.14.2: - resolution: {integrity: sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==} + /@algolia/client-analytics@4.17.2: + resolution: {integrity: sha512-V+DcXbOtD/hKwAR3qGQrtlrJ3q2f9OKfx843q744o4m3xHv5ueCAvGXB1znPsdaUrVDNAImcgEgqwI9x7EJbDw==} dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/client-search': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 + '@algolia/client-common': 4.17.2 + '@algolia/client-search': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 dev: true - /@algolia/client-common@4.14.2: - resolution: {integrity: sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==} + /@algolia/client-common@4.17.2: + resolution: {integrity: sha512-gKBUnjxi0ukJYIJxVREYGt1Dmj1B3RBYbfGWi0dIPp1BC1VvQm+BOuNwsIwmq/x3MPO+sGuK978eKiP3tZDvag==} dependencies: - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 dev: true - /@algolia/client-personalization@4.14.2: - resolution: {integrity: sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==} + /@algolia/client-personalization@4.17.2: + resolution: {integrity: sha512-wc4UgOWxSYWz5wpuelNmlt895jA9twjZWM2ms17Ws8qCvBHF7OVGdMGgbysPB8790YnfvvDnSsWOv3CEj26Eow==} dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 + '@algolia/client-common': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 dev: true - /@algolia/client-search@4.14.2: - resolution: {integrity: sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==} + /@algolia/client-search@4.17.2: + resolution: {integrity: sha512-FUjIs+gRe0upJC++uVs4sdxMw15JxfkT86Gr/kqVwi9kcqaZhXntSbW/Fw959bIYXczjmeVQsilYvBWW4YvSZA==} dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 + '@algolia/client-common': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/transporter': 4.17.2 dev: true - /@algolia/logger-common@4.14.2: - resolution: {integrity: sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==} + /@algolia/logger-common@4.17.2: + resolution: {integrity: sha512-EfXuweUE+1HiSMsQidaDWA5Lv4NnStYIlh7PO5pLkI+sdhbMX0e5AO5nUAMIFM1VkEANes70RA8fzhP6OqCqQQ==} dev: true - /@algolia/logger-console@4.14.2: - resolution: {integrity: sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==} + /@algolia/logger-console@4.17.2: + resolution: {integrity: sha512-JuG8HGVlJ+l/UEDK4h2Y8q/IEmRjQz1J0aS9tf6GPNbGYiSvMr1DDdZ+hqV3bb1XE6wU8Ypex56HisWMSpnG0A==} dependencies: - '@algolia/logger-common': 4.14.2 + '@algolia/logger-common': 4.17.2 dev: true - /@algolia/requester-browser-xhr@4.14.2: - resolution: {integrity: sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==} + /@algolia/requester-browser-xhr@4.17.2: + resolution: {integrity: sha512-FKI2lYWwksALfRt2OETFmGb5+P7WVc4py2Ai3H7k8FSfTLwVvs9WVVmtlx6oANQ8RFEK4B85h8DQJTJ29TDfmA==} dependencies: - '@algolia/requester-common': 4.14.2 + '@algolia/requester-common': 4.17.2 dev: true - /@algolia/requester-common@4.14.2: - resolution: {integrity: sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==} + /@algolia/requester-common@4.17.2: + resolution: {integrity: sha512-Rfim23ztAhYpE9qm+KCfCRo+YLJCjiiTG+IpDdzUjMpYPhUtirQT0A35YEd/gKn86YNyydxS9w8iRSjwKh+L0A==} dev: true - /@algolia/requester-node-http@4.14.2: - resolution: {integrity: sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==} + /@algolia/requester-node-http@4.17.2: + resolution: {integrity: sha512-E0b0kyCDMvUIhQmDNd/mH4fsKJdEEX6PkMKrYJjzm6moo+rP22tqpq4Rfe7DZD8OB6/LsDD3zs3Kvd+L+M5wwQ==} dependencies: - '@algolia/requester-common': 4.14.2 + '@algolia/requester-common': 4.17.2 dev: true - /@algolia/transporter@4.14.2: - resolution: {integrity: sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==} + /@algolia/transporter@4.17.2: + resolution: {integrity: sha512-m8pXlz5OnNzjD1rcw+duCN4jG4yEzkJBsvKYMoN22Oq6rQwy1AY5muZ+IQUs4dL+A364CYkRMLRWhvXpCZ1x+g==} dependencies: - '@algolia/cache-common': 4.14.2 - '@algolia/logger-common': 4.14.2 - '@algolia/requester-common': 4.14.2 + '@algolia/cache-common': 4.17.2 + '@algolia/logger-common': 4.17.2 + '@algolia/requester-common': 4.17.2 dev: true /@alloc/quick-lru@5.2.0: @@ -695,8 +621,8 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@antfu/install-pkg@0.1.1: @@ -706,21 +632,17 @@ packages: find-up: 5.0.0 dev: true - /@antfu/utils@0.5.2: - resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} + /@antfu/utils@0.7.4: + resolution: {integrity: sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==} dev: true - /@antfu/utils@0.7.2: - resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==} - dev: true - - /@apideck/better-ajv-errors@0.3.6(ajv@8.11.0): + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' dependencies: - ajv: 8.11.0 + ajv: 8.12.0 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -762,7 +684,7 @@ packages: '@types/ws': 8.5.4 abort-controller: 3.0.0 chalk: 4.1.2 - node-fetch: 2.6.7 + node-fetch: 2.6.7(encoding@0.1.13) webdriver: 7.30.0(typescript@5.1.3) ws: 8.12.0 yargs: 17.6.2 @@ -848,29 +770,6 @@ packages: is-localhost-ip: 2.0.0 dev: true - /@applitools/execution-grid-tunnel@1.0.19: - resolution: {integrity: sha512-kTRSNcld6fyW+vEXwsxkrgg7AfqXaA/upgUFdiIAEDoTUGqowoRfjAnkZcAgWPeEdtGEAu5KttlFp9z64EvRPQ==} - engines: {node: '>=12.13.0'} - hasBin: true - dependencies: - '@applitools/eg-frpc': 1.0.2 - '@applitools/eg-socks5-proxy-server': 0.5.4 - '@applitools/execution-grid-tunnel': 1.0.24 - '@applitools/logger': 1.1.48 - dotenv: 16.3.0 - encoding: 0.1.13 - fastify: 3.29.5 - fastify-plugin: 3.0.1 - find-process: 1.4.7 - ini: 3.0.1 - node-cleanup: 2.1.2 - node-fetch: 2.6.9(encoding@0.1.13) - p-retry: 4.6.2 - teen_process: 1.16.0 - transitivePeerDependencies: - - supports-color - dev: true - /@applitools/execution-grid-tunnel@2.1.0: resolution: {integrity: sha512-OooDCcS93+reh1hIpalDZVMhAsSaG/h+T5jGn7WzIYL4wVdi/GLyibvzxlY1hLFGi0EhUJGckpMoHiTZ6EuV2w==} engines: {node: '>=12.13.0'} @@ -878,7 +777,7 @@ packages: dependencies: '@applitools/eg-frpc': 1.0.3 '@applitools/eg-socks5-proxy-server': 0.5.4 - '@applitools/logger': 1.1.48 + '@applitools/logger': 1.1.53 dotenv: 16.3.0 encoding: 0.1.13 fastify: 3.29.5 @@ -886,7 +785,7 @@ packages: find-process: 1.4.7 ini: 3.0.1 node-cleanup: 2.1.2 - node-fetch: 2.6.9(encoding@0.1.13) + node-fetch: 2.6.7(encoding@0.1.13) p-retry: 4.6.2 teen_process: 1.16.0 transitivePeerDependencies: @@ -964,18 +863,18 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.5 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 w3c-hr-time: 1.0.2 w3c-xmlserializer: 3.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 10.0.0 - ws: 8.13.0 + ws: 8.12.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -983,11 +882,11 @@ packages: - utf-8-validate dev: true - /@applitools/logger@1.1.48: - resolution: {integrity: sha512-A/8Q9p2INPDOMGE8Hqodpw5UxXLGdW4z2w8gOzEJ3zi0MyLOY3lBZiaPKEP0nmOs29q4r/yr0srYY5j9FVAmCg==} + /@applitools/logger@1.1.53: + resolution: {integrity: sha512-4mlzYxc0MgM3WIxEwKqIjn9W7G7kMtQc2bFRxozViKOXypTfr72j8iODs88wcetP0GsXtplhZQ5/6aZN5WY9ug==} engines: {node: '>=12.13.0'} dependencies: - '@applitools/utils': 1.3.32 + '@applitools/utils': 1.3.36 chalk: 4.1.2 debug: 4.3.3 transitivePeerDependencies: @@ -1090,8 +989,8 @@ packages: - utf-8-validate dev: true - /@applitools/utils@1.3.32: - resolution: {integrity: sha512-GSMSf1NNW6fEm0u1ANGrQY+ESs8UgDYAZnaVrgjpFJ8ONL8eVDXn3tiIDdhmj/HKthAHqiYOYdRESmpuru/zrQ==} + /@applitools/utils@1.3.36: + resolution: {integrity: sha512-eROEssh7wIW+V87PvLiHI2hUPxqoBxXFMRx3+z5qOZqXUPSR1Uz7EMFwxZcDDR7T6C3O3UDckB2aVB5fJAg5JA==} engines: {node: '>=12.13.0'} dev: true @@ -1100,119 +999,119 @@ packages: engines: {node: '>=12.13.0'} dev: true - /@babel/code-frame@7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.5 dev: true - /@babel/compat-data@7.21.0: - resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} + /@babel/compat-data@7.22.5: + resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.12.3: - resolution: {integrity: sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==} + /@babel/core@7.22.5: + resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.1 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helpers': 7.19.0 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.2 - '@babel/types': 7.21.2 - convert-source-map: 1.8.0 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 - json5: 2.2.1 - lodash: 4.17.21 - resolve: 1.22.2 - semver: 5.7.1 - source-map: 0.5.7 + json5: 2.2.3 + semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/generator@7.21.1: - resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==} + /@babel/generator@7.22.5: + resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure@7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.18.9: - resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: + resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-compilation-targets@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.12.3 - '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} + /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} + /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-annotate-as-pure': 7.18.6 - regexpu-core: 5.3.1 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.0 dev: true - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.12.3): - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.5): + resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.2 @@ -1221,1017 +1120,1067 @@ packages: - supports-color dev: true - /@babel/helper-environment-visitor@7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-explode-assignable-expression@7.18.6: - resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.2 - dev: true - - /@babel/helper-function-name@7.21.0: - resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.2 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 dev: true - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-member-expression-to-functions@7.21.0: - resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} + /@babel/helper-member-expression-to-functions@7.22.5: + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-module-imports@7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-module-transforms@7.21.2: - resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} + /@babel/helper-module-transforms@7.22.5: + resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.2 - '@babel/types': 7.21.2 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-optimise-call-expression@7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-plugin-utils@7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.12.3): - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.2 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-replace-supers@7.20.7: - resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} + /@babel/helper-replace-supers@7.22.5: + resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.2 - '@babel/types': 7.21.2 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-simple-access@7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-split-export-declaration@7.22.5: + resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true - /@babel/helper-string-parser@7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.21.0: - resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function@7.20.5: - resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} + /@babel/helper-wrap-function@7.22.5: + resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.21.0 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.2 - '@babel/types': 7.21.2 + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/helpers@7.19.0: - resolution: {integrity: sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==} + /@babel/helpers@7.22.5: + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.2 - '@babel/types': 7.21.2 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 dev: true - /@babel/parser@7.21.8: - resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.3) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: - '@babel/core': ^7.12.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.12.3) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.12.3): - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.12.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.12.3) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.12.3): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.12.3): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.12.3): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.12.3): - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.12.3): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.5): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-transform-async-generator-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.12.3): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.12.3): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-transform-classes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.12.3): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.12.3): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.12.3): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} + /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.12.3) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.12.3) - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/template': 7.20.7 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-destructuring@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} + /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.12.3): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-for-of@7.21.0(@babel/core@7.12.3): - resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.12.3): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.12.3) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.12.3): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.12.3): - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.12.3): - resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.12.3): - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.12.3): - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-parameters@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} + /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.12.3): - resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.12.3): - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.12.3): - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.12.3): - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.12.3): - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.12.3): - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.20.2(@babel/core@7.12.3): - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + /@babel/preset-env@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.12.3 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.12.3) - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.12.3) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.12.3) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.12.3) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.12.3) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.12.3) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.12.3) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.12.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.12.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.12.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.12.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.12.3) - '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.12.3) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.12.3) - '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-transform-destructuring': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.12.3) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.12.3) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.12.3) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.12.3) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.12.3) - '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.12.3) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.12.3) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.12.3) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-parameters': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.12.3) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.12.3) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.12.3) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.12.3) - '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.12.3) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.12.3) - '@babel/preset-modules': 0.1.5(@babel/core@7.12.3) - '@babel/types': 7.21.2 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.12.3) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.12.3) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.12.3) - core-js-compat: 3.28.0 + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-generator-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.5) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.22.5) + babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.22.5) + babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.22.5) + core-js-compat: 3.31.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.12.3): + /@babel/preset-modules@0.1.5(@babel/core@7.22.5): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.12.3) - '@babel/types': 7.21.2 + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.5) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 esutils: 2.0.3 dev: true @@ -2239,56 +2188,52 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.21.0: - resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} + /@babel/runtime@7.22.5: + resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 dev: true - /@babel/template@7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.2 + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 dev: true - /@babel/traverse@7.21.2: - resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==} + /@babel/traverse@7.22.5: + resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.1 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.2 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.21.2: - resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==} + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@braintree/sanitize-url@6.0.0: - resolution: {integrity: sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==} - dev: false - /@braintree/sanitize-url@6.0.2: resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==} dev: false @@ -2306,7 +2251,7 @@ packages: hasBin: true dependencies: '@commitlint/format': 17.4.4 - '@commitlint/lint': 17.6.1 + '@commitlint/lint': 17.6.5 '@commitlint/load': 17.5.0 '@commitlint/read': 17.5.1 '@commitlint/types': 17.4.4 @@ -2332,7 +2277,7 @@ packages: engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.4.4 - ajv: 8.11.0 + ajv: 8.12.0 dev: true /@commitlint/ensure@17.4.4: @@ -2360,21 +2305,21 @@ packages: chalk: 4.1.2 dev: true - /@commitlint/is-ignored@17.4.4: - resolution: {integrity: sha512-Y3eo1SFJ2JQDik4rWkBC4tlRIxlXEFrRWxcyrzb1PUT2k3kZ/XGNuCDfk/u0bU2/yS0tOA/mTjFsV+C4qyACHw==} + /@commitlint/is-ignored@17.6.5: + resolution: {integrity: sha512-CQvAPt9gX7cuUbMrIaIMKczfWJqqr6m8IlJs0F2zYwyyMTQ87QMHIj5jJ5HhOaOkaj6dvTMVGx8Dd1I4xgUuoQ==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.4.4 - semver: 7.3.8 + semver: 7.5.0 dev: true - /@commitlint/lint@17.6.1: - resolution: {integrity: sha512-VARJ9kxH64isgwVnC+ABPafCYzqxpsWJIpDaTuI0gh8aX4GQ0i7cn9tvxtFNfJj4ER2BAJeWJ0vURdNYjK2RQQ==} + /@commitlint/lint@17.6.5: + resolution: {integrity: sha512-BSJMwkE4LWXrOsiP9KoHG+/heSDfvOL/Nd16+ojTS/DX8HZr8dNl8l3TfVr/d/9maWD8fSegRGtBtsyGuugFrw==} engines: {node: '>=v14'} dependencies: - '@commitlint/is-ignored': 17.4.4 - '@commitlint/parse': 17.4.4 - '@commitlint/rules': 17.6.1 + '@commitlint/is-ignored': 17.6.5 + '@commitlint/parse': 17.6.5 + '@commitlint/rules': 17.6.5 '@commitlint/types': 17.4.4 dev: true @@ -2388,8 +2333,8 @@ packages: '@commitlint/types': 17.4.4 '@types/node': 18.16.0 chalk: 4.1.2 - cosmiconfig: 8.0.0 - cosmiconfig-typescript-loader: 4.1.0(@types/node@18.16.0)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@5.1.3) + cosmiconfig: 8.2.0 + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.16.0)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.1.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -2406,8 +2351,8 @@ packages: engines: {node: '>=v14'} dev: true - /@commitlint/parse@17.4.4: - resolution: {integrity: sha512-EKzz4f49d3/OU0Fplog7nwz/lAfXMaDxtriidyGF9PtR+SRbgv4FhsfF310tKxs6EPj8Y+aWWuX3beN5s+yqGg==} + /@commitlint/parse@17.6.5: + resolution: {integrity: sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==} engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.4.4 @@ -2438,8 +2383,8 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.6.1: - resolution: {integrity: sha512-lUdHw6lYQ1RywExXDdLOKxhpp6857/4c95Dc/1BikrHgdysVUXz26yV0vp1GL7Gv+avx9WqZWTIVB7pNouxlfw==} + /@commitlint/rules@17.6.5: + resolution: {integrity: sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==} engines: {node: '>=v14'} dependencies: '@commitlint/ensure': 17.4.4 @@ -2475,7 +2420,7 @@ packages: '@cspell/dict-ada': 4.0.1 '@cspell/dict-aws': 3.0.0 '@cspell/dict-bash': 4.1.1 - '@cspell/dict-companies': 3.0.10 + '@cspell/dict-companies': 3.0.15 '@cspell/dict-cpp': 5.0.3 '@cspell/dict-cryptocurrencies': 3.0.1 '@cspell/dict-csharp': 4.0.2 @@ -2487,13 +2432,13 @@ packages: '@cspell/dict-elixir': 4.0.3 '@cspell/dict-en-common-misspellings': 1.0.2 '@cspell/dict-en-gb': 1.1.33 - '@cspell/dict-en_us': 4.3.2 + '@cspell/dict-en_us': 4.3.3 '@cspell/dict-filetypes': 3.0.0 '@cspell/dict-fonts': 3.0.2 '@cspell/dict-fullstack': 3.1.5 '@cspell/dict-gaming-terms': 1.0.4 '@cspell/dict-git': 2.0.0 - '@cspell/dict-golang': 6.0.1 + '@cspell/dict-golang': 6.0.2 '@cspell/dict-haskell': 4.0.1 '@cspell/dict-html': 4.0.3 '@cspell/dict-html-symbol-entities': 4.0.0 @@ -2507,12 +2452,12 @@ packages: '@cspell/dict-php': 4.0.1 '@cspell/dict-powershell': 5.0.1 '@cspell/dict-public-licenses': 2.0.2 - '@cspell/dict-python': 4.0.4 + '@cspell/dict-python': 4.1.0 '@cspell/dict-r': 2.0.1 '@cspell/dict-ruby': 5.0.0 '@cspell/dict-rust': 4.0.1 '@cspell/dict-scala': 5.0.0 - '@cspell/dict-software-terms': 3.1.8 + '@cspell/dict-software-terms': 3.1.15 '@cspell/dict-sql': 2.1.0 '@cspell/dict-svelte': 1.0.2 '@cspell/dict-swift': 2.0.1 @@ -2547,8 +2492,8 @@ packages: resolution: {integrity: sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A==} dev: true - /@cspell/dict-companies@3.0.10: - resolution: {integrity: sha512-LgPi7t9cMc2gBL63jkx/H3LAAtM/DjgZEsnmYmGqrCPWYVmKY1Y4sH2PBaV2ocE9CypV83M0DellGiUNb0kmug==} + /@cspell/dict-companies@3.0.15: + resolution: {integrity: sha512-SbSy8/YjRHNqAx8H+r5C2FxYbmW5bTDa1acqWIJxUkwACJIzwwOrtK9WWQVhiTtOGo7BVYXydXDgCBFf2H8+9A==} dev: true /@cspell/dict-cpp@5.0.3: @@ -2571,6 +2516,10 @@ packages: resolution: {integrity: sha512-jigcODm7Z4IFZ4vParwwP3IT0fIgRq/9VoxkXfrxBMsLBGGM2QltHBj7pl+joX+c4cOHxfyZktGJK1B1wFtR4Q==} dev: true + /@cspell/dict-data-science@1.0.2: + resolution: {integrity: sha512-ZyOumj/4HKXc8q0u8aa0nvGE/nBTCbiU3BA+etqs5ghh421uUwKcXN1bgJM/L/MwOihdivvTbSWmK+134BCpUw==} + dev: true + /@cspell/dict-django@4.0.2: resolution: {integrity: sha512-L0Yw6+Yh2bE9/FAMG4gy9m752G4V8HEBjEAGeRIQ9qvxDLR9yD6dPOtgEFTjv7SWlKSrLb9wA/W3Q2GKCOusSg==} dev: true @@ -2595,8 +2544,8 @@ packages: resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} dev: true - /@cspell/dict-en_us@4.3.2: - resolution: {integrity: sha512-o8xtHDLPNzW6hK5b1TaDTWt25vVi9lWlL6/dZ9YoS+ZMj+Dy/yuXatqfOgeGyU3a9+2gxC0kbr4oufMUQXI2mQ==} + /@cspell/dict-en_us@4.3.3: + resolution: {integrity: sha512-Csjm8zWo1YzLrQSdVZsRMfwHXoqqKR41pA8RpRGy2ODPjFeSteslyTW7jv1+R5V/E/IUI97Cxu+Nobm8MBy4MA==} dev: true /@cspell/dict-filetypes@3.0.0: @@ -2619,8 +2568,8 @@ packages: resolution: {integrity: sha512-n1AxyX5Kgxij/sZFkxFJlzn3K9y/sCcgVPg/vz4WNJ4K9YeTsUmyGLA2OQI7d10GJeiuAo2AP1iZf2A8j9aj2w==} dev: true - /@cspell/dict-golang@6.0.1: - resolution: {integrity: sha512-Z19FN6wgg2M/A+3i1O8qhrGaxUUGOW8S2ySN0g7vp4HTHeFmockEPwYx7gArfssNIruw60JorZv+iLJ6ilTeow==} + /@cspell/dict-golang@6.0.2: + resolution: {integrity: sha512-5pyZn4AAiYukAW+gVMIMVmUSkIERFrDX2vtPDjg8PLQUhAHWiVeQSDjuOhq9/C5GCCEZU/zWSONkGiwLBBvV9A==} dev: true /@cspell/dict-haskell@4.0.1: @@ -2675,8 +2624,10 @@ packages: resolution: {integrity: sha512-baKkbs/WGEV2lCWZoL0KBPh3uiPcul5GSDwmXEBAsR5McEW52LF94/b7xWM0EmSAc/y8ODc5LnPYC7RDRLi6LQ==} dev: true - /@cspell/dict-python@4.0.4: - resolution: {integrity: sha512-whCrxsALD66PxSbxZ++xV1HQzxpRZMiX6LXEkZlj4gWuptrzyZUdTMiI8EqVEVfyf5G4EW7HNCTz35kNL5Zl+w==} + /@cspell/dict-python@4.1.0: + resolution: {integrity: sha512-H4g3c25axmm0rvcZ/Dy+r+nKbhIeVdhe0OxlOGH8rolDiiP12ulh4Asnz07kKvYZ55sGCtXqzJ3YTzExwIR6Tw==} + dependencies: + '@cspell/dict-data-science': 1.0.2 dev: true /@cspell/dict-r@2.0.1: @@ -2695,8 +2646,8 @@ packages: resolution: {integrity: sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==} dev: true - /@cspell/dict-software-terms@3.1.8: - resolution: {integrity: sha512-gXJWSqnr8U50wHo/tpplLaZUQBQQGOwaJFHyMhN+DVNO92setoApHQ0zSqy4KSSkfvdbgYP0nPAj0MAo9/TvOw==} + /@cspell/dict-software-terms@3.1.15: + resolution: {integrity: sha512-EHnLozXWeJr3mUzLz8uH58EvnQTPZ7Y4wHDDxbQTF+QIbu41mLbPjgN/fU1pHAEsV4BzDc08E0EzAZlHxJfEKQ==} dev: true /@cspell/dict-sql@2.1.0: @@ -2748,12 +2699,12 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@cypress/code-coverage@3.10.7(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.75.0): + /@cypress/code-coverage@3.10.7(@babel/core@7.22.5)(@babel/preset-env@7.22.5)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.74.0): resolution: {integrity: sha512-kQFB8GemDAAk6JBINsR9MLEgCw2AKb3FcdHQjIJ3KV4ZER6ZF0NGdO8SRj5oTVp28oqfOab4cgoBdecRiOE3qA==} peerDependencies: cypress: '*' dependencies: - '@cypress/webpack-preprocessor': 5.17.1(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(webpack@5.75.0) + '@cypress/webpack-preprocessor': 5.17.1(@babel/core@7.22.5)(@babel/preset-env@7.22.5)(babel-loader@9.1.2)(webpack@5.74.0) chalk: 4.1.2 cypress: 12.10.0 dayjs: 1.10.7 @@ -2771,12 +2722,12 @@ packages: - webpack dev: true - /@cypress/request@2.88.10: - resolution: {integrity: sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==} + /@cypress/request@2.88.11: + resolution: {integrity: sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==} engines: {node: '>= 6'} dependencies: aws-sign2: 0.7.0 - aws4: 1.11.0 + aws4: 1.12.0 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 @@ -2788,14 +2739,14 @@ packages: json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 - qs: 6.5.3 + qs: 6.10.4 safe-buffer: 5.2.1 tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 8.3.2 dev: true - /@cypress/webpack-preprocessor@5.17.1(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(webpack@5.75.0): + /@cypress/webpack-preprocessor@5.17.1(@babel/core@7.22.5)(@babel/preset-env@7.22.5)(babel-loader@9.1.2)(webpack@5.74.0): resolution: {integrity: sha512-FE/e8ikPc8z4EVopJCaior3RGy0jd2q9Xcp5NtiwNG4XnLfEnUFTZlAGwXe75sEh4fNMPrBJW1KIz77PX5vGAw==} peerDependencies: '@babel/core': ^7.0.1 @@ -2803,13 +2754,13 @@ packages: babel-loader: ^8.0.2 || ^9 webpack: ^4 || ^5 dependencies: - '@babel/core': 7.12.3 - '@babel/preset-env': 7.20.2(@babel/core@7.12.3) - babel-loader: 9.1.2(@babel/core@7.12.3)(webpack@5.75.0) + '@babel/core': 7.22.5 + '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + babel-loader: 9.1.2(@babel/core@7.22.5)(webpack@5.74.0) bluebird: 3.7.1 debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + webpack: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -2832,31 +2783,11 @@ packages: resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} dev: true - /@docsearch/css@3.5.1: - resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} - dev: true - - /@docsearch/css@3.5.0: - resolution: {integrity: sha512-Ob5FQLubplcBNihAVtriR59FRBeP8u69F6mu4L4yIr60KfsPc10bOV0DoPErJw0zF9IBN2cNLW9qdmt8zWPxyg==} - dev: true - /@docsearch/js@3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0): resolution: {integrity: sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==} dependencies: '@docsearch/react': 3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0) preact: 10.15.1 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - dev: true - - /@docsearch/js@3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0): - resolution: {integrity: sha512-WqB+z+zVKSXDkGq028nClT9RvMzfFlemZuIulX5ZwWkdUtl4k7M9cmZA/c6kuZf7FG24XQsMHWuBjeUo9hLRyA==} - dependencies: - '@docsearch/react': 3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0) - preact: 10.11.0 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -2865,30 +2796,8 @@ packages: - search-insights dev: true - /@docsearch/react@3.3.5(@algolia/client-search@4.14.2): - resolution: {integrity: sha512-Zuxf4z5PZ9eIQkVCNu76v1H+KAztKItNn3rLzZa7kpBS+++TgNARITnZeUS7C1DKoAhJZFr6T/H+Lvc6h/iiYg==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - dependencies: - '@algolia/autocomplete-core': 1.8.2 - '@algolia/autocomplete-preset-algolia': 1.8.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) - '@docsearch/css': 3.3.5 - algoliasearch: 4.14.2 - transitivePeerDependencies: - - '@algolia/client-search' - dev: true - - /@docsearch/react@3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0): - resolution: {integrity: sha512-3IG8mmSMzSHNGy2S1VuPyYU9tFCxFpj5Ov8SYwsSHM4yMvFsaO9oFxXocA5lSenliIELhuOuS5+BdxHa/Qlf2A==} + /@docsearch/react@3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0): + resolution: {integrity: sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -2901,10 +2810,10 @@ packages: react-dom: optional: true dependencies: - '@algolia/autocomplete-core': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0) - '@algolia/autocomplete-preset-algolia': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) - '@docsearch/css': 3.5.0 - algoliasearch: 4.14.2 + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2)(search-insights@2.6.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2) + '@docsearch/css': 3.5.1 + algoliasearch: 4.17.2 transitivePeerDependencies: - '@algolia/client-search' - search-insights @@ -3124,23 +3033,23 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.39.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 dev: true - /@eslint-community/regexpp@4.5.0: - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} + /@eslint-community/regexpp@4.5.1: + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.2: - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + /@eslint/eslintrc@2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.1 - globals: 13.19.0 - ignore: 5.2.0 + espree: 9.5.2 + globals: 13.20.0 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -3174,8 +3083,8 @@ packages: '@hapi/hoek': 9.3.0 dev: true - /@humanwhocodes/config-array@0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -3204,19 +3113,31 @@ packages: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} dev: true - /@iconify/utils@2.1.5: - resolution: {integrity: sha512-6MvDI+I6QMvXn5rK9KQGdpEE4mmLTcuQdLZEiX5N+uZB+vc4Yw9K1OtnOgkl8mp4d9X0UrILREyZgF1NUwUt+Q==} + /@iconify/utils@2.1.6: + resolution: {integrity: sha512-WJNcj/mmFQoYok+576EexlCQe/g2tZ8X9jR4QLo++z6DlVqrjwt7FBYetTQ3iyTtrPMFHcAx0JiCqtUz30XG5A==} dependencies: '@antfu/install-pkg': 0.1.1 - '@antfu/utils': 0.7.2 + '@antfu/utils': 0.7.4 '@iconify/types': 2.0.0 debug: 4.3.4(supports-color@8.1.1) - kolorist: 1.7.0 + kolorist: 1.8.0 local-pkg: 0.4.3 transitivePeerDependencies: - supports-color dev: true + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -3262,9 +3183,9 @@ packages: '@types/node': 18.16.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.6.2 + ci-info: 3.8.0 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-changed-files: 29.5.0 jest-config: 29.5.0(@types/node@18.16.0)(ts-node@10.9.1) jest-haste-map: 29.5.0 @@ -3319,7 +3240,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@sinonjs/fake-timers': 10.0.2 + '@sinonjs/fake-timers': 10.1.0 '@types/node': 18.16.0 jest-message-util: 29.5.0 jest-mock: 29.5.0 @@ -3352,13 +3273,13 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@types/node': 18.16.0 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 @@ -3370,7 +3291,7 @@ packages: slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.0.1 + v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color dev: true @@ -3386,9 +3307,9 @@ packages: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /@jest/test-result@29.5.0: @@ -3406,7 +3327,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.5.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 slash: 3.0.0 dev: true @@ -3415,14 +3336,14 @@ packages: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.12.3 + '@babel/core': 7.22.5 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 jest-regex-util: 29.4.3 jest-util: 29.5.0 @@ -3442,38 +3363,45 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 18.16.0 - '@types/yargs': 17.0.13 + '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping@0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + /@jridgewell/source-map@0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping@0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -3481,8 +3409,8 @@ packages: /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 /@leichtgewicht/ip-codec@2.0.4: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} @@ -3517,7 +3445,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.15.0 /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -3526,23 +3454,23 @@ packages: dev: true optional: true - /@pkgr/utils@2.3.1: - resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} + /@pkgr/utils@2.4.1: + resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.3 + fast-glob: 3.2.12 is-glob: 4.0.3 - open: 8.4.0 + open: 9.1.0 picocolors: 1.0.0 - tiny-glob: 0.2.9 - tslib: 2.5.0 + tslib: 2.5.3 dev: true /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true - /@rollup/plugin-babel@5.3.1(@babel/core@7.12.3)(rollup@2.79.1): + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.5)(rollup@2.79.1): resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -3553,8 +3481,8 @@ packages: '@types/babel__core': optional: true dependencies: - '@babel/core': 7.12.3 - '@babel/helper-module-imports': 7.18.6 + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 dev: true @@ -3568,7 +3496,7 @@ packages: '@rollup/pluginutils': 3.1.0(rollup@2.79.1) '@types/resolve': 1.17.1 builtin-modules: 3.3.0 - deepmerge: 4.2.2 + deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.2 rollup: 2.79.1 @@ -3623,7 +3551,7 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 2.79.1 @@ -3652,23 +3580,23 @@ packages: engines: {node: '>=10'} dev: true - /@sinonjs/commons@2.0.0: - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@10.0.2: - resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} + /@sinonjs/fake-timers@10.1.0: + resolution: {integrity: sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==} dependencies: - '@sinonjs/commons': 2.0.0 + '@sinonjs/commons': 3.0.0 dev: true /@surma/rollup-plugin-off-main-thread@2.2.3: resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: - ejs: 3.1.8 - json5: 2.2.1 + ejs: 3.1.9 + json5: 2.2.3 magic-string: 0.25.9 string.prototype.matchall: 4.0.8 dev: true @@ -3694,40 +3622,40 @@ packages: /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - /@tsconfig/node16@1.0.3: - resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} /@types/assert@1.5.6: resolution: {integrity: sha512-Y7gDJiIqb9qKUHfBQYOWGngUpLORtirAVPuj/CWJrU2C6ZM4/y3XLwuwfGMF8s7QzW746LQZx23m0+1FSgjfug==} dev: false - /@types/babel__core@7.1.19: - resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} + /@types/babel__core@7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.2 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.2 + '@types/babel__traverse': 7.20.1 dev: true /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.8 - '@babel/types': 7.21.2 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 dev: true - /@types/babel__traverse@7.18.2: - resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} + /@types/babel__traverse@7.20.1: + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} dependencies: - '@babel/types': 7.21.2 + '@babel/types': 7.22.5 dev: true /@types/body-parser@1.19.2: @@ -3747,8 +3675,8 @@ packages: resolution: {integrity: sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==} dev: true - /@types/cacheable-request@6.0.2: - resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==} + /@types/cacheable-request@6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 @@ -3766,10 +3694,10 @@ packages: resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} dev: true - /@types/connect-history-api-fallback@1.3.5: - resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} + /@types/connect-history-api-fallback@1.5.0: + resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} dependencies: - '@types/express-serve-static-core': 4.17.31 + '@types/express-serve-static-core': 4.17.35 '@types/node': 18.16.0 dev: true @@ -3789,34 +3717,34 @@ packages: resolution: {integrity: sha512-oqCx0ZGiBO0UESbjgq052vjDAy2X53lZpMrWqiweMpvVwKw/2IiYDdzPFK6+f4tMfdv9YKEM9raO5bAZc3UYBg==} dev: true - /@types/d3-array@3.0.3: - resolution: {integrity: sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ==} + /@types/d3-array@3.0.5: + resolution: {integrity: sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==} dev: true - /@types/d3-axis@3.0.1: - resolution: {integrity: sha512-zji/iIbdd49g9WN0aIsGcwcTBUkgLsCSwB+uH+LPVDAiKWENMtI3cJEWt+7/YYwelMoZmbBfzA3qCdrZ2XFNnw==} + /@types/d3-axis@3.0.2: + resolution: {integrity: sha512-uGC7DBh0TZrU/LY43Fd8Qr+2ja1FKmH07q2FoZFHo1eYl8aj87GhfVoY1saJVJiq24rp1+wpI6BvQJMKgQm8oA==} dependencies: '@types/d3-selection': 3.0.5 dev: true - /@types/d3-brush@3.0.1: - resolution: {integrity: sha512-B532DozsiTuQMHu2YChdZU0qsFJSio3Q6jmBYGYNp3gMDzBmuFFgPt9qKA4VYuLZMp4qc6eX7IUFUEsvHiXZAw==} + /@types/d3-brush@3.0.2: + resolution: {integrity: sha512-2TEm8KzUG3N7z0TrSKPmbxByBx54M+S9lHoP2J55QuLU0VSQ9mE96EJSAOVNEqd1bbynMjeTS9VHmz8/bSw8rA==} dependencies: '@types/d3-selection': 3.0.5 dev: true - /@types/d3-chord@3.0.1: - resolution: {integrity: sha512-eQfcxIHrg7V++W8Qxn6QkqBNBokyhdWSAS73AbkbMzvLQmVVBviknoz2SRS/ZJdIOmhcmmdCRE/NFOm28Z1AMw==} + /@types/d3-chord@3.0.2: + resolution: {integrity: sha512-abT/iLHD3sGZwqMTX1TYCMEulr+wBd0SzyOQnjYNLp7sngdOHYtNkMRI5v3w5thoN+BWtlHVDx2Osvq6fxhZWw==} dev: true /@types/d3-color@3.1.0: resolution: {integrity: sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==} dev: true - /@types/d3-contour@3.0.1: - resolution: {integrity: sha512-C3zfBrhHZvrpAAK3YXqLWVAGo87A4SvJ83Q/zVJ8rFWJdKejUnDYaWZPkA8K84kb2vDA/g90LTQAz7etXcgoQQ==} + /@types/d3-contour@3.0.2: + resolution: {integrity: sha512-k6/bGDoAGJZnZWaKzeB+9glgXCYGvh6YlluxzBREiVo8f/X2vpTEdgPy9DN7Z2i42PZOZ4JDhVdlTSTSkLDPlQ==} dependencies: - '@types/d3-array': 3.0.3 + '@types/d3-array': 3.0.5 '@types/geojson': 7946.0.10 dev: true @@ -3824,46 +3752,46 @@ packages: resolution: {integrity: sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ==} dev: true - /@types/d3-dispatch@3.0.1: - resolution: {integrity: sha512-NhxMn3bAkqhjoxabVJWKryhnZXXYYVQxaBnbANu0O94+O/nX9qSjrA1P1jbAQJxJf+VC72TxDX/YJcKue5bRqw==} + /@types/d3-dispatch@3.0.2: + resolution: {integrity: sha512-rxN6sHUXEZYCKV05MEh4z4WpPSqIw+aP7n9ZN6WYAAvZoEAghEK1WeVZMZcHRBwyaKflU43PCUAJNjFxCzPDjg==} dev: true - /@types/d3-drag@3.0.1: - resolution: {integrity: sha512-o1Va7bLwwk6h03+nSM8dpaGEYnoIG19P0lKqlic8Un36ymh9NSkNFX1yiXMKNMx8rJ0Kfnn2eovuFaL6Jvj0zA==} + /@types/d3-drag@3.0.2: + resolution: {integrity: sha512-qmODKEDvyKWVHcWWCOVcuVcOwikLVsyc4q4EBJMREsoQnR2Qoc2cZQUyFUPgO9q4S3qdSqJKBsuefv+h0Qy+tw==} dependencies: '@types/d3-selection': 3.0.5 dev: true - /@types/d3-dsv@3.0.0: - resolution: {integrity: sha512-o0/7RlMl9p5n6FQDptuJVMxDf/7EDEv2SYEO/CwdG2tr1hTfUVi0Iavkk2ax+VpaQ/1jVhpnj5rq1nj8vwhn2A==} + /@types/d3-dsv@3.0.1: + resolution: {integrity: sha512-76pBHCMTvPLt44wFOieouXcGXWOF0AJCceUvaFkxSZEu4VDUdv93JfpMa6VGNFs01FHfuP4a5Ou68eRG1KBfTw==} dev: true /@types/d3-ease@3.0.0: resolution: {integrity: sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==} dev: true - /@types/d3-fetch@3.0.1: - resolution: {integrity: sha512-toZJNOwrOIqz7Oh6Q7l2zkaNfXkfR7mFSJvGvlD/Ciq/+SQ39d5gynHJZ/0fjt83ec3WL7+u3ssqIijQtBISsw==} + /@types/d3-fetch@3.0.2: + resolution: {integrity: sha512-gllwYWozWfbep16N9fByNBDTkJW/SyhH6SGRlXloR7WdtAaBui4plTP+gbUgiEot7vGw/ZZop1yDZlgXXSuzjA==} dependencies: - '@types/d3-dsv': 3.0.0 + '@types/d3-dsv': 3.0.1 dev: true - /@types/d3-force@3.0.3: - resolution: {integrity: sha512-z8GteGVfkWJMKsx6hwC3SiTSLspL98VNpmvLpEFJQpZPq6xpA1I8HNBDNSpukfK0Vb0l64zGFhzunLgEAcBWSA==} + /@types/d3-force@3.0.4: + resolution: {integrity: sha512-q7xbVLrWcXvSBBEoadowIUJ7sRpS1yvgMWnzHJggFy5cUZBq2HZL5k/pBSm0GdYWS1vs5/EDwMjSKF55PDY4Aw==} dev: true /@types/d3-format@3.0.1: resolution: {integrity: sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==} dev: true - /@types/d3-geo@3.0.2: - resolution: {integrity: sha512-DbqK7MLYA8LpyHQfv6Klz0426bQEf7bRTvhMy44sNGVyZoWn//B0c+Qbeg8Osi2Obdc9BLLXYAKpyWege2/7LQ==} + /@types/d3-geo@3.0.3: + resolution: {integrity: sha512-bK9uZJS3vuDCNeeXQ4z3u0E7OeJZXjUgzFdSOtNtMCJCLvDtWDwfpRVWlyt3y8EvRzI0ccOu9xlMVirawolSCw==} dependencies: '@types/geojson': 7946.0.10 dev: true - /@types/d3-hierarchy@3.1.0: - resolution: {integrity: sha512-g+sey7qrCa3UbsQlMZZBOHROkFqx7KZKvUpRzI/tAp/8erZWpYq7FgNKvYwebi2LaEiVs1klhUfd3WCThxmmWQ==} + /@types/d3-hierarchy@3.1.2: + resolution: {integrity: sha512-9hjRTVoZjRFR6xo8igAJyNXQyPX6Aq++Nhb5ebrUF414dv4jr2MitM2fWiOY475wa3Za7TOS2Gh9fmqEhLTt0A==} dev: true /@types/d3-interpolate@3.0.1: @@ -3892,8 +3820,8 @@ packages: resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==} dev: true - /@types/d3-scale@4.0.2: - resolution: {integrity: sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA==} + /@types/d3-scale@4.0.3: + resolution: {integrity: sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==} dependencies: '@types/d3-time': 3.0.0 dev: true @@ -3902,8 +3830,8 @@ packages: resolution: {integrity: sha512-xCB0z3Hi8eFIqyja3vW8iV01+OHGYR2di/+e+AiOcXIOrY82lcvWW8Ke1DYE/EUVMsBl4Db9RppSBS3X1U6J0w==} dev: true - /@types/d3-shape@3.1.0: - resolution: {integrity: sha512-jYIYxFFA9vrJ8Hd4Se83YI6XF+gzDL1aC5DCsldai4XYYiVNdhtpGbA/GM6iyQ8ayhSp3a148LY34hy7A4TxZA==} + /@types/d3-shape@3.1.1: + resolution: {integrity: sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==} dependencies: '@types/d3-path': 3.0.0 dev: true @@ -3920,14 +3848,14 @@ packages: resolution: {integrity: sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==} dev: true - /@types/d3-transition@3.0.2: - resolution: {integrity: sha512-jo5o/Rf+/u6uerJ/963Dc39NI16FQzqwOc54bwvksGAdVfvDrqDpVeq95bEvPtBwLCVZutAEyAtmSyEMxN7vxQ==} + /@types/d3-transition@3.0.3: + resolution: {integrity: sha512-/S90Od8Id1wgQNvIA8iFv9jRhCiZcGhPd2qX0bKF/PS+y0W5CrXKgIiELd2CvG1mlQrWK/qlYh3VxicqG1ZvgA==} dependencies: '@types/d3-selection': 3.0.5 dev: true - /@types/d3-zoom@3.0.1: - resolution: {integrity: sha512-7s5L9TjfqIYQmQQEUcpMAcBOahem7TRoSO/+Gkz02GbMVuULiZzjF2BOdw291dbO2aNon4m2OdFsRGaCq2caLQ==} + /@types/d3-zoom@3.0.3: + resolution: {integrity: sha512-OWk1yYIIWcZ07+igN6BeoG6rqhnJ/pYe+R1qWFM2DtW49zsoSjgb9G5xB0ZXA8hh2jAzey1XuRmMSoXdKw8MDA==} dependencies: '@types/d3-interpolate': 3.0.1 '@types/d3-selection': 3.0.5 @@ -3936,61 +3864,61 @@ packages: /@types/d3@7.4.0: resolution: {integrity: sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA==} dependencies: - '@types/d3-array': 3.0.3 - '@types/d3-axis': 3.0.1 - '@types/d3-brush': 3.0.1 - '@types/d3-chord': 3.0.1 + '@types/d3-array': 3.0.5 + '@types/d3-axis': 3.0.2 + '@types/d3-brush': 3.0.2 + '@types/d3-chord': 3.0.2 '@types/d3-color': 3.1.0 - '@types/d3-contour': 3.0.1 + '@types/d3-contour': 3.0.2 '@types/d3-delaunay': 6.0.1 - '@types/d3-dispatch': 3.0.1 - '@types/d3-drag': 3.0.1 - '@types/d3-dsv': 3.0.0 + '@types/d3-dispatch': 3.0.2 + '@types/d3-drag': 3.0.2 + '@types/d3-dsv': 3.0.1 '@types/d3-ease': 3.0.0 - '@types/d3-fetch': 3.0.1 - '@types/d3-force': 3.0.3 + '@types/d3-fetch': 3.0.2 + '@types/d3-force': 3.0.4 '@types/d3-format': 3.0.1 - '@types/d3-geo': 3.0.2 - '@types/d3-hierarchy': 3.1.0 + '@types/d3-geo': 3.0.3 + '@types/d3-hierarchy': 3.1.2 '@types/d3-interpolate': 3.0.1 '@types/d3-path': 3.0.0 '@types/d3-polygon': 3.0.0 '@types/d3-quadtree': 3.0.2 '@types/d3-random': 3.0.1 - '@types/d3-scale': 4.0.2 + '@types/d3-scale': 4.0.3 '@types/d3-scale-chromatic': 3.0.0 '@types/d3-selection': 3.0.5 - '@types/d3-shape': 3.1.0 + '@types/d3-shape': 3.1.1 '@types/d3-time': 3.0.0 '@types/d3-time-format': 4.0.0 '@types/d3-timer': 3.0.0 - '@types/d3-transition': 3.0.2 - '@types/d3-zoom': 3.0.1 + '@types/d3-transition': 3.0.3 + '@types/d3-zoom': 3.0.3 dev: true - /@types/debug@4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} dependencies: '@types/ms': 0.7.31 /@types/dompurify@3.0.2: resolution: {integrity: sha512-YBL4ziFebbbfQfH5mlC+QTJsvh0oJUrWbmxKMyEdL7emlHJqGR2Qb34TEFKj+VCayBvjKy3xczMFNhugThUsfQ==} dependencies: - '@types/trusted-types': 2.0.2 + '@types/trusted-types': 2.0.3 dev: true /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} dependencies: '@types/eslint': 8.37.0 - '@types/estree': 1.0.0 + '@types/estree': 0.0.51 dev: true /@types/eslint@8.37.0: resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} dependencies: - '@types/estree': 1.0.0 - '@types/json-schema': 7.0.11 + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.12 dev: true /@types/estree@0.0.39: @@ -4001,42 +3929,26 @@ packages: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} dev: true - /@types/estree@1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} - dev: true - - /@types/express-serve-static-core@4.17.31: - resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} - dependencies: - '@types/node': 18.16.0 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 + /@types/estree@1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true - /@types/express-serve-static-core@4.17.33: - resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + /@types/express-serve-static-core@4.17.35: + resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: '@types/node': 18.16.0 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 - dev: true - - /@types/express@4.17.14: - resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.31 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 + '@types/send': 0.17.1 dev: true /@types/express@4.17.17: resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.33 + '@types/express-serve-static-core': 4.17.35 '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 + '@types/serve-static': 1.15.1 dev: true /@types/flexsearch@0.7.3: @@ -4047,8 +3959,8 @@ packages: resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==} dev: true - /@types/graceful-fs@4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} + /@types/graceful-fs@4.1.6: + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 18.16.0 dev: true @@ -4057,8 +3969,8 @@ packages: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: true - /@types/http-proxy@1.17.9: - resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} + /@types/http-proxy@1.17.11: + resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} dependencies: '@types/node': 18.16.0 dev: true @@ -4088,11 +4000,11 @@ packages: dependencies: '@types/node': 18.16.0 '@types/tough-cookie': 4.0.2 - parse5: 7.1.1 + parse5: 7.1.2 dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true /@types/keyv@3.1.4: @@ -4122,12 +4034,6 @@ packages: '@types/mdurl': 1.0.2 dev: true - /@types/mdast@3.0.10: - resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} - dependencies: - '@types/unist': 2.0.6 - dev: true - /@types/mdast@3.0.11: resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} dependencies: @@ -4143,6 +4049,10 @@ packages: '@types/braces': 3.0.1 dev: true + /@types/mime@1.3.2: + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + dev: true + /@types/mime@3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true @@ -4154,8 +4064,8 @@ packages: /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - /@types/node@14.18.29: - resolution: {integrity: sha512-LhF+9fbIX4iPzhsRLpK5H7iPdvW8L4IwGciXQIOEcuF62+9nw/VQVsOViAOOGxY3OlOKGLFv0sWwJXdwQeTn6A==} + /@types/node@14.18.51: + resolution: {integrity: sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==} dev: true /@types/node@18.16.0: @@ -4206,18 +4116,25 @@ packages: rollup: 2.79.1 dev: true - /@types/semver@7.3.12: - resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/send@0.17.1: + resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + dependencies: + '@types/mime': 1.3.2 + '@types/node': 18.16.0 dev: true /@types/serve-index@1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} dependencies: - '@types/express': 4.17.14 + '@types/express': 4.17.17 dev: true - /@types/serve-static@1.15.0: - resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + /@types/serve-static@1.15.1: + resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 '@types/node': 18.16.0 @@ -4249,8 +4166,8 @@ packages: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/trusted-types@2.0.2: - resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} + /@types/trusted-types@2.0.3: + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} dev: true /@types/unist@2.0.6: @@ -4268,14 +4185,14 @@ packages: resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} dev: true - /@types/ws@8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} + /@types/ws@8.5.4: + resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: '@types/node': 18.16.0 dev: true - /@types/ws@8.5.4: - resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + /@types/ws@8.5.5: + resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: '@types/node': 18.16.0 dev: true @@ -4284,8 +4201,8 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs@17.0.13: - resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} + /@types/yargs@17.0.24: + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true @@ -4298,34 +4215,6 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.39.0)(typescript@5.0.4): - resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.59.0(eslint@8.39.0)(typescript@5.0.4) - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/type-utils': 5.59.0(eslint@8.39.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.0(eslint@8.39.0)(typescript@5.0.4) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.39.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.0 - natural-compare-lite: 1.4.0 - semver: 7.5.2 - tsutils: 3.21.0(typescript@5.0.4) - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.39.0)(typescript@5.1.3): resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4337,7 +4226,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.0 + '@eslint-community/regexpp': 4.5.1 '@typescript-eslint/parser': 5.59.0(eslint@8.39.0)(typescript@5.1.3) '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/type-utils': 5.59.0(eslint@8.39.0)(typescript@5.1.3) @@ -4345,35 +4234,15 @@ packages: debug: 4.3.4(supports-color@8.1.1) eslint: 8.39.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.8 + semver: 7.5.2 tsutils: 3.21.0(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.59.0(eslint@8.39.0)(typescript@5.0.4): - resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.4) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.39.0 - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser@5.59.0(eslint@8.39.0)(typescript@5.1.3): resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4402,24 +4271,12 @@ packages: '@typescript-eslint/visitor-keys': 5.59.0 dev: true - /@typescript-eslint/type-utils@5.59.0(eslint@8.39.0)(typescript@5.0.4): - resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} + /@typescript-eslint/scope-manager@5.59.11: + resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.0(eslint@8.39.0)(typescript@5.0.4) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.39.0 - tsutils: 3.21.0(typescript@5.0.4) - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/visitor-keys': 5.59.11 dev: true /@typescript-eslint/type-utils@5.59.0(eslint@8.39.0)(typescript@5.1.3): @@ -4447,7 +4304,12 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.59.0(typescript@5.0.4): + /@typescript-eslint/types@5.59.11: + resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.59.0(typescript@5.1.3): resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4462,14 +4324,14 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.2 - tsutils: 3.21.0(typescript@5.0.4) - typescript: 5.0.4 + tsutils: 3.21.0(typescript@5.1.3) + typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.59.0(typescript@5.1.3): - resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} + /@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.3): + resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -4477,30 +4339,30 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/visitor-keys': 5.59.0 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/visitor-keys': 5.59.11 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.2 - tsutils: 3.21.0(typescript@5.0.4) - typescript: 5.0.4 + tsutils: 3.21.0(typescript@5.1.3) + typescript: 5.1.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.59.0(eslint@8.39.0)(typescript@5.0.4): + /@typescript-eslint/utils@5.59.0(eslint@8.39.0)(typescript@5.1.3): resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.12 + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.59.0 '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.1.3) eslint: 8.39.0 eslint-scope: 5.1.1 semver: 7.5.2 @@ -4509,18 +4371,18 @@ packages: - typescript dev: true - /@typescript-eslint/utils@5.59.0(eslint@8.39.0)(typescript@5.1.3): - resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} + /@typescript-eslint/utils@5.59.11(eslint@8.39.0)(typescript@5.1.3): + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.12 - '@typescript-eslint/scope-manager': 5.59.0 - '@typescript-eslint/types': 5.59.0 - '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.1.3) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) eslint: 8.39.0 eslint-scope: 5.1.1 semver: 7.5.2 @@ -4534,15 +4396,23 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: '@typescript-eslint/types': 5.59.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@typescript-eslint/visitor-keys@5.59.11: + resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.59.11 + eslint-visitor-keys: 3.4.1 dev: true - /@unocss/astro@0.52.0(rollup@2.79.1)(vite@4.3.3): + /@unocss/astro@0.52.0(rollup@2.79.1)(vite@4.3.9): resolution: {integrity: sha512-vgEOFj+q4DY1F0kwqydbaNQjZSSYBqCV8eiE5ZpRfhQ+k0S71e7yudgYW5Np2sYBbih7v57GKnuQDwno3M6yDQ==} dependencies: '@unocss/core': 0.52.0 '@unocss/reset': 0.52.0 - '@unocss/vite': 0.52.0(rollup@2.79.1)(vite@4.3.3) + '@unocss/vite': 0.52.0(rollup@2.79.1)(vite@4.3.9) transitivePeerDependencies: - rollup - vite @@ -4575,7 +4445,7 @@ packages: engines: {node: '>=14'} dependencies: '@unocss/core': 0.52.0 - unconfig: 0.3.7 + unconfig: 0.3.9 dev: true /@unocss/core@0.52.0: @@ -4595,7 +4465,7 @@ packages: sirv: 2.0.3 dev: true - /@unocss/postcss@0.52.0(postcss@8.4.23): + /@unocss/postcss@0.52.0(postcss@8.4.24): resolution: {integrity: sha512-1KzpQlcMrLV0ZSbP+pNYuvXg/1+8c2HNKHBBEbzlsXI7G+f4IJPsxtYXE3N2HVIkEjxumcMrxV8dqXhcBLQShA==} engines: {node: '>=14'} peerDependencies: @@ -4606,7 +4476,7 @@ packages: css-tree: 2.3.1 fast-glob: 3.2.12 magic-string: 0.30.0 - postcss: 8.4.23 + postcss: 8.4.24 dev: true /@unocss/preset-attributify@0.52.0: @@ -4618,9 +4488,9 @@ packages: /@unocss/preset-icons@0.52.0: resolution: {integrity: sha512-GSDQIBXkK6rfJHT3SvbJExLoAddj93fC5DHS4eE3a6fne/NdQhFvbkhAZ5iPr4UZmMoJQOyAkkhuWD3PMSBjqw==} dependencies: - '@iconify/utils': 2.1.5 + '@iconify/utils': 2.1.6 '@unocss/core': 0.52.0 - ofetch: 1.0.1 + ofetch: 1.1.0 transitivePeerDependencies: - supports-color dev: true @@ -4657,7 +4527,7 @@ packages: resolution: {integrity: sha512-JbHCKwt5KHpntE7CJMYcOaZ5c/KWIIU+96pTTRTOVM9c9ssozwS575BzWH+pD43fJ864W566gtu5R9mR03j2mg==} dependencies: '@unocss/core': 0.52.0 - ofetch: 1.0.1 + ofetch: 1.1.0 dev: true /@unocss/preset-wind@0.52.0: @@ -4706,7 +4576,7 @@ packages: '@unocss/core': 0.52.0 dev: true - /@unocss/vite@0.52.0(rollup@2.79.1)(vite@4.3.3): + /@unocss/vite@0.52.0(rollup@2.79.1)(vite@4.3.9): resolution: {integrity: sha512-Ip2Jyu7dywqEsy3EacnItE+VXB77R72mQ9oA6TyrZpov5ZKoS327kqQSzHS/lYXzZ2yomFq9EsqbKQWIEInH9Q==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 @@ -4721,7 +4591,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.12 magic-string: 0.30.0 - vite: 4.3.3(@types/node@18.16.0) + vite: 4.3.9(@types/node@18.16.0) transitivePeerDependencies: - rollup dev: true @@ -4731,31 +4601,20 @@ packages: peerDependencies: vite-plugin-pwa: ^0.14.0 dependencies: - vite-plugin-pwa: 0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4) + vite-plugin-pwa: 0.15.0(vite@4.3.9)(workbox-build@6.6.0)(workbox-window@6.5.4) dev: true - /@vitejs/plugin-vue@4.2.1(vite@4.3.3)(vue@3.2.47): + /@vitejs/plugin-vue@4.2.1(vite@4.3.9)(vue@3.2.47): resolution: {integrity: sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.3.3(@types/node@18.16.0) + vite: 4.3.9(@types/node@18.16.0) vue: 3.2.47 dev: true - /@vitejs/plugin-vue@4.2.3(vite@4.3.8)(vue@3.3.4): - resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.0.0 - vue: ^3.2.25 - dependencies: - vite: 4.3.8(@types/node@18.16.0) - vue: 3.3.4 - dev: true - /@vitejs/plugin-vue@4.2.3(vite@4.3.9)(vue@3.3.4): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4811,7 +4670,7 @@ packages: /@vitest/spy@0.32.2: resolution: {integrity: sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug==} dependencies: - tinyspy: 2.1.0 + tinyspy: 2.1.1 dev: true /@vitest/ui@0.32.2(vitest@0.32.2): @@ -4837,21 +4696,21 @@ packages: pretty-format: 27.5.1 dev: true - /@vue/compat@3.3.4(vue@3.3.4): + /@vue/compat@3.3.4(vue@3.2.47): resolution: {integrity: sha512-VwAsPqUqRJVxeLQPUC03Sa5d+T8UG2Qv4VItq74KmNvtQlRXICpa/sqq12BcyBB4Tz1U5paOEZxWCUoXkrZ9QQ==} peerDependencies: vue: 3.3.4 dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.5 estree-walker: 2.0.2 source-map-js: 1.0.2 - vue: 3.3.4 + vue: 3.2.47 dev: false /@vue/compiler-core@3.2.47: resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.5 '@vue/shared': 3.2.47 estree-walker: 2.0.2 source-map: 0.6.1 @@ -4859,10 +4718,11 @@ packages: /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.5 '@vue/shared': 3.3.4 estree-walker: 2.0.2 source-map-js: 1.0.2 + dev: true /@vue/compiler-dom@3.2.47: resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==} @@ -4875,11 +4735,12 @@ packages: dependencies: '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 + dev: true /@vue/compiler-sfc@3.2.47: resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.5 '@vue/compiler-core': 3.2.47 '@vue/compiler-dom': 3.2.47 '@vue/compiler-ssr': 3.2.47 @@ -4887,13 +4748,13 @@ packages: '@vue/shared': 3.2.47 estree-walker: 2.0.2 magic-string: 0.25.9 - postcss: 8.4.23 + postcss: 8.4.24 source-map: 0.6.1 /@vue/compiler-sfc@3.3.4: resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.5 '@vue/compiler-core': 3.3.4 '@vue/compiler-dom': 3.3.4 '@vue/compiler-ssr': 3.3.4 @@ -4901,8 +4762,9 @@ packages: '@vue/shared': 3.3.4 estree-walker: 2.0.2 magic-string: 0.30.0 - postcss: 8.4.23 + postcss: 8.4.24 source-map-js: 1.0.2 + dev: true /@vue/compiler-ssr@3.2.47: resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} @@ -4915,6 +4777,7 @@ packages: dependencies: '@vue/compiler-dom': 3.3.4 '@vue/shared': 3.3.4 + dev: true /@vue/devtools-api@6.5.0: resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} @@ -4922,7 +4785,7 @@ packages: /@vue/reactivity-transform@3.2.47: resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.5 '@vue/compiler-core': 3.2.47 '@vue/shared': 3.2.47 estree-walker: 2.0.2 @@ -4931,11 +4794,12 @@ packages: /@vue/reactivity-transform@3.3.4: resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.5 '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 magic-string: 0.30.0 + dev: true /@vue/reactivity@3.2.47: resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==} @@ -4946,6 +4810,7 @@ packages: resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} dependencies: '@vue/shared': 3.3.4 + dev: true /@vue/runtime-core@3.2.47: resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==} @@ -4958,6 +4823,7 @@ packages: dependencies: '@vue/reactivity': 3.3.4 '@vue/shared': 3.3.4 + dev: true /@vue/runtime-dom@3.2.47: resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==} @@ -4972,6 +4838,7 @@ packages: '@vue/runtime-core': 3.3.4 '@vue/shared': 3.3.4 csstype: 3.1.2 + dev: true /@vue/server-renderer@3.2.47(vue@3.2.47): resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==} @@ -4990,12 +4857,14 @@ packages: '@vue/compiler-ssr': 3.3.4 '@vue/shared': 3.3.4 vue: 3.3.4 + dev: true /@vue/shared@3.2.47: resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} /@vue/shared@3.3.4: resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + dev: true /@vueuse/core@10.1.0(vue@3.2.47): resolution: {integrity: sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==} @@ -5003,7 +4872,7 @@ packages: '@types/web-bluetooth': 0.0.16 '@vueuse/metadata': 10.1.0 '@vueuse/shared': 10.1.0(vue@3.2.47) - vue-demi: 0.14.0(vue@3.2.47) + vue-demi: 0.14.5(vue@3.2.47) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5065,7 +4934,7 @@ packages: '@vueuse/core': 10.2.0(vue@3.3.4) '@vueuse/shared': 10.2.0(vue@3.3.4) focus-trap: 7.4.3 - vue-demi: 0.14.0(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5082,7 +4951,7 @@ packages: /@vueuse/shared@10.1.0(vue@3.2.47): resolution: {integrity: sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==} dependencies: - vue-demi: 0.14.0(vue@3.2.47) + vue-demi: 0.14.5(vue@3.2.47) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5091,7 +4960,7 @@ packages: /@vueuse/shared@10.2.0(vue@3.3.4): resolution: {integrity: sha512-dIeA8+g9Av3H5iF4NXR/sft4V6vys76CpZ6hxwj8eMXybXk2WRl3scSsOVi+kQ9SX38COR7AH7WwY83UcuxbSg==} dependencies: - vue-demi: 0.14.0(vue@3.3.4) + vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -5104,8 +4973,8 @@ packages: '@wdio/logger': 7.26.0 '@wdio/types': 7.26.0(typescript@5.1.3) '@wdio/utils': 7.26.0(typescript@5.1.3) - deepmerge: 4.2.2 - glob: 8.0.3 + deepmerge: 4.3.1 + glob: 8.1.0 transitivePeerDependencies: - typescript dev: true @@ -5115,7 +4984,7 @@ packages: engines: {node: '>=12.0.0'} dependencies: chalk: 4.1.2 - loglevel: 1.8.0 + loglevel: 1.8.1 loglevel-plugin-prefix: 0.8.4 strip-ansi: 6.0.1 dev: true @@ -5135,7 +5004,7 @@ packages: optional: true dependencies: '@types/node': 18.16.0 - got: 11.8.5 + got: 11.8.6 typescript: 5.1.3 dev: true @@ -5256,14 +5125,14 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.75.0): + /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.74.0): resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + webpack: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) dev: true /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): @@ -5272,7 +5141,7 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.8.1 - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) dev: true /@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.11.1): @@ -5284,8 +5153,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) - webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) + webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.74.0) dev: true /@xtuc/ieee754@1.2.0: @@ -5302,7 +5171,7 @@ packages: dependencies: '@types/assert': 1.5.6 '@types/ramda': 0.28.25 - '@vue/compat': 3.3.4(vue@3.3.4) + '@vue/compat': 3.3.4(vue@3.2.47) antlr4: 4.13.0 color-string: 1.9.1 dom-to-image-more: 2.16.0 @@ -5312,11 +5181,11 @@ packages: lodash: 4.17.21 marked: 4.3.0 pino: 8.14.1 - postcss: 8.4.23 + postcss: 8.4.24 ramda: 0.28.0 tailwindcss: 3.3.2(ts-node@10.9.1) - vue: 3.3.4 - vuex: 4.1.0(vue@3.3.4) + vue: 3.2.47 + vuex: 4.1.0(vue@3.2.47) transitivePeerDependencies: - ts-node dev: false @@ -5405,12 +5274,6 @@ packages: hasBin: true dev: true - /acorn@8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} @@ -5441,7 +5304,7 @@ packages: indent-string: 5.0.0 dev: true - /ajv-formats@2.1.1(ajv@8.11.0): + /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -5449,7 +5312,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.11.0 + ajv: 8.12.0 dev: true /ajv-keywords@3.5.2(ajv@6.12.6): @@ -5460,12 +5323,12 @@ packages: ajv: 6.12.6 dev: true - /ajv-keywords@5.1.0(ajv@8.11.0): + /ajv-keywords@5.1.0(ajv@8.12.0): resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 dependencies: - ajv: 8.11.0 + ajv: 8.12.0 fast-deep-equal: 3.1.3 dev: true @@ -5478,8 +5341,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv@8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -5487,23 +5350,23 @@ packages: uri-js: 4.4.1 dev: true - /algoliasearch@4.14.2: - resolution: {integrity: sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==} + /algoliasearch@4.17.2: + resolution: {integrity: sha512-VFu43JJNYIW74awp7oeQcQsPcxOhd8psqBDTfyNO2Zt6L1NqnNMTVnaIdQ+8dtKqUDBqQZp0szPxECvX8CK2Fg==} dependencies: - '@algolia/cache-browser-local-storage': 4.14.2 - '@algolia/cache-common': 4.14.2 - '@algolia/cache-in-memory': 4.14.2 - '@algolia/client-account': 4.14.2 - '@algolia/client-analytics': 4.14.2 - '@algolia/client-common': 4.14.2 - '@algolia/client-personalization': 4.14.2 - '@algolia/client-search': 4.14.2 - '@algolia/logger-common': 4.14.2 - '@algolia/logger-console': 4.14.2 - '@algolia/requester-browser-xhr': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/requester-node-http': 4.14.2 - '@algolia/transporter': 4.14.2 + '@algolia/cache-browser-local-storage': 4.17.2 + '@algolia/cache-common': 4.17.2 + '@algolia/cache-in-memory': 4.17.2 + '@algolia/client-account': 4.17.2 + '@algolia/client-analytics': 4.17.2 + '@algolia/client-common': 4.17.2 + '@algolia/client-personalization': 4.17.2 + '@algolia/client-search': 4.17.2 + '@algolia/logger-common': 4.17.2 + '@algolia/logger-console': 4.17.2 + '@algolia/requester-browser-xhr': 4.17.2 + '@algolia/requester-common': 4.17.2 + '@algolia/requester-node-http': 4.17.2 + '@algolia/transporter': 4.17.2 dev: true /amdefine@1.0.1: @@ -5579,8 +5442,8 @@ packages: engines: {node: '>=10'} dev: true - /ansi-styles@6.1.1: - resolution: {integrity: sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==} + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true @@ -5593,8 +5456,8 @@ packages: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: false - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 @@ -5647,6 +5510,13 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true @@ -5725,7 +5595,7 @@ packages: dependencies: archy: 1.0.0 debug: 4.3.4(supports-color@8.1.1) - fastq: 1.13.0 + fastq: 1.15.0 queue-microtask: 1.2.3 transitivePeerDependencies: - supports-color @@ -5735,8 +5605,8 @@ packages: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: true - /aws4@1.11.0: - resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} + /aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: true /axios@0.27.2(debug@4.3.4): @@ -5748,42 +5618,42 @@ packages: - debug dev: true - /babel-jest@29.5.0(@babel/core@7.12.3): + /babel-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.12.3 + '@babel/core': 7.22.5 '@jest/transform': 29.5.0 - '@types/babel__core': 7.1.19 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0(@babel/core@7.12.3) + babel-preset-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-loader@9.1.2(@babel/core@7.12.3)(webpack@5.75.0): + /babel-loader@9.1.2(@babel/core@7.22.5)(webpack@5.74.0): resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5' dependencies: - '@babel/core': 7.12.3 + '@babel/core': 7.22.5 find-cache-dir: 3.3.2 - schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + schema-utils: 4.2.0 + webpack: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) dev: true /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -5796,77 +5666,77 @@ packages: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.2 - '@types/babel__core': 7.1.19 - '@types/babel__traverse': 7.18.2 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + '@types/babel__core': 7.20.1 + '@types/babel__traverse': 7.20.1 dev: true - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.12.3): - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.5): + resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.12.3 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.12.3) + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.12.3): - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + /babel-plugin-polyfill-corejs3@0.8.1(@babel/core@7.22.5): + resolution: {integrity: sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.12.3) - core-js-compat: 3.28.0 + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) + core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.12.3): - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + /babel-plugin-polyfill-regenerator@0.5.0(@babel/core@7.22.5): + resolution: {integrity: sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.12.3 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.12.3) + '@babel/core': 7.22.5 + '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.12.3): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.3 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.12.3) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.12.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.12.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.12.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.12.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.12.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.12.3) - dev: true - - /babel-preset-jest@29.5.0(@babel/core@7.12.3): + '@babel/core': 7.22.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) + dev: true + + /babel-preset-jest@29.5.0(@babel/core@7.22.5): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.12.3 + '@babel/core': 7.22.5 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.12.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) dev: true /bail@2.0.2: @@ -5889,6 +5759,11 @@ packages: tweetnacl: 0.14.5 dev: true + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -5929,7 +5804,7 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 - content-type: 1.0.4 + content-type: 1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 @@ -5948,8 +5823,8 @@ packages: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} dev: true - /bonjour-service@1.0.14: - resolution: {integrity: sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==} + /bonjour-service@1.1.1: + resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==} dependencies: array-flatten: 2.1.2 dns-equal: 1.0.0 @@ -5971,6 +5846,13 @@ packages: wrap-ansi: 7.0.0 dev: true + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -5993,24 +5875,13 @@ packages: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} dev: true - /browserslist@4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001431 - electron-to-chromium: 1.4.284 - node-releases: 2.0.6 - update-browserslist-db: 1.0.10(browserslist@4.21.4) - dev: true - - /browserslist@4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: caniuse-lite: 1.0.30001503 - electron-to-chromium: 1.4.432 + electron-to-chromium: 1.4.433 node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) dev: true @@ -6053,6 +5924,13 @@ packages: engines: {node: '>=6'} dev: true + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -6073,14 +5951,14 @@ packages: engines: {node: '>=10.6.0'} dev: true - /cacheable-request@7.0.2: - resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} + /cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} dependencies: clone-response: 1.0.3 get-stream: 5.2.0 - http-cache-semantics: 4.1.0 - keyv: 4.5.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.2 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 @@ -6105,7 +5983,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /callsites@3.1.0: @@ -6147,12 +6025,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001431: - resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} - dev: true - - /caniuse-lite@1.0.30001457: - resolution: {integrity: sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==} + /caniuse-lite@1.0.30001503: + resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} dev: true /caseless@0.12.0: @@ -6256,7 +6130,7 @@ packages: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: - anymatch: 3.1.2 + anymatch: 3.1.3 braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 @@ -6271,13 +6145,13 @@ packages: engines: {node: '>=6.0'} dev: true - /ci-info@3.6.2: - resolution: {integrity: sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==} + /ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: true - /cjs-module-lexer@1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true /cjson@0.3.0: @@ -6426,10 +6300,6 @@ packages: simple-swizzle: 0.2.2 dev: false - /colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - dev: true - /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true @@ -6537,7 +6407,7 @@ packages: dependencies: date-time: 3.1.0 esutils: 2.0.3 - fast-diff: 1.2.0 + fast-diff: 1.3.0 js-string-escape: 1.0.1 lodash: 4.17.21 md5-hex: 3.0.1 @@ -6551,9 +6421,9 @@ packages: hasBin: true dependencies: chalk: 4.1.2 - date-fns: 2.29.3 + date-fns: 2.30.0 lodash: 4.17.21 - rxjs: 7.8.0 + rxjs: 7.8.1 shell-quote: 1.8.1 spawn-command: 0.0.2-1 supports-color: 8.1.1 @@ -6566,7 +6436,7 @@ packages: engines: {node: '>=8'} dependencies: dot-prop: 5.3.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-dir: 3.1.0 unique-string: 2.0.0 write-file-atomic: 3.0.3 @@ -6589,8 +6459,8 @@ packages: safe-buffer: 5.2.1 dev: true - /content-type@1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: true @@ -6624,10 +6494,8 @@ packages: through2: 4.0.2 dev: true - /convert-source-map@1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true /convert-source-map@2.0.0: @@ -6643,10 +6511,10 @@ packages: engines: {node: '>= 0.6'} dev: true - /core-js-compat@3.28.0: - resolution: {integrity: sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==} + /core-js-compat@3.31.0: + resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 dev: true /core-util-is@1.0.2: @@ -6671,14 +6539,14 @@ packages: layout-base: 1.0.2 dev: false - /cose-base@2.1.0: - resolution: {integrity: sha512-HTMm07dhxq1dIPGWwpiVrIk9n+DH7KYmqWA786mLe8jDS+1ZjGtJGIIsJVKoseZXS6/FxiUWCJ2B7XzqUCuhPw==} + /cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} dependencies: layout-base: 2.0.1 dev: false - /cosmiconfig-typescript-loader@4.1.0(@types/node@18.16.0)(cosmiconfig@8.0.0)(ts-node@10.9.1)(typescript@5.1.3): - resolution: {integrity: sha512-HbWIuR5O+XO5Oj9SZ5bzgrD4nN+rfhrm2PMb0FVx+t+XIvC45n8F0oTNnztXtspWGw0i2IzHaUWFD5LzV1JB4A==} + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.16.0)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.1.3): + resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' @@ -6687,7 +6555,7 @@ packages: typescript: '>=3' dependencies: '@types/node': 18.16.0 - cosmiconfig: 8.0.0 + cosmiconfig: 8.2.0 ts-node: 10.9.1(@types/node@18.16.0)(typescript@5.1.3) typescript: 5.1.3 dev: true @@ -6702,6 +6570,16 @@ packages: path-type: 4.0.0 dev: true + /cosmiconfig@8.2.0: + resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + engines: {node: '>=14'} + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + dev: true + /coveralls@3.1.1: resolution: {integrity: sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==} engines: {node: '>=6'} @@ -6710,7 +6588,7 @@ packages: js-yaml: 3.14.1 lcov-parse: 1.0.0 log-driver: 1.2.7 - minimist: 1.2.6 + minimist: 1.2.8 request: 2.88.2 dev: true @@ -6718,7 +6596,7 @@ packages: resolution: {integrity: sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==} engines: {node: '>=10'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-dir: 3.1.0 nested-error-stacks: 2.1.1 p-event: 4.2.0 @@ -6740,7 +6618,7 @@ packages: arrify: 3.0.0 cp-file: 9.1.0 globby: 13.1.4 - junk: 4.0.0 + junk: 4.0.1 micromatch: 4.0.5 nested-error-stacks: 2.1.1 p-filter: 3.0.0 @@ -6816,7 +6694,7 @@ packages: engines: {node: '>=14'} dependencies: '@cspell/cspell-service-bus': 6.31.1 - node-fetch: 2.6.9(encoding@0.1.13) + node-fetch: 2.6.11 transitivePeerDependencies: - encoding dev: true @@ -6927,7 +6805,7 @@ packages: dependencies: clap: 3.1.1 css-tree: 2.3.1 - resolve: 1.22.1 + resolve: 1.22.2 dev: true /csstype@2.6.21: @@ -6935,6 +6813,7 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: true /cypress-image-snapshot@4.0.1(cypress@12.10.0)(jest@29.5.0): resolution: {integrity: sha512-PBpnhX/XItlx3/DAk5ozsXQHUi72exybBNH5Mpqj1DVmjq+S5Jd9WE5CRa4q5q0zuMZb2V2VpXHth6MjFpgj9Q==} @@ -6959,9 +6838,9 @@ packages: hasBin: true requiresBuild: true dependencies: - '@cypress/request': 2.88.10 + '@cypress/request': 2.88.11 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/node': 14.18.29 + '@types/node': 14.18.51 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.3 arch: 2.2.0 @@ -7017,7 +6896,7 @@ packages: peerDependencies: cytoscape: ^3.2.0 dependencies: - cose-base: 2.1.0 + cose-base: 2.2.0 cytoscape: 3.23.0 dev: false @@ -7029,8 +6908,8 @@ packages: lodash: 4.17.21 dev: false - /d3-array@3.2.0: - resolution: {integrity: sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==} + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} engines: {node: '>=12'} dependencies: internmap: 2.0.3 @@ -7056,7 +6935,7 @@ packages: resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} engines: {node: '>=12'} dependencies: - d3-path: 3.0.1 + d3-path: 3.1.0 dev: false /d3-color@3.1.0: @@ -7064,15 +6943,22 @@ packages: engines: {node: '>=12'} dev: false - /d3-contour@4.0.0: - resolution: {integrity: sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==} + /d3-contour@3.1.0: + resolution: {integrity: sha512-vV3xtwrYK5p1J4vyukr70m57mtFTEQYqoaDC1ylBfht/hkdUF0nfWZ1b3V2EPBUVkUkoqq5/fbRoBImBWJgOsg==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.0 + d3-array: 3.2.4 dev: false - /d3-delaunay@6.0.2: - resolution: {integrity: sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==} + /d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} engines: {node: '>=12'} dependencies: delaunator: 5.0.0 @@ -7127,11 +7013,11 @@ packages: engines: {node: '>=12'} dev: false - /d3-geo@3.0.1: - resolution: {integrity: sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==} + /d3-geo@3.1.0: + resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.0 + d3-array: 3.2.4 dev: false /d3-hierarchy@3.1.2: @@ -7146,8 +7032,8 @@ packages: d3-color: 3.1.0 dev: false - /d3-path@3.0.1: - resolution: {integrity: sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==} + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} engines: {node: '>=12'} dev: false @@ -7178,10 +7064,10 @@ packages: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.0 + d3-array: 3.2.4 d3-format: 3.1.0 d3-interpolate: 3.0.1 - d3-time: 3.0.0 + d3-time: 3.1.0 d3-time-format: 4.1.0 dev: false @@ -7190,25 +7076,25 @@ packages: engines: {node: '>=12'} dev: false - /d3-shape@3.1.0: - resolution: {integrity: sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==} + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} engines: {node: '>=12'} dependencies: - d3-path: 3.0.1 + d3-path: 3.1.0 dev: false /d3-time-format@4.1.0: resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} engines: {node: '>=12'} dependencies: - d3-time: 3.0.0 + d3-time: 3.1.0 dev: false - /d3-time@3.0.0: - resolution: {integrity: sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==} + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.0 + d3-array: 3.2.4 dev: false /d3-timer@3.0.1: @@ -7241,17 +7127,53 @@ packages: d3-transition: 3.0.1(d3-selection@3.0.0) dev: false - /d3@7.8.2: - resolution: {integrity: sha512-WXty7qOGSHb7HR7CfOzwN1Gw04MUOzN8qh9ZUsvwycIMb4DYMpY9xczZ6jUorGtO6bR9BPMPaueIKwiDxu9uiQ==} + /d3@7.4.0: + resolution: {integrity: sha512-/xKyIYpKzd+I2DhiS2ANYJtEfHkE9lHKBFwqsplKsazPcXy2N1KIJSMTJsRk42jHbHCH0KPJGd0RnBt6NBJ1MA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 3.1.0 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.0 + d3-geo: 3.1.0 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.0.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + dev: false + + /d3@7.8.5: + resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.0 + d3-array: 3.2.4 d3-axis: 3.0.0 d3-brush: 3.0.0 d3-chord: 3.0.1 d3-color: 3.1.0 - d3-contour: 4.0.0 - d3-delaunay: 6.0.2 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 d3-dispatch: 3.0.1 d3-drag: 3.0.0 d3-dsv: 3.0.1 @@ -7259,18 +7181,18 @@ packages: d3-fetch: 3.0.1 d3-force: 3.0.0 d3-format: 3.1.0 - d3-geo: 3.0.1 + d3-geo: 3.1.0 d3-hierarchy: 3.1.2 d3-interpolate: 3.0.1 - d3-path: 3.0.1 + d3-path: 3.1.0 d3-polygon: 3.0.1 d3-quadtree: 3.0.1 d3-random: 3.0.1 d3-scale: 4.0.2 d3-scale-chromatic: 3.0.0 d3-selection: 3.0.0 - d3-shape: 3.1.0 - d3-time: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 d3-time-format: 4.1.0 d3-timer: 3.0.1 d3-transition: 3.0.1(d3-selection@3.0.0) @@ -7280,7 +7202,7 @@ packages: /dagre-d3-es@7.0.10: resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} dependencies: - d3: 7.8.2 + d3: 7.8.5 lodash-es: 4.17.21 dev: false @@ -7319,9 +7241,11 @@ packages: whatwg-url: 12.0.1 dev: true - /date-fns@2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.22.5 dev: true /date-time@3.1.0: @@ -7385,8 +7309,8 @@ packages: ms: 2.1.2 supports-color: 8.1.1 - /decamelize-keys@1.1.0: - resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 @@ -7434,11 +7358,29 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge@4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.1.1 + titleize: 3.0.0 + dev: true + /default-gateway@6.0.3: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} @@ -7463,6 +7405,11 @@ packages: engines: {node: '>=8'} dev: true + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -7478,7 +7425,7 @@ packages: /delaunator@5.0.0: resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} dependencies: - robust-predicates: 3.0.1 + robust-predicates: 3.0.2 dev: false /delayed-stream@1.0.0: @@ -7550,8 +7497,8 @@ packages: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: true - /dns-packet@5.4.0: - resolution: {integrity: sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==} + /dns-packet@5.6.0: + resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==} engines: {node: '>=6'} dependencies: '@leichtgewicht/ip-codec': 2.0.4 @@ -7569,7 +7516,7 @@ packages: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - entities: 4.4.0 + entities: 4.5.0 dev: true /dom-to-image-more@2.16.0: @@ -7598,8 +7545,8 @@ packages: resolution: {integrity: sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ==} dev: false - /domutils@3.0.1: - resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -7641,16 +7588,16 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /ejs@3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.8.5 + jake: 10.8.7 dev: true - /electron-to-chromium@1.4.432: - resolution: {integrity: sha512-yz3U/khQgAFT2HURJA3/F4fKIyO2r5eK09BQzBZFd6BvBSSaRuzKc2ZNBHtJcO75/EKiRYbVYJZ2RB0P4BuD2g==} + /electron-to-chromium@1.4.433: + resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} dev: true /elkjs@0.8.2: @@ -7687,11 +7634,11 @@ packages: once: 1.4.0 dev: true - /enhanced-resolve@5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 tapable: 2.2.1 dev: true @@ -7707,8 +7654,8 @@ packages: engines: {node: '>=0.12'} dev: true - /entities@4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: true @@ -7724,17 +7671,17 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.21.1: - resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + /es-abstract@1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} dependencies: + array-buffer-byte-length: 1.0.0 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function-bind: 1.1.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 @@ -7743,7 +7690,7 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.5 - is-array-buffer: 3.0.1 + is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 @@ -7754,8 +7701,9 @@ packages: object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.0 safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 typed-array-length: 1.0.4 @@ -7771,7 +7719,7 @@ packages: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 dev: true @@ -7894,7 +7842,7 @@ packages: /eslint-plugin-html@7.1.0: resolution: {integrity: sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg==} dependencies: - htmlparser2: 8.0.1 + htmlparser2: 8.0.2 dev: true /eslint-plugin-jest@27.2.1(@typescript-eslint/eslint-plugin@5.59.0)(eslint@8.39.0)(jest@29.5.0)(typescript@5.1.3): @@ -7911,7 +7859,7 @@ packages: optional: true dependencies: '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.39.0)(typescript@5.1.3) - '@typescript-eslint/utils': 5.59.0(eslint@8.39.0)(typescript@5.1.3) + '@typescript-eslint/utils': 5.59.11(eslint@8.39.0)(typescript@5.1.3) eslint: 8.39.0 jest: 29.5.0(@types/node@18.16.0)(ts-node@10.9.1) transitivePeerDependencies: @@ -7986,19 +7934,19 @@ packages: peerDependencies: eslint: '>=8.28.0' dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) - ci-info: 3.6.2 + ci-info: 3.8.0 clean-regexp: 1.0.0 eslint: 8.39.0 esquery: 1.5.0 indent-string: 4.0.0 - is-builtin-module: 3.2.0 + is-builtin-module: 3.2.1 jsesc: 3.0.2 lodash: 4.17.21 pluralize: 8.0.0 read-pkg-up: 7.0.1 - regexp-tree: 0.1.24 + regexp-tree: 0.1.27 regjsparser: 0.9.1 safe-regex: 2.1.1 semver: 7.5.2 @@ -8021,8 +7969,8 @@ packages: estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -8032,10 +7980,10 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.39.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.2 + '@eslint-community/regexpp': 4.5.1 + '@eslint/eslintrc': 2.0.3 '@eslint/js': 8.39.0 - '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -8045,22 +7993,22 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.0 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.20.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.1.4 + js-sdsl: 4.4.1 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -8075,8 +8023,8 @@ packages: - supports-color dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + /espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.9.0 @@ -8135,7 +8083,7 @@ packages: /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 dev: true /esutils@1.0.0: @@ -8270,7 +8218,7 @@ packages: array-flatten: 1.1.1 body-parser: 1.20.1 content-disposition: 0.5.4 - content-type: 1.0.4 + content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 debug: 2.6.9 @@ -8336,8 +8284,8 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true /fast-equals@4.0.3: @@ -8363,7 +8311,7 @@ packages: engines: {node: '>= 10.0.0'} dependencies: ajv: 6.12.6 - deepmerge: 4.2.2 + deepmerge: 4.3.1 rfdc: 1.3.0 string-similarity: 4.0.4 dev: true @@ -8372,8 +8320,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-redact@3.1.2: - resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} + /fast-redact@3.2.0: + resolution: {integrity: sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==} engines: {node: '>=6'} /fast-safe-stringify@2.1.1: @@ -8406,14 +8354,14 @@ packages: proxy-addr: 2.0.7 rfdc: 1.3.0 secure-json-parse: 2.7.0 - semver: 7.5.0 + semver: 7.3.8 tiny-lru: 8.0.2 transitivePeerDependencies: - supports-color dev: true - /fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 @@ -8609,7 +8557,7 @@ packages: engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 - signal-exit: 4.0.1 + signal-exit: 4.0.2 dev: true /forever-agent@0.6.1: @@ -8668,7 +8616,7 @@ packages: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -8677,7 +8625,7 @@ packages: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 dev: true @@ -8687,13 +8635,13 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true - /fs-monkey@1.0.3: - resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + /fs-monkey@1.0.4: + resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==} dev: true /fs.realpath@1.0.0: @@ -8715,7 +8663,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 functions-have-names: 1.2.3 dev: true @@ -8742,11 +8690,12 @@ packages: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} dev: true - /get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: function-bind: 1.1.1 has: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 dev: true @@ -8793,7 +8742,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /getos@3.2.1: @@ -8836,16 +8785,16 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.2.2: - resolution: {integrity: sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==} + /glob@10.2.7: + resolution: {integrity: sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.1.1 - minimatch: 9.0.0 - minipass: 5.0.0 - path-scurry: 1.7.0 + jackspeak: 2.2.1 + minimatch: 9.0.1 + minipass: 6.0.2 + path-scurry: 1.9.2 dev: true /glob@7.1.6: @@ -8870,8 +8819,8 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 @@ -8888,8 +8837,8 @@ packages: ini: 1.3.8 dev: true - /global-dirs@3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} + /global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} dependencies: ini: 2.0.0 @@ -8900,8 +8849,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -8914,10 +8863,6 @@ packages: define-properties: 1.2.0 dev: true - /globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true - /globby@11.0.4: resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} engines: {node: '>=10'} @@ -8925,7 +8870,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -8937,7 +8882,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -8948,15 +8893,11 @@ packages: dependencies: dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 dev: true - /globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true - /glur@1.1.2: resolution: {integrity: sha512-l+8esYHTKOx2G/Aao4lEQ0bnHWg4fWtJbVoZZT9Knxi01pB8C80BR85nONLFwkkQoFRCmXY+BUcGZN3yZ2QsRA==} dev: true @@ -8964,19 +8905,19 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true - /got@11.8.5: - resolution: {integrity: sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==} + /got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.2 + '@types/cacheable-request': 6.0.3 '@types/responselike': 1.0.0 cacheable-lookup: 5.0.4 - cacheable-request: 7.0.2 + cacheable-request: 7.0.4 decompress-response: 6.0.0 http2-wrapper: 1.0.3 lowercase-keys: 2.0.0 @@ -8984,8 +8925,8 @@ packages: responselike: 2.0.1 dev: true - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true /grapheme-splitter@1.0.4: @@ -9013,7 +8954,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.3 + uglify-js: 3.17.4 dev: true /har-schema@2.0.0: @@ -9063,7 +9004,7 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /has-proto@1.0.1: @@ -9121,7 +9062,7 @@ packages: dependencies: inherits: 2.0.4 obuf: 1.1.2 - readable-stream: 2.3.7 + readable-stream: 2.3.8 wbuf: 1.7.3 dev: true @@ -9132,8 +9073,8 @@ packages: whatwg-encoding: 2.0.0 dev: true - /html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + /html-entities@2.3.6: + resolution: {integrity: sha512-9o0+dcpIw2/HxkNuYKxSJUF/MMRZQECK4GnF+oQOmJ83yCVHTWgCH5aOXxK5bozNRmM8wtgryjHD3uloPBDEGw==} dev: true /html-escaper@2.0.2: @@ -9144,17 +9085,17 @@ packages: resolution: {integrity: sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==} dev: false - /htmlparser2@8.0.1: - resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.0.1 - entities: 4.4.0 + domutils: 3.1.0 + entities: 4.5.0 dev: true - /http-cache-semantics@4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true /http-deceiver@1.2.7: @@ -9197,7 +9138,7 @@ packages: - supports-color dev: true - /http-proxy-middleware@2.0.6(@types/express@4.17.14): + /http-proxy-middleware@2.0.6(@types/express@4.17.17): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -9206,8 +9147,8 @@ packages: '@types/express': optional: true dependencies: - '@types/express': 4.17.14 - '@types/http-proxy': 1.17.9 + '@types/express': 4.17.17 + '@types/http-proxy': 1.17.11 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 @@ -9262,7 +9203,7 @@ packages: cors: 2.8.5 express: 4.18.2 spdy: 4.0.2 - uglify-js: 3.17.3 + uglify-js: 3.17.4 transitivePeerDependencies: - supports-color dev: true @@ -9318,8 +9259,8 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore@5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true @@ -9390,7 +9331,7 @@ packages: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -9410,8 +9351,8 @@ packages: engines: {node: '>= 0.10'} dev: true - /ipaddr.js@2.0.1: - resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} engines: {node: '>= 10'} dev: true @@ -9426,11 +9367,11 @@ packages: is-decimal: 1.0.4 dev: true - /is-array-buffer@3.0.1: - resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-typed-array: 1.1.10 dev: true @@ -9467,8 +9408,8 @@ packages: engines: {node: '>=4'} dev: true - /is-builtin-module@3.2.0: - resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==} + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 @@ -9483,13 +9424,7 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: - ci-info: 3.6.2 - dev: true - - /is-core-module@2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} - dependencies: - has: 1.0.3 + ci-info: 3.8.0 dev: true /is-core-module@2.12.1: @@ -9514,6 +9449,12 @@ packages: hasBin: true dev: true + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -9543,11 +9484,19 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + /is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} dependencies: - global-dirs: 3.0.0 + global-dirs: 3.0.1 is-path-inside: 3.0.3 dev: true @@ -9748,20 +9697,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.12.3 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-instrument@5.2.0: - resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.12.3 - '@babel/parser': 7.21.8 + '@babel/core': 7.22.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -9773,8 +9709,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.12.3 - '@babel/parser': 7.21.8 + '@babel/core': 7.22.5 + '@babel/parser': 7.22.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -9830,17 +9766,17 @@ packages: plist: 3.0.6 dev: true - /jackspeak@2.1.1: - resolution: {integrity: sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw==} + /jackspeak@2.2.1: + resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} engines: {node: '>=14'} dependencies: - cliui: 8.0.1 + '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 dev: true - /jake@10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} engines: {node: '>=10'} hasBin: true dependencies: @@ -9881,7 +9817,7 @@ packages: pretty-format: 29.5.0 pure-rand: 6.0.2 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 transitivePeerDependencies: - supports-color dev: true @@ -9901,7 +9837,7 @@ packages: '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 import-local: 3.1.0 jest-config: 29.5.0(@types/node@18.16.0)(ts-node@10.9.1) jest-util: 29.5.0 @@ -9926,16 +9862,16 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.12.3 + '@babel/core': 7.22.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.16.0 - babel-jest: 29.5.0(@babel/core@7.12.3) + babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 - ci-info: 3.6.2 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-circus: 29.5.0 jest-environment-node: 29.5.0 jest-get-type: 29.4.3 @@ -10004,11 +9940,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/graceful-fs': 4.1.5 + '@types/graceful-fs': 4.1.6 '@types/node': 18.16.0 - anymatch: 3.1.2 + anymatch: 3.1.3 fb-watchman: 2.0.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-regex-util: 29.4.3 jest-util: 29.5.0 jest-worker: 29.5.0 @@ -10058,15 +9994,15 @@ packages: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.5 pretty-format: 29.5.0 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 dev: true /jest-mock@29.5.0: @@ -10078,8 +10014,8 @@ packages: jest-util: 29.5.0 dev: true - /jest-pnp-resolver@1.2.2(jest-resolve@29.5.0): - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: jest-resolve: '*' @@ -10110,9 +10046,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.2(jest-resolve@29.5.0) + jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) jest-util: 29.5.0 jest-validate: 29.5.0 resolve: 1.22.2 @@ -10132,7 +10068,7 @@ packages: '@types/node': 18.16.0 chalk: 4.1.2 emittery: 0.13.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-docblock: 29.4.3 jest-environment-node: 29.5.0 jest-haste-map: 29.5.0 @@ -10162,10 +10098,10 @@ packages: '@jest/types': 29.5.0 '@types/node': 18.16.0 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 + cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-mock: 29.5.0 @@ -10183,21 +10119,21 @@ packages: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.12.3 - '@babel/generator': 7.21.1 - '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.12.3) - '@babel/plugin-syntax-typescript': 7.18.6(@babel/core@7.12.3) - '@babel/traverse': 7.21.2 - '@babel/types': 7.21.2 + '@babel/core': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.2 + '@types/babel__traverse': 7.20.1 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.12.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) chalk: 4.1.2 expect: 29.5.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-diff: 29.5.0 jest-get-type: 29.4.3 jest-matcher-utils: 29.5.0 @@ -10217,8 +10153,8 @@ packages: '@jest/types': 29.5.0 '@types/node': 18.16.0 chalk: 4.1.2 - ci-info: 3.6.2 - graceful-fs: 4.2.10 + ci-info: 3.8.0 + graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true @@ -10328,8 +10264,8 @@ packages: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true - /joi@17.7.1: - resolution: {integrity: sha512-teoLhIvWE298R6AeJywcjR4sX2hHjB3/xJX4qPjg+gTg+c0mzUDsziYlqPmLomq9gVsfaMcgPaGc7VxtD/9StA==} + /joi@17.9.2: + resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -10346,8 +10282,8 @@ packages: resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==} dev: true - /js-sdsl@4.1.4: - resolution: {integrity: sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==} + /js-sdsl@4.4.1: + resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} dev: true /js-string-escape@1.0.1: @@ -10405,12 +10341,12 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.5 parse5: 7.1.2 rrweb-cssom: 0.6.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 @@ -10469,8 +10405,8 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /json5@2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true @@ -10482,7 +10418,7 @@ packages: /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonfile@6.1.0: @@ -10490,7 +10426,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonlint@1.6.0: @@ -10532,13 +10468,13 @@ packages: verror: 1.10.0 dev: true - /junk@4.0.0: - resolution: {integrity: sha512-ojtSU++zLJ3jQG9bAYjg94w+/DOJtRyD7nPaerMFrBhmdVmiV5/exYH5t4uHga4G/95nT6hr1OJoKIFbYbrW5w==} + /junk@4.0.1: + resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} dev: true - /keyv@4.5.0: - resolution: {integrity: sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==} + /keyv@4.5.2: + resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} dependencies: json-buffer: 3.0.1 dev: true @@ -10561,8 +10497,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - /kolorist@1.7.0: - resolution: {integrity: sha512-ymToLHqL02udwVdbkowNpzjFd6UzozMtshPQKVi5k1EjKRqKqBrOnE9QbLEb0/pV76SAiIT13hdL8R6suc+f3g==} + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} dev: true /ky@0.30.0: @@ -10616,7 +10552,7 @@ packages: /light-my-request@4.12.0: resolution: {integrity: sha512-0y+9VIfJEsPVzK5ArSIJ8Dkxp8QMP7/aCuxCUtG/tr9a2NoOf/snATE/OUc05XUplJCEnRh6gTkH7xh9POt1DQ==} dependencies: - ajv: 8.11.0 + ajv: 8.12.0 cookie: 0.5.0 process-warning: 1.0.0 set-cookie-parser: 2.6.0 @@ -10651,8 +10587,8 @@ packages: normalize-path: 3.0.0 object-inspect: 1.12.3 pidtree: 0.6.0 - string-argv: 0.3.1 - yaml: 2.2.2 + string-argv: 0.3.2 + yaml: 2.3.1 transitivePeerDependencies: - enquirer - supports-color @@ -10673,7 +10609,7 @@ packages: log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.8.0 + rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 dev: true @@ -10688,11 +10624,11 @@ packages: optional: true dependencies: cli-truncate: 2.1.0 - colorette: 2.0.19 + colorette: 2.0.20 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.8.0 + rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 dev: true @@ -10819,13 +10755,13 @@ packages: resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} dev: true - /loglevel@1.8.0: - resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} + /loglevel@1.8.1: + resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} dev: true - /longest-streak@3.0.1: - resolution: {integrity: sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==} + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: true /loupe@2.3.6: @@ -10852,8 +10788,8 @@ packages: yallist: 4.0.0 dev: true - /lru-cache@9.1.1: - resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} + /lru-cache@9.1.2: + resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} engines: {node: 14 || >=16.14} dev: true @@ -10870,7 +10806,8 @@ packages: resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} engines: {node: '>=12'} dependencies: - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -10933,12 +10870,13 @@ packages: blueimp-md5: 2.19.0 dev: true - /mdast-util-find-and-replace@2.2.1: - resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==} + /mdast-util-find-and-replace@2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} dependencies: + '@types/mdast': 3.0.11 escape-string-regexp: 5.0.0 - unist-util-is: 5.1.1 - unist-util-visit-parents: 5.1.1 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 dev: true /mdast-util-from-markdown@0.8.5: @@ -10959,98 +10897,110 @@ packages: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.1.0 - micromark: 3.0.10 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-decode-string: 1.0.2 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - unist-util-stringify-position: 3.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 uvu: 0.5.6 transitivePeerDependencies: - supports-color - /mdast-util-frontmatter@1.0.0: - resolution: {integrity: sha512-7itKvp0arEVNpCktOET/eLFAYaZ+0cNjVtFtIPxgQ5tV+3i+D4SDDTjTzPWl44LT59PC+xdx+glNTawBdF98Mw==} + /mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} dependencies: - micromark-extension-frontmatter: 1.0.0 + '@types/mdast': 3.0.11 + mdast-util-to-markdown: 1.5.0 + micromark-extension-frontmatter: 1.1.1 dev: true - /mdast-util-gfm-autolink-literal@1.0.2: - resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} + /mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} dependencies: '@types/mdast': 3.0.11 ccount: 2.0.1 - mdast-util-find-and-replace: 2.2.1 - micromark-util-character: 1.1.0 + mdast-util-find-and-replace: 2.2.2 + micromark-util-character: 1.2.0 dev: true - /mdast-util-gfm-footnote@1.0.1: - resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==} + /mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} dependencies: '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.3.0 - micromark-util-normalize-identifier: 1.0.0 + mdast-util-to-markdown: 1.5.0 + micromark-util-normalize-identifier: 1.1.0 dev: true - /mdast-util-gfm-strikethrough@1.0.2: - resolution: {integrity: sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==} + /mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} dependencies: '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 dev: true - /mdast-util-gfm-table@1.0.6: - resolution: {integrity: sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==} + /mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} dependencies: '@types/mdast': 3.0.11 markdown-table: 3.0.3 mdast-util-from-markdown: 1.3.0 - mdast-util-to-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color dev: true - /mdast-util-gfm-task-list-item@1.0.1: - resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==} + /mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} dependencies: '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 dev: true - /mdast-util-gfm@2.0.1: - resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==} + /mdast-util-gfm@2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} dependencies: mdast-util-from-markdown: 1.3.0 - mdast-util-gfm-autolink-literal: 1.0.2 - mdast-util-gfm-footnote: 1.0.1 - mdast-util-gfm-strikethrough: 1.0.2 - mdast-util-gfm-table: 1.0.6 - mdast-util-gfm-task-list-item: 1.0.1 - mdast-util-to-markdown: 1.3.0 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 + mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color dev: true - /mdast-util-to-markdown@1.3.0: - resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==} + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.11 + unist-util-is: 5.2.1 + dev: true + + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 - longest-streak: 3.0.1 - mdast-util-to-string: 3.1.0 - micromark-util-decode-string: 1.0.2 - unist-util-visit: 4.1.1 - zwitch: 2.0.2 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 dev: true /mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} dev: true - /mdast-util-to-string@3.1.0: - resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.11 /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} @@ -11065,11 +11015,11 @@ packages: engines: {node: '>= 0.6'} dev: true - /memfs@3.4.11: - resolution: {integrity: sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==} + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} dependencies: - fs-monkey: 1.0.3 + fs-monkey: 1.0.4 dev: true /meow@10.1.5: @@ -11079,13 +11029,13 @@ packages: '@types/minimist': 1.2.2 camelcase-keys: 7.0.2 decamelize: 5.0.1 - decamelize-keys: 1.1.0 + decamelize-keys: 1.1.1 hard-rejection: 2.1.0 minimist-options: 4.1.0 normalize-package-data: 3.0.3 read-pkg-up: 8.0.0 redent: 4.0.0 - trim-newlines: 4.0.2 + trim-newlines: 4.1.1 type-fest: 1.4.0 yargs-parser: 20.2.9 dev: true @@ -11096,7 +11046,7 @@ packages: dependencies: '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 + decamelize-keys: 1.1.1 hard-rejection: 2.1.0 minimist-options: 4.1.0 normalize-package-data: 3.0.3 @@ -11124,218 +11074,217 @@ packages: engines: {node: '>= 0.6'} dev: true - /micromark-core-commonmark@1.0.6: - resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.0.0 - micromark-factory-label: 1.0.2 - micromark-factory-space: 1.0.0 - micromark-factory-title: 1.0.2 - micromark-factory-whitespace: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-html-tag-name: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 - /micromark-extension-frontmatter@1.0.0: - resolution: {integrity: sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==} + /micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} dependencies: fault: 2.0.1 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: true - /micromark-extension-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-sanitize-uri: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 + micromark-util-character: 1.2.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 dev: true - /micromark-extension-gfm-footnote@1.0.4: - resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} dependencies: - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-sanitize-uri: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: true - /micromark-extension-gfm-strikethrough@1.0.4: - resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: true - /micromark-extension-gfm-table@1.0.5: - resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: true - /micromark-extension-gfm-tagfilter@1.0.1: - resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 dev: true - /micromark-extension-gfm-task-list-item@1.0.3: - resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 dev: true - /micromark-extension-gfm@2.0.1: - resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} dependencies: - micromark-extension-gfm-autolink-literal: 1.0.3 - micromark-extension-gfm-footnote: 1.0.4 - micromark-extension-gfm-strikethrough: 1.0.4 - micromark-extension-gfm-table: 1.0.5 - micromark-extension-gfm-tagfilter: 1.0.1 - micromark-extension-gfm-task-list-item: 1.0.3 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 + micromark-extension-gfm-autolink-literal: 1.0.5 + micromark-extension-gfm-footnote: 1.1.2 + micromark-extension-gfm-strikethrough: 1.0.7 + micromark-extension-gfm-table: 1.0.7 + micromark-extension-gfm-tagfilter: 1.0.2 + micromark-extension-gfm-task-list-item: 1.0.5 + micromark-util-combine-extensions: 1.1.0 + micromark-util-types: 1.1.0 dev: true - /micromark-factory-destination@1.0.0: - resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-factory-label@1.0.2: - resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 - /micromark-factory-space@1.0.0: - resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 - /micromark-factory-title@1.0.2: - resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-factory-whitespace@1.0.0: - resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-character@1.1.0: - resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-chunked@1.0.0: - resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 - /micromark-util-classify-character@1.0.0: - resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-combine-extensions@1.0.0: - resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 - /micromark-util-decode-numeric-character-reference@1.0.0: - resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 - /micromark-util-decode-string@1.0.2: - resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} dependencies: decode-named-character-reference: 1.0.2 - micromark-util-character: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-symbol: 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 - /micromark-util-encode@1.0.1: - resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - /micromark-util-html-tag-name@1.1.0: - resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - /micromark-util-normalize-identifier@1.0.0: - resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} dependencies: - micromark-util-symbol: 1.0.1 + micromark-util-symbol: 1.1.0 - /micromark-util-resolve-all@1.0.0: - resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} dependencies: - micromark-util-types: 1.0.2 + micromark-util-types: 1.1.0 - /micromark-util-sanitize-uri@1.0.0: - resolution: {integrity: sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==} + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-encode: 1.0.1 - micromark-util-symbol: 1.0.1 + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 - /micromark-util-subtokenize@1.0.2: - resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 - /micromark-util-symbol@1.0.1: - resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - /micromark-util-types@1.0.2: - resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} /micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} @@ -11346,25 +11295,25 @@ packages: - supports-color dev: true - /micromark@3.0.10: - resolution: {integrity: sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==} + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: - '@types/debug': 4.1.7 + '@types/debug': 4.1.8 debug: 4.3.4(supports-color@8.1.1) decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-combine-extensions: 1.0.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-encode: 1.0.1 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-sanitize-uri: 1.0.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 uvu: 0.5.6 transitivePeerDependencies: - supports-color @@ -11442,8 +11391,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.0: - resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} + /minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -11458,21 +11407,13 @@ packages: kind-of: 6.0.3 dev: true - /minimist@1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} - dev: true - /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true - - /minisearch@6.0.1: - resolution: {integrity: sha512-Ly1w0nHKnlhAAh6/BF/+9NgzXfoJxaJ8nhopFhQ3NcvFJrFIL+iCg9gw9e9UMBD+XIsp/RyznJ/o5UIe5Kw+kg==} + /minipass@6.0.2: + resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + engines: {node: '>=16 || 14 >=14.17'} dev: true /minisearch@6.1.0: @@ -11486,13 +11427,13 @@ packages: minimist: 1.2.8 dev: true - /mlly@1.2.0: - resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} + /mlly@1.3.0: + resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==} dependencies: acorn: 8.9.0 pathe: 1.1.0 - pkg-types: 1.0.2 - ufo: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 dev: true /mri@1.2.0: @@ -11519,7 +11460,7 @@ packages: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true dependencies: - dns-packet: 5.4.0 + dns-packet: 5.6.0 thunky: 1.1.0 dev: true @@ -11570,12 +11511,12 @@ packages: engines: {node: '>=10.5.0'} dev: true - /node-fetch-native@1.1.0: - resolution: {integrity: sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q==} + /node-fetch-native@1.2.0: + resolution: {integrity: sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==} dev: true - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + /node-fetch@2.6.11: + resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -11586,8 +11527,8 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch@2.6.9(encoding@0.1.13): - resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + /node-fetch@2.6.7(encoding@0.1.13): + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -11624,12 +11565,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} - dev: true - - /node-releases@2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} dev: true /nomnom@1.5.2: @@ -11693,8 +11630,8 @@ packages: path-key: 4.0.0 dev: true - /nwsapi@2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /nwsapi@2.2.5: + resolution: {integrity: sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==} dev: true /nyc@15.1.0: @@ -11705,7 +11642,7 @@ packages: '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 caching-transform: 4.0.0 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 decamelize: 1.2.0 find-cache-dir: 3.3.2 find-up: 4.1.0 @@ -11744,11 +11681,7 @@ packages: /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: false - - /object-inspect@1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: true + dev: false /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -11773,12 +11706,12 @@ packages: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true - /ofetch@1.0.1: - resolution: {integrity: sha512-icBz2JYfEpt+wZz1FRoGcrMigjNKjzvufE26m9+yUiacRQRHwnNlGRPiDnW4op7WX/MR6aniwS8xw8jyVelF2g==} + /ofetch@1.1.0: + resolution: {integrity: sha512-yjq2ZUUMto1ITpge2J5vNlUfteLzxfHn9aJC55WtVGD3okKwSfPoLaKpcHXmmKd2kZZUGo+jdkFuuj09Blyeig==} dependencies: destr: 1.2.2 - node-fetch-native: 1.1.0 - ufo: 1.1.1 + node-fetch-native: 1.2.0 + ufo: 1.1.2 dev: true /on-exit-leak-free@2.1.0: @@ -11816,8 +11749,8 @@ packages: mimic-fn: 4.0.0 dev: true - /open@8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 @@ -11825,6 +11758,16 @@ packages: is-wsl: 2.2.0 dev: true + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -11969,7 +11912,7 @@ packages: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 hasha: 5.2.2 lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 @@ -12008,7 +11951,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -12018,16 +11961,10 @@ packages: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /parse5@7.1.1: - resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} - dependencies: - entities: 4.4.0 - dev: true - /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: - entities: 4.4.0 + entities: 4.5.0 dev: true /parseurl@1.3.3: @@ -12071,12 +12008,12 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.7.0: - resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==} + /path-scurry@1.9.2: + resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 9.1.1 - minipass: 5.0.0 + lru-cache: 9.1.2 + minipass: 6.0.2 dev: true /path-to-regexp@0.1.7: @@ -12150,7 +12087,7 @@ packages: resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} hasBin: true dependencies: - fast-redact: 3.1.2 + fast-redact: 3.2.0 fast-safe-stringify: 2.1.1 flatstr: 1.0.12 pino-std-serializers: 3.2.0 @@ -12164,7 +12101,7 @@ packages: hasBin: true dependencies: atomic-sleep: 1.0.0 - fast-redact: 3.1.2 + fast-redact: 3.2.0 on-exit-leak-free: 2.1.0 pino-abstract-transport: 1.0.0 pino-std-serializers: 6.2.1 @@ -12201,11 +12138,11 @@ packages: find-up: 4.1.0 dev: true - /pkg-types@1.0.2: - resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==} + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.2.0 + mlly: 1.3.0 pathe: 1.1.0 dev: true @@ -12242,29 +12179,29 @@ packages: hasBin: true dev: true - /postcss-import@15.1.0(postcss@8.4.23): + /postcss-import@15.1.0(postcss@8.4.24): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.2 dev: false - /postcss-js@4.0.1(postcss@8.4.23): + /postcss-js@4.0.1(postcss@8.4.24): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.23 + postcss: 8.4.24 dev: false - /postcss-load-config@4.0.1(postcss@8.4.23)(ts-node@10.9.1): + /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -12277,18 +12214,18 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.23 + postcss: 8.4.24 ts-node: 10.9.1(@types/node@18.16.0)(typescript@5.1.3) - yaml: 2.2.2 + yaml: 2.3.1 dev: false - /postcss-nested@6.0.1(postcss@8.4.23): + /postcss-nested@6.0.1(postcss@8.4.24): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.23 + postcss: 8.4.24 postcss-selector-parser: 6.0.13 dev: false @@ -12304,16 +12241,16 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: false - /postcss@8.4.23: - resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} + /postcss@8.4.24: + resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 - /preact@10.11.0: - resolution: {integrity: sha512-Fk6+vB2kb6mSJfDgODq0YDhMfl0HNtK5+Uc9QqECO4nlyPAQwCI+BKyWO//idA7ikV7o+0Fm6LQmNuQi1wXI1w==} + /preact@10.15.1: + resolution: {integrity: sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==} dev: true /prelude-ls@1.1.2: @@ -12437,11 +12374,6 @@ packages: once: 1.4.0 dev: true - /punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} - dev: true - /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} @@ -12456,6 +12388,13 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true + /qs@6.10.4: + resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -12565,8 +12504,8 @@ packages: type-fest: 1.4.0 dev: true - /readable-stream@2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -12577,8 +12516,8 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -12648,16 +12587,16 @@ packages: /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 dev: true - /regexp-tree@0.1.24: - resolution: {integrity: sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==} + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true dev: true - /regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -12665,8 +12604,8 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpu-core@5.3.1: - resolution: {integrity: sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==} + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} dependencies: '@babel/regjsgen': 0.8.0 @@ -12694,25 +12633,25 @@ packages: /remark-frontmatter@4.0.1: resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} dependencies: - '@types/mdast': 3.0.10 - mdast-util-frontmatter: 1.0.0 - micromark-extension-frontmatter: 1.0.0 + '@types/mdast': 3.0.11 + mdast-util-frontmatter: 1.0.1 + micromark-extension-frontmatter: 1.1.1 unified: 10.1.2 dev: true /remark-gfm@3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} dependencies: - '@types/mdast': 3.0.10 - mdast-util-gfm: 2.0.1 - micromark-extension-gfm: 2.0.1 + '@types/mdast': 3.0.11 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 unified: 10.1.2 transitivePeerDependencies: - supports-color dev: true - /remark-parse@10.0.1: - resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: '@types/mdast': 3.0.11 mdast-util-from-markdown: 1.3.0 @@ -12721,20 +12660,20 @@ packages: - supports-color dev: true - /remark-stringify@10.0.2: - resolution: {integrity: sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==} + /remark-stringify@10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} dependencies: '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 unified: 10.1.2 dev: true /remark@14.0.2: resolution: {integrity: sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==} dependencies: - '@types/mdast': 3.0.10 - remark-parse: 10.0.1 - remark-stringify: 10.0.2 + '@types/mdast': 3.0.11 + remark-parse: 10.0.2 + remark-stringify: 10.0.3 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -12757,7 +12696,7 @@ packages: deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 dependencies: aws-sign2: 0.7.0 - aws4: 1.11.0 + aws4: 1.12.0 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 @@ -12836,15 +12775,6 @@ packages: path-parse: 1.0.7 dev: true - /resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true - dependencies: - is-core-module: 2.10.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true @@ -12904,11 +12834,11 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - glob: 10.2.2 + glob: 10.2.7 dev: true - /robust-predicates@3.0.1: - resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} + /robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false /rollup-plugin-terser@7.0.2(rollup@2.79.1): @@ -12917,11 +12847,11 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.5 jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.15.1 + terser: 5.18.0 dev: true /rollup-plugin-visualizer@5.9.2: @@ -12934,7 +12864,7 @@ packages: rollup: optional: true dependencies: - open: 8.4.0 + open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 @@ -12948,8 +12878,8 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.21.0: - resolution: {integrity: sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==} + /rollup@3.25.1: + resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -12960,6 +12890,13 @@ packages: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -12969,10 +12906,10 @@ packages: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} dev: false - /rxjs@7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.4.0 + tslib: 2.5.3 dev: true /sade@1.8.1: @@ -12993,7 +12930,7 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-regex: 1.1.4 dev: true @@ -13006,7 +12943,7 @@ packages: /safe-regex@2.1.1: resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} dependencies: - regexp-tree: 0.1.24 + regexp-tree: 0.1.27 dev: true /safe-stable-stringify@2.4.3: @@ -13031,23 +12968,23 @@ packages: xmlchars: 2.2.0 dev: true - /schema-utils@3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: true - /schema-utils@4.0.0: - resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} dependencies: - '@types/json-schema': 7.0.11 - ajv: 8.11.0 - ajv-formats: 2.1.1(ajv@8.11.0) - ajv-keywords: 5.1.0(ajv@8.11.0) + '@types/json-schema': 7.0.12 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) dev: true /search-insights@2.6.0: @@ -13143,8 +13080,8 @@ packages: randombytes: 2.1.0 dev: true - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true @@ -13227,15 +13164,6 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true - /shiki@0.14.1: - resolution: {integrity: sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==} - dependencies: - ansi-sequence-parser: 1.1.0 - jsonc-parser: 3.2.0 - vscode-oniguruma: 1.7.0 - vscode-textmate: 8.0.0 - dev: true - /shiki@0.14.2: resolution: {integrity: sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==} dependencies: @@ -13249,8 +13177,8 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 - object-inspect: 1.12.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 dev: true /siginfo@2.0.0: @@ -13261,8 +13189,8 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /signal-exit@4.0.1: - resolution: {integrity: sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==} + /signal-exit@4.0.2: + resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} engines: {node: '>=14'} dev: true @@ -13278,7 +13206,7 @@ packages: dependencies: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 - totalist: 3.0.0 + totalist: 3.0.1 dev: true /sisteransi@1.0.5: @@ -13317,7 +13245,7 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: - ansi-styles: 6.1.1 + ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 dev: true @@ -13369,11 +13297,6 @@ packages: dev: true optional: true - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true - /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -13410,11 +13333,11 @@ packages: which: 2.0.2 dev: true - /spdx-correct@3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true /spdx-exceptions@2.3.0: @@ -13425,11 +13348,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids@3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + /spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true /spdy-transport@3.0.0: @@ -13439,7 +13362,7 @@ packages: detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 - readable-stream: 3.6.0 + readable-stream: 3.6.2 wbuf: 1.7.3 transitivePeerDependencies: - supports-color @@ -13461,7 +13384,7 @@ packages: /split2@3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /split2@4.2.0: @@ -13499,8 +13422,8 @@ packages: resolution: {integrity: sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g==} dev: true - /stack-utils@2.0.5: - resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 @@ -13537,8 +13460,8 @@ packages: engines: {node: '>= 0.8'} dev: true - /std-env@3.3.2: - resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==} + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} dev: true /stream-combiner@0.0.4: @@ -13547,8 +13470,8 @@ packages: duplexer: 0.1.2 dev: true - /string-argv@0.3.1: - resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} dev: true @@ -13580,7 +13503,7 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: true /string.prototype.matchall@4.0.8: @@ -13588,20 +13511,29 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 - get-intrinsic: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.0 side-channel: 1.0.4 dev: true + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 dev: true /string.prototype.trimstart@1.0.6: @@ -13609,7 +13541,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.1 + es-abstract: 1.21.2 dev: true /string_decoder@1.1.1: @@ -13647,8 +13579,8 @@ packages: ansi-regex: 5.0.1 dev: true - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 @@ -13713,7 +13645,7 @@ packages: engines: {node: '>=8'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 glob: 7.1.6 lines-and-columns: 1.2.4 @@ -13759,8 +13691,8 @@ packages: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.3.1 - tslib: 2.5.0 + '@pkgr/utils': 2.4.1 + tslib: 2.5.3 dev: true /tabbable@6.1.2: @@ -13786,11 +13718,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.23 - postcss-import: 15.1.0(postcss@8.4.23) - postcss-js: 4.0.1(postcss@8.4.23) - postcss-load-config: 4.0.1(postcss@8.4.23)(ts-node@10.9.1) - postcss-nested: 6.0.1(postcss@8.4.23) + postcss: 8.4.24 + postcss-import: 15.1.0(postcss@8.4.24) + postcss-js: 4.0.1(postcss@8.4.24) + postcss-load-config: 4.0.1(postcss@8.4.24)(ts-node@10.9.1) + postcss-nested: 6.0.1(postcss@8.4.24) postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 resolve: 1.22.2 @@ -13808,7 +13740,7 @@ packages: resolution: {integrity: sha512-RnW7HHZD1XuhSTzD3djYOdIl1adE3oNEprE3HOFFxWs5m4FZsqYRhKJ4mDU2udtNGMLUS7jV7l8vVRLWAvmPDw==} engines: {'0': node} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.5 bluebird: 3.7.2 lodash: 4.17.21 shell-quote: 1.8.1 @@ -13839,8 +13771,8 @@ packages: iterm2-version: 4.2.0 dev: true - /terser-webpack-plugin@5.3.6(esbuild@0.17.18)(webpack@5.75.0): - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin@5.3.9(esbuild@0.17.18)(webpack@5.74.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -13855,17 +13787,17 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 esbuild: 0.17.18 jest-worker: 27.5.1 - schema-utils: 3.1.1 - serialize-javascript: 6.0.0 - terser: 5.15.1 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.18.0 + webpack: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) dev: true - /terser@5.15.1: - resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} + /terser@5.18.0: + resolution: {integrity: sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -13927,7 +13859,7 @@ packages: /through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /through@2.3.8: @@ -13943,13 +13875,6 @@ packages: engines: {node: '>=4'} dev: true - /tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - dev: true - /tiny-lru@8.0.2: resolution: {integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==} engines: {node: '>=6'} @@ -13964,11 +13889,16 @@ packages: engines: {node: '>=14.0.0'} dev: true - /tinyspy@2.1.0: - resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} engines: {node: '>=14.0.0'} dev: true + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + /tmp@0.2.1: resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} engines: {node: '>=8.17.0'} @@ -13995,8 +13925,8 @@ packages: engines: {node: '>=0.6'} dev: true - /totalist@3.0.0: - resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} dev: true @@ -14005,15 +13935,15 @@ packages: engines: {node: '>=0.8'} dependencies: psl: 1.9.0 - punycode: 2.1.1 + punycode: 2.3.0 dev: true - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.1.1 + punycode: 2.3.0 universalify: 0.2.0 url-parse: 1.5.10 dev: true @@ -14056,8 +13986,8 @@ packages: engines: {node: '>=8'} dev: true - /trim-newlines@4.0.2: - resolution: {integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==} + /trim-newlines@4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} engines: {node: '>=12'} dev: true @@ -14092,7 +14022,7 @@ packages: '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.3 + '@tsconfig/node16': 1.0.4 '@types/node': 18.16.0 acorn: 8.9.0 acorn-walk: 8.2.0 @@ -14112,22 +14042,8 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: true - - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - dev: true - - /tsutils@3.21.0(typescript@5.0.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.0.4 + /tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} dev: true /tsutils@3.21.0(typescript@5.1.3): @@ -14232,7 +14148,7 @@ packages: typedoc: '>=0.24.0' dependencies: handlebars: 4.7.7 - typedoc: 0.24.5(typescript@5.0.4) + typedoc: 0.24.5(typescript@5.1.3) typedoc-plugin-mdn-links: 3.0.3(typedoc@0.24.5) dev: true @@ -14241,10 +14157,10 @@ packages: peerDependencies: typedoc: '>= 0.23.14 || 0.24.x' dependencies: - typedoc: 0.24.5(typescript@5.0.4) + typedoc: 0.24.5(typescript@5.1.3) dev: true - /typedoc@0.24.5(typescript@5.0.4): + /typedoc@0.24.5(typescript@5.1.3): resolution: {integrity: sha512-tE1YDRxOTwJ33HltVazKiADqy/CasUmd2UVMnGOS2kX5Oj7q4rDVsIlcC0j03K1h3lEkGtvEyusBF7Psz4F4kA==} engines: {node: '>= 14.14'} hasBin: true @@ -14253,15 +14169,9 @@ packages: dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.0 - shiki: 0.14.1 - typescript: 5.0.4 - dev: true - - /typescript@5.0.4: - resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} - engines: {node: '>=12.20'} - hasBin: true + minimatch: 9.0.1 + shiki: 0.14.2 + typescript: 5.1.3 dev: true /typescript@5.1.3: @@ -14273,15 +14183,14 @@ packages: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: true - /ufo@1.1.1: - resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} + /ufo@1.1.2: + resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} dev: true - /uglify-js@3.17.3: - resolution: {integrity: sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==} + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true - requiresBuild: true dev: true /unbox-primitive@1.0.2: @@ -14293,10 +14202,10 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unconfig@0.3.7: - resolution: {integrity: sha512-1589b7oGa8ILBYpta7TndM5mLHLzHUqBfhszeZxuUBrjO/RoQ52VGVWsS3w0C0GLNxO9RPmqkf6BmIvBApaRdA==} + /unconfig@0.3.9: + resolution: {integrity: sha512-8yhetFd48M641mxrkWA+C/lZU4N0rCOdlo3dFsyFPnBHBjMJfjT/3eAZBRT2RxCRqeBMAKBVgikejdS6yeBjMw==} dependencies: - '@antfu/utils': 0.5.2 + '@antfu/utils': 0.7.4 defu: 6.1.2 jiti: 1.18.2 dev: true @@ -14337,7 +14246,7 @@ packages: is-buffer: 2.0.5 is-plain-obj: 4.1.0 trough: 2.1.0 - vfile: 5.3.5 + vfile: 5.3.7 dev: true /unique-string@2.0.0: @@ -14351,8 +14260,10 @@ packages: resolution: {integrity: sha512-IG32jcKJlhARCYT2LsYPJWdoXYkzz3ESAdl1aa2hn9Auh+cgUmU6wgkII4yCc/1GgeWibRdELdCZh/p3QKQ1dQ==} dev: true - /unist-util-is@5.1.1: - resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.6 dev: true /unist-util-stringify-position@2.0.3: @@ -14361,24 +14272,24 @@ packages: '@types/unist': 2.0.6 dev: true - /unist-util-stringify-position@3.0.2: - resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: '@types/unist': 2.0.6 - /unist-util-visit-parents@5.1.1: - resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: '@types/unist': 2.0.6 - unist-util-is: 5.1.1 + unist-util-is: 5.2.1 dev: true - /unist-util-visit@4.1.1: - resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - unist-util-visit-parents: 5.1.1 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 dev: true /universalify@0.1.2: @@ -14396,7 +14307,7 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unocss@0.52.0(postcss@8.4.23)(rollup@2.79.1)(vite@4.3.3): + /unocss@0.52.0(postcss@8.4.24)(rollup@2.79.1)(vite@4.3.9): resolution: {integrity: sha512-MholrJpVLH95SwCiQzXJiimkpUXqI1HWZCZBh4jklpfSGo3eZeo62f1BpXZThmLDPLZoBsf0qqItcvB803X37A==} engines: {node: '>=14'} peerDependencies: @@ -14405,11 +14316,11 @@ packages: '@unocss/webpack': optional: true dependencies: - '@unocss/astro': 0.52.0(rollup@2.79.1)(vite@4.3.3) + '@unocss/astro': 0.52.0(rollup@2.79.1)(vite@4.3.9) '@unocss/cli': 0.52.0(rollup@2.79.1) '@unocss/core': 0.52.0 '@unocss/extractor-arbitrary-variants': 0.52.0 - '@unocss/postcss': 0.52.0(postcss@8.4.23) + '@unocss/postcss': 0.52.0(postcss@8.4.24) '@unocss/preset-attributify': 0.52.0 '@unocss/preset-icons': 0.52.0 '@unocss/preset-mini': 0.52.0 @@ -14424,7 +14335,7 @@ packages: '@unocss/transformer-compile-class': 0.52.0 '@unocss/transformer-directives': 0.52.0 '@unocss/transformer-variant-group': 0.52.0 - '@unocss/vite': 0.52.0(rollup@2.79.1)(vite@4.3.3) + '@unocss/vite': 0.52.0(rollup@2.79.1)(vite@4.3.9) transitivePeerDependencies: - postcss - rollup @@ -14450,7 +14361,7 @@ packages: '@nuxt/kit': optional: true dependencies: - '@antfu/utils': 0.7.2 + '@antfu/utils': 0.7.4 '@rollup/pluginutils': 5.0.2(rollup@2.79.1) chokidar: 3.5.3 debug: 4.3.4(supports-color@8.1.1) @@ -14459,15 +14370,15 @@ packages: magic-string: 0.30.0 minimatch: 7.4.6 resolve: 1.22.2 - unplugin: 1.1.0 + unplugin: 1.3.1 vue: 3.2.47 transitivePeerDependencies: - rollup - supports-color dev: true - /unplugin@1.1.0: - resolution: {integrity: sha512-I8obQ8Rs/hnkxokRV6g8JKOQFgYNnTd9DL58vcSt5IJ9AkK8wbrtsnzD5hi4BJlvcY536JzfEXj9L6h7j559/A==} + /unplugin@1.3.1: + resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} dependencies: acorn: 8.9.0 chokidar: 3.5.3 @@ -14485,24 +14396,13 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.4): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.4 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /update-browserslist-db@1.0.10(browserslist@4.21.5): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.5 + browserslist: 4.21.9 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -14510,7 +14410,7 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 + punycode: 2.3.0 dev: true /url-parse@1.5.10: @@ -14557,19 +14457,19 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - /v8-to-istanbul@9.0.1: - resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} + /v8-to-istanbul@9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 dev: true /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: - spdx-correct: 3.1.1 + spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true @@ -14587,20 +14487,20 @@ packages: extsprintf: 1.3.0 dev: true - /vfile-message@3.1.2: - resolution: {integrity: sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==} + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: '@types/unist': 2.0.6 - unist-util-stringify-position: 3.0.2 + unist-util-stringify-position: 3.0.3 dev: true - /vfile@5.3.5: - resolution: {integrity: sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==} + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: '@types/unist': 2.0.6 is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.2 - vfile-message: 3.1.2 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 dev: true /vite-node@0.32.2(@types/node@18.16.0): @@ -14610,7 +14510,7 @@ packages: dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) - mlly: 1.2.0 + mlly: 1.3.0 pathe: 1.1.0 picocolors: 1.0.0 vite: 4.3.9(@types/node@18.16.0) @@ -14630,7 +14530,7 @@ packages: vite: '>=2.9.1 <= 5' dependencies: '@istanbuljs/load-nyc-config': 1.1.0 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 picocolors: 1.0.0 test-exclude: 6.0.0 vite: 4.3.9(@types/node@18.16.0) @@ -14638,7 +14538,7 @@ packages: - supports-color dev: true - /vite-plugin-pwa@0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4): + /vite-plugin-pwa@0.15.0(vite@4.3.9)(workbox-build@6.6.0)(workbox-window@6.5.4): resolution: {integrity: sha512-gpmx3BeubsRIXRBkjPToOTJbo8fknNmZFQs24i0TPZyaNVa0n27YHDo0Y72amnO70WvHKGE3e1fn8SYUP7e8SA==} peerDependencies: vite: ^3.1.0 || ^4.0.0 @@ -14648,79 +14548,13 @@ packages: debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.2.12 pretty-bytes: 6.1.0 - vite: 4.3.3(@types/node@18.16.0) - workbox-build: 6.5.4 + vite: 4.3.9(@types/node@18.16.0) + workbox-build: 6.6.0 workbox-window: 6.5.4 transitivePeerDependencies: - supports-color dev: true - /vite@4.3.3(@types/node@18.16.0): - resolution: {integrity: sha512-MwFlLBO4udZXd+VBcezo3u8mC77YQk+ik+fbc0GZWGgzfbPP+8Kf0fldhARqvSYmtIWoAJ5BXPClUbMTlqFxrA==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.16.0 - esbuild: 0.17.18 - postcss: 8.4.23 - rollup: 3.21.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /vite@4.3.8(@types/node@18.16.0): - resolution: {integrity: sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.16.0 - esbuild: 0.17.18 - postcss: 8.4.23 - rollup: 3.21.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vite@4.3.9(@types/node@18.16.0): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -14748,13 +14582,13 @@ packages: dependencies: '@types/node': 18.16.0 esbuild: 0.17.18 - postcss: 8.4.23 - rollup: 3.21.0 + postcss: 8.4.24 + rollup: 3.25.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.3.4): + /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.2.47): resolution: {integrity: sha512-zG+ev9pw1Mg7htABlFCNXb8XwnKN+qfTKw+vU0Ers6RIrABx+45EAAFBoaL1mEpl1FRFn1o/dQ7F4b8GP6HdGQ==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} peerDependencies: @@ -14767,88 +14601,16 @@ packages: flexsearch: 0.7.31 glob-to-regexp: 0.4.1 markdown-it: 13.0.1 - vitepress: 1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) - vue: 3.3.4 - dev: true - - /vitepress@1.0.0-alpha.72(@algolia/client-search@4.14.2)(@types/node@18.16.0): - resolution: {integrity: sha512-Ou7fNE/OVYLrKGQMHSTVG6AcNsdv7tm4ACrdhx93SPMzEDj8UgIb4RFa5CTTowaYf3jeDGi2EAJlzXVC+IE3dg==} - hasBin: true - dependencies: - '@docsearch/css': 3.3.3 - '@docsearch/js': 3.3.5(@algolia/client-search@4.14.2) - '@vitejs/plugin-vue': 4.2.3(vite@4.3.8)(vue@3.3.4) - '@vue/devtools-api': 6.5.0 - '@vueuse/core': 10.1.2(vue@3.3.4) - body-scroll-lock: 4.0.0-beta.0 - mark.js: 8.11.1 - minisearch: 6.0.1 - shiki: 0.14.1 - vite: 4.3.8(@types/node@18.16.0) - vue: 3.3.4 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/node' - - '@types/react' - - '@vue/composition-api' - - less - - react - - react-dom - - sass - - stylus - - sugarss - - terser + vue: 3.2.47 dev: true - /vitepress@1.0.0-beta.1(@algolia/client-search@4.14.2)(@types/node@18.16.0): + /vitepress@1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0): resolution: {integrity: sha512-V2yyCwQ+v9fh7rbnGDLp8M7vHa9sLElexXf/JHtBOsOwv7ed9wt1QI4WUagYgKR3TeoJT9v2s6f0UaQSne0EvQ==} hasBin: true dependencies: '@docsearch/css': 3.5.1 '@docsearch/js': 3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0) - '@vitejs/plugin-vue': 4.2.3(vite@4.3.8)(vue@3.3.4) - '@vue/devtools-api': 6.5.0 - '@vueuse/core': 10.1.2(vue@3.3.4) - '@vueuse/integrations': 10.1.2(focus-trap@7.4.3)(vue@3.3.4) - body-scroll-lock: 4.0.0-beta.0 - focus-trap: 7.4.3 - mark.js: 8.11.1 - minisearch: 6.1.0 - shiki: 0.14.2 - vite: 4.3.8(@types/node@18.16.0) - vue: 3.3.4 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/node' - - '@types/react' - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - fuse.js - - idb-keyval - - jwt-decode - - less - - nprogress - - qrcode - - react - - react-dom - - sass - - sortablejs - - stylus - - sugarss - - terser - - universal-cookie - dev: true - - /vitepress@1.0.0-beta.2(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0): - resolution: {integrity: sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==} - hasBin: true - dependencies: - '@docsearch/css': 3.5.0 - '@docsearch/js': 3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0) '@vitejs/plugin-vue': 4.2.3(vite@4.3.9)(vue@3.3.4) '@vue/devtools-api': 6.5.0 '@vueuse/core': 10.2.0(vue@3.3.4) @@ -14920,12 +14682,12 @@ packages: '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 '@types/node': 18.16.0 - '@vitest/expect': 0.31.0 - '@vitest/runner': 0.31.0 - '@vitest/snapshot': 0.31.0 - '@vitest/spy': 0.31.0 - '@vitest/ui': 0.32.0(vitest@0.31.0) - '@vitest/utils': 0.31.0 + '@vitest/expect': 0.32.2 + '@vitest/runner': 0.32.2 + '@vitest/snapshot': 0.32.2 + '@vitest/spy': 0.32.2 + '@vitest/ui': 0.32.2(vitest@0.32.2) + '@vitest/utils': 0.32.2 acorn: 8.9.0 acorn-walk: 8.2.0 cac: 6.7.14 @@ -14937,7 +14699,7 @@ packages: magic-string: 0.30.0 pathe: 1.1.0 picocolors: 1.0.0 - std-env: 3.3.2 + std-env: 3.3.3 strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.5.0 @@ -14953,35 +14715,22 @@ packages: - terser dev: true - /vm2@3.9.11: - resolution: {integrity: sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - acorn: 8.9.0 - acorn-walk: 8.2.0 - dev: true - /vscode-json-languageservice@4.2.1: resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} dependencies: jsonc-parser: 3.2.0 - vscode-languageserver-textdocument: 1.0.7 - vscode-languageserver-types: 3.17.2 + vscode-languageserver-textdocument: 1.0.8 + vscode-languageserver-types: 3.17.3 vscode-nls: 5.2.0 - vscode-uri: 3.0.6 - dev: true - - /vscode-languageserver-textdocument@1.0.7: - resolution: {integrity: sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==} + vscode-uri: 3.0.7 dev: true /vscode-languageserver-textdocument@1.0.8: resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} dev: true - /vscode-languageserver-types@3.17.2: - resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==} + /vscode-languageserver-types@3.17.3: + resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} dev: true /vscode-nls@5.2.0: @@ -14996,16 +14745,12 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /vscode-uri@3.0.6: - resolution: {integrity: sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==} - dev: true - /vscode-uri@3.0.7: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} dev: true - /vue-demi@0.14.0(vue@3.2.47): - resolution: {integrity: sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==} + /vue-demi@0.14.5(vue@3.2.47): + resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -15019,8 +14764,8 @@ packages: vue: 3.2.47 dev: false - /vue-demi@0.14.0(vue@3.3.4): - resolution: {integrity: sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==} + /vue-demi@0.14.5(vue@3.3.4): + resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -15051,14 +14796,15 @@ packages: '@vue/runtime-dom': 3.3.4 '@vue/server-renderer': 3.3.4(vue@3.3.4) '@vue/shared': 3.3.4 + dev: true - /vuex@4.1.0(vue@3.3.4): + /vuex@4.1.0(vue@3.2.47): resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==} peerDependencies: vue: ^3.2.0 dependencies: '@vue/devtools-api': 6.5.0 - vue: 3.3.4 + vue: 3.2.47 dev: false /w3c-hr-time@1.0.2: @@ -15088,10 +14834,10 @@ packages: hasBin: true dependencies: axios: 0.27.2(debug@4.3.4) - joi: 17.7.1 + joi: 17.9.2 lodash: 4.17.21 minimist: 1.2.8 - rxjs: 7.8.0 + rxjs: 7.8.1 transitivePeerDependencies: - debug dev: true @@ -15107,7 +14853,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /wbuf@1.7.3: @@ -15135,7 +14881,7 @@ packages: '@wdio/protocols': 7.27.0 '@wdio/types': 7.26.0(typescript@5.1.3) '@wdio/utils': 7.26.0(typescript@5.1.3) - got: 11.8.5 + got: 11.8.6 ky: 0.30.0 lodash.merge: 4.6.2 transitivePeerDependencies: @@ -15155,7 +14901,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-cli@4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0): + /webpack-cli@4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0): resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} engines: {node: '>=10.13.0'} hasBin: true @@ -15176,36 +14922,36 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.75.0) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.74.0) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.11.1) - colorette: 2.0.19 + colorette: 2.0.20 commander: 7.2.0 cross-spawn: 7.0.3 fastest-levenshtein: 1.0.16 import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) - webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) - webpack-merge: 5.8.0 + webpack: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) + webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.74.0) + webpack-merge: 5.9.0 dev: true - /webpack-dev-middleware@5.3.3(webpack@5.75.0): + /webpack-dev-middleware@5.3.3(webpack@5.74.0): resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: colorette: 2.0.20 - memfs: 3.4.11 + memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + schema-utils: 4.2.0 + webpack: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) dev: true - /webpack-dev-server@4.11.1(webpack-cli@4.10.0)(webpack@5.75.0): + /webpack-dev-server@4.11.1(webpack-cli@4.10.0)(webpack@5.74.0): resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} engines: {node: '>= 12.13.0'} hasBin: true @@ -15217,36 +14963,36 @@ packages: optional: true dependencies: '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 - '@types/express': 4.17.14 + '@types/connect-history-api-fallback': 1.5.0 + '@types/express': 4.17.17 '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.0 + '@types/serve-static': 1.15.1 '@types/sockjs': 0.3.33 - '@types/ws': 8.5.3 + '@types/ws': 8.5.5 ansi-html-community: 0.0.8 - bonjour-service: 1.0.14 + bonjour-service: 1.1.1 chokidar: 3.5.3 - colorette: 2.0.19 + colorette: 2.0.20 compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.18.2 - graceful-fs: 4.2.10 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6(@types/express@4.17.14) - ipaddr.js: 2.0.1 - open: 8.4.0 + graceful-fs: 4.2.11 + html-entities: 2.3.6 + http-proxy-middleware: 2.0.6(@types/express@4.17.17) + ipaddr.js: 2.1.0 + open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.0.0 + schema-utils: 4.2.0 selfsigned: 2.1.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) - webpack-dev-middleware: 5.3.3(webpack@5.75.0) - ws: 8.9.0 + webpack: 5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) + webpack-dev-middleware: 5.3.3(webpack@5.74.0) + ws: 8.13.0 transitivePeerDependencies: - bufferutil - debug @@ -15254,12 +15000,12 @@ packages: - utf-8-validate dev: true - /webpack-merge@5.8.0: - resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} + /webpack-merge@5.9.0: + resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} engines: {node: '>=10.0.0'} dependencies: clone-deep: 4.0.1 - wildcard: 2.0.0 + wildcard: 2.0.1 dev: true /webpack-sources@3.2.3: @@ -15271,8 +15017,8 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true - /webpack@5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0): - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack@5.74.0(esbuild@0.17.18)(webpack-cli@4.10.0): + resolution: {integrity: sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -15290,21 +15036,21 @@ packages: acorn-import-assertions: 1.9.0(acorn@8.9.0) browserslist: 4.21.9 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.10.0 + enhanced-resolve: 5.15.0 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.1.1 + schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6(esbuild@0.17.18)(webpack@5.75.0) + terser-webpack-plugin: 5.3.9(esbuild@0.17.18)(webpack@5.74.0) watchpack: 2.4.0 - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -15439,8 +15185,8 @@ packages: string-width: 4.2.3 dev: true - /wildcard@2.0.0: - resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + /wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} dev: true /word-wrap@1.2.3: @@ -15452,32 +15198,32 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true - /workbox-background-sync@6.5.4: - resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==} + /workbox-background-sync@6.6.0: + resolution: {integrity: sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==} dependencies: idb: 7.1.1 - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true - /workbox-broadcast-update@6.5.4: - resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==} + /workbox-broadcast-update@6.6.0: + resolution: {integrity: sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==} dependencies: - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true - /workbox-build@6.5.4: - resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} + /workbox-build@6.6.0: + resolution: {integrity: sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==} engines: {node: '>=10.0.0'} dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.11.0) - '@babel/core': 7.12.3 - '@babel/preset-env': 7.20.2(@babel/core@7.12.3) - '@babel/runtime': 7.21.0 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.12.3)(rollup@2.79.1) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.22.5 + '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + '@babel/runtime': 7.22.5 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.11.0 + ajv: 8.12.0 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 @@ -15491,113 +15237,125 @@ packages: strip-comments: 2.0.1 tempy: 0.6.0 upath: 1.2.0 - workbox-background-sync: 6.5.4 - workbox-broadcast-update: 6.5.4 - workbox-cacheable-response: 6.5.4 - workbox-core: 6.5.4 - workbox-expiration: 6.5.4 - workbox-google-analytics: 6.5.4 - workbox-navigation-preload: 6.5.4 - workbox-precaching: 6.5.4 - workbox-range-requests: 6.5.4 - workbox-recipes: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 - workbox-streams: 6.5.4 - workbox-sw: 6.5.4 - workbox-window: 6.5.4 + workbox-background-sync: 6.6.0 + workbox-broadcast-update: 6.6.0 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-google-analytics: 6.6.0 + workbox-navigation-preload: 6.6.0 + workbox-precaching: 6.6.0 + workbox-range-requests: 6.6.0 + workbox-recipes: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 + workbox-streams: 6.6.0 + workbox-sw: 6.6.0 + workbox-window: 6.6.0 transitivePeerDependencies: - '@types/babel__core' - supports-color dev: true - /workbox-cacheable-response@6.5.4: - resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==} + /workbox-cacheable-response@6.6.0: + resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 dependencies: - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true /workbox-core@6.5.4: resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==} dev: true - /workbox-expiration@6.5.4: - resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==} + /workbox-core@6.6.0: + resolution: {integrity: sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==} + dev: true + + /workbox-expiration@6.6.0: + resolution: {integrity: sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==} dependencies: idb: 7.1.1 - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true - /workbox-google-analytics@6.5.4: - resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==} + /workbox-google-analytics@6.6.0: + resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} dependencies: - workbox-background-sync: 6.5.4 - workbox-core: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 + workbox-background-sync: 6.6.0 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 dev: true - /workbox-navigation-preload@6.5.4: - resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==} + /workbox-navigation-preload@6.6.0: + resolution: {integrity: sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==} dependencies: - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true - /workbox-precaching@6.5.4: - resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==} + /workbox-precaching@6.6.0: + resolution: {integrity: sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==} dependencies: - workbox-core: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 dev: true - /workbox-range-requests@6.5.4: - resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==} + /workbox-range-requests@6.6.0: + resolution: {integrity: sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==} dependencies: - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true - /workbox-recipes@6.5.4: - resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==} + /workbox-recipes@6.6.0: + resolution: {integrity: sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==} dependencies: - workbox-cacheable-response: 6.5.4 - workbox-core: 6.5.4 - workbox-expiration: 6.5.4 - workbox-precaching: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 + workbox-cacheable-response: 6.6.0 + workbox-core: 6.6.0 + workbox-expiration: 6.6.0 + workbox-precaching: 6.6.0 + workbox-routing: 6.6.0 + workbox-strategies: 6.6.0 dev: true - /workbox-routing@6.5.4: - resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==} + /workbox-routing@6.6.0: + resolution: {integrity: sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==} dependencies: - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true - /workbox-strategies@6.5.4: - resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==} + /workbox-strategies@6.6.0: + resolution: {integrity: sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==} dependencies: - workbox-core: 6.5.4 + workbox-core: 6.6.0 dev: true - /workbox-streams@6.5.4: - resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==} + /workbox-streams@6.6.0: + resolution: {integrity: sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==} dependencies: - workbox-core: 6.5.4 - workbox-routing: 6.5.4 + workbox-core: 6.6.0 + workbox-routing: 6.6.0 dev: true - /workbox-sw@6.5.4: - resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} + /workbox-sw@6.6.0: + resolution: {integrity: sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==} dev: true /workbox-window@6.5.4: resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} dependencies: - '@types/trusted-types': 2.0.2 + '@types/trusted-types': 2.0.3 workbox-core: 6.5.4 dev: true + /workbox-window@6.6.0: + resolution: {integrity: sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==} + dependencies: + '@types/trusted-types': 2.0.3 + workbox-core: 6.6.0 + dev: true + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -15616,6 +15374,15 @@ packages: strip-ansi: 6.0.1 dev: true + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -15675,19 +15442,6 @@ packages: optional: true dev: true - /ws@8.9.0: - resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - /xdg-basedir@4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'} @@ -15724,8 +15478,8 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml@2.2.2: - resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} /yargs-parser@18.1.3: @@ -15810,6 +15564,6 @@ packages: engines: {node: '>=12.20'} dev: true - /zwitch@2.0.2: - resolution: {integrity: sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==} + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: true From 95e01b4935ba10cfbfcb25a18e16408019984491 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sun, 18 Jun 2023 01:45:21 +0300 Subject: [PATCH 039/595] move `PieDiagramConfig` into pieTypes --- packages/mermaid/src/config.type.ts | 5 +---- packages/mermaid/src/diagrams/pie/pieDb.ts | 3 +-- packages/mermaid/src/diagrams/pie/pieTypes.ts | 6 +++++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index 140c200fba..720b905384 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -1,6 +1,7 @@ // TODO: This was auto generated from defaultConfig. Needs to be verified. import DOMPurify from 'dompurify'; +import { PieDiagramConfig } from './diagrams/pie/pieTypes.js'; export interface MermaidConfig { theme?: string; @@ -223,10 +224,6 @@ export interface MindmapDiagramConfig extends BaseDiagramConfig { maxNodeWidth: number; } -export interface PieDiagramConfig extends BaseDiagramConfig { - textPosition?: number; -} - export interface QuadrantChartConfig extends BaseDiagramConfig { chartWidth: number; chartHeight: number; diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index f8cc664ec4..027356b214 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -12,8 +12,7 @@ import { clear as commonClear, } from '../../commonDb.js'; import type { ParseDirectiveDefinition } from '../../diagram-api/types.js'; -import type { PieFields, PieDb, Sections } from './pieTypes.js'; -import type { PieDiagramConfig } from '../../config.type.js'; +import type { PieFields, PieDb, Sections, PieDiagramConfig } from './pieTypes.js'; export const DEFAULT_PIE_CONFIG: PieDiagramConfig = { useMaxWidth: true, diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index 695a3f4910..29a21ee24b 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -1,6 +1,10 @@ -import type { PieDiagramConfig } from '../../config.type.js'; +import type { BaseDiagramConfig } from '../../config.type.js'; import type { DiagramDB, ParseDirectiveDefinition } from '../../diagram-api/types.js'; +export interface PieDiagramConfig extends BaseDiagramConfig { + textPosition?: number; +} + export interface PieFields { sections: Sections; showData: boolean; From e3e12bbc78e066f482eae861c57066cdfad3ea16 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Sun, 18 Jun 2023 13:02:35 +0530 Subject: [PATCH 040/595] Update `_id` to `id` --- packages/mermaid/src/diagrams/flowchart/flowDb.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.js b/packages/mermaid/src/diagrams/flowchart/flowDb.js index c233d31aa0..d17abc3f10 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.js +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.js @@ -209,19 +209,18 @@ export const updateLink = function (positions, style) { }; export const addClass = function (ids, style) { - ids.split(',').forEach(function (_id) { - if (classes[_id] === undefined) { - classes[_id] = { id: _id, styles: [], textStyles: [] }; + ids.split(',').forEach(function (id) { + if (classes[id] === undefined) { + classes[id] = { id, styles: [], textStyles: [] }; } - if (style !== undefined && style !== null) { + if (style) { style.forEach(function (s) { if (s.match('color')) { - const newStyle1 = s.replace('fill', 'bgFill'); - const newStyle2 = newStyle1.replace('color', 'fill'); - classes[_id].textStyles.push(newStyle2); + const newStyle = s.replace('fill', 'bgFill').replace('color', 'fill'); + classes[id].textStyles.push(newStyle); } - classes[_id].styles.push(s); + classes[id].styles.push(s); }); } }); From 0c2b5d0d79e11c081e180f05b2bf6538d098e7e9 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Sun, 18 Jun 2023 13:13:40 +0530 Subject: [PATCH 041/595] Revert change to if --- packages/mermaid/src/diagrams/flowchart/flowDb.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.js b/packages/mermaid/src/diagrams/flowchart/flowDb.js index d17abc3f10..ceb933e858 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.js +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.js @@ -214,7 +214,7 @@ export const addClass = function (ids, style) { classes[id] = { id, styles: [], textStyles: [] }; } - if (style) { + if (style !== undefined && style !== null) { style.forEach(function (s) { if (s.match('color')) { const newStyle = s.replace('fill', 'bgFill').replace('color', 'fill'); From f6dc089ddfeabf41c1671cf77fc3babe29858efc Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sun, 18 Jun 2023 17:39:15 +0300 Subject: [PATCH 042/595] add D3Sections type with variable renaming --- .../mermaid/src/diagrams/pie/pieRenderer.ts | 43 +++++++++---------- packages/mermaid/src/diagrams/pie/pieTypes.ts | 6 +++ 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts index 77f4e9587e..3878304ad2 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -5,7 +5,7 @@ import { configureSvgSize } from '../../setupGraphViewbox.js'; import { getConfig } from '../../config.js'; import { parseFontSize } from '../../utils.js'; import { DrawDefinition, HTML } from '../../diagram-api/types.js'; -import { PieDb, Sections } from './pieTypes.js'; +import type { D3Sections, PieDb, Sections } from './pieTypes.js'; /** * Draws a Pie Chart with the data given in text. @@ -94,21 +94,20 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { const color = scaleOrdinal().range(myGeneratedColors); // Compute the position of each group on the pie: - const pieData = Object.entries(sections).map(function (el, idx) { - return { - order: idx, - name: el[0], - value: el[1], - }; - }); - const pie = d3pie() - .value((d): number => { - return d.value; + const pieData: D3Sections[] = Object.entries(sections) + .map((element: [string, number], index: number): D3Sections => { + return { + order: index, + label: element[0], + value: element[1], + }; }) - .sort((a, b): number => { + .sort((a: D3Sections, b: D3Sections): number => { // Sort slices in clockwise direction return a.order - b.order; }); + const pie = d3pie().value((d: unknown): number => d.value); + // @ts-ignore - figure out how to assign D3Section[] to PieArcDatum const dataReady = pie(pieData); // Shape helper to build arcs: @@ -131,8 +130,8 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { .enter() .append('path') .attr('d', arcGenerator) - .attr('fill', (d) => { - return color(d.data.name); + .attr('fill', (datum: { data: D3Sections }) => { + return color(datum.data.label); }) .attr('class', 'pieCircle'); @@ -143,11 +142,11 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { .data(dataReady) .enter() .append('text') - .text((d): string => { - return ((d.data.value / sum) * 100).toFixed(0) + '%'; + .text((datum: { data: D3Sections }): string => { + return ((datum.data.value / sum) * 100).toFixed(0) + '%'; }) - .attr('transform', (d): string => { - return 'translate(' + labelArcGenerator.centroid(d) + ')'; + .attr('transform', (datum: unknown): string => { + return 'translate(' + labelArcGenerator.centroid(datum) + ')'; }) .style('text-anchor', 'middle') .attr('class', 'slice'); @@ -166,7 +165,7 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { .enter() .append('g') .attr('class', 'legend') - .attr('transform', (d, index: number): string => { + .attr('transform', (_datum: D3Sections, index: number): string => { const height = legendRectSize + legendSpacing; const offset = (height * color.domain().length) / 2; const horizontal = 12 * legendRectSize; @@ -186,11 +185,11 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { .append('text') .attr('x', legendRectSize + legendSpacing) .attr('y', legendRectSize - legendSpacing) - .text((d): string => { + .text((datum: { data: D3Sections }): string => { if (db.getShowData()) { - return d.data.name + ' [' + d.data.value + ']'; + return datum.data.label + ' [' + datum.data.value + ']'; } else { - return d.data.name; + return datum.data.label; } }); } catch (e) { diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index 29a21ee24b..7c88e41c46 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -40,6 +40,12 @@ export interface PieStyleOptions { export type Sections = Record; +export interface D3Sections { + order: number; + label: string; + value: number; +} + export interface PieDb extends DiagramDB { clear: () => void; getConfig: () => PieDiagramConfig | undefined; From 1d0aa763de4381c799d10ea148d24d8cfc0c0cef Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Sun, 18 Jun 2023 17:53:28 +0300 Subject: [PATCH 043/595] document pie useWidth and update other pie config attributes --- docs/config/setup/modules/defaultConfig.md | 2 +- packages/mermaid/src/defaultConfig.ts | 31 ++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/docs/config/setup/modules/defaultConfig.md b/docs/config/setup/modules/defaultConfig.md index d95ec4e922..0b3fa60d79 100644 --- a/docs/config/setup/modules/defaultConfig.md +++ b/docs/config/setup/modules/defaultConfig.md @@ -14,7 +14,7 @@ #### Defined in -[defaultConfig.ts:2293](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L2293) +[defaultConfig.ts:2308](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L2308) --- diff --git a/packages/mermaid/src/defaultConfig.ts b/packages/mermaid/src/defaultConfig.ts index c9407828f2..4780712afa 100644 --- a/packages/mermaid/src/defaultConfig.ts +++ b/packages/mermaid/src/defaultConfig.ts @@ -1254,28 +1254,43 @@ const config: Partial = { /** The object containing configurations specific for pie diagrams */ pie: { - useWidth: undefined, + /** + * | Parameter | Description | Type | Required | Values | + * | --------- | ----------- | ------ | -------- | ------------------- | + * | useWidth | See Notes | number | Optional | Any positive number | + * + * **Notes:** + * + * Width of the chart. + * + * Default value: 1200 + */ + useWidth: 1200, /** * | Parameter | Description | Type | Required | Values | * | ----------- | ----------- | ------- | -------- | ----------- | - * | useMaxWidth | See Notes | boolean | Required | true, false | + * | useMaxWidth | See Notes | boolean | Optional | true, false | * * **Notes:** * - * When this flag is set to true, the diagram width is locked to 100% and scaled based on - * available space. If set to false, the diagram reserves its absolute width. + * When this flag is set to true, the chart width is locked to 100% and scaled based on + * available space. If set to false, the chart reserves its absolute width. * * Default value: true */ useMaxWidth: true, /** - * | Parameter | Description | Type | Required | Values | - * | ------------ | -------------------------------------------------------------------------------- | ------- | -------- | ------------------- | - * | textPosition | Axial position of slice's label from zero at the center to 1 at the outside edge | Number | Optional | Decimal from 0 to 1 | + * | Parameter | Description | Type | Required | Values | + * | ------------ | ----------- | ------- | -------- | ------------------- | + * | textPosition | See Notes | number | Optional | Decimal from 0 to 1 | + * + * **Notes:** + * + * Axial position of slice's label from zero at the center to 1 at the outside edge. * - * **Notes:** Default value: 0.75 + * Default value: 0.75 */ textPosition: 0.75, }, From 4018fad4167227087f447de112c221770ff8168a Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 044/595] Ideas about sankey diagram syntax --- .../mermaid/src/sankey/parser/desired syntax | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 packages/mermaid/src/sankey/parser/desired syntax diff --git a/packages/mermaid/src/sankey/parser/desired syntax b/packages/mermaid/src/sankey/parser/desired syntax new file mode 100644 index 0000000000..b2b9987484 --- /dev/null +++ b/packages/mermaid/src/sankey/parser/desired syntax @@ -0,0 +1,37 @@ +This is example of data for Sakey diagrams from d3 author: +circular graph not supported + +Berlin,Job Applications,102 +Barcelona,Job Applications,39 +Madrid,Job Applications,35 +Amsterdam,Job Applications,15 +Paris,Job Applications,14 +London,Job Applications,6 +Munich,Job Applications,5 +Brussels,Job Applications,4 +Dubai,Job Applications,3 +Dublin,Job Applications,3 +Other Cities,Job Applications,12 +Job Applications,No Response,189 +Job Applications,Responded,49,orange +Responded,Rejected,38 +Responded,Interviewed,11,orange +Interviewed,No Offer,8 +Interviewed,Declined Offer,2 +Interviewed,Accepted Offer,1,orange + +Attributes for + +.nodeSort(null) +.linkSort(null) +.nodeWidth(4) +.nodePadding(20) +.extent([[0, 5], [width, height - 5]]) // margin? + +berlin [label="asdf" color="red"] #node + + +Berlin,Job, +JobApplications[label="Job Applications"] + +madrid=35 -> \ No newline at end of file From 7f19e50403cd0d7453dca2ee435b6cb4fce5c19c Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 045/595] Desired sankey syntax --- .../{desired syntax => desired_syntax.md} | 51 ++++++++++++++++--- 1 file changed, 44 insertions(+), 7 deletions(-) rename packages/mermaid/src/sankey/parser/{desired syntax => desired_syntax.md} (52%) diff --git a/packages/mermaid/src/sankey/parser/desired syntax b/packages/mermaid/src/sankey/parser/desired_syntax.md similarity index 52% rename from packages/mermaid/src/sankey/parser/desired syntax rename to packages/mermaid/src/sankey/parser/desired_syntax.md index b2b9987484..61543c2663 100644 --- a/packages/mermaid/src/sankey/parser/desired syntax +++ b/packages/mermaid/src/sankey/parser/desired_syntax.md @@ -1,6 +1,9 @@ -This is example of data for Sakey diagrams from d3 author: -circular graph not supported +# Sankey diagrams syntax proposal +Circular graphs are not supported by d3. There are some alternatives for that. +This is example of data for Sakey diagrams from d3 author (simple csv): + +```csv Berlin,Job Applications,102 Barcelona,Job Applications,39 Madrid,Job Applications,35 @@ -19,19 +22,53 @@ Responded,Interviewed,11,orange Interviewed,No Offer,8 Interviewed,Declined Offer,2 Interviewed,Accepted Offer,1,orange +``` -Attributes for +We also need graph and node attributes like this: +``` .nodeSort(null) .linkSort(null) .nodeWidth(4) .nodePadding(20) .extent([[0, 5], [width, height - 5]]) // margin? +``` + +Also needed: +* coloring strategy (source, target, transition) +* graph alignment (left, right, width) + +Proposed syntax: +``` +a -> 30 -> b +a -> 40 -> c + +a -> { + 30 -> b + 40 -> c +} + +{ + a -> 30 + b -> 40 +} -> c -berlin [label="asdf" color="red"] #node +a -> { + 30 + 40 +} -> b -Berlin,Job, -JobApplications[label="Job Applications"] +a -> 30 -> { + b + c +} -madrid=35 -> \ No newline at end of file +a -> { + 30 + 40 +} -> { + b + c +} +``` From 116453d2a748462d67c318dbeb90bc5f60f1e45d Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 046/595] Desired syntax sankey --- .../src/sankey/parser/desired_syntax.md | 83 ++++++++++++++++--- 1 file changed, 71 insertions(+), 12 deletions(-) diff --git a/packages/mermaid/src/sankey/parser/desired_syntax.md b/packages/mermaid/src/sankey/parser/desired_syntax.md index 61543c2663..1f0e58b41b 100644 --- a/packages/mermaid/src/sankey/parser/desired_syntax.md +++ b/packages/mermaid/src/sankey/parser/desired_syntax.md @@ -1,6 +1,10 @@ # Sankey diagrams syntax proposal -Circular graphs are not supported by d3. There are some alternatives for that. +## What is used now + +**Circular graphs are not supported by d3. There are some alternatives for that.** +**Dropped flows are not supported by d3** + This is example of data for Sakey diagrams from d3 author (simple csv): ```csv @@ -24,46 +28,85 @@ Interviewed,Declined Offer,2 Interviewed,Accepted Offer,1,orange ``` -We also need graph and node attributes like this: - -``` -.nodeSort(null) -.linkSort(null) -.nodeWidth(4) -.nodePadding(20) -.extent([[0, 5], [width, height - 5]]) // margin? +GoJS uses similar approach +```json +{ +"nodeDataArray": [ +{"key":"Coal reserves", "text":"Coal reserves", "color":"#9d75c2"}, +{"key":"Coal imports", "text":"Coal imports", "color":"#9d75c2"}, +{"key":"Oil reserves", "text":"Oil\nreserves", "color":"#9d75c2"}, +{"key":"Oil imports", "text":"Oil imports", "color":"#9d75c2"} +], +"linkDataArray": [ +{"from":"Coal reserves", "to":"Coal", "width":31}, +{"from":"Coal imports", "to":"Coal", "width":86}, +{"from":"Oil reserves", "to":"Oil", "width":244} +} ``` -Also needed: -* coloring strategy (source, target, transition) +## What do we need + +Mainly we need: +* collection of nodes +* collection of links + +We also need graph and node attributes like this: +* link sort +* node sort +* coloring strategy for links (source, target, transition) * graph alignment (left, right, width) +* node color +* node title +* node width +* node padding +* graph margin + +## Desired syntax -Proposed syntax: +Graph is a list of flows (or links). +Flow is a sequence `node -> value -> node -> value...` ``` a -> 30 -> b a -> 40 -> c +``` +All outflows from the node can be grouped: +``` a -> { 30 -> b 40 -> c } +``` +All inflows to the node can be grouped too: +``` { a -> 30 b -> 40 } -> c +``` +2 separate streams between 2 nodes they can be grouped as well: +``` a -> { 30 40 } -> b +``` +**Probably ambiguous!** + +Does the sample below mean that total outflow from "a" is 60? +``` a -> 30 -> { b c } +``` +Or does this one mean that total outflow must be 140 (70 to "b" and "c" respectively)? +``` a -> { 30 40 @@ -72,3 +115,19 @@ a -> { c } ``` + +**Overcomplicated** + +Nested: +``` +{ + { + a -> 30 + b -> 40 + } -> c -> 12 + { + d -> 10 + e -> 20 + } -> f -> 43 +} -> g +``` From c2417de5f1cb4a523034c94fe5c4a9bcd31fa9d3 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 047/595] Stated sankey backbone --- .../src/diagram-api/diagram-orchestration.ts | 4 +- packages/mermaid/src/diagrams/sankey/db.js | 69 +++++++++++++++++++ .../mermaid/src/diagrams/sankey/detector.ts | 20 ++++++ .../sankey/parser/desired_syntax.md | 18 +++-- .../src/diagrams/sankey/parser/sankey.jison | 13 ++++ .../mermaid/src/diagrams/sankey/renderer.ts | 27 ++++++++ .../src/diagrams/sankey/sankeyDiagram.ts | 13 ++++ .../mermaid/src/diagrams/sankey/styles.js | 5 ++ 8 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 packages/mermaid/src/diagrams/sankey/db.js create mode 100644 packages/mermaid/src/diagrams/sankey/detector.ts rename packages/mermaid/src/{ => diagrams}/sankey/parser/desired_syntax.md (96%) create mode 100644 packages/mermaid/src/diagrams/sankey/parser/sankey.jison create mode 100644 packages/mermaid/src/diagrams/sankey/renderer.ts create mode 100644 packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts create mode 100644 packages/mermaid/src/diagrams/sankey/styles.js diff --git a/packages/mermaid/src/diagram-api/diagram-orchestration.ts b/packages/mermaid/src/diagram-api/diagram-orchestration.ts index 0253be45d5..6c9cc4a033 100644 --- a/packages/mermaid/src/diagram-api/diagram-orchestration.ts +++ b/packages/mermaid/src/diagram-api/diagram-orchestration.ts @@ -18,6 +18,7 @@ import errorDiagram from '../diagrams/error/errorDiagram.js'; import flowchartElk from '../diagrams/flowchart/elk/detector.js'; import timeline from '../diagrams/timeline/detector.js'; import mindmap from '../diagrams/mindmap/detector.js'; +import sankey from '../diagrams/sankey/detector.js'; import { registerLazyLoadedDiagrams } from './detectType.js'; import { registerDiagram } from './diagramAPI.js'; @@ -79,6 +80,7 @@ export const addDiagrams = () => { stateV2, state, journey, - quadrantChart + quadrantChart, + sankey, ); }; diff --git a/packages/mermaid/src/diagrams/sankey/db.js b/packages/mermaid/src/diagrams/sankey/db.js new file mode 100644 index 0000000000..2c86752c66 --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/db.js @@ -0,0 +1,69 @@ +import { log } from '../../logger.js'; +import mermaidAPI from '../../mermaidAPI.js'; +import * as configApi from '../../config.js'; +import common from '../common/common.js'; +import { + setAccTitle, + getAccTitle, + setDiagramTitle, + getDiagramTitle, + getAccDescription, + setAccDescription, + clear as commonClear, +} from '../../commonDb.js'; + +let sections = {}; +let showData = false; + +export const parseDirective = function (statement, context, type) { + mermaidAPI.parseDirective(this, statement, context, type); +}; + +const addSection = function (id, value) { + id = common.sanitizeText(id, configApi.getConfig()); + if (sections[id] === undefined) { + sections[id] = value; + log.debug('Added new section :', id); + } +}; +const getSections = () => sections; + +const setShowData = function (toggle) { + showData = toggle; +}; + +const getShowData = function () { + return showData; +}; + +const cleanupValue = function (value) { + if (value.substring(0, 1) === ':') { + value = value.substring(1).trim(); + return Number(value.trim()); + } else { + return Number(value.trim()); + } +}; + +const clear = function () { + sections = {}; + showData = false; + commonClear(); +}; + +export default { + parseDirective, + getConfig: () => configApi.getConfig().pie, + addSection, + getSections, + cleanupValue, + clear, + setAccTitle, + getAccTitle, + setDiagramTitle, + getDiagramTitle, + setShowData, + getShowData, + getAccDescription, + setAccDescription, +}; diff --git a/packages/mermaid/src/diagrams/sankey/detector.ts b/packages/mermaid/src/diagrams/sankey/detector.ts new file mode 100644 index 0000000000..6c0bcdae85 --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/detector.ts @@ -0,0 +1,20 @@ +import type { DiagramDetector, ExternalDiagramDefinition } from '../../diagram-api/types.js'; + +const id = 'sankey'; + +const detector: DiagramDetector = (txt) => { + return txt.match(/^\s*sankey/) !== null; +}; + +const loader = async () => { + const { diagram } = await import('./sankeyDiagram.js'); + return { id, diagram }; +}; + +const plugin: ExternalDiagramDefinition = { + id, + detector, + loader, +}; + +export default plugin; diff --git a/packages/mermaid/src/sankey/parser/desired_syntax.md b/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md similarity index 96% rename from packages/mermaid/src/sankey/parser/desired_syntax.md rename to packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md index 1f0e58b41b..52057fce99 100644 --- a/packages/mermaid/src/sankey/parser/desired_syntax.md +++ b/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md @@ -67,7 +67,15 @@ Graph is a list of flows (or links). Flow is a sequence `node -> value -> node -> value...` ``` a -> 30 -> b -a -> 40 -> c +a -> 40 -> b +``` + +2 separate streams between 2 nodes they can be grouped as well: +``` +a -> { + 30 + 40 +} -> b ``` All outflows from the node can be grouped: @@ -86,13 +94,15 @@ All inflows to the node can be grouped too: } -> c ``` -2 separate streams between 2 nodes they can be grouped as well: - +Chaining example: ``` a -> { 30 40 -} -> b +} -> b -> { + 20 -> d + 50 -> e +} ``` **Probably ambiguous!** diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison new file mode 100644 index 0000000000..394994927d --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -0,0 +1,13 @@ +%lex +%options case-insensitive + +%% + +/lex + +%start graph + +%% + +graph + : node -> \ No newline at end of file diff --git a/packages/mermaid/src/diagrams/sankey/renderer.ts b/packages/mermaid/src/diagrams/sankey/renderer.ts new file mode 100644 index 0000000000..cb1e2d33ce --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/renderer.ts @@ -0,0 +1,27 @@ +// import { select, scaleOrdinal, pie as d3pie, arc } from 'd3'; + +// import { select, selectAll } from 'd3'; +// import { log } from '../../logger.js'; +// import common from '../common/common.js'; +// import * as svgDrawCommon from '../common/svgDrawCommon'; +import * as configApi from '../../config.js'; +// import assignWithDepth from '../../assignWithDepth.js'; +// import utils from '../../utils.js'; +// import { configureSvgSize } from '../../setupGraphViewbox.js'; +import { Diagram } from '../../Diagram.js'; + +// import { parseFontSize } from '../../utils.js'; + +const conf = configApi.getConfig(); + +/** + * Draws a Sankey Diagram with the data given in text. + * + * @param text + * @param id + */ +export const draw = function (_text: string, id: string, _version: string, _diagObj: Diagram) {} + +export default { + draw, +}; diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts new file mode 100644 index 0000000000..e6b502227a --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts @@ -0,0 +1,13 @@ +import { DiagramDefinition } from '../../diagram-api/types.js'; +// @ts-ignore: TODO Fix ts errors +import parser from './parser/sankey.jison'; +import db from './db.js'; +import styles from './styles.js'; +import renderer from './renderer.js'; + +export const diagram: DiagramDefinition = { + parser, + db, + renderer, + styles, +}; diff --git a/packages/mermaid/src/diagrams/sankey/styles.js b/packages/mermaid/src/diagrams/sankey/styles.js new file mode 100644 index 0000000000..54881fe6fa --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/styles.js @@ -0,0 +1,5 @@ +const getStyles = (options) => + ` +`; + +export default getStyles; From 6b40b394c8b6c35e7c9f57493059561fd492b4f1 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 048/595] Picked state diagram as a sample for sankey --- __mocks__/sankeyRenderer.js | 13 + .../src/diagram-api/diagram-orchestration.ts | 2 +- .../src/diagrams/sankey/parser/sankey.jison | 345 +++- .../mermaid/src/diagrams/sankey/renderer.ts | 27 - .../diagrams/sankey/{db.js => sankeyDB.js} | 0 .../sankey/{detector.ts => sankeyDetector.ts} | 0 .../src/diagrams/sankey/sankeyDiagram.spec.js | 24 + .../src/diagrams/sankey/sankeyDiagram.ts | 4 +- .../src/diagrams/sankey/sankeyRenderer.ts | 1446 +++++++++++++++++ packages/mermaid/src/styles.spec.ts | 2 + 10 files changed, 1829 insertions(+), 34 deletions(-) create mode 100644 __mocks__/sankeyRenderer.js delete mode 100644 packages/mermaid/src/diagrams/sankey/renderer.ts rename packages/mermaid/src/diagrams/sankey/{db.js => sankeyDB.js} (100%) rename packages/mermaid/src/diagrams/sankey/{detector.ts => sankeyDetector.ts} (100%) create mode 100644 packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js create mode 100644 packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts diff --git a/__mocks__/sankeyRenderer.js b/__mocks__/sankeyRenderer.js new file mode 100644 index 0000000000..76324c93f1 --- /dev/null +++ b/__mocks__/sankeyRenderer.js @@ -0,0 +1,13 @@ +/** + * Mocked Sankey diagram renderer + */ + +import { vi } from 'vitest'; + +export const draw = vi.fn().mockImplementation(() => { + return ''; +}); + +export default { + draw, +}; diff --git a/packages/mermaid/src/diagram-api/diagram-orchestration.ts b/packages/mermaid/src/diagram-api/diagram-orchestration.ts index 6c9cc4a033..afebaf1aee 100644 --- a/packages/mermaid/src/diagram-api/diagram-orchestration.ts +++ b/packages/mermaid/src/diagram-api/diagram-orchestration.ts @@ -18,7 +18,7 @@ import errorDiagram from '../diagrams/error/errorDiagram.js'; import flowchartElk from '../diagrams/flowchart/elk/detector.js'; import timeline from '../diagrams/timeline/detector.js'; import mindmap from '../diagrams/mindmap/detector.js'; -import sankey from '../diagrams/sankey/detector.js'; +import sankey from '../diagrams/sankey/sankeyDetector.js'; import { registerLazyLoadedDiagrams } from './detectType.js'; import { registerDiagram } from './diagramAPI.js'; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index 394994927d..074cd5975e 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -1,13 +1,350 @@ +/** mermaid + * https://mermaidjs.github.io/ + * (c) 2014-2015 Knut Sveidqvist + * MIT license. + * + * Based on js sequence diagrams jison grammr + * https://bramp.github.io/js-sequence-diagrams/ + * (c) 2012-2013 Andrew Brampton (bramp.net) + * Simplified BSD license. + */ %lex + %options case-insensitive +// Special states for recognizing aliases +// A special state for grabbing text up to the first comment/newline +%x ID ALIAS LINE + +// Directive states +%x open_directive type_directive arg_directive +%x acc_title +%x acc_descr +%x acc_descr_multiline %% +\%\%\{ { this.begin('open_directive'); return 'open_directive'; } +((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } +":" { this.popState(); this.begin('arg_directive'); return ':'; } +\}\%\% { this.popState(); this.popState(); return 'close_directive'; } +((?:(?!\}\%\%).|\n)*) return 'arg_directive'; +[\n]+ return 'NEWLINE'; +\s+ /* skip all whitespace */ +((?!\n)\s)+ /* skip same-line whitespace */ +\#[^\n]* /* skip comments */ +\%%(?!\{)[^\n]* /* skip comments */ +[^\}]\%\%[^\n]* /* skip comments */ +[0-9]+(?=[ \n]+) return 'NUM'; +"box" { this.begin('LINE'); return 'box'; } +"participant" { this.begin('ID'); return 'participant'; } +"actor" { this.begin('ID'); return 'participant_actor'; } +[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; } +"as" { this.popState(); this.popState(); this.begin('LINE'); return 'AS'; } +(?:) { this.popState(); this.popState(); return 'NEWLINE'; } +"loop" { this.begin('LINE'); return 'loop'; } +"rect" { this.begin('LINE'); return 'rect'; } +"opt" { this.begin('LINE'); return 'opt'; } +"alt" { this.begin('LINE'); return 'alt'; } +"else" { this.begin('LINE'); return 'else'; } +"par" { this.begin('LINE'); return 'par'; } +"par_over" { this.begin('LINE'); return 'par_over'; } +"and" { this.begin('LINE'); return 'and'; } +"critical" { this.begin('LINE'); return 'critical'; } +"option" { this.begin('LINE'); return 'option'; } +"break" { this.begin('LINE'); return 'break'; } +(?:[:]?(?:no)?wrap:)?[^#\n;]* { this.popState(); return 'restOfLine'; } +"end" return 'end'; +"left of" return 'left_of'; +"right of" return 'right_of'; +"links" return 'links'; +"link" return 'link'; +"properties" return 'properties'; +"details" return 'details'; +"over" return 'over'; +"note" return 'note'; +"activate" { this.begin('ID'); return 'activate'; } +"deactivate" { this.begin('ID'); return 'deactivate'; } +"title"\s[^#\n;]+ return 'title'; +"title:"\s[^#\n;]+ return 'legacy_title'; +accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } +(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } +accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } +(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } +accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} +[\}] { this.popState(); } +[^\}]* return "acc_descr_multiline_value"; +"sequenceDiagram" return 'SD'; +"autonumber" return 'autonumber'; +"off" return 'off'; +"," return ','; +";" return 'NEWLINE'; +[^\+\->:\n,;]+((?!(\-x|\-\-x|\-\)|\-\-\)))[\-]*[^\+\->:\n,;]+)* { yytext = yytext.trim(); return 'ACTOR'; } +"->>" return 'SOLID_ARROW'; +"-->>" return 'DOTTED_ARROW'; +"->" return 'SOLID_OPEN_ARROW'; +"-->" return 'DOTTED_OPEN_ARROW'; +\-[x] return 'SOLID_CROSS'; +\-\-[x] return 'DOTTED_CROSS'; +\-[\)] return 'SOLID_POINT'; +\-\-[\)] return 'DOTTED_POINT'; +":"(?:(?:no)?wrap:)?[^#\n;]+ return 'TXT'; +"+" return '+'; +"-" return '-'; +<> return 'NEWLINE'; +. return 'INVALID'; + /lex -%start graph +%left '^' -%% +%start start + +%% /* language grammar */ + +start + : SPACE start + | NEWLINE start + | directive start + | SD document { yy.apply($2);return $2; } + ; + +document + : /* empty */ { $$ = [] } + | document line {$1.push($2);$$ = $1} + ; + +line + : SPACE statement { $$ = $2 } + | statement { $$ = $1 } + | NEWLINE { $$=[]; } + ; + +box_section + : /* empty */ { $$ = [] } + | box_section box_line {$1.push($2);$$ = $1} + ; + +box_line + : SPACE participant_statement { $$ = $2 } + | participant_statement { $$ = $1 } + | NEWLINE { $$=[]; } + ; + + +directive + : openDirective typeDirective closeDirective 'NEWLINE' + | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE' + ; + +statement + : participant_statement + | 'box' restOfLine box_section end + { + $3.unshift({type: 'boxStart', boxData:yy.parseBoxData($2) }); + $3.push({type: 'boxEnd', boxText:$2}); + $$=$3;} + | signal 'NEWLINE' + | autonumber NUM NUM 'NEWLINE' { $$= {type:'sequenceIndex',sequenceIndex: Number($2), sequenceIndexStep:Number($3), sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};} + | autonumber NUM 'NEWLINE' { $$ = {type:'sequenceIndex',sequenceIndex: Number($2), sequenceIndexStep:1, sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};} + | autonumber off 'NEWLINE' { $$ = {type:'sequenceIndex', sequenceVisible:false, signalType:yy.LINETYPE.AUTONUMBER};} + | autonumber 'NEWLINE' {$$ = {type:'sequenceIndex', sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER}; } + | 'activate' actor 'NEWLINE' {$$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $2};} + | 'deactivate' actor 'NEWLINE' {$$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $2};} + | note_statement 'NEWLINE' + | links_statement 'NEWLINE' + | link_statement 'NEWLINE' + | properties_statement 'NEWLINE' + | details_statement 'NEWLINE' + | title {yy.setDiagramTitle($1.substring(6));$$=$1.substring(6);} + | legacy_title {yy.setDiagramTitle($1.substring(7));$$=$1.substring(7);} + | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } + | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } + | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } + | 'loop' restOfLine document end + { + $3.unshift({type: 'loopStart', loopText:yy.parseMessage($2), signalType: yy.LINETYPE.LOOP_START}); + $3.push({type: 'loopEnd', loopText:$2, signalType: yy.LINETYPE.LOOP_END}); + $$=$3;} + | 'rect' restOfLine document end + { + $3.unshift({type: 'rectStart', color:yy.parseMessage($2), signalType: yy.LINETYPE.RECT_START }); + $3.push({type: 'rectEnd', color:yy.parseMessage($2), signalType: yy.LINETYPE.RECT_END }); + $$=$3;} + | opt restOfLine document end + { + $3.unshift({type: 'optStart', optText:yy.parseMessage($2), signalType: yy.LINETYPE.OPT_START}); + $3.push({type: 'optEnd', optText:yy.parseMessage($2), signalType: yy.LINETYPE.OPT_END}); + $$=$3;} + | alt restOfLine else_sections end + { + // Alt start + $3.unshift({type: 'altStart', altText:yy.parseMessage($2), signalType: yy.LINETYPE.ALT_START}); + // Content in alt is already in $3 + // End + $3.push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END}); + $$=$3;} + | par restOfLine par_sections end + { + // Parallel start + $3.unshift({type: 'parStart', parText:yy.parseMessage($2), signalType: yy.LINETYPE.PAR_START}); + // Content in par is already in $3 + // End + $3.push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END}); + $$=$3;} + | par_over restOfLine par_sections end + { + // Parallel (overlapped) start + $3.unshift({type: 'parStart', parText:yy.parseMessage($2), signalType: yy.LINETYPE.PAR_OVER_START}); + // Content in par is already in $3 + // End + $3.push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END}); + $$=$3;} + | critical restOfLine option_sections end + { + // critical start + $3.unshift({type: 'criticalStart', criticalText:yy.parseMessage($2), signalType: yy.LINETYPE.CRITICAL_START}); + // Content in critical is already in $3 + // critical end + $3.push({type: 'criticalEnd', signalType: yy.LINETYPE.CRITICAL_END}); + $$=$3;} + | break restOfLine document end + { + $3.unshift({type: 'breakStart', breakText:yy.parseMessage($2), signalType: yy.LINETYPE.BREAK_START}); + $3.push({type: 'breakEnd', optText:yy.parseMessage($2), signalType: yy.LINETYPE.BREAK_END}); + $$=$3;} + | directive + ; + +option_sections + : document + | document option restOfLine option_sections + { $$ = $1.concat([{type: 'option', optionText:yy.parseMessage($3), signalType: yy.LINETYPE.CRITICAL_OPTION}, $4]); } + ; + +par_sections + : document + | document and restOfLine par_sections + { $$ = $1.concat([{type: 'and', parText:yy.parseMessage($3), signalType: yy.LINETYPE.PAR_AND}, $4]); } + ; + +else_sections + : document + | document else restOfLine else_sections + { $$ = $1.concat([{type: 'else', altText:yy.parseMessage($3), signalType: yy.LINETYPE.ALT_ELSE}, $4]); } + ; + +participant_statement + : 'participant' actor 'AS' restOfLine 'NEWLINE' {$2.type='addParticipant';$2.description=yy.parseMessage($4); $$=$2;} + | 'participant' actor 'NEWLINE' {$2.type='addParticipant';$$=$2;} + | 'participant_actor' actor 'AS' restOfLine 'NEWLINE' {$2.type='addActor';$2.description=yy.parseMessage($4); $$=$2;} + | 'participant_actor' actor 'NEWLINE' {$2.type='addActor'; $$=$2;} + ; -graph - : node -> \ No newline at end of file +note_statement + : 'note' placement actor text2 + { + $$ = [$3, {type:'addNote', placement:$2, actor:$3.actor, text:$4}];} + | 'note' 'over' actor_pair text2 + { + // Coerce actor_pair into a [to, from, ...] array + $2 = [].concat($3, $3).slice(0, 2); + $2[0] = $2[0].actor; + $2[1] = $2[1].actor; + $$ = [$3, {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$2.slice(0, 2), text:$4}];} + ; + +links_statement + : 'links' actor text2 + { + $$ = [$2, {type:'addLinks', actor:$2.actor, text:$3}]; + } + ; + +link_statement + : 'link' actor text2 + { + $$ = [$2, {type:'addALink', actor:$2.actor, text:$3}]; + } + ; + +properties_statement + : 'properties' actor text2 + { + $$ = [$2, {type:'addProperties', actor:$2.actor, text:$3}]; + } + ; + +details_statement + : 'details' actor text2 + { + $$ = [$2, {type:'addDetails', actor:$2.actor, text:$3}]; + } + ; + +spaceList + : SPACE spaceList + | SPACE + ; +actor_pair + : actor ',' actor { $$ = [$1, $3]; } + | actor { $$ = $1; } + ; + +placement + : 'left_of' { $$ = yy.PLACEMENT.LEFTOF; } + | 'right_of' { $$ = yy.PLACEMENT.RIGHTOF; } + ; + +signal + : actor signaltype '+' actor text2 + { $$ = [$1,$4,{type: 'addMessage', from:$1.actor, to:$4.actor, signalType:$2, msg:$5}, + {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $4} + ]} + | actor signaltype '-' actor text2 + { $$ = [$1,$4,{type: 'addMessage', from:$1.actor, to:$4.actor, signalType:$2, msg:$5}, + {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $1} + ]} + | actor signaltype actor text2 + { $$ = [$1,$3,{type: 'addMessage', from:$1.actor, to:$3.actor, signalType:$2, msg:$4}]} + ; + +// actor +// : actor_participant +// | actor_actor +// ; + +actor: ACTOR {$$={ type: 'addParticipant', actor:$1}}; +// actor_actor: ACTOR {$$={type: 'addActor', actor:$1}}; + +signaltype + : SOLID_OPEN_ARROW { $$ = yy.LINETYPE.SOLID_OPEN; } + | DOTTED_OPEN_ARROW { $$ = yy.LINETYPE.DOTTED_OPEN; } + | SOLID_ARROW { $$ = yy.LINETYPE.SOLID; } + | DOTTED_ARROW { $$ = yy.LINETYPE.DOTTED; } + | SOLID_CROSS { $$ = yy.LINETYPE.SOLID_CROSS; } + | DOTTED_CROSS { $$ = yy.LINETYPE.DOTTED_CROSS; } + | SOLID_POINT { $$ = yy.LINETYPE.SOLID_POINT; } + | DOTTED_POINT { $$ = yy.LINETYPE.DOTTED_POINT; } + ; + +text2 + : TXT {$$ = yy.parseMessage($1.trim().substring(1)) } + ; + +openDirective + : open_directive { yy.parseDirective('%%{', 'open_directive'); } + ; + +typeDirective + : type_directive { yy.parseDirective($1, 'type_directive'); } + ; + +argDirective + : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } + ; + +closeDirective + : close_directive { yy.parseDirective('}%%', 'close_directive', 'sequence'); } + ; + +%% diff --git a/packages/mermaid/src/diagrams/sankey/renderer.ts b/packages/mermaid/src/diagrams/sankey/renderer.ts deleted file mode 100644 index cb1e2d33ce..0000000000 --- a/packages/mermaid/src/diagrams/sankey/renderer.ts +++ /dev/null @@ -1,27 +0,0 @@ -// import { select, scaleOrdinal, pie as d3pie, arc } from 'd3'; - -// import { select, selectAll } from 'd3'; -// import { log } from '../../logger.js'; -// import common from '../common/common.js'; -// import * as svgDrawCommon from '../common/svgDrawCommon'; -import * as configApi from '../../config.js'; -// import assignWithDepth from '../../assignWithDepth.js'; -// import utils from '../../utils.js'; -// import { configureSvgSize } from '../../setupGraphViewbox.js'; -import { Diagram } from '../../Diagram.js'; - -// import { parseFontSize } from '../../utils.js'; - -const conf = configApi.getConfig(); - -/** - * Draws a Sankey Diagram with the data given in text. - * - * @param text - * @param id - */ -export const draw = function (_text: string, id: string, _version: string, _diagObj: Diagram) {} - -export default { - draw, -}; diff --git a/packages/mermaid/src/diagrams/sankey/db.js b/packages/mermaid/src/diagrams/sankey/sankeyDB.js similarity index 100% rename from packages/mermaid/src/diagrams/sankey/db.js rename to packages/mermaid/src/diagrams/sankey/sankeyDB.js diff --git a/packages/mermaid/src/diagrams/sankey/detector.ts b/packages/mermaid/src/diagrams/sankey/sankeyDetector.ts similarity index 100% rename from packages/mermaid/src/diagrams/sankey/detector.ts rename to packages/mermaid/src/diagrams/sankey/sankeyDetector.ts diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js new file mode 100644 index 0000000000..ee9d0e23ee --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js @@ -0,0 +1,24 @@ +import diagram from './parser/sankey.jison'; +import { parser } from './parser/sankey.jison'; +import db from './sankeyDB.js'; + +describe('state diagram V2, ', function () { + // TODO - these examples should be put into ./parser/stateDiagram.spec.js + describe('when parsing an info graph it', function () { + beforeEach(function () { + parser.yy = stateDb; + diagram.parser.yy = db; + diagram.parser.yy.clear(); + }); + + it('super simple', function () { + const str = ` + stateDiagram-v2 + [*] --> State1 + State1 --> [*] + `; + + parser.parse(str); + }); + }); +}); diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts index e6b502227a..e7a46d8bcb 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts @@ -1,9 +1,9 @@ import { DiagramDefinition } from '../../diagram-api/types.js'; // @ts-ignore: TODO Fix ts errors import parser from './parser/sankey.jison'; -import db from './db.js'; +import db from './sankeyDB.js'; import styles from './styles.js'; -import renderer from './renderer.js'; +import renderer from './sankeyRenderer.js'; export const diagram: DiagramDefinition = { parser, diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts new file mode 100644 index 0000000000..243fbddad3 --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -0,0 +1,1446 @@ +// @ts-nocheck TODO: fix file +import { select, selectAll } from 'd3'; +import svgDraw, { drawText, fixLifeLineHeights } from './svgDraw.js'; +import { log } from '../../logger.js'; +import common from '../common/common.js'; +import * as svgDrawCommon from '../common/svgDrawCommon.js'; +import * as configApi from '../../config.js'; +import assignWithDepth from '../../assignWithDepth.js'; +import utils from '../../utils.js'; +import { configureSvgSize } from '../../setupGraphViewbox.js'; +import { Diagram } from '../../Diagram.js'; + +let conf = {}; + +export const bounds = { + data: { + startx: undefined, + stopx: undefined, + starty: undefined, + stopy: undefined, + }, + verticalPos: 0, + sequenceItems: [], + activations: [], + models: { + getHeight: function () { + return ( + Math.max.apply( + null, + this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) + ) + + (this.loops.length === 0 + ? 0 + : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + + (this.messages.length === 0 + ? 0 + : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + + (this.notes.length === 0 + ? 0 + : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + ); + }, + clear: function () { + this.actors = []; + this.boxes = []; + this.loops = []; + this.messages = []; + this.notes = []; + }, + addBox: function (boxModel) { + this.boxes.push(boxModel); + }, + addActor: function (actorModel) { + this.actors.push(actorModel); + }, + addLoop: function (loopModel) { + this.loops.push(loopModel); + }, + addMessage: function (msgModel) { + this.messages.push(msgModel); + }, + addNote: function (noteModel) { + this.notes.push(noteModel); + }, + lastActor: function () { + return this.actors[this.actors.length - 1]; + }, + lastLoop: function () { + return this.loops[this.loops.length - 1]; + }, + lastMessage: function () { + return this.messages[this.messages.length - 1]; + }, + lastNote: function () { + return this.notes[this.notes.length - 1]; + }, + actors: [], + boxes: [], + loops: [], + messages: [], + notes: [], + }, + init: function () { + this.sequenceItems = []; + this.activations = []; + this.models.clear(); + this.data = { + startx: undefined, + stopx: undefined, + starty: undefined, + stopy: undefined, + }; + this.verticalPos = 0; + setConf(configApi.getConfig()); + }, + updateVal: function (obj, key, val, fun) { + if (obj[key] === undefined) { + obj[key] = val; + } else { + obj[key] = fun(val, obj[key]); + } + }, + updateBounds: function (startx, starty, stopx, stopy) { + // eslint-disable-next-line @typescript-eslint/no-this-alias + const _self = this; + let cnt = 0; + /** @param type - Either `activation` or `undefined` */ + function updateFn(type?: 'activation') { + return function updateItemBounds(item) { + cnt++; + // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems + const n = _self.sequenceItems.length - cnt + 1; + + _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min); + _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max); + + _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max); + + if (!(type === 'activation')) { + _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min); + _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max); + + _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min); + _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max); + } + }; + } + + this.sequenceItems.forEach(updateFn()); + this.activations.forEach(updateFn('activation')); + }, + insert: function (startx, starty, stopx, stopy) { + const _startx = common.getMin(startx, stopx); + const _stopx = common.getMax(startx, stopx); + const _starty = common.getMin(starty, stopy); + const _stopy = common.getMax(starty, stopy); + + this.updateVal(bounds.data, 'startx', _startx, Math.min); + this.updateVal(bounds.data, 'starty', _starty, Math.min); + this.updateVal(bounds.data, 'stopx', _stopx, Math.max); + this.updateVal(bounds.data, 'stopy', _stopy, Math.max); + + this.updateBounds(_startx, _starty, _stopx, _stopy); + }, + newActivation: function (message, diagram, actors) { + const actorRect = actors[message.from.actor]; + const stackedSize = actorActivations(message.from.actor).length || 0; + const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2; + this.activations.push({ + startx: x, + starty: this.verticalPos + 2, + stopx: x + conf.activationWidth, + stopy: undefined, + actor: message.from.actor, + anchored: svgDraw.anchorElement(diagram), + }); + }, + endActivation: function (message) { + // find most recent activation for given actor + const lastActorActivationIdx = this.activations + .map(function (activation) { + return activation.actor; + }) + .lastIndexOf(message.from.actor); + return this.activations.splice(lastActorActivationIdx, 1)[0]; + }, + createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) { + return { + startx: undefined, + starty: this.verticalPos, + stopx: undefined, + stopy: undefined, + title: title.message, + wrap: title.wrap, + width: title.width, + height: 0, + fill: fill, + }; + }, + newLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) { + this.sequenceItems.push(this.createLoop(title, fill)); + }, + endLoop: function () { + return this.sequenceItems.pop(); + }, + isLoopOverlap: function () { + return this.sequenceItems.length + ? this.sequenceItems[this.sequenceItems.length - 1].overlap + : false; + }, + addSectionToLoop: function (message) { + const loop = this.sequenceItems.pop(); + loop.sections = loop.sections || []; + loop.sectionTitles = loop.sectionTitles || []; + loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); + loop.sectionTitles.push(message); + this.sequenceItems.push(loop); + }, + saveVerticalPos: function () { + if (this.isLoopOverlap()) { + this.savedVerticalPos = this.verticalPos; + } + }, + resetVerticalPos: function () { + if (this.isLoopOverlap()) { + this.verticalPos = this.savedVerticalPos; + } + }, + bumpVerticalPos: function (bump) { + this.verticalPos = this.verticalPos + bump; + this.data.stopy = common.getMax(this.data.stopy, this.verticalPos); + }, + getVerticalPos: function () { + return this.verticalPos; + }, + getBounds: function () { + return { bounds: this.data, models: this.models }; + }, +}; + +/** Options for drawing a note in {@link drawNote} */ +interface NoteModel { + /** x axis start position */ + startx: number; + /** y axis position */ + starty: number; + /** the message to be shown */ + message: string; + /** Set this with a custom width to override the default configured width. */ + width: number; +} + +/** + * Draws an note in the diagram with the attached line + * + * @param elem - The diagram to draw to. + * @param noteModel - Note model options. + */ +const drawNote = function (elem: any, noteModel: NoteModel) { + bounds.bumpVerticalPos(conf.boxMargin); + noteModel.height = conf.boxMargin; + noteModel.starty = bounds.getVerticalPos(); + const rect = svgDrawCommon.getNoteRect(); + rect.x = noteModel.startx; + rect.y = noteModel.starty; + rect.width = noteModel.width || conf.width; + rect.class = 'note'; + + const g = elem.append('g'); + const rectElem = svgDraw.drawRect(g, rect); + const textObj = svgDrawCommon.getTextObj(); + textObj.x = noteModel.startx; + textObj.y = noteModel.starty; + textObj.width = rect.width; + textObj.dy = '1em'; + textObj.text = noteModel.message; + textObj.class = 'noteText'; + textObj.fontFamily = conf.noteFontFamily; + textObj.fontSize = conf.noteFontSize; + textObj.fontWeight = conf.noteFontWeight; + textObj.anchor = conf.noteAlign; + textObj.textMargin = conf.noteMargin; + textObj.valign = 'center'; + + const textElem = drawText(g, textObj); + + const textHeight = Math.round( + textElem + .map((te) => (te._groups || te)[0][0].getBBox().height) + .reduce((acc, curr) => acc + curr) + ); + + rectElem.attr('height', textHeight + 2 * conf.noteMargin); + noteModel.height += textHeight + 2 * conf.noteMargin; + bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); + noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; + noteModel.stopx = noteModel.startx + rect.width; + bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); + bounds.models.addNote(noteModel); +}; + +const messageFont = (cnf) => { + return { + fontFamily: cnf.messageFontFamily, + fontSize: cnf.messageFontSize, + fontWeight: cnf.messageFontWeight, + }; +}; +const noteFont = (cnf) => { + return { + fontFamily: cnf.noteFontFamily, + fontSize: cnf.noteFontSize, + fontWeight: cnf.noteFontWeight, + }; +}; +const actorFont = (cnf) => { + return { + fontFamily: cnf.actorFontFamily, + fontSize: cnf.actorFontSize, + fontWeight: cnf.actorFontWeight, + }; +}; + +/** + * Process a message by adding its dimensions to the bound. It returns the Y coordinate of the + * message so it can be drawn later. We do not draw the message at this point so the arrowhead can + * be on top of the activation box. + * + * @param _diagram - The parent of the message element. + * @param msgModel - The model containing fields describing a message + * @returns `lineStartY` - The Y coordinate at which the message line starts + */ +function boundMessage(_diagram, msgModel): number { + bounds.bumpVerticalPos(10); + const { startx, stopx, message } = msgModel; + const lines = common.splitBreaks(message).length; + const textDims = utils.calculateTextDimensions(message, messageFont(conf)); + const lineHeight = textDims.height / lines; + msgModel.height += lineHeight; + + bounds.bumpVerticalPos(lineHeight); + + let lineStartY; + let totalOffset = textDims.height - 10; + const textWidth = textDims.width; + + if (startx === stopx) { + lineStartY = bounds.getVerticalPos() + totalOffset; + if (!conf.rightAngles) { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + } + totalOffset += 30; + const dx = common.getMax(textWidth / 2, conf.width / 2); + bounds.insert( + startx - dx, + bounds.getVerticalPos() - 10 + totalOffset, + stopx + dx, + bounds.getVerticalPos() + 30 + totalOffset + ); + } else { + totalOffset += conf.boxMargin; + lineStartY = bounds.getVerticalPos() + totalOffset; + bounds.insert(startx, lineStartY - 10, stopx, lineStartY); + } + bounds.bumpVerticalPos(totalOffset); + msgModel.height += totalOffset; + msgModel.stopy = msgModel.starty + msgModel.height; + bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); + + return lineStartY; +} + +/** + * Draws a message. Note that the bounds have previously been updated by boundMessage. + * + * @param diagram - The parent of the message element + * @param msgModel - The model containing fields describing a message + * @param lineStartY - The Y coordinate at which the message line starts + * @param diagObj - The diagram object. + */ +const drawMessage = function (diagram, msgModel, lineStartY: number, diagObj: Diagram) { + const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; + const textDims = utils.calculateTextDimensions(message, messageFont(conf)); + const textObj = svgDrawCommon.getTextObj(); + textObj.x = startx; + textObj.y = starty + 10; + textObj.width = stopx - startx; + textObj.class = 'messageText'; + textObj.dy = '1em'; + textObj.text = message; + textObj.fontFamily = conf.messageFontFamily; + textObj.fontSize = conf.messageFontSize; + textObj.fontWeight = conf.messageFontWeight; + textObj.anchor = conf.messageAlign; + textObj.valign = 'center'; + textObj.textMargin = conf.wrapPadding; + textObj.tspan = false; + + drawText(diagram, textObj); + + const textWidth = textDims.width; + + let line; + if (startx === stopx) { + if (conf.rightAngles) { + line = diagram + .append('path') + .attr( + 'd', + `M ${startx},${lineStartY} H ${ + startx + common.getMax(conf.width / 2, textWidth / 2) + } V ${lineStartY + 25} H ${startx}` + ); + } else { + line = diagram + .append('path') + .attr( + 'd', + 'M ' + + startx + + ',' + + lineStartY + + ' C ' + + (startx + 60) + + ',' + + (lineStartY - 10) + + ' ' + + (startx + 60) + + ',' + + (lineStartY + 30) + + ' ' + + startx + + ',' + + (lineStartY + 20) + ); + } + } else { + line = diagram.append('line'); + line.attr('x1', startx); + line.attr('y1', lineStartY); + line.attr('x2', stopx); + line.attr('y2', lineStartY); + } + // Make an SVG Container + // Draw the line + if ( + type === diagObj.db.LINETYPE.DOTTED || + type === diagObj.db.LINETYPE.DOTTED_CROSS || + type === diagObj.db.LINETYPE.DOTTED_POINT || + type === diagObj.db.LINETYPE.DOTTED_OPEN + ) { + line.style('stroke-dasharray', '3, 3'); + line.attr('class', 'messageLine1'); + } else { + line.attr('class', 'messageLine0'); + } + + let url = ''; + if (conf.arrowMarkerAbsolute) { + url = + window.location.protocol + + '//' + + window.location.host + + window.location.pathname + + window.location.search; + url = url.replace(/\(/g, '\\('); + url = url.replace(/\)/g, '\\)'); + } + + line.attr('stroke-width', 2); + line.attr('stroke', 'none'); // handled by theme/css anyway + line.style('fill', 'none'); // remove any fill colour + if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { + line.attr('marker-end', 'url(' + url + '#arrowhead)'); + } + if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { + line.attr('marker-end', 'url(' + url + '#filled-head)'); + } + + if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { + line.attr('marker-end', 'url(' + url + '#crosshead)'); + } + + // add node number + if (sequenceVisible || conf.showSequenceNumbers) { + line.attr('marker-start', 'url(' + url + '#sequencenumber)'); + diagram + .append('text') + .attr('x', startx) + .attr('y', lineStartY + 4) + .attr('font-family', 'sans-serif') + .attr('font-size', '12px') + .attr('text-anchor', 'middle') + .attr('class', 'sequenceNumber') + .text(sequenceIndex); + } +}; + +export const drawActors = function ( + diagram, + actors, + actorKeys, + verticalPos, + configuration, + messages, + isFooter +) { + if (configuration.hideUnusedParticipants === true) { + const newActors = new Set(); + messages.forEach((message) => { + newActors.add(message.from); + newActors.add(message.to); + }); + actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); + } + + // Draw the actors + let prevWidth = 0; + let prevMargin = 0; + let maxHeight = 0; + let prevBox = undefined; + + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + const box = actor.box; + + // end of box + if (prevBox && prevBox != box) { + if (!isFooter) { + bounds.models.addBox(prevBox); + } + prevMargin += conf.boxMargin + prevBox.margin; + } + + // new box + if (box && box != prevBox) { + if (!isFooter) { + box.x = prevWidth + prevMargin; + box.y = verticalPos; + } + prevMargin += box.margin; + } + + // Add some rendering data to the object + actor.width = actor.width || conf.width; + actor.height = common.getMax(actor.height || conf.height, conf.height); + actor.margin = actor.margin || conf.actorMargin; + + actor.x = prevWidth + prevMargin; + actor.y = bounds.getVerticalPos(); + + // Draw the box with the attached line + const height = svgDraw.drawActor(diagram, actor, conf, isFooter); + maxHeight = common.getMax(maxHeight, height); + bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); + + prevWidth += actor.width + prevMargin; + if (actor.box) { + actor.box.width = prevWidth + box.margin - actor.box.x; + } + prevMargin = actor.margin; + prevBox = actor.box; + bounds.models.addActor(actor); + } + + // end of box + if (prevBox && !isFooter) { + bounds.models.addBox(prevBox); + } + + // Add a margin between the actor boxes and the first arrow + bounds.bumpVerticalPos(maxHeight); +}; + +export const drawActorsPopup = function (diagram, actors, actorKeys, doc) { + let maxHeight = 0; + let maxWidth = 0; + for (const actorKey of actorKeys) { + const actor = actors[actorKey]; + const minMenuWidth = getRequiredPopupWidth(actor); + const menuDimensions = svgDraw.drawPopup( + diagram, + actor, + minMenuWidth, + conf, + conf.forceMenus, + doc + ); + if (menuDimensions.height > maxHeight) { + maxHeight = menuDimensions.height; + } + if (menuDimensions.width + actor.x > maxWidth) { + maxWidth = menuDimensions.width + actor.x; + } + } + + return { maxHeight: maxHeight, maxWidth: maxWidth }; +}; + +export const setConf = function (cnf) { + assignWithDepth(conf, cnf); + + if (cnf.fontFamily) { + conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; + } + if (cnf.fontSize) { + conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; + } + if (cnf.fontWeight) { + conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; + } +}; + +const actorActivations = function (actor) { + return bounds.activations.filter(function (activation) { + return activation.actor === actor; + }); +}; + +const activationBounds = function (actor, actors) { + // handle multiple stacked activations for same actor + const actorObj = actors[actor]; + const activations = actorActivations(actor); + + const left = activations.reduce(function (acc, activation) { + return common.getMin(acc, activation.startx); + }, actorObj.x + actorObj.width / 2); + const right = activations.reduce(function (acc, activation) { + return common.getMax(acc, activation.stopx); + }, actorObj.x + actorObj.width / 2); + return [left, right]; +}; + +function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { + bounds.bumpVerticalPos(preMargin); + let heightAdjust = postMargin; + if (msg.id && msg.message && loopWidths[msg.id]) { + const loopWidth = loopWidths[msg.id].width; + const textConf = messageFont(conf); + msg.message = utils.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); + msg.width = loopWidth; + msg.wrap = true; + + // const lines = common.splitBreaks(msg.message).length; + const textDims = utils.calculateTextDimensions(msg.message, textConf); + const totalOffset = common.getMax(textDims.height, conf.labelBoxHeight); + heightAdjust = postMargin + totalOffset; + log.debug(`${totalOffset} - ${msg.message}`); + } + addLoopFn(msg); + bounds.bumpVerticalPos(heightAdjust); +} + +/** + * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text. + * + * @param _text - The text of the diagram + * @param id - The id of the diagram which will be used as a DOM element id¨ + * @param _version - Mermaid version from package.json + * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram + */ +export const draw = function (_text: string, id: string, _version: string, diagObj: Diagram) { + const { securityLevel, sequence } = configApi.getConfig(); + conf = sequence; + diagObj.db.clear(); + // Parse the graph definition + diagObj.parser.parse(_text); + // Handle root and Document for when rendering in sandbox mode + let sandboxElement; + if (securityLevel === 'sandbox') { + sandboxElement = select('#i' + id); + } + + const root = + securityLevel === 'sandbox' + ? select(sandboxElement.nodes()[0].contentDocument.body) + : select('body'); + const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; + bounds.init(); + log.debug(diagObj.db); + + const diagram = + securityLevel === 'sandbox' ? root.select(`[id="${id}"]`) : select(`[id="${id}"]`); + + // Fetch data from the parsing + const actors = diagObj.db.getActors(); + const boxes = diagObj.db.getBoxes(); + const actorKeys = diagObj.db.getActorKeys(); + const messages = diagObj.db.getMessages(); + const title = diagObj.db.getDiagramTitle(); + const hasBoxes = diagObj.db.hasAtLeastOneBox(); + const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); + const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors, messages, diagObj); + conf.height = calculateActorMargins(actors, maxMessageWidthPerActor, boxes); + + svgDraw.insertComputerIcon(diagram); + svgDraw.insertDatabaseIcon(diagram); + svgDraw.insertClockIcon(diagram); + + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + if (hasBoxTitles) { + bounds.bumpVerticalPos(boxes[0].textMaxHeight); + } + } + + drawActors(diagram, actors, actorKeys, 0, conf, messages, false); + const loopWidths = calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); + + // The arrow head definition is attached to the svg once + svgDraw.insertArrowHead(diagram); + svgDraw.insertArrowCrossHead(diagram); + svgDraw.insertArrowFilledHead(diagram); + svgDraw.insertSequenceNumber(diagram); + + /** + * @param msg - The message to draw. + * @param verticalPos - The vertical position of the message. + */ + function activeEnd(msg: any, verticalPos: number) { + const activationData = bounds.endActivation(msg); + if (activationData.starty + 18 > verticalPos) { + activationData.starty = verticalPos - 6; + verticalPos += 12; + } + svgDraw.drawActivation( + diagram, + activationData, + verticalPos, + conf, + actorActivations(msg.from.actor).length + ); + + bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); + } + + // Draw the messages/signals + let sequenceIndex = 1; + let sequenceIndexStep = 1; + const messagesToDraw = []; + messages.forEach(function (msg) { + let loopModel, noteModel, msgModel; + + switch (msg.type) { + case diagObj.db.LINETYPE.NOTE: + bounds.resetVerticalPos(); + noteModel = msg.noteModel; + drawNote(diagram, noteModel); + break; + case diagObj.db.LINETYPE.ACTIVE_START: + bounds.newActivation(msg, diagram, actors); + break; + case diagObj.db.LINETYPE.ACTIVE_END: + activeEnd(msg, bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.LOOP_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.LOOP_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram, loopModel, 'loop', conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.RECT_START: + adjustLoopHeightForWrap(loopWidths, msg, conf.boxMargin, conf.boxMargin, (message) => + bounds.newLoop(undefined, message.message) + ); + break; + case diagObj.db.LINETYPE.RECT_END: + loopModel = bounds.endLoop(); + svgDraw.drawBackgroundRect(diagram, loopModel); + bounds.models.addLoop(loopModel); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + break; + case diagObj.db.LINETYPE.OPT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.OPT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram, loopModel, 'opt', conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.ALT_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.ALT_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram, loopModel, 'alt', conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + bounds.saveVerticalPos(); + break; + case diagObj.db.LINETYPE.PAR_AND: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.PAR_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram, loopModel, 'par', conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.AUTONUMBER: + sequenceIndex = msg.message.start || sequenceIndex; + sequenceIndexStep = msg.message.step || sequenceIndexStep; + if (msg.message.visible) { + diagObj.db.enableSequenceNumbers(); + } else { + diagObj.db.disableSequenceNumbers(); + } + break; + case diagObj.db.LINETYPE.CRITICAL_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_OPTION: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin + conf.boxTextMargin, + conf.boxMargin, + (message) => bounds.addSectionToLoop(message) + ); + break; + case diagObj.db.LINETYPE.CRITICAL_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram, loopModel, 'critical', conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + case diagObj.db.LINETYPE.BREAK_START: + adjustLoopHeightForWrap( + loopWidths, + msg, + conf.boxMargin, + conf.boxMargin + conf.boxTextMargin, + (message) => bounds.newLoop(message) + ); + break; + case diagObj.db.LINETYPE.BREAK_END: + loopModel = bounds.endLoop(); + svgDraw.drawLoop(diagram, loopModel, 'break', conf); + bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); + bounds.models.addLoop(loopModel); + break; + default: + try { + // lastMsg = msg + bounds.resetVerticalPos(); + msgModel = msg.msgModel; + msgModel.starty = bounds.getVerticalPos(); + msgModel.sequenceIndex = sequenceIndex; + msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); + const lineStartY = boundMessage(diagram, msgModel); + messagesToDraw.push({ messageModel: msgModel, lineStartY: lineStartY }); + bounds.models.addMessage(msgModel); + } catch (e) { + log.error('error while drawing message', e); + } + } + + // Increment sequence counter if msg.type is a line (and not another event like activation or note, etc) + if ( + [ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT, + ].includes(msg.type) + ) { + sequenceIndex = sequenceIndex + sequenceIndexStep; + } + }); + + messagesToDraw.forEach((e) => drawMessage(diagram, e.messageModel, e.lineStartY, diagObj)); + + if (conf.mirrorActors) { + // Draw actors below diagram + bounds.bumpVerticalPos(conf.boxMargin * 2); + drawActors(diagram, actors, actorKeys, bounds.getVerticalPos(), conf, messages, true); + bounds.bumpVerticalPos(conf.boxMargin); + fixLifeLineHeights(diagram, bounds.getVerticalPos()); + } + + bounds.models.boxes.forEach(function (box) { + box.height = bounds.getVerticalPos() - box.y; + bounds.insert(box.x, box.y, box.x + box.width, box.height); + box.startx = box.x; + box.starty = box.y; + box.stopx = box.startx + box.width; + box.stopy = box.starty + box.height; + box.stroke = 'rgb(0,0,0, 0.5)'; + svgDraw.drawBox(diagram, box, conf); + }); + + if (hasBoxes) { + bounds.bumpVerticalPos(conf.boxMargin); + } + + // only draw popups for the top row of actors. + const requiredBoxSize = drawActorsPopup(diagram, actors, actorKeys, doc); + + const { bounds: box } = bounds.getBounds(); + + // Adjust line height of actor lines now that the height of the diagram is known + log.debug('For line height fix Querying: #' + id + ' .actor-line'); + const actorLines = selectAll('#' + id + ' .actor-line'); + actorLines.attr('y2', box.stopy); + + // Make sure the height of the diagram supports long menus. + let boxHeight = box.stopy - box.starty; + if (boxHeight < requiredBoxSize.maxHeight) { + boxHeight = requiredBoxSize.maxHeight; + } + + let height = boxHeight + 2 * conf.diagramMarginY; + if (conf.mirrorActors) { + height = height - conf.boxMargin + conf.bottomMarginAdj; + } + + // Make sure the width of the diagram supports wide menus. + let boxWidth = box.stopx - box.startx; + if (boxWidth < requiredBoxSize.maxWidth) { + boxWidth = requiredBoxSize.maxWidth; + } + const width = boxWidth + 2 * conf.diagramMarginX; + + if (title) { + diagram + .append('text') + .text(title) + .attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX) + .attr('y', -25); + } + + configureSvgSize(diagram, height, width, conf.useMaxWidth); + + const extraVertForTitle = title ? 40 : 0; + diagram.attr( + 'viewBox', + box.startx - + conf.diagramMarginX + + ' -' + + (conf.diagramMarginY + extraVertForTitle) + + ' ' + + width + + ' ' + + (height + extraVertForTitle) + ); + + log.debug(`models:`, bounds.models); +}; + +/** + * Retrieves the max message width of each actor, supports signals (messages, loops) and notes. + * + * It will enumerate each given message, and will determine its text width, in relation to the actor + * it originates from, and destined to. + * + * @param actors - The actors map + * @param messages - A list of message objects to iterate + * @param diagObj - The diagram object. + * @returns The max message width of each actor. + */ +function getMaxMessageWidthPerActor( + actors: { [id: string]: any }, + messages: any[], + diagObj: Diagram +): { [id: string]: number } { + const maxMessageWidthPerActor = {}; + + messages.forEach(function (msg) { + if (actors[msg.to] && actors[msg.from]) { + const actor = actors[msg.to]; + + // If this is the first actor, and the message is left of it, no need to calculate the margin + if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { + return; + } + + // If this is the last actor, and the message is right of it, no need to calculate the margin + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { + return; + } + + const isNote = msg.placement !== undefined; + const isMessage = !isNote; + + const textFont = isNote ? noteFont(conf) : messageFont(conf); + const wrappedMessage = msg.wrap + ? utils.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) + : msg.message; + const messageDimensions = utils.calculateTextDimensions(wrappedMessage, textFont); + const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; + + /* + * The following scenarios should be supported: + * + * - There's a message (non-note) between fromActor and toActor + * - If fromActor is on the right and toActor is on the left, we should + * define the toActor's margin + * - If fromActor is on the left and toActor is on the right, we should + * define the fromActor's margin + * - There's a note, in which case fromActor == toActor + * - If the note is to the left of the actor, we should define the previous actor + * margin + * - If the note is on the actor, we should define both the previous and next actor + * margins, each being the half of the note size + * - If the note is on the right of the actor, we should define the current actor + * margin + */ + if (isMessage && msg.from === actor.nextActor) { + maxMessageWidthPerActor[msg.to] = common.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth + ); + } else if (isMessage && msg.from === actor.prevActor) { + maxMessageWidthPerActor[msg.from] = common.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (isMessage && msg.from === msg.to) { + maxMessageWidthPerActor[msg.from] = common.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + + maxMessageWidthPerActor[msg.to] = common.getMax( + maxMessageWidthPerActor[msg.to] || 0, + messageWidth / 2 + ); + } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + maxMessageWidthPerActor[msg.from] = common.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + maxMessageWidthPerActor[actor.prevActor] = common.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth + ); + } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { + if (actor.prevActor) { + maxMessageWidthPerActor[actor.prevActor] = common.getMax( + maxMessageWidthPerActor[actor.prevActor] || 0, + messageWidth / 2 + ); + } + + if (actor.nextActor) { + maxMessageWidthPerActor[msg.from] = common.getMax( + maxMessageWidthPerActor[msg.from] || 0, + messageWidth / 2 + ); + } + } + } + }); + + log.debug('maxMessageWidthPerActor:', maxMessageWidthPerActor); + return maxMessageWidthPerActor; +} + +const getRequiredPopupWidth = function (actor) { + let requiredPopupWidth = 0; + const textFont = actorFont(conf); + for (const key in actor.links) { + const labelDimensions = utils.calculateTextDimensions(key, textFont); + const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; + if (requiredPopupWidth < labelWidth) { + requiredPopupWidth = labelWidth; + } + } + + return requiredPopupWidth; +}; + +/** + * This will calculate the optimal margin for each given actor, + * for a given actor → messageWidth map. + * + * An actor's margin is determined by the width of the actor, the width of the largest message that + * originates from it, and the configured conf.actorMargin. + * + * @param actors - The actors map to calculate margins for + * @param actorToMessageWidth - A map of actor key → max message width it holds + * @param boxes - The boxes around the actors if any + */ +function calculateActorMargins( + actors: { [id: string]: any }, + actorToMessageWidth: ReturnType, + boxes +) { + let maxHeight = 0; + Object.keys(actors).forEach((prop) => { + const actor = actors[prop]; + if (actor.wrap) { + actor.description = utils.wrapLabel( + actor.description, + conf.width - 2 * conf.wrapPadding, + actorFont(conf) + ); + } + const actDims = utils.calculateTextDimensions(actor.description, actorFont(conf)); + actor.width = actor.wrap + ? conf.width + : common.getMax(conf.width, actDims.width + 2 * conf.wrapPadding); + + actor.height = actor.wrap ? common.getMax(actDims.height, conf.height) : conf.height; + maxHeight = common.getMax(maxHeight, actor.height); + }); + + for (const actorKey in actorToMessageWidth) { + const actor = actors[actorKey]; + + if (!actor) { + continue; + } + + const nextActor = actors[actor.nextActor]; + + // No need to space out an actor that doesn't have a next link + if (!nextActor) { + const messageWidth = actorToMessageWidth[actorKey]; + const actorWidth = messageWidth + conf.actorMargin - actor.width / 2; + actor.margin = common.getMax(actorWidth, conf.actorMargin); + continue; + } + + const messageWidth = actorToMessageWidth[actorKey]; + const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; + + actor.margin = common.getMax(actorWidth, conf.actorMargin); + } + + let maxBoxHeight = 0; + boxes.forEach((box) => { + const textFont = messageFont(conf); + let totalWidth = box.actorKeys.reduce((total, aKey) => { + return (total += actors[aKey].width + (actors[aKey].margin || 0)); + }, 0); + + totalWidth -= 2 * conf.boxTextMargin; + if (box.wrap) { + box.name = utils.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont); + } + + const boxMsgDimensions = utils.calculateTextDimensions(box.name, textFont); + maxBoxHeight = common.getMax(boxMsgDimensions.height, maxBoxHeight); + const minWidth = common.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding); + box.margin = conf.boxTextMargin; + if (totalWidth < minWidth) { + const missing = (minWidth - totalWidth) / 2; + box.margin += missing; + } + }); + boxes.forEach((box) => (box.textMaxHeight = maxBoxHeight)); + + return common.getMax(maxHeight, conf.height); +} + +const buildNoteModel = function (msg, actors, diagObj) { + const startx = actors[msg.from].x; + const stopx = actors[msg.to].x; + const shouldWrap = msg.wrap && msg.message; + + let textDimensions = utils.calculateTextDimensions( + shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, + noteFont(conf) + ); + const noteModel = { + width: shouldWrap + ? conf.width + : common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin), + height: 0, + startx: actors[msg.from].x, + stopx: 0, + starty: 0, + stopy: 0, + message: msg.message, + }; + if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { + noteModel.width = shouldWrap + ? common.getMax(conf.width, textDimensions.width) + : common.getMax( + actors[msg.from].width / 2 + actors[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors[msg.from].width + conf.actorMargin) / 2; + } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { + noteModel.width = shouldWrap + ? common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) + : common.getMax( + actors[msg.from].width / 2 + actors[msg.to].width / 2, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx - noteModel.width + (actors[msg.from].width - conf.actorMargin) / 2; + } else if (msg.to === msg.from) { + textDimensions = utils.calculateTextDimensions( + shouldWrap + ? utils.wrapLabel( + msg.message, + common.getMax(conf.width, actors[msg.from].width), + noteFont(conf) + ) + : msg.message, + noteFont(conf) + ); + noteModel.width = shouldWrap + ? common.getMax(conf.width, actors[msg.from].width) + : common.getMax( + actors[msg.from].width, + conf.width, + textDimensions.width + 2 * conf.noteMargin + ); + noteModel.startx = startx + (actors[msg.from].width - noteModel.width) / 2; + } else { + noteModel.width = + Math.abs(startx + actors[msg.from].width / 2 - (stopx + actors[msg.to].width / 2)) + + conf.actorMargin; + noteModel.startx = + startx < stopx + ? startx + actors[msg.from].width / 2 - conf.actorMargin / 2 + : stopx + actors[msg.to].width / 2 - conf.actorMargin / 2; + } + if (shouldWrap) { + noteModel.message = utils.wrapLabel( + msg.message, + noteModel.width - 2 * conf.wrapPadding, + noteFont(conf) + ); + } + log.debug( + `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` + ); + return noteModel; +}; + +const buildMessageModel = function (msg, actors, diagObj) { + let process = false; + if ( + [ + diagObj.db.LINETYPE.SOLID_OPEN, + diagObj.db.LINETYPE.DOTTED_OPEN, + diagObj.db.LINETYPE.SOLID, + diagObj.db.LINETYPE.DOTTED, + diagObj.db.LINETYPE.SOLID_CROSS, + diagObj.db.LINETYPE.DOTTED_CROSS, + diagObj.db.LINETYPE.SOLID_POINT, + diagObj.db.LINETYPE.DOTTED_POINT, + ].includes(msg.type) + ) { + process = true; + } + if (!process) { + return {}; + } + const fromBounds = activationBounds(msg.from, actors); + const toBounds = activationBounds(msg.to, actors); + const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0; + const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1; + const allBounds = [...fromBounds, ...toBounds]; + const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]); + if (msg.wrap && msg.message) { + msg.message = utils.wrapLabel( + msg.message, + common.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width), + messageFont(conf) + ); + } + const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf)); + + return { + width: common.getMax( + msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, + boundedWidth + 2 * conf.wrapPadding, + conf.width + ), + height: 0, + startx: fromBounds[fromIdx], + stopx: toBounds[toIdx], + starty: 0, + stopy: 0, + message: msg.message, + type: msg.type, + wrap: msg.wrap, + fromBounds: Math.min.apply(null, allBounds), + toBounds: Math.max.apply(null, allBounds), + }; +}; + +const calculateLoopBounds = function (messages, actors, _maxWidthPerActor, diagObj) { + const loops = {}; + const stack = []; + let current, noteModel, msgModel; + + messages.forEach(function (msg) { + msg.id = utils.random({ length: 10 }); + switch (msg.type) { + case diagObj.db.LINETYPE.LOOP_START: + case diagObj.db.LINETYPE.ALT_START: + case diagObj.db.LINETYPE.OPT_START: + case diagObj.db.LINETYPE.PAR_START: + case diagObj.db.LINETYPE.PAR_OVER_START: + case diagObj.db.LINETYPE.CRITICAL_START: + case diagObj.db.LINETYPE.BREAK_START: + stack.push({ + id: msg.id, + msg: msg.message, + from: Number.MAX_SAFE_INTEGER, + to: Number.MIN_SAFE_INTEGER, + width: 0, + }); + break; + case diagObj.db.LINETYPE.ALT_ELSE: + case diagObj.db.LINETYPE.PAR_AND: + case diagObj.db.LINETYPE.CRITICAL_OPTION: + if (msg.message) { + current = stack.pop(); + loops[current.id] = current; + loops[msg.id] = current; + stack.push(current); + } + break; + case diagObj.db.LINETYPE.LOOP_END: + case diagObj.db.LINETYPE.ALT_END: + case diagObj.db.LINETYPE.OPT_END: + case diagObj.db.LINETYPE.PAR_END: + case diagObj.db.LINETYPE.CRITICAL_END: + case diagObj.db.LINETYPE.BREAK_END: + current = stack.pop(); + loops[current.id] = current; + break; + case diagObj.db.LINETYPE.ACTIVE_START: + { + const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor]; + const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; + const x = + actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2; + const toAdd = { + startx: x, + stopx: x + conf.activationWidth, + actor: msg.from.actor, + enabled: true, + }; + bounds.activations.push(toAdd); + } + break; + case diagObj.db.LINETYPE.ACTIVE_END: + { + const lastActorActivationIdx = bounds.activations + .map((a) => a.actor) + .lastIndexOf(msg.from.actor); + delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; + } + break; + } + const isNote = msg.placement !== undefined; + if (isNote) { + noteModel = buildNoteModel(msg, actors, diagObj); + msg.noteModel = noteModel; + stack.forEach((stk) => { + current = stk; + current.from = common.getMin(current.from, noteModel.startx); + current.to = common.getMax(current.to, noteModel.startx + noteModel.width); + current.width = + common.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; + }); + } else { + msgModel = buildMessageModel(msg, actors, diagObj); + msg.msgModel = msgModel; + if (msgModel.startx && msgModel.stopx && stack.length > 0) { + stack.forEach((stk) => { + current = stk; + if (msgModel.startx === msgModel.stopx) { + const from = actors[msg.from]; + const to = actors[msg.to]; + current.from = common.getMin( + from.x - msgModel.width / 2, + from.x - from.width / 2, + current.from + ); + current.to = common.getMax( + to.x + msgModel.width / 2, + to.x + from.width / 2, + current.to + ); + current.width = + common.getMax(current.width, Math.abs(current.to - current.from)) - + conf.labelBoxWidth; + } else { + current.from = common.getMin(msgModel.startx, current.from); + current.to = common.getMax(msgModel.stopx, current.to); + current.width = common.getMax(current.width, msgModel.width) - conf.labelBoxWidth; + } + }); + } + } + }); + bounds.activations = []; + log.debug('Loop type widths:', loops); + return loops; +}; + +export default { + bounds, + drawActors, + drawActorsPopup, + setConf, + draw, +}; diff --git a/packages/mermaid/src/styles.spec.ts b/packages/mermaid/src/styles.spec.ts index 51951f190a..d1edf41116 100644 --- a/packages/mermaid/src/styles.spec.ts +++ b/packages/mermaid/src/styles.spec.ts @@ -29,6 +29,7 @@ import state from './diagrams/state/styles.js'; import journey from './diagrams/user-journey/styles.js'; import timeline from './diagrams/timeline/styles.js'; import mindmap from './diagrams/mindmap/styles.js'; +import sankey from './diagrams/sankey/styles.js'; import themes from './themes/index.js'; async function checkValidStylisCSSStyleSheet(stylisString: string) { @@ -98,6 +99,7 @@ describe('styles', () => { sequence, state, timeline, + sankey, })) { test(`should return a valid style for diagram ${diagramId} and theme ${themeId}`, async () => { const { default: getStyles, addStylesForDiagram } = await import('./styles.js'); From 8e001b92f2005f3ffdc4166b3c5d7b9315d15a29 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 049/595] Cleared sankey renderer --- cypress/integration/rendering/sankey.spec.js | 14 + .../diagrams/sankey/parser/desired_syntax.md | 2 +- .../src/diagrams/sankey/parser/sankey.spec.js | 44 + .../src/diagrams/sankey/sankeyDiagram.spec.js | 24 - .../src/diagrams/sankey/sankeyDiagram.ts | 1 + .../src/diagrams/sankey/sankeyRenderer.ts | 1431 +---------------- 6 files changed, 61 insertions(+), 1455 deletions(-) create mode 100644 cypress/integration/rendering/sankey.spec.js create mode 100644 packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js delete mode 100644 packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js diff --git a/cypress/integration/rendering/sankey.spec.js b/cypress/integration/rendering/sankey.spec.js new file mode 100644 index 0000000000..5b9bcf870b --- /dev/null +++ b/cypress/integration/rendering/sankey.spec.js @@ -0,0 +1,14 @@ +import { imgSnapshotTest, renderGraph } from '../../helpers/util.js'; + +describe('Sankey Diagram', () => { + it('should render a simple sankey diagram', () => { + imgSnapshotTest( + ` + sankey + a -> 30 -> b + `, + {} + ); + cy.get('svg'); + }); +}); diff --git a/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md b/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md index 52057fce99..d0cbd4e8a1 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md +++ b/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md @@ -28,7 +28,7 @@ Interviewed,Declined Offer,2 Interviewed,Accepted Offer,1,orange ``` -GoJS uses similar approach +GoJS uses similar approach: ```json { "nodeDataArray": [ diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js new file mode 100644 index 0000000000..995c924784 --- /dev/null +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -0,0 +1,44 @@ +import diagram from './sankey.jison'; +import { parser } from './sankey.jison'; +import db from '../sankeyDB.js'; + +describe('Sankey diagram', function () { + // TODO - these examples should be put into ./parser/stateDiagram.spec.js + describe('when parsing an info graph it', function () { + beforeEach(function () { + parser.yy = db; + diagram.parser.yy = db; + diagram.parser.yy.clear(); + }); + + it('one simple flow', function () { + const str = ` + sankey + a -> 30 -> b + `; + + parser.parse(str); + }); + + it('multiple flows', function () { + const str = ` + sankey + a -> 30 -> b + c -> 30 -> d + c -> 40 -> e + `; + + parser.parse(str); + }); + + it('multiple flows', function () { + const str = ` + sankey + a -> 30 -> b + c -> 30 -> d + `; + + parser.parse(str); + }); + }); +}); diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js deleted file mode 100644 index ee9d0e23ee..0000000000 --- a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.spec.js +++ /dev/null @@ -1,24 +0,0 @@ -import diagram from './parser/sankey.jison'; -import { parser } from './parser/sankey.jison'; -import db from './sankeyDB.js'; - -describe('state diagram V2, ', function () { - // TODO - these examples should be put into ./parser/stateDiagram.spec.js - describe('when parsing an info graph it', function () { - beforeEach(function () { - parser.yy = stateDb; - diagram.parser.yy = db; - diagram.parser.yy.clear(); - }); - - it('super simple', function () { - const str = ` - stateDiagram-v2 - [*] --> State1 - State1 --> [*] - `; - - parser.parse(str); - }); - }); -}); diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts index e7a46d8bcb..482a75a48c 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts @@ -11,3 +11,4 @@ export const diagram: DiagramDefinition = { renderer, styles, }; + diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 243fbddad3..f1482210ea 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -1,638 +1,5 @@ -// @ts-nocheck TODO: fix file -import { select, selectAll } from 'd3'; -import svgDraw, { drawText, fixLifeLineHeights } from './svgDraw.js'; -import { log } from '../../logger.js'; -import common from '../common/common.js'; -import * as svgDrawCommon from '../common/svgDrawCommon.js'; -import * as configApi from '../../config.js'; -import assignWithDepth from '../../assignWithDepth.js'; -import utils from '../../utils.js'; -import { configureSvgSize } from '../../setupGraphViewbox.js'; import { Diagram } from '../../Diagram.js'; -let conf = {}; - -export const bounds = { - data: { - startx: undefined, - stopx: undefined, - starty: undefined, - stopy: undefined, - }, - verticalPos: 0, - sequenceItems: [], - activations: [], - models: { - getHeight: function () { - return ( - Math.max.apply( - null, - this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0) - ) + - (this.loops.length === 0 - ? 0 - : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + - (this.messages.length === 0 - ? 0 - : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + - (this.notes.length === 0 - ? 0 - : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h)) - ); - }, - clear: function () { - this.actors = []; - this.boxes = []; - this.loops = []; - this.messages = []; - this.notes = []; - }, - addBox: function (boxModel) { - this.boxes.push(boxModel); - }, - addActor: function (actorModel) { - this.actors.push(actorModel); - }, - addLoop: function (loopModel) { - this.loops.push(loopModel); - }, - addMessage: function (msgModel) { - this.messages.push(msgModel); - }, - addNote: function (noteModel) { - this.notes.push(noteModel); - }, - lastActor: function () { - return this.actors[this.actors.length - 1]; - }, - lastLoop: function () { - return this.loops[this.loops.length - 1]; - }, - lastMessage: function () { - return this.messages[this.messages.length - 1]; - }, - lastNote: function () { - return this.notes[this.notes.length - 1]; - }, - actors: [], - boxes: [], - loops: [], - messages: [], - notes: [], - }, - init: function () { - this.sequenceItems = []; - this.activations = []; - this.models.clear(); - this.data = { - startx: undefined, - stopx: undefined, - starty: undefined, - stopy: undefined, - }; - this.verticalPos = 0; - setConf(configApi.getConfig()); - }, - updateVal: function (obj, key, val, fun) { - if (obj[key] === undefined) { - obj[key] = val; - } else { - obj[key] = fun(val, obj[key]); - } - }, - updateBounds: function (startx, starty, stopx, stopy) { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const _self = this; - let cnt = 0; - /** @param type - Either `activation` or `undefined` */ - function updateFn(type?: 'activation') { - return function updateItemBounds(item) { - cnt++; - // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems - const n = _self.sequenceItems.length - cnt + 1; - - _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min); - _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max); - - _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min); - _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max); - - if (!(type === 'activation')) { - _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min); - _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max); - - _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min); - _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max); - } - }; - } - - this.sequenceItems.forEach(updateFn()); - this.activations.forEach(updateFn('activation')); - }, - insert: function (startx, starty, stopx, stopy) { - const _startx = common.getMin(startx, stopx); - const _stopx = common.getMax(startx, stopx); - const _starty = common.getMin(starty, stopy); - const _stopy = common.getMax(starty, stopy); - - this.updateVal(bounds.data, 'startx', _startx, Math.min); - this.updateVal(bounds.data, 'starty', _starty, Math.min); - this.updateVal(bounds.data, 'stopx', _stopx, Math.max); - this.updateVal(bounds.data, 'stopy', _stopy, Math.max); - - this.updateBounds(_startx, _starty, _stopx, _stopy); - }, - newActivation: function (message, diagram, actors) { - const actorRect = actors[message.from.actor]; - const stackedSize = actorActivations(message.from.actor).length || 0; - const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2; - this.activations.push({ - startx: x, - starty: this.verticalPos + 2, - stopx: x + conf.activationWidth, - stopy: undefined, - actor: message.from.actor, - anchored: svgDraw.anchorElement(diagram), - }); - }, - endActivation: function (message) { - // find most recent activation for given actor - const lastActorActivationIdx = this.activations - .map(function (activation) { - return activation.actor; - }) - .lastIndexOf(message.from.actor); - return this.activations.splice(lastActorActivationIdx, 1)[0]; - }, - createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) { - return { - startx: undefined, - starty: this.verticalPos, - stopx: undefined, - stopy: undefined, - title: title.message, - wrap: title.wrap, - width: title.width, - height: 0, - fill: fill, - }; - }, - newLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) { - this.sequenceItems.push(this.createLoop(title, fill)); - }, - endLoop: function () { - return this.sequenceItems.pop(); - }, - isLoopOverlap: function () { - return this.sequenceItems.length - ? this.sequenceItems[this.sequenceItems.length - 1].overlap - : false; - }, - addSectionToLoop: function (message) { - const loop = this.sequenceItems.pop(); - loop.sections = loop.sections || []; - loop.sectionTitles = loop.sectionTitles || []; - loop.sections.push({ y: bounds.getVerticalPos(), height: 0 }); - loop.sectionTitles.push(message); - this.sequenceItems.push(loop); - }, - saveVerticalPos: function () { - if (this.isLoopOverlap()) { - this.savedVerticalPos = this.verticalPos; - } - }, - resetVerticalPos: function () { - if (this.isLoopOverlap()) { - this.verticalPos = this.savedVerticalPos; - } - }, - bumpVerticalPos: function (bump) { - this.verticalPos = this.verticalPos + bump; - this.data.stopy = common.getMax(this.data.stopy, this.verticalPos); - }, - getVerticalPos: function () { - return this.verticalPos; - }, - getBounds: function () { - return { bounds: this.data, models: this.models }; - }, -}; - -/** Options for drawing a note in {@link drawNote} */ -interface NoteModel { - /** x axis start position */ - startx: number; - /** y axis position */ - starty: number; - /** the message to be shown */ - message: string; - /** Set this with a custom width to override the default configured width. */ - width: number; -} - -/** - * Draws an note in the diagram with the attached line - * - * @param elem - The diagram to draw to. - * @param noteModel - Note model options. - */ -const drawNote = function (elem: any, noteModel: NoteModel) { - bounds.bumpVerticalPos(conf.boxMargin); - noteModel.height = conf.boxMargin; - noteModel.starty = bounds.getVerticalPos(); - const rect = svgDrawCommon.getNoteRect(); - rect.x = noteModel.startx; - rect.y = noteModel.starty; - rect.width = noteModel.width || conf.width; - rect.class = 'note'; - - const g = elem.append('g'); - const rectElem = svgDraw.drawRect(g, rect); - const textObj = svgDrawCommon.getTextObj(); - textObj.x = noteModel.startx; - textObj.y = noteModel.starty; - textObj.width = rect.width; - textObj.dy = '1em'; - textObj.text = noteModel.message; - textObj.class = 'noteText'; - textObj.fontFamily = conf.noteFontFamily; - textObj.fontSize = conf.noteFontSize; - textObj.fontWeight = conf.noteFontWeight; - textObj.anchor = conf.noteAlign; - textObj.textMargin = conf.noteMargin; - textObj.valign = 'center'; - - const textElem = drawText(g, textObj); - - const textHeight = Math.round( - textElem - .map((te) => (te._groups || te)[0][0].getBBox().height) - .reduce((acc, curr) => acc + curr) - ); - - rectElem.attr('height', textHeight + 2 * conf.noteMargin); - noteModel.height += textHeight + 2 * conf.noteMargin; - bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); - noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin; - noteModel.stopx = noteModel.startx + rect.width; - bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy); - bounds.models.addNote(noteModel); -}; - -const messageFont = (cnf) => { - return { - fontFamily: cnf.messageFontFamily, - fontSize: cnf.messageFontSize, - fontWeight: cnf.messageFontWeight, - }; -}; -const noteFont = (cnf) => { - return { - fontFamily: cnf.noteFontFamily, - fontSize: cnf.noteFontSize, - fontWeight: cnf.noteFontWeight, - }; -}; -const actorFont = (cnf) => { - return { - fontFamily: cnf.actorFontFamily, - fontSize: cnf.actorFontSize, - fontWeight: cnf.actorFontWeight, - }; -}; - -/** - * Process a message by adding its dimensions to the bound. It returns the Y coordinate of the - * message so it can be drawn later. We do not draw the message at this point so the arrowhead can - * be on top of the activation box. - * - * @param _diagram - The parent of the message element. - * @param msgModel - The model containing fields describing a message - * @returns `lineStartY` - The Y coordinate at which the message line starts - */ -function boundMessage(_diagram, msgModel): number { - bounds.bumpVerticalPos(10); - const { startx, stopx, message } = msgModel; - const lines = common.splitBreaks(message).length; - const textDims = utils.calculateTextDimensions(message, messageFont(conf)); - const lineHeight = textDims.height / lines; - msgModel.height += lineHeight; - - bounds.bumpVerticalPos(lineHeight); - - let lineStartY; - let totalOffset = textDims.height - 10; - const textWidth = textDims.width; - - if (startx === stopx) { - lineStartY = bounds.getVerticalPos() + totalOffset; - if (!conf.rightAngles) { - totalOffset += conf.boxMargin; - lineStartY = bounds.getVerticalPos() + totalOffset; - } - totalOffset += 30; - const dx = common.getMax(textWidth / 2, conf.width / 2); - bounds.insert( - startx - dx, - bounds.getVerticalPos() - 10 + totalOffset, - stopx + dx, - bounds.getVerticalPos() + 30 + totalOffset - ); - } else { - totalOffset += conf.boxMargin; - lineStartY = bounds.getVerticalPos() + totalOffset; - bounds.insert(startx, lineStartY - 10, stopx, lineStartY); - } - bounds.bumpVerticalPos(totalOffset); - msgModel.height += totalOffset; - msgModel.stopy = msgModel.starty + msgModel.height; - bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy); - - return lineStartY; -} - -/** - * Draws a message. Note that the bounds have previously been updated by boundMessage. - * - * @param diagram - The parent of the message element - * @param msgModel - The model containing fields describing a message - * @param lineStartY - The Y coordinate at which the message line starts - * @param diagObj - The diagram object. - */ -const drawMessage = function (diagram, msgModel, lineStartY: number, diagObj: Diagram) { - const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel; - const textDims = utils.calculateTextDimensions(message, messageFont(conf)); - const textObj = svgDrawCommon.getTextObj(); - textObj.x = startx; - textObj.y = starty + 10; - textObj.width = stopx - startx; - textObj.class = 'messageText'; - textObj.dy = '1em'; - textObj.text = message; - textObj.fontFamily = conf.messageFontFamily; - textObj.fontSize = conf.messageFontSize; - textObj.fontWeight = conf.messageFontWeight; - textObj.anchor = conf.messageAlign; - textObj.valign = 'center'; - textObj.textMargin = conf.wrapPadding; - textObj.tspan = false; - - drawText(diagram, textObj); - - const textWidth = textDims.width; - - let line; - if (startx === stopx) { - if (conf.rightAngles) { - line = diagram - .append('path') - .attr( - 'd', - `M ${startx},${lineStartY} H ${ - startx + common.getMax(conf.width / 2, textWidth / 2) - } V ${lineStartY + 25} H ${startx}` - ); - } else { - line = diagram - .append('path') - .attr( - 'd', - 'M ' + - startx + - ',' + - lineStartY + - ' C ' + - (startx + 60) + - ',' + - (lineStartY - 10) + - ' ' + - (startx + 60) + - ',' + - (lineStartY + 30) + - ' ' + - startx + - ',' + - (lineStartY + 20) - ); - } - } else { - line = diagram.append('line'); - line.attr('x1', startx); - line.attr('y1', lineStartY); - line.attr('x2', stopx); - line.attr('y2', lineStartY); - } - // Make an SVG Container - // Draw the line - if ( - type === diagObj.db.LINETYPE.DOTTED || - type === diagObj.db.LINETYPE.DOTTED_CROSS || - type === diagObj.db.LINETYPE.DOTTED_POINT || - type === diagObj.db.LINETYPE.DOTTED_OPEN - ) { - line.style('stroke-dasharray', '3, 3'); - line.attr('class', 'messageLine1'); - } else { - line.attr('class', 'messageLine0'); - } - - let url = ''; - if (conf.arrowMarkerAbsolute) { - url = - window.location.protocol + - '//' + - window.location.host + - window.location.pathname + - window.location.search; - url = url.replace(/\(/g, '\\('); - url = url.replace(/\)/g, '\\)'); - } - - line.attr('stroke-width', 2); - line.attr('stroke', 'none'); // handled by theme/css anyway - line.style('fill', 'none'); // remove any fill colour - if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) { - line.attr('marker-end', 'url(' + url + '#arrowhead)'); - } - if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) { - line.attr('marker-end', 'url(' + url + '#filled-head)'); - } - - if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) { - line.attr('marker-end', 'url(' + url + '#crosshead)'); - } - - // add node number - if (sequenceVisible || conf.showSequenceNumbers) { - line.attr('marker-start', 'url(' + url + '#sequencenumber)'); - diagram - .append('text') - .attr('x', startx) - .attr('y', lineStartY + 4) - .attr('font-family', 'sans-serif') - .attr('font-size', '12px') - .attr('text-anchor', 'middle') - .attr('class', 'sequenceNumber') - .text(sequenceIndex); - } -}; - -export const drawActors = function ( - diagram, - actors, - actorKeys, - verticalPos, - configuration, - messages, - isFooter -) { - if (configuration.hideUnusedParticipants === true) { - const newActors = new Set(); - messages.forEach((message) => { - newActors.add(message.from); - newActors.add(message.to); - }); - actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey)); - } - - // Draw the actors - let prevWidth = 0; - let prevMargin = 0; - let maxHeight = 0; - let prevBox = undefined; - - for (const actorKey of actorKeys) { - const actor = actors[actorKey]; - const box = actor.box; - - // end of box - if (prevBox && prevBox != box) { - if (!isFooter) { - bounds.models.addBox(prevBox); - } - prevMargin += conf.boxMargin + prevBox.margin; - } - - // new box - if (box && box != prevBox) { - if (!isFooter) { - box.x = prevWidth + prevMargin; - box.y = verticalPos; - } - prevMargin += box.margin; - } - - // Add some rendering data to the object - actor.width = actor.width || conf.width; - actor.height = common.getMax(actor.height || conf.height, conf.height); - actor.margin = actor.margin || conf.actorMargin; - - actor.x = prevWidth + prevMargin; - actor.y = bounds.getVerticalPos(); - - // Draw the box with the attached line - const height = svgDraw.drawActor(diagram, actor, conf, isFooter); - maxHeight = common.getMax(maxHeight, height); - bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height); - - prevWidth += actor.width + prevMargin; - if (actor.box) { - actor.box.width = prevWidth + box.margin - actor.box.x; - } - prevMargin = actor.margin; - prevBox = actor.box; - bounds.models.addActor(actor); - } - - // end of box - if (prevBox && !isFooter) { - bounds.models.addBox(prevBox); - } - - // Add a margin between the actor boxes and the first arrow - bounds.bumpVerticalPos(maxHeight); -}; - -export const drawActorsPopup = function (diagram, actors, actorKeys, doc) { - let maxHeight = 0; - let maxWidth = 0; - for (const actorKey of actorKeys) { - const actor = actors[actorKey]; - const minMenuWidth = getRequiredPopupWidth(actor); - const menuDimensions = svgDraw.drawPopup( - diagram, - actor, - minMenuWidth, - conf, - conf.forceMenus, - doc - ); - if (menuDimensions.height > maxHeight) { - maxHeight = menuDimensions.height; - } - if (menuDimensions.width + actor.x > maxWidth) { - maxWidth = menuDimensions.width + actor.x; - } - } - - return { maxHeight: maxHeight, maxWidth: maxWidth }; -}; - -export const setConf = function (cnf) { - assignWithDepth(conf, cnf); - - if (cnf.fontFamily) { - conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily; - } - if (cnf.fontSize) { - conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize; - } - if (cnf.fontWeight) { - conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight; - } -}; - -const actorActivations = function (actor) { - return bounds.activations.filter(function (activation) { - return activation.actor === actor; - }); -}; - -const activationBounds = function (actor, actors) { - // handle multiple stacked activations for same actor - const actorObj = actors[actor]; - const activations = actorActivations(actor); - - const left = activations.reduce(function (acc, activation) { - return common.getMin(acc, activation.startx); - }, actorObj.x + actorObj.width / 2); - const right = activations.reduce(function (acc, activation) { - return common.getMax(acc, activation.stopx); - }, actorObj.x + actorObj.width / 2); - return [left, right]; -}; - -function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) { - bounds.bumpVerticalPos(preMargin); - let heightAdjust = postMargin; - if (msg.id && msg.message && loopWidths[msg.id]) { - const loopWidth = loopWidths[msg.id].width; - const textConf = messageFont(conf); - msg.message = utils.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf); - msg.width = loopWidth; - msg.wrap = true; - - // const lines = common.splitBreaks(msg.message).length; - const textDims = utils.calculateTextDimensions(msg.message, textConf); - const totalOffset = common.getMax(textDims.height, conf.labelBoxHeight); - heightAdjust = postMargin + totalOffset; - log.debug(`${totalOffset} - ${msg.message}`); - } - addLoopFn(msg); - bounds.bumpVerticalPos(heightAdjust); -} - /** * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text. * @@ -642,805 +9,9 @@ function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoop * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram */ export const draw = function (_text: string, id: string, _version: string, diagObj: Diagram) { - const { securityLevel, sequence } = configApi.getConfig(); - conf = sequence; - diagObj.db.clear(); - // Parse the graph definition - diagObj.parser.parse(_text); - // Handle root and Document for when rendering in sandbox mode - let sandboxElement; - if (securityLevel === 'sandbox') { - sandboxElement = select('#i' + id); - } - - const root = - securityLevel === 'sandbox' - ? select(sandboxElement.nodes()[0].contentDocument.body) - : select('body'); - const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; - bounds.init(); - log.debug(diagObj.db); - - const diagram = - securityLevel === 'sandbox' ? root.select(`[id="${id}"]`) : select(`[id="${id}"]`); - - // Fetch data from the parsing - const actors = diagObj.db.getActors(); - const boxes = diagObj.db.getBoxes(); - const actorKeys = diagObj.db.getActorKeys(); - const messages = diagObj.db.getMessages(); - const title = diagObj.db.getDiagramTitle(); - const hasBoxes = diagObj.db.hasAtLeastOneBox(); - const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle(); - const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors, messages, diagObj); - conf.height = calculateActorMargins(actors, maxMessageWidthPerActor, boxes); - - svgDraw.insertComputerIcon(diagram); - svgDraw.insertDatabaseIcon(diagram); - svgDraw.insertClockIcon(diagram); - - if (hasBoxes) { - bounds.bumpVerticalPos(conf.boxMargin); - if (hasBoxTitles) { - bounds.bumpVerticalPos(boxes[0].textMaxHeight); - } - } - - drawActors(diagram, actors, actorKeys, 0, conf, messages, false); - const loopWidths = calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj); - - // The arrow head definition is attached to the svg once - svgDraw.insertArrowHead(diagram); - svgDraw.insertArrowCrossHead(diagram); - svgDraw.insertArrowFilledHead(diagram); - svgDraw.insertSequenceNumber(diagram); - - /** - * @param msg - The message to draw. - * @param verticalPos - The vertical position of the message. - */ - function activeEnd(msg: any, verticalPos: number) { - const activationData = bounds.endActivation(msg); - if (activationData.starty + 18 > verticalPos) { - activationData.starty = verticalPos - 6; - verticalPos += 12; - } - svgDraw.drawActivation( - diagram, - activationData, - verticalPos, - conf, - actorActivations(msg.from.actor).length - ); - - bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); - } - - // Draw the messages/signals - let sequenceIndex = 1; - let sequenceIndexStep = 1; - const messagesToDraw = []; - messages.forEach(function (msg) { - let loopModel, noteModel, msgModel; - - switch (msg.type) { - case diagObj.db.LINETYPE.NOTE: - bounds.resetVerticalPos(); - noteModel = msg.noteModel; - drawNote(diagram, noteModel); - break; - case diagObj.db.LINETYPE.ACTIVE_START: - bounds.newActivation(msg, diagram, actors); - break; - case diagObj.db.LINETYPE.ACTIVE_END: - activeEnd(msg, bounds.getVerticalPos()); - break; - case diagObj.db.LINETYPE.LOOP_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.LOOP_END: - loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'loop', conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.RECT_START: - adjustLoopHeightForWrap(loopWidths, msg, conf.boxMargin, conf.boxMargin, (message) => - bounds.newLoop(undefined, message.message) - ); - break; - case diagObj.db.LINETYPE.RECT_END: - loopModel = bounds.endLoop(); - svgDraw.drawBackgroundRect(diagram, loopModel); - bounds.models.addLoop(loopModel); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - break; - case diagObj.db.LINETYPE.OPT_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.OPT_END: - loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'opt', conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.ALT_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.ALT_ELSE: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin + conf.boxTextMargin, - conf.boxMargin, - (message) => bounds.addSectionToLoop(message) - ); - break; - case diagObj.db.LINETYPE.ALT_END: - loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'alt', conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.PAR_START: - case diagObj.db.LINETYPE.PAR_OVER_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - bounds.saveVerticalPos(); - break; - case diagObj.db.LINETYPE.PAR_AND: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin + conf.boxTextMargin, - conf.boxMargin, - (message) => bounds.addSectionToLoop(message) - ); - break; - case diagObj.db.LINETYPE.PAR_END: - loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'par', conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.AUTONUMBER: - sequenceIndex = msg.message.start || sequenceIndex; - sequenceIndexStep = msg.message.step || sequenceIndexStep; - if (msg.message.visible) { - diagObj.db.enableSequenceNumbers(); - } else { - diagObj.db.disableSequenceNumbers(); - } - break; - case diagObj.db.LINETYPE.CRITICAL_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.CRITICAL_OPTION: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin + conf.boxTextMargin, - conf.boxMargin, - (message) => bounds.addSectionToLoop(message) - ); - break; - case diagObj.db.LINETYPE.CRITICAL_END: - loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'critical', conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - case diagObj.db.LINETYPE.BREAK_START: - adjustLoopHeightForWrap( - loopWidths, - msg, - conf.boxMargin, - conf.boxMargin + conf.boxTextMargin, - (message) => bounds.newLoop(message) - ); - break; - case diagObj.db.LINETYPE.BREAK_END: - loopModel = bounds.endLoop(); - svgDraw.drawLoop(diagram, loopModel, 'break', conf); - bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos()); - bounds.models.addLoop(loopModel); - break; - default: - try { - // lastMsg = msg - bounds.resetVerticalPos(); - msgModel = msg.msgModel; - msgModel.starty = bounds.getVerticalPos(); - msgModel.sequenceIndex = sequenceIndex; - msgModel.sequenceVisible = diagObj.db.showSequenceNumbers(); - const lineStartY = boundMessage(diagram, msgModel); - messagesToDraw.push({ messageModel: msgModel, lineStartY: lineStartY }); - bounds.models.addMessage(msgModel); - } catch (e) { - log.error('error while drawing message', e); - } - } - - // Increment sequence counter if msg.type is a line (and not another event like activation or note, etc) - if ( - [ - diagObj.db.LINETYPE.SOLID_OPEN, - diagObj.db.LINETYPE.DOTTED_OPEN, - diagObj.db.LINETYPE.SOLID, - diagObj.db.LINETYPE.DOTTED, - diagObj.db.LINETYPE.SOLID_CROSS, - diagObj.db.LINETYPE.DOTTED_CROSS, - diagObj.db.LINETYPE.SOLID_POINT, - diagObj.db.LINETYPE.DOTTED_POINT, - ].includes(msg.type) - ) { - sequenceIndex = sequenceIndex + sequenceIndexStep; - } - }); - - messagesToDraw.forEach((e) => drawMessage(diagram, e.messageModel, e.lineStartY, diagObj)); - - if (conf.mirrorActors) { - // Draw actors below diagram - bounds.bumpVerticalPos(conf.boxMargin * 2); - drawActors(diagram, actors, actorKeys, bounds.getVerticalPos(), conf, messages, true); - bounds.bumpVerticalPos(conf.boxMargin); - fixLifeLineHeights(diagram, bounds.getVerticalPos()); - } - - bounds.models.boxes.forEach(function (box) { - box.height = bounds.getVerticalPos() - box.y; - bounds.insert(box.x, box.y, box.x + box.width, box.height); - box.startx = box.x; - box.starty = box.y; - box.stopx = box.startx + box.width; - box.stopy = box.starty + box.height; - box.stroke = 'rgb(0,0,0, 0.5)'; - svgDraw.drawBox(diagram, box, conf); - }); - - if (hasBoxes) { - bounds.bumpVerticalPos(conf.boxMargin); - } - - // only draw popups for the top row of actors. - const requiredBoxSize = drawActorsPopup(diagram, actors, actorKeys, doc); - - const { bounds: box } = bounds.getBounds(); - - // Adjust line height of actor lines now that the height of the diagram is known - log.debug('For line height fix Querying: #' + id + ' .actor-line'); - const actorLines = selectAll('#' + id + ' .actor-line'); - actorLines.attr('y2', box.stopy); - - // Make sure the height of the diagram supports long menus. - let boxHeight = box.stopy - box.starty; - if (boxHeight < requiredBoxSize.maxHeight) { - boxHeight = requiredBoxSize.maxHeight; - } - - let height = boxHeight + 2 * conf.diagramMarginY; - if (conf.mirrorActors) { - height = height - conf.boxMargin + conf.bottomMarginAdj; - } - - // Make sure the width of the diagram supports wide menus. - let boxWidth = box.stopx - box.startx; - if (boxWidth < requiredBoxSize.maxWidth) { - boxWidth = requiredBoxSize.maxWidth; - } - const width = boxWidth + 2 * conf.diagramMarginX; - - if (title) { - diagram - .append('text') - .text(title) - .attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX) - .attr('y', -25); - } - - configureSvgSize(diagram, height, width, conf.useMaxWidth); - - const extraVertForTitle = title ? 40 : 0; - diagram.attr( - 'viewBox', - box.startx - - conf.diagramMarginX + - ' -' + - (conf.diagramMarginY + extraVertForTitle) + - ' ' + - width + - ' ' + - (height + extraVertForTitle) - ); - - log.debug(`models:`, bounds.models); -}; - -/** - * Retrieves the max message width of each actor, supports signals (messages, loops) and notes. - * - * It will enumerate each given message, and will determine its text width, in relation to the actor - * it originates from, and destined to. - * - * @param actors - The actors map - * @param messages - A list of message objects to iterate - * @param diagObj - The diagram object. - * @returns The max message width of each actor. - */ -function getMaxMessageWidthPerActor( - actors: { [id: string]: any }, - messages: any[], - diagObj: Diagram -): { [id: string]: number } { - const maxMessageWidthPerActor = {}; - - messages.forEach(function (msg) { - if (actors[msg.to] && actors[msg.from]) { - const actor = actors[msg.to]; - - // If this is the first actor, and the message is left of it, no need to calculate the margin - if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) { - return; - } - - // If this is the last actor, and the message is right of it, no need to calculate the margin - if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) { - return; - } - - const isNote = msg.placement !== undefined; - const isMessage = !isNote; - - const textFont = isNote ? noteFont(conf) : messageFont(conf); - const wrappedMessage = msg.wrap - ? utils.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont) - : msg.message; - const messageDimensions = utils.calculateTextDimensions(wrappedMessage, textFont); - const messageWidth = messageDimensions.width + 2 * conf.wrapPadding; - - /* - * The following scenarios should be supported: - * - * - There's a message (non-note) between fromActor and toActor - * - If fromActor is on the right and toActor is on the left, we should - * define the toActor's margin - * - If fromActor is on the left and toActor is on the right, we should - * define the fromActor's margin - * - There's a note, in which case fromActor == toActor - * - If the note is to the left of the actor, we should define the previous actor - * margin - * - If the note is on the actor, we should define both the previous and next actor - * margins, each being the half of the note size - * - If the note is on the right of the actor, we should define the current actor - * margin - */ - if (isMessage && msg.from === actor.nextActor) { - maxMessageWidthPerActor[msg.to] = common.getMax( - maxMessageWidthPerActor[msg.to] || 0, - messageWidth - ); - } else if (isMessage && msg.from === actor.prevActor) { - maxMessageWidthPerActor[msg.from] = common.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth - ); - } else if (isMessage && msg.from === msg.to) { - maxMessageWidthPerActor[msg.from] = common.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth / 2 - ); - - maxMessageWidthPerActor[msg.to] = common.getMax( - maxMessageWidthPerActor[msg.to] || 0, - messageWidth / 2 - ); - } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { - maxMessageWidthPerActor[msg.from] = common.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth - ); - } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { - maxMessageWidthPerActor[actor.prevActor] = common.getMax( - maxMessageWidthPerActor[actor.prevActor] || 0, - messageWidth - ); - } else if (msg.placement === diagObj.db.PLACEMENT.OVER) { - if (actor.prevActor) { - maxMessageWidthPerActor[actor.prevActor] = common.getMax( - maxMessageWidthPerActor[actor.prevActor] || 0, - messageWidth / 2 - ); - } - - if (actor.nextActor) { - maxMessageWidthPerActor[msg.from] = common.getMax( - maxMessageWidthPerActor[msg.from] || 0, - messageWidth / 2 - ); - } - } - } - }); - - log.debug('maxMessageWidthPerActor:', maxMessageWidthPerActor); - return maxMessageWidthPerActor; + return ''; } -const getRequiredPopupWidth = function (actor) { - let requiredPopupWidth = 0; - const textFont = actorFont(conf); - for (const key in actor.links) { - const labelDimensions = utils.calculateTextDimensions(key, textFont); - const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin; - if (requiredPopupWidth < labelWidth) { - requiredPopupWidth = labelWidth; - } - } - - return requiredPopupWidth; -}; - -/** - * This will calculate the optimal margin for each given actor, - * for a given actor → messageWidth map. - * - * An actor's margin is determined by the width of the actor, the width of the largest message that - * originates from it, and the configured conf.actorMargin. - * - * @param actors - The actors map to calculate margins for - * @param actorToMessageWidth - A map of actor key → max message width it holds - * @param boxes - The boxes around the actors if any - */ -function calculateActorMargins( - actors: { [id: string]: any }, - actorToMessageWidth: ReturnType, - boxes -) { - let maxHeight = 0; - Object.keys(actors).forEach((prop) => { - const actor = actors[prop]; - if (actor.wrap) { - actor.description = utils.wrapLabel( - actor.description, - conf.width - 2 * conf.wrapPadding, - actorFont(conf) - ); - } - const actDims = utils.calculateTextDimensions(actor.description, actorFont(conf)); - actor.width = actor.wrap - ? conf.width - : common.getMax(conf.width, actDims.width + 2 * conf.wrapPadding); - - actor.height = actor.wrap ? common.getMax(actDims.height, conf.height) : conf.height; - maxHeight = common.getMax(maxHeight, actor.height); - }); - - for (const actorKey in actorToMessageWidth) { - const actor = actors[actorKey]; - - if (!actor) { - continue; - } - - const nextActor = actors[actor.nextActor]; - - // No need to space out an actor that doesn't have a next link - if (!nextActor) { - const messageWidth = actorToMessageWidth[actorKey]; - const actorWidth = messageWidth + conf.actorMargin - actor.width / 2; - actor.margin = common.getMax(actorWidth, conf.actorMargin); - continue; - } - - const messageWidth = actorToMessageWidth[actorKey]; - const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2; - - actor.margin = common.getMax(actorWidth, conf.actorMargin); - } - - let maxBoxHeight = 0; - boxes.forEach((box) => { - const textFont = messageFont(conf); - let totalWidth = box.actorKeys.reduce((total, aKey) => { - return (total += actors[aKey].width + (actors[aKey].margin || 0)); - }, 0); - - totalWidth -= 2 * conf.boxTextMargin; - if (box.wrap) { - box.name = utils.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont); - } - - const boxMsgDimensions = utils.calculateTextDimensions(box.name, textFont); - maxBoxHeight = common.getMax(boxMsgDimensions.height, maxBoxHeight); - const minWidth = common.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding); - box.margin = conf.boxTextMargin; - if (totalWidth < minWidth) { - const missing = (minWidth - totalWidth) / 2; - box.margin += missing; - } - }); - boxes.forEach((box) => (box.textMaxHeight = maxBoxHeight)); - - return common.getMax(maxHeight, conf.height); -} - -const buildNoteModel = function (msg, actors, diagObj) { - const startx = actors[msg.from].x; - const stopx = actors[msg.to].x; - const shouldWrap = msg.wrap && msg.message; - - let textDimensions = utils.calculateTextDimensions( - shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message, - noteFont(conf) - ); - const noteModel = { - width: shouldWrap - ? conf.width - : common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin), - height: 0, - startx: actors[msg.from].x, - stopx: 0, - starty: 0, - stopy: 0, - message: msg.message, - }; - if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) { - noteModel.width = shouldWrap - ? common.getMax(conf.width, textDimensions.width) - : common.getMax( - actors[msg.from].width / 2 + actors[msg.to].width / 2, - textDimensions.width + 2 * conf.noteMargin - ); - noteModel.startx = startx + (actors[msg.from].width + conf.actorMargin) / 2; - } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) { - noteModel.width = shouldWrap - ? common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin) - : common.getMax( - actors[msg.from].width / 2 + actors[msg.to].width / 2, - textDimensions.width + 2 * conf.noteMargin - ); - noteModel.startx = startx - noteModel.width + (actors[msg.from].width - conf.actorMargin) / 2; - } else if (msg.to === msg.from) { - textDimensions = utils.calculateTextDimensions( - shouldWrap - ? utils.wrapLabel( - msg.message, - common.getMax(conf.width, actors[msg.from].width), - noteFont(conf) - ) - : msg.message, - noteFont(conf) - ); - noteModel.width = shouldWrap - ? common.getMax(conf.width, actors[msg.from].width) - : common.getMax( - actors[msg.from].width, - conf.width, - textDimensions.width + 2 * conf.noteMargin - ); - noteModel.startx = startx + (actors[msg.from].width - noteModel.width) / 2; - } else { - noteModel.width = - Math.abs(startx + actors[msg.from].width / 2 - (stopx + actors[msg.to].width / 2)) + - conf.actorMargin; - noteModel.startx = - startx < stopx - ? startx + actors[msg.from].width / 2 - conf.actorMargin / 2 - : stopx + actors[msg.to].width / 2 - conf.actorMargin / 2; - } - if (shouldWrap) { - noteModel.message = utils.wrapLabel( - msg.message, - noteModel.width - 2 * conf.wrapPadding, - noteFont(conf) - ); - } - log.debug( - `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]` - ); - return noteModel; -}; - -const buildMessageModel = function (msg, actors, diagObj) { - let process = false; - if ( - [ - diagObj.db.LINETYPE.SOLID_OPEN, - diagObj.db.LINETYPE.DOTTED_OPEN, - diagObj.db.LINETYPE.SOLID, - diagObj.db.LINETYPE.DOTTED, - diagObj.db.LINETYPE.SOLID_CROSS, - diagObj.db.LINETYPE.DOTTED_CROSS, - diagObj.db.LINETYPE.SOLID_POINT, - diagObj.db.LINETYPE.DOTTED_POINT, - ].includes(msg.type) - ) { - process = true; - } - if (!process) { - return {}; - } - const fromBounds = activationBounds(msg.from, actors); - const toBounds = activationBounds(msg.to, actors); - const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0; - const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1; - const allBounds = [...fromBounds, ...toBounds]; - const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]); - if (msg.wrap && msg.message) { - msg.message = utils.wrapLabel( - msg.message, - common.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width), - messageFont(conf) - ); - } - const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf)); - - return { - width: common.getMax( - msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, - boundedWidth + 2 * conf.wrapPadding, - conf.width - ), - height: 0, - startx: fromBounds[fromIdx], - stopx: toBounds[toIdx], - starty: 0, - stopy: 0, - message: msg.message, - type: msg.type, - wrap: msg.wrap, - fromBounds: Math.min.apply(null, allBounds), - toBounds: Math.max.apply(null, allBounds), - }; -}; - -const calculateLoopBounds = function (messages, actors, _maxWidthPerActor, diagObj) { - const loops = {}; - const stack = []; - let current, noteModel, msgModel; - - messages.forEach(function (msg) { - msg.id = utils.random({ length: 10 }); - switch (msg.type) { - case diagObj.db.LINETYPE.LOOP_START: - case diagObj.db.LINETYPE.ALT_START: - case diagObj.db.LINETYPE.OPT_START: - case diagObj.db.LINETYPE.PAR_START: - case diagObj.db.LINETYPE.PAR_OVER_START: - case diagObj.db.LINETYPE.CRITICAL_START: - case diagObj.db.LINETYPE.BREAK_START: - stack.push({ - id: msg.id, - msg: msg.message, - from: Number.MAX_SAFE_INTEGER, - to: Number.MIN_SAFE_INTEGER, - width: 0, - }); - break; - case diagObj.db.LINETYPE.ALT_ELSE: - case diagObj.db.LINETYPE.PAR_AND: - case diagObj.db.LINETYPE.CRITICAL_OPTION: - if (msg.message) { - current = stack.pop(); - loops[current.id] = current; - loops[msg.id] = current; - stack.push(current); - } - break; - case diagObj.db.LINETYPE.LOOP_END: - case diagObj.db.LINETYPE.ALT_END: - case diagObj.db.LINETYPE.OPT_END: - case diagObj.db.LINETYPE.PAR_END: - case diagObj.db.LINETYPE.CRITICAL_END: - case diagObj.db.LINETYPE.BREAK_END: - current = stack.pop(); - loops[current.id] = current; - break; - case diagObj.db.LINETYPE.ACTIVE_START: - { - const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor]; - const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length; - const x = - actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2; - const toAdd = { - startx: x, - stopx: x + conf.activationWidth, - actor: msg.from.actor, - enabled: true, - }; - bounds.activations.push(toAdd); - } - break; - case diagObj.db.LINETYPE.ACTIVE_END: - { - const lastActorActivationIdx = bounds.activations - .map((a) => a.actor) - .lastIndexOf(msg.from.actor); - delete bounds.activations.splice(lastActorActivationIdx, 1)[0]; - } - break; - } - const isNote = msg.placement !== undefined; - if (isNote) { - noteModel = buildNoteModel(msg, actors, diagObj); - msg.noteModel = noteModel; - stack.forEach((stk) => { - current = stk; - current.from = common.getMin(current.from, noteModel.startx); - current.to = common.getMax(current.to, noteModel.startx + noteModel.width); - current.width = - common.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth; - }); - } else { - msgModel = buildMessageModel(msg, actors, diagObj); - msg.msgModel = msgModel; - if (msgModel.startx && msgModel.stopx && stack.length > 0) { - stack.forEach((stk) => { - current = stk; - if (msgModel.startx === msgModel.stopx) { - const from = actors[msg.from]; - const to = actors[msg.to]; - current.from = common.getMin( - from.x - msgModel.width / 2, - from.x - from.width / 2, - current.from - ); - current.to = common.getMax( - to.x + msgModel.width / 2, - to.x + from.width / 2, - current.to - ); - current.width = - common.getMax(current.width, Math.abs(current.to - current.from)) - - conf.labelBoxWidth; - } else { - current.from = common.getMin(msgModel.startx, current.from); - current.to = common.getMax(msgModel.stopx, current.to); - current.width = common.getMax(current.width, msgModel.width) - conf.labelBoxWidth; - } - }); - } - } - }); - bounds.activations = []; - log.debug('Loop type widths:', loops); - return loops; -}; - export default { - bounds, - drawActors, - drawActorsPopup, - setConf, draw, }; From fe3dd5a531f1489bfc9b0823fe26711a8d69b88d Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 050/595] Updated dockerfile --- docker-compose.yml | 2 ++ run | 33 ++++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2762f3b99f..cdf21c936e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,3 +7,5 @@ services: working_dir: /mermaid volumes: - ./:/mermaid + ports: + - 9000:9000 diff --git a/run b/run index 6afe76eeed..4da4093ee4 100755 --- a/run +++ b/run @@ -1,8 +1,12 @@ #!/bin/bash RUN="docker-compose run --rm" +# UP="docker-compose up" + +name=$(basename $0) command=$1 args=${@:2} + case $command in sh) @@ -17,24 +21,43 @@ test) $RUN mermaid sh -c "npx pnpm test" ;; +e2e) +$RUN mermaid sh -c "npx pnpm e2e" +;; + lint) $RUN mermaid sh -c "npx pnpm -w run lint:fix" ;; +dev) +$RUN --service-ports mermaid sh -c "npx pnpm run dev" +# $UP --rm mermaid sh -c "npx pnpm run dev" +;; + help) +usage=$( cat < Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 051/595] Some fixes to docker and demos --- demos/sankey.html | 43 +++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 5 +++++ run | 4 ++-- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 demos/sankey.html diff --git a/demos/sankey.html b/demos/sankey.html new file mode 100644 index 0000000000..57f3a8af80 --- /dev/null +++ b/demos/sankey.html @@ -0,0 +1,43 @@ + + + + + + States Mermaid Quick Test Page + + + + +

Sankey diagram demos

+

Simple flow

+
+      stateDiagram-v2
+      direction LR
+      State1: A state with a note
+      note right of State1
+        Important information!
You can write notes.
And\nthey\ncan\nbe\nmulti-\nline. + end note + State1 --> State2 + note left of State2 : Notes can be to the left of a state\n(like this one). + note right of State2 : Notes can be to the right of a state\n(like this one). +
+ + + diff --git a/docker-compose.yml b/docker-compose.yml index cdf21c936e..2bd00a2772 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,5 +7,10 @@ services: working_dir: /mermaid volumes: - ./:/mermaid + - root_cache:/root/.cache + - root_local:/root/.local ports: - 9000:9000 +volumes: + root_cache: + root_local: \ No newline at end of file diff --git a/run b/run index 4da4093ee4..7dbdf918a5 100755 --- a/run +++ b/run @@ -13,7 +13,7 @@ sh) $RUN mermaid sh $args ;; -install) +i | install) $RUN mermaid sh -c "npx pnpm install" ;; @@ -40,7 +40,7 @@ cat < Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 052/595] Started sankey syntax --- .../src/diagrams/sankey/parser/sankey.jison | 342 +----------------- .../src/diagrams/sankey/parser/sankey.spec.js | 52 +-- 2 files changed, 40 insertions(+), 354 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index 074cd5975e..d77b0b2416 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -1,350 +1,30 @@ -/** mermaid - * https://mermaidjs.github.io/ - * (c) 2014-2015 Knut Sveidqvist - * MIT license. - * - * Based on js sequence diagrams jison grammr - * https://bramp.github.io/js-sequence-diagrams/ - * (c) 2012-2013 Andrew Brampton (bramp.net) - * Simplified BSD license. - */ +/** mermaid */ %lex %options case-insensitive -// Special states for recognizing aliases -// A special state for grabbing text up to the first comment/newline -%x ID ALIAS LINE - -// Directive states -%x open_directive type_directive arg_directive -%x acc_title -%x acc_descr -%x acc_descr_multiline %% +"sankey" return 'SANKEY' +"->" return 'ARROW' +\w+ return 'NODE' +[\n]+ return 'NEWLINE'; +\s+ /* skip all whitespace */ -\%\%\{ { this.begin('open_directive'); return 'open_directive'; } -((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } -":" { this.popState(); this.begin('arg_directive'); return ':'; } -\}\%\% { this.popState(); this.popState(); return 'close_directive'; } -((?:(?!\}\%\%).|\n)*) return 'arg_directive'; -[\n]+ return 'NEWLINE'; -\s+ /* skip all whitespace */ -((?!\n)\s)+ /* skip same-line whitespace */ -\#[^\n]* /* skip comments */ -\%%(?!\{)[^\n]* /* skip comments */ -[^\}]\%\%[^\n]* /* skip comments */ -[0-9]+(?=[ \n]+) return 'NUM'; -"box" { this.begin('LINE'); return 'box'; } -"participant" { this.begin('ID'); return 'participant'; } -"actor" { this.begin('ID'); return 'participant_actor'; } -[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; } -"as" { this.popState(); this.popState(); this.begin('LINE'); return 'AS'; } -(?:) { this.popState(); this.popState(); return 'NEWLINE'; } -"loop" { this.begin('LINE'); return 'loop'; } -"rect" { this.begin('LINE'); return 'rect'; } -"opt" { this.begin('LINE'); return 'opt'; } -"alt" { this.begin('LINE'); return 'alt'; } -"else" { this.begin('LINE'); return 'else'; } -"par" { this.begin('LINE'); return 'par'; } -"par_over" { this.begin('LINE'); return 'par_over'; } -"and" { this.begin('LINE'); return 'and'; } -"critical" { this.begin('LINE'); return 'critical'; } -"option" { this.begin('LINE'); return 'option'; } -"break" { this.begin('LINE'); return 'break'; } -(?:[:]?(?:no)?wrap:)?[^#\n;]* { this.popState(); return 'restOfLine'; } -"end" return 'end'; -"left of" return 'left_of'; -"right of" return 'right_of'; -"links" return 'links'; -"link" return 'link'; -"properties" return 'properties'; -"details" return 'details'; -"over" return 'over'; -"note" return 'note'; -"activate" { this.begin('ID'); return 'activate'; } -"deactivate" { this.begin('ID'); return 'deactivate'; } -"title"\s[^#\n;]+ return 'title'; -"title:"\s[^#\n;]+ return 'legacy_title'; -accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } -(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } -accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } -(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } -accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} -[\}] { this.popState(); } -[^\}]* return "acc_descr_multiline_value"; -"sequenceDiagram" return 'SD'; -"autonumber" return 'autonumber'; -"off" return 'off'; -"," return ','; -";" return 'NEWLINE'; -[^\+\->:\n,;]+((?!(\-x|\-\-x|\-\)|\-\-\)))[\-]*[^\+\->:\n,;]+)* { yytext = yytext.trim(); return 'ACTOR'; } -"->>" return 'SOLID_ARROW'; -"-->>" return 'DOTTED_ARROW'; -"->" return 'SOLID_OPEN_ARROW'; -"-->" return 'DOTTED_OPEN_ARROW'; -\-[x] return 'SOLID_CROSS'; -\-\-[x] return 'DOTTED_CROSS'; -\-[\)] return 'SOLID_POINT'; -\-\-[\)] return 'DOTTED_POINT'; -":"(?:(?:no)?wrap:)?[^#\n;]+ return 'TXT'; -"+" return '+'; -"-" return '-'; -<> return 'NEWLINE'; -. return 'INVALID'; +// TODO: check if jison will return 2 separate tokens (for nodes) while ignoring whitespace /lex -%left '^' - %start start %% /* language grammar */ start : SPACE start - | NEWLINE start - | directive start - | SD document { yy.apply($2);return $2; } + | SANKEY document ; document - : /* empty */ { $$ = [] } - | document line {$1.push($2);$$ = $1} - ; - -line - : SPACE statement { $$ = $2 } - | statement { $$ = $1 } - | NEWLINE { $$=[]; } - ; - -box_section - : /* empty */ { $$ = [] } - | box_section box_line {$1.push($2);$$ = $1} - ; - -box_line - : SPACE participant_statement { $$ = $2 } - | participant_statement { $$ = $1 } - | NEWLINE { $$=[]; } - ; - - -directive - : openDirective typeDirective closeDirective 'NEWLINE' - | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE' - ; - -statement - : participant_statement - | 'box' restOfLine box_section end - { - $3.unshift({type: 'boxStart', boxData:yy.parseBoxData($2) }); - $3.push({type: 'boxEnd', boxText:$2}); - $$=$3;} - | signal 'NEWLINE' - | autonumber NUM NUM 'NEWLINE' { $$= {type:'sequenceIndex',sequenceIndex: Number($2), sequenceIndexStep:Number($3), sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};} - | autonumber NUM 'NEWLINE' { $$ = {type:'sequenceIndex',sequenceIndex: Number($2), sequenceIndexStep:1, sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};} - | autonumber off 'NEWLINE' { $$ = {type:'sequenceIndex', sequenceVisible:false, signalType:yy.LINETYPE.AUTONUMBER};} - | autonumber 'NEWLINE' {$$ = {type:'sequenceIndex', sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER}; } - | 'activate' actor 'NEWLINE' {$$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $2};} - | 'deactivate' actor 'NEWLINE' {$$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $2};} - | note_statement 'NEWLINE' - | links_statement 'NEWLINE' - | link_statement 'NEWLINE' - | properties_statement 'NEWLINE' - | details_statement 'NEWLINE' - | title {yy.setDiagramTitle($1.substring(6));$$=$1.substring(6);} - | legacy_title {yy.setDiagramTitle($1.substring(7));$$=$1.substring(7);} - | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } - | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } - | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } - | 'loop' restOfLine document end - { - $3.unshift({type: 'loopStart', loopText:yy.parseMessage($2), signalType: yy.LINETYPE.LOOP_START}); - $3.push({type: 'loopEnd', loopText:$2, signalType: yy.LINETYPE.LOOP_END}); - $$=$3;} - | 'rect' restOfLine document end - { - $3.unshift({type: 'rectStart', color:yy.parseMessage($2), signalType: yy.LINETYPE.RECT_START }); - $3.push({type: 'rectEnd', color:yy.parseMessage($2), signalType: yy.LINETYPE.RECT_END }); - $$=$3;} - | opt restOfLine document end - { - $3.unshift({type: 'optStart', optText:yy.parseMessage($2), signalType: yy.LINETYPE.OPT_START}); - $3.push({type: 'optEnd', optText:yy.parseMessage($2), signalType: yy.LINETYPE.OPT_END}); - $$=$3;} - | alt restOfLine else_sections end - { - // Alt start - $3.unshift({type: 'altStart', altText:yy.parseMessage($2), signalType: yy.LINETYPE.ALT_START}); - // Content in alt is already in $3 - // End - $3.push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END}); - $$=$3;} - | par restOfLine par_sections end - { - // Parallel start - $3.unshift({type: 'parStart', parText:yy.parseMessage($2), signalType: yy.LINETYPE.PAR_START}); - // Content in par is already in $3 - // End - $3.push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END}); - $$=$3;} - | par_over restOfLine par_sections end - { - // Parallel (overlapped) start - $3.unshift({type: 'parStart', parText:yy.parseMessage($2), signalType: yy.LINETYPE.PAR_OVER_START}); - // Content in par is already in $3 - // End - $3.push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END}); - $$=$3;} - | critical restOfLine option_sections end - { - // critical start - $3.unshift({type: 'criticalStart', criticalText:yy.parseMessage($2), signalType: yy.LINETYPE.CRITICAL_START}); - // Content in critical is already in $3 - // critical end - $3.push({type: 'criticalEnd', signalType: yy.LINETYPE.CRITICAL_END}); - $$=$3;} - | break restOfLine document end - { - $3.unshift({type: 'breakStart', breakText:yy.parseMessage($2), signalType: yy.LINETYPE.BREAK_START}); - $3.push({type: 'breakEnd', optText:yy.parseMessage($2), signalType: yy.LINETYPE.BREAK_END}); - $$=$3;} - | directive - ; - -option_sections - : document - | document option restOfLine option_sections - { $$ = $1.concat([{type: 'option', optionText:yy.parseMessage($3), signalType: yy.LINETYPE.CRITICAL_OPTION}, $4]); } - ; - -par_sections - : document - | document and restOfLine par_sections - { $$ = $1.concat([{type: 'and', parText:yy.parseMessage($3), signalType: yy.LINETYPE.PAR_AND}, $4]); } - ; - -else_sections - : document - | document else restOfLine else_sections - { $$ = $1.concat([{type: 'else', altText:yy.parseMessage($3), signalType: yy.LINETYPE.ALT_ELSE}, $4]); } - ; - -participant_statement - : 'participant' actor 'AS' restOfLine 'NEWLINE' {$2.type='addParticipant';$2.description=yy.parseMessage($4); $$=$2;} - | 'participant' actor 'NEWLINE' {$2.type='addParticipant';$$=$2;} - | 'participant_actor' actor 'AS' restOfLine 'NEWLINE' {$2.type='addActor';$2.description=yy.parseMessage($4); $$=$2;} - | 'participant_actor' actor 'NEWLINE' {$2.type='addActor'; $$=$2;} - ; - -note_statement - : 'note' placement actor text2 - { - $$ = [$3, {type:'addNote', placement:$2, actor:$3.actor, text:$4}];} - | 'note' 'over' actor_pair text2 - { - // Coerce actor_pair into a [to, from, ...] array - $2 = [].concat($3, $3).slice(0, 2); - $2[0] = $2[0].actor; - $2[1] = $2[1].actor; - $$ = [$3, {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$2.slice(0, 2), text:$4}];} - ; - -links_statement - : 'links' actor text2 - { - $$ = [$2, {type:'addLinks', actor:$2.actor, text:$3}]; - } + : node document + | /* empty */ ; - -link_statement - : 'link' actor text2 - { - $$ = [$2, {type:'addALink', actor:$2.actor, text:$3}]; - } - ; - -properties_statement - : 'properties' actor text2 - { - $$ = [$2, {type:'addProperties', actor:$2.actor, text:$3}]; - } - ; - -details_statement - : 'details' actor text2 - { - $$ = [$2, {type:'addDetails', actor:$2.actor, text:$3}]; - } - ; - -spaceList - : SPACE spaceList - | SPACE - ; -actor_pair - : actor ',' actor { $$ = [$1, $3]; } - | actor { $$ = $1; } - ; - -placement - : 'left_of' { $$ = yy.PLACEMENT.LEFTOF; } - | 'right_of' { $$ = yy.PLACEMENT.RIGHTOF; } - ; - -signal - : actor signaltype '+' actor text2 - { $$ = [$1,$4,{type: 'addMessage', from:$1.actor, to:$4.actor, signalType:$2, msg:$5}, - {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $4} - ]} - | actor signaltype '-' actor text2 - { $$ = [$1,$4,{type: 'addMessage', from:$1.actor, to:$4.actor, signalType:$2, msg:$5}, - {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $1} - ]} - | actor signaltype actor text2 - { $$ = [$1,$3,{type: 'addMessage', from:$1.actor, to:$3.actor, signalType:$2, msg:$4}]} - ; - -// actor -// : actor_participant -// | actor_actor -// ; - -actor: ACTOR {$$={ type: 'addParticipant', actor:$1}}; -// actor_actor: ACTOR {$$={type: 'addActor', actor:$1}}; - -signaltype - : SOLID_OPEN_ARROW { $$ = yy.LINETYPE.SOLID_OPEN; } - | DOTTED_OPEN_ARROW { $$ = yy.LINETYPE.DOTTED_OPEN; } - | SOLID_ARROW { $$ = yy.LINETYPE.SOLID; } - | DOTTED_ARROW { $$ = yy.LINETYPE.DOTTED; } - | SOLID_CROSS { $$ = yy.LINETYPE.SOLID_CROSS; } - | DOTTED_CROSS { $$ = yy.LINETYPE.DOTTED_CROSS; } - | SOLID_POINT { $$ = yy.LINETYPE.SOLID_POINT; } - | DOTTED_POINT { $$ = yy.LINETYPE.DOTTED_POINT; } - ; - -text2 - : TXT {$$ = yy.parseMessage($1.trim().substring(1)) } - ; - -openDirective - : open_directive { yy.parseDirective('%%{', 'open_directive'); } - ; - -typeDirective - : type_directive { yy.parseDirective($1, 'type_directive'); } - ; - -argDirective - : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } - ; - -closeDirective - : close_directive { yy.parseDirective('}%%', 'close_directive', 'sequence'); } - ; - -%% + \ No newline at end of file diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index 995c924784..5ef6f80fe1 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -11,34 +11,40 @@ describe('Sankey diagram', function () { diagram.parser.yy.clear(); }); - it('one simple flow', function () { - const str = ` - sankey - a -> 30 -> b - `; - + it('recognized its type', function() { + const str=`sankey`; + parser.parse(str); }); - it('multiple flows', function () { - const str = ` - sankey - a -> 30 -> b - c -> 30 -> d - c -> 40 -> e - `; + // it('one simple flow', function () { + // const str = ` + // sankey + // a -> 30 -> b + // `; - parser.parse(str); - }); + // parser.parse(str); + // }); - it('multiple flows', function () { - const str = ` - sankey - a -> 30 -> b - c -> 30 -> d - `; + // it('multiple flows', function () { + // const str = ` + // sankey + // a -> 30 -> b + // c -> 30 -> d + // c -> 40 -> e + // `; - parser.parse(str); - }); + // parser.parse(str); + // }); + + // it('multiple flows', function () { + // const str = ` + // sankey + // a -> 30 -> b + // c -> 30 -> d + // `; + + // parser.parse(str); + // }); }); }); From 567686e140a4a2d4f35d5b5edf3df52486be29e4 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 053/595] Implementing new syntax --- .../diagrams/sankey/parser/desired_syntax.md | 6 +- .../src/diagrams/sankey/parser/sankey.jison | 59 ++++++++++-- .../src/diagrams/sankey/parser/sankey.spec.js | 90 ++++++++++++++++--- run | 10 ++- 4 files changed, 139 insertions(+), 26 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md b/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md index d0cbd4e8a1..1b5cb81d23 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md +++ b/packages/mermaid/src/diagrams/sankey/parser/desired_syntax.md @@ -100,9 +100,9 @@ a -> { 30 40 } -> b -> { - 20 -> d - 50 -> e -} + 20 -> d -> 11 + 50 -> e -> 11 +} -> f -> 30 ``` **Probably ambiguous!** diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index d77b0b2416..e0b4252caf 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -2,13 +2,21 @@ %lex %options case-insensitive +%s group +// %x attributes %% +"{" { this.pushState('group'); return 'OPEN_GROUP'; } +"}" { this.popState('group'); return 'CLOSE_GROUP'; } "sankey" return 'SANKEY' -"->" return 'ARROW' -\w+ return 'NODE' -[\n]+ return 'NEWLINE'; -\s+ /* skip all whitespace */ +\d+ return 'VALUE' +"->" return 'ARROW' +\w+ return 'NODE' +"[" {/*this.pushState('attributes');*/ return 'OPEN_ATTRIBUTES'; } +"]" { /* this.popState(); */ return 'CLOSE_ATTRIBUTES'; } +(<>|[\n;])+ return 'EOS' // end of statement +\s+ // skip all whitespace +// [\n]+ return 'NEWLINE'; // TODO: check if jison will return 2 separate tokens (for nodes) while ignoring whitespace @@ -16,15 +24,50 @@ %start start -%% /* language grammar */ +%% // language grammar start - : SPACE start + : EOS SANKEY document | SANKEY document ; document - : node document + : line document + | // empty + ; + +line + // : node_with_attributes // one node with attributes + : flow EOS + | node_with_attributes EOS + | EOS + ; + + +node_with_attributes + : NODE + | NODE attributes_group + ; + +attributes_group + : OPEN_ATTRIBUTES attributes CLOSE_ATTRIBUTES + ; + +attributes: + | // TODO + ; + +flow + : NODE ARROW value_or_values_group ARROW flow + | NODE + ; + +value_or_values_group + : OPEN_GROUP values CLOSE_GROUP + | VALUE + ; + +values + : values VALUE | /* empty */ ; - \ No newline at end of file diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index 5ef6f80fe1..d96663f31b 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -1,6 +1,7 @@ import diagram from './sankey.jison'; import { parser } from './sankey.jison'; import db from '../sankeyDB.js'; +// import { fail } from 'assert'; describe('Sankey diagram', function () { // TODO - these examples should be put into ./parser/stateDiagram.spec.js @@ -11,39 +12,104 @@ describe('Sankey diagram', function () { diagram.parser.yy.clear(); }); - it('recognized its type', function() { + it('recognizes its type', () => { const str=`sankey`; parser.parse(str); }); - // it('one simple flow', function () { + it('recognizes one flow', () => { + const str = ` + sankey + a -> 30 -> b -> 20 -> c + `; + + parser.parse(str); + }); + + it('recognizes multiple flows', () => { + const str = ` + sankey + a -> 30 -> b -> 12 -> e + c -> 30 -> d -> 12 -> e + c -> 40 -> e -> 12 -> e + `; + + parser.parse(str); + }); + + it('recognizes grouped values', () => { + const str = ` + sankey + a -> {30} -> b + `; + + parser.parse(str); + }); + + it('recognizes a separate node with its attributes', () => { + const str = ` + sankey + c[] + `; + + parser.parse(str); + }); + + // it('recognizes intake group', () => { // const str = ` // sankey - // a -> 30 -> b + // a -> { + // 30 -> b + // 40 -> c + // } // `; - + // parser.parse(str); // }); - // it('multiple flows', function () { + // it('recognizes exhaust group', () => { // const str = ` // sankey - // a -> 30 -> b - // c -> 30 -> d - // c -> 40 -> e + // { + // b -> 30 + // c -> 40 + // } -> a // `; - + // parser.parse(str); // }); - // it('multiple flows', function () { + // it('what to do?', () => { // const str = ` // sankey - // a -> 30 -> b - // c -> 30 -> d + // { + // b -> 30 + // c -> 40 + // } -> { + // e + // d + // } // `; + + // parser.parse(str); + // }); + // it('complex', () => { + // const str = ` + // sankey + // { + // a -> 30 + // b -> 40 + // } -> c -> { + // 20 -> e -> 49 + // 20 -> d -> 23 + // } -> k -> 20 -> i -> { + // 10 -> f + // 11 -> j + // } + // `; + // parser.parse(str); // }); }); diff --git a/run b/run index 7dbdf918a5..9b02b07410 100755 --- a/run +++ b/run @@ -14,15 +14,19 @@ $RUN mermaid sh $args ;; i | install) -$RUN mermaid sh -c "npx pnpm install" +$RUN mermaid sh -c "npx pnpm install $args" ;; test) -$RUN mermaid sh -c "npx pnpm test" +$RUN mermaid sh -c "npx pnpm test $args" +;; + +vitest) +$RUN mermaid sh -c "npx pnpm vitest $args" ;; e2e) -$RUN mermaid sh -c "npx pnpm e2e" +$RUN mermaid sh -c "npx pnpm e2e $args" ;; lint) From d2226604e447a2a339abdbb400c403173775c2fb Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 054/595] Recognizing attrubutes --- .../src/diagrams/sankey/parser/sankey.jison | 62 +++++++++---------- .../src/diagrams/sankey/parser/sankey.spec.js | 30 +++++---- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index e0b4252caf..cc262f6729 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -3,20 +3,29 @@ %options case-insensitive %s group -// %x attributes +%x attributes +%x attribute +%x value %% -"{" { this.pushState('group'); return 'OPEN_GROUP'; } -"}" { this.popState('group'); return 'CLOSE_GROUP'; } "sankey" return 'SANKEY' -\d+ return 'VALUE' +\d+ return 'AMOUNT' "->" return 'ARROW' \w+ return 'NODE' -"[" {/*this.pushState('attributes');*/ return 'OPEN_ATTRIBUTES'; } -"]" { /* this.popState(); */ return 'CLOSE_ATTRIBUTES'; } -(<>|[\n;])+ return 'EOS' // end of statement +(?:<>|[\n;])+ { return 'EOS'; } // end of statement is ; \n or end of file \s+ // skip all whitespace -// [\n]+ return 'NEWLINE'; +"{" { this.pushState('group'); return 'OPEN_GROUP'; } +"}" { this.popState('group'); return 'CLOSE_GROUP'; } +"[" { this.pushState('attributes'); return 'OPEN_ATTRIBUTES'; } +"]" { this.popState(); return 'CLOSE_ATTRIBUTES'; } +\w+ { return 'ATTRIBUTE'; } // string followed by = sign is "attrName" +(?=\=s*)[\s\w] {return 'VALUE';} +\= { this.pushState('attribute'); return 'EQUAL'; } +\s+ // skip all whitespace +[\w]+ {this.popState(); return 'VALUE';} +\s+ //skip +\" { this.pushState('value'); return 'OPEN_VALUE'; } +\" { this.popState(); return 'CLOSE_VALUE'; } // TODO: check if jison will return 2 separate tokens (for nodes) while ignoring whitespace @@ -33,41 +42,26 @@ start document : line document - | // empty + | ; line - // : node_with_attributes // one node with attributes : flow EOS | node_with_attributes EOS | EOS ; - -node_with_attributes - : NODE - | NODE attributes_group - ; +node_with_attributes: NODE OPEN_ATTRIBUTES attributes CLOSE_ATTRIBUTES; -attributes_group - : OPEN_ATTRIBUTES attributes CLOSE_ATTRIBUTES - ; +attributes: attribute attributes | ; +attribute: ATTRIBUTE EQUAL VALUE | ATTRIBUTE; -attributes: - | // TODO - ; +// flow +// : NODE ARROW value_or_values_group ARROW flow +// | NODE +// ; -flow - : NODE ARROW value_or_values_group ARROW flow - | NODE - ; +flow: n_chain_a; -value_or_values_group - : OPEN_GROUP values CLOSE_GROUP - | VALUE - ; - -values - : values VALUE - | /* empty */ - ; +n_chain_a: NODE ARROW a_chain_n | NODE; +a_chain_n: AMOUNT ARROW n_chain_a | AMOUNT; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index d96663f31b..8617c4bbcc 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -30,31 +30,37 @@ describe('Sankey diagram', function () { it('recognizes multiple flows', () => { const str = ` sankey - a -> 30 -> b -> 12 -> e - c -> 30 -> d -> 12 -> e - c -> 40 -> e -> 12 -> e + a -> 30 -> b -> 12 -> e; + c -> 30 -> d -> 12 -> e; + c -> 40 -> e -> 12 -> q; `; parser.parse(str); }); - it('recognizes grouped values', () => { + it('recognizes a separate node with its attributes', () => { const str = ` sankey - a -> {30} -> b + a[] + b[attr=1] + c[attr=2] + d[attrWithoutValue] + d[attr = 3] `; parser.parse(str); }); - it('recognizes a separate node with its attributes', () => { - const str = ` - sankey - c[] - `; + // it('recognizes grouped values', () => { + // const str = ` + // sankey + // a -> {30} -> b + // `; - parser.parse(str); - }); + // parser.parse(str); + // }); + + // it('recognizes intake group', () => { // const str = ` From b4b535f9973dd4e7073791a179df5f9d27421697 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 055/595] Recognizing attributes --- .../src/diagrams/sankey/parser/sankey.jison | 46 +++++++++++-------- .../src/diagrams/sankey/parser/sankey.spec.js | 13 ++++-- 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index cc262f6729..3adc6a406e 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -2,30 +2,36 @@ %lex %options case-insensitive +%options easy_keyword_rules + %s group +// when we are inside [] section we are defining attrubutes %x attributes -%x attribute -%x value +// after attr= we are expecting a value without quotes +%x value +// or if we use "" we are expecting a string containing value +%x string %% -"sankey" return 'SANKEY' -\d+ return 'AMOUNT' -"->" return 'ARROW' -\w+ return 'NODE' -(?:<>|[\n;])+ { return 'EOS'; } // end of statement is ; \n or end of file -\s+ // skip all whitespace -"{" { this.pushState('group'); return 'OPEN_GROUP'; } -"}" { this.popState('group'); return 'CLOSE_GROUP'; } -"[" { this.pushState('attributes'); return 'OPEN_ATTRIBUTES'; } -"]" { this.popState(); return 'CLOSE_ATTRIBUTES'; } -\w+ { return 'ATTRIBUTE'; } // string followed by = sign is "attrName" -(?=\=s*)[\s\w] {return 'VALUE';} -\= { this.pushState('attribute'); return 'EQUAL'; } -\s+ // skip all whitespace -[\w]+ {this.popState(); return 'VALUE';} -\s+ //skip -\" { this.pushState('value'); return 'OPEN_VALUE'; } -\" { this.popState(); return 'CLOSE_VALUE'; } +"sankey" { return 'SANKEY'; } +\d+ { return 'AMOUNT'; } +"->" { return 'ARROW'; } +\w+ { return 'NODE'; } +(?:<>|[\n;])+ { return 'EOS'; } // end of statement is ; \n or end of file +\s+ // skip all whitespace +"{" { this.pushState('group'); return 'OPEN_GROUP'; } +"}" { this.popState('group'); return 'CLOSE_GROUP'; } +"[" { this.pushState('attributes'); return 'OPEN_ATTRIBUTES'; } +"]" { this.popState(); return 'CLOSE_ATTRIBUTES'; } +\w+ { return 'ATTRIBUTE'; } +(?=\=s*)[\s\w] { return 'VALUE';} +\= { this.pushState('value'); return 'EQUAL'; } +\s+ // skip all whitespace +[\w]+ { this.popState(); return 'VALUE';} +\s+ //skip +\" { this.pushState('string'); return 'OPEN_STRING'; } +\" { this.popState(); return 'CLOSE_STRING'; } +[\w\s]+(?=\") { return 'STRING'; } // TODO: check if jison will return 2 separate tokens (for nodes) while ignoring whitespace diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index 8617c4bbcc..4cd1befaeb 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -41,11 +41,14 @@ describe('Sankey diagram', function () { it('recognizes a separate node with its attributes', () => { const str = ` sankey - a[] - b[attr=1] - c[attr=2] - d[attrWithoutValue] - d[attr = 3] + node[] + node[attr=1] + node[attr=2] + a -> 30 -> b + node[attrWithoutValue] + node[attr = 3] + node[attr1 = 23413 attr2=1234] + node[x1dfqowie attr1 = 23413 attr2] `; parser.parse(str); From f71769e07ba119c165c9bc2c02ed201f65b243a3 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 056/595] Attributes within strings --- .../src/diagrams/sankey/parser/sankey.jison | 17 ++++---- .../src/diagrams/sankey/parser/sankey.spec.js | 41 ++++++++++++------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index 3adc6a406e..53c4277292 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -20,7 +20,7 @@ (?:<>|[\n;])+ { return 'EOS'; } // end of statement is ; \n or end of file \s+ // skip all whitespace "{" { this.pushState('group'); return 'OPEN_GROUP'; } -"}" { this.popState('group'); return 'CLOSE_GROUP'; } +"}" { this.popState(); return 'CLOSE_GROUP'; } "[" { this.pushState('attributes'); return 'OPEN_ATTRIBUTES'; } "]" { this.popState(); return 'CLOSE_ATTRIBUTES'; } \w+ { return 'ATTRIBUTE'; } @@ -30,8 +30,12 @@ [\w]+ { this.popState(); return 'VALUE';} \s+ //skip \" { this.pushState('string'); return 'OPEN_STRING'; } -\" { this.popState(); return 'CLOSE_STRING'; } -[\w\s]+(?=\") { return 'STRING'; } +(?!\\)\" { + if(this.topState()==='string') this.popState(); + if(this.topState()==='value') this.popState(); + return 'CLOSE_STRING'; +} +([^"\\]|\\\")+ { console.log(this.state); return 'STRING'; } // TODO: check if jison will return 2 separate tokens (for nodes) while ignoring whitespace @@ -60,12 +64,9 @@ line node_with_attributes: NODE OPEN_ATTRIBUTES attributes CLOSE_ATTRIBUTES; attributes: attribute attributes | ; -attribute: ATTRIBUTE EQUAL VALUE | ATTRIBUTE; +attribute: ATTRIBUTE EQUAL value | ATTRIBUTE; -// flow -// : NODE ARROW value_or_values_group ARROW flow -// | NODE -// ; +value: VALUE | OPEN_STRING STRING CLOSE_STRING; flow: n_chain_a; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index 4cd1befaeb..576862fd8e 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -38,22 +38,35 @@ describe('Sankey diagram', function () { parser.parse(str); }); - it('recognizes a separate node with its attributes', () => { - const str = ` - sankey - node[] - node[attr=1] - node[attr=2] - a -> 30 -> b - node[attrWithoutValue] - node[attr = 3] - node[attr1 = 23413 attr2=1234] - node[x1dfqowie attr1 = 23413 attr2] - `; - - parser.parse(str); + describe('while attributes parsing', () => { + it('parses different quotless variations', () => { + const str = ` + sankey + node[] + node[attr=1] + a -> 30 -> b + node[attrWithoutValue] + node[attr = 3] + node[attr1 = 23413 attr2=1234] + node[x1dfqowie attr1 = 23413 attr2] + `; + + parser.parse(str); + }); + + it('parses strings as values', () => { + const str = ` + sankey + node[attr="hello, how are you?"] + node[attr="hello\\""] + `; + + parser.parse(str); + }); }); + + // it('recognizes grouped values', () => { // const str = ` // sankey From 5eae790740fe30599040aac0167629c832e4d4ad Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 057/595] Sankey stream is ending on node only --- .../src/diagrams/sankey/parser/sankey.jison | 24 +++--- .../src/diagrams/sankey/parser/sankey.spec.js | 80 ++----------------- 2 files changed, 20 insertions(+), 84 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index 53c4277292..e15dcf5d03 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -35,9 +35,7 @@ if(this.topState()==='value') this.popState(); return 'CLOSE_STRING'; } -([^"\\]|\\\")+ { console.log(this.state); return 'STRING'; } - -// TODO: check if jison will return 2 separate tokens (for nodes) while ignoring whitespace +([^"\\]|\\\")+ { return 'STRING'; } /lex @@ -55,20 +53,28 @@ document | ; + // : NODE exhaust intake exhaust_chain optional_attributes EOS line - : flow EOS - | node_with_attributes EOS + : stream optional_attributes EOS + | NODE optional_attributes EOS | EOS ; -node_with_attributes: NODE OPEN_ATTRIBUTES attributes CLOSE_ATTRIBUTES; +optional_attributes: OPEN_ATTRIBUTES attributes CLOSE_ATTRIBUTES | ; attributes: attribute attributes | ; attribute: ATTRIBUTE EQUAL value | ATTRIBUTE; value: VALUE | OPEN_STRING STRING CLOSE_STRING; -flow: n_chain_a; +stream: NODE ARROW AMOUNT ARROW tail; +tail: stream | NODE; + +// exhaust_chain: ARROW AMOUNT intake_chain | ; +// intake_chain: ARROW NODE exhaust_chain | ; + +// exhaust: ARROW AMOUNT; +// intake: ARROW NODE; -n_chain_a: NODE ARROW a_chain_n | NODE; -a_chain_n: AMOUNT ARROW n_chain_a | AMOUNT; +// node_chain_amount: NODE ARROW amount_node_chain | NODE; +// amount_node_chain: AMOUNT ARROW node_chain_amount | AMOUNT; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index 576862fd8e..83d87ac71e 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -30,9 +30,9 @@ describe('Sankey diagram', function () { it('recognizes multiple flows', () => { const str = ` sankey - a -> 30 -> b -> 12 -> e; - c -> 30 -> d -> 12 -> e; - c -> 40 -> e -> 12 -> q; + a -> 30 -> b -> 12 -> e + c -> 30 -> d -> 12 -> e + c -> 40 -> e -> 12 -> q `; parser.parse(str); @@ -58,81 +58,11 @@ describe('Sankey diagram', function () { const str = ` sankey node[attr="hello, how are you?"] - node[attr="hello\\""] + node[attr="hello\\"afaasd"] `; parser.parse(str); }); - }); - - - - // it('recognizes grouped values', () => { - // const str = ` - // sankey - // a -> {30} -> b - // `; - - // parser.parse(str); - // }); - - - - // it('recognizes intake group', () => { - // const str = ` - // sankey - // a -> { - // 30 -> b - // 40 -> c - // } - // `; - - // parser.parse(str); - // }); - - // it('recognizes exhaust group', () => { - // const str = ` - // sankey - // { - // b -> 30 - // c -> 40 - // } -> a - // `; - - // parser.parse(str); - // }); - - // it('what to do?', () => { - // const str = ` - // sankey - // { - // b -> 30 - // c -> 40 - // } -> { - // e - // d - // } - // `; - - // parser.parse(str); - // }); - - // it('complex', () => { - // const str = ` - // sankey - // { - // a -> 30 - // b -> 40 - // } -> c -> { - // 20 -> e -> 49 - // 20 -> d -> 23 - // } -> k -> 20 -> i -> { - // 10 -> f - // 11 -> j - // } - // `; - - // parser.parse(str); - // }); + }); }); }); From 40f7105ae4a77d4b6869e1e5d24e2ef164edf2ef Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 058/595] Started renderer development --- demos/index.html | 3 + demos/sankey.html | 14 +-- .../mermaid/src/diagrams/sankey/energy.csv | 69 ++++++++++++ .../src/diagrams/sankey/parser/sankey.jison | 10 +- .../mermaid/src/diagrams/sankey/sankeyDB.js | 69 ------------ .../mermaid/src/diagrams/sankey/sankeyDB.ts | 106 ++++++++++++++++++ .../src/diagrams/sankey/sankeyRenderer.ts | 12 +- 7 files changed, 199 insertions(+), 84 deletions(-) create mode 100644 packages/mermaid/src/diagrams/sankey/energy.csv delete mode 100644 packages/mermaid/src/diagrams/sankey/sankeyDB.js create mode 100644 packages/mermaid/src/diagrams/sankey/sankeyDB.ts diff --git a/demos/index.html b/demos/index.html index 391042182c..24c4fbf3b0 100644 --- a/demos/index.html +++ b/demos/index.html @@ -75,6 +75,9 @@

Timeline

  • ZenUML

  • +
  • +

    Sankey

    +
  • diff --git a/demos/sankey.html b/demos/sankey.html index 57f3a8af80..fa06b37dd3 100644 --- a/demos/sankey.html +++ b/demos/sankey.html @@ -16,15 +16,11 @@

    Sankey diagram demos

    Simple flow

    -      stateDiagram-v2
    -      direction LR
    -      State1: A state with a note
    -      note right of State1
    -        Important information!
    You can write notes.
    And\nthey\ncan\nbe\nmulti-\nline. - end note - State1 --> State2 - note left of State2 : Notes can be to the left of a state\n(like this one). - note right of State2 : Notes can be to the right of a state\n(like this one). + sankey + a--10->b + c--20->b + b--15->d + a-- 7->d
    diff --git a/docker-compose.yml b/docker-compose.yml index 21da2edd55..5cf97ef6d2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,8 +13,10 @@ services: - ./:/mermaid - root_cache:/root/.cache - root_local:/root/.local + - root_local:/root/.npm ports: - 9000:9000 volumes: root_cache: root_local: + root_npm: diff --git a/package.json b/package.json index ac197712cb..6a291f0d67 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,12 @@ "coveralls": "^3.1.1", "cypress": "^12.10.0", "cypress-image-snapshot": "^4.0.1", +<<<<<<< HEAD "esbuild": "^0.18.0", +======= + "d3-sankey": "^0.12.3", + "esbuild": "^0.17.18", +>>>>>>> 84c278d0 (At last something is working) "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-cypress": "^2.13.2", diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index 140c200fba..3f3716928e 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -32,6 +32,7 @@ export interface MermaidConfig { mindmap?: MindmapDiagramConfig; gitGraph?: GitGraphDiagramConfig; c4?: C4DiagramConfig; + sankey?: SankeyDiagramConfig; dompurifyConfig?: DOMPurify.Config; wrap?: boolean; fontSize?: number; @@ -411,6 +412,8 @@ export interface FlowchartDiagramConfig extends BaseDiagramConfig { wrappingWidth?: number; } +export interface SankeyDiagramConfig extends BaseDiagramConfig {} + export interface FontConfig { fontSize?: string | number; fontFamily?: string; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index cab6302523..231c3fd501 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -40,6 +40,7 @@ /lex %start start +%left ARROW %% // language grammar @@ -66,10 +67,19 @@ attribute: ATTRIBUTE EQUAL value | ATTRIBUTE; value: VALUE | OPEN_STRING STRING CLOSE_STRING; -stream: node ARROW AMOUNT ARROW tail { yy.addNode($1); yy.addLink(); }; -tail: stream | node; +stream: node[source] ARROW amount ARROW tail[target] { + $$=$source; + yy.addLink($source, $target, $amount); +}; -node: NODE { yy.addNode($1) }; +amount: AMOUNT { $$=parseFloat($AMOUNT); }; + +tail + : stream { $$ = $stream } + | node { $$ = $node; } + ; + +node: NODE { $$ = yy.addNode($NODE); }; // : NODE exhaust intake exhaust_chain optional_attributes EOS // exhaust_chain: ARROW AMOUNT intake_chain | ; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index 47345d1b63..ee52efefcc 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -21,7 +21,7 @@ describe('Sankey diagram', function () { it('recognizes one flow', () => { const str = ` sankey - a -> 30 -> b -> 20 -> c + node_a -> 30 -> node_b -> 20 -> node_c `; parser.parse(str); @@ -30,9 +30,9 @@ describe('Sankey diagram', function () { it('recognizes multiple flows', () => { const str = ` sankey - a -> 30 -> b -> 12 -> e - c -> 30 -> d -> 12 -> e - c -> 40 -> e -> 12 -> q + node_a -> 30 -> node_b -> 12 -> node_e + node_c -> 30 -> node_d -> 12 -> node_e + node_c -> 40 -> node_e -> 12 -> node_q `; parser.parse(str); @@ -44,7 +44,7 @@ describe('Sankey diagram', function () { sankey node[] node[attr=1] - a -> 30 -> b + node_a -> 30 -> node_b node[attrWithoutValue] node[attr = 3] node[attr1 = 23413 attr2=1234] diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts index f43f3514a3..4f50fa4cc5 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts @@ -1,12 +1,12 @@ -import { log } from '../../logger.js'; -import mermaidAPI from '../../mermaidAPI.js'; +// import { log } from '../../logger.js'; +// import mermaidAPI from '../../mermaidAPI.js'; import * as configApi from '../../config.js'; import common from '../common/common.js'; import { - // setAccTitle, - // getAccTitle, - // getAccDescription, - // setAccDescription, + setAccTitle, + getAccTitle, + getAccDescription, + setAccDescription, setDiagramTitle, getDiagramTitle, clear as commonClear, @@ -20,46 +20,54 @@ import { // return text.trimStart().replace(/^\s*%%(?!{)[^\n]+\n?/gm, ''); // }; let links: Array = []; -let nodes: { [id: string]: Node } = {}; +let nodes: Array = []; +let nodesHash: Record = {}; -const clear = function () { +const clear = () => { links = []; - nodes = {}; + nodes = []; + nodesHash = {}; commonClear(); }; type Nullable = T | null; +interface ILink { + source?: Node; + target?: Node; + amount?: number; +} + class Link { - sourceNode: Nullable; - targetNode: Nullable; + source: Nullable; + target: Nullable; + amount: Nullable; constructor() { - this.sourceNode = null; - this.targetNode = null; + this.source = null; + this.target = null; + this.amount = 0; } } /** - * Adds a stream between two elements on the diagram + * Adds a link between two elements on the diagram * - * @param sourceNodeID - The id Node where the link starts - * @param targetNodeID - The id Node where the link ends + * @param source - Node where the link starts + * @param target - Node where the link ends + * @param amount - number, float or integer, describes the amount to be passed */ - -interface IAddLink { - sourceNodeID?: string; - targetNodeID?: string; - // amount?: number; -} - -const addLink = ({ sourceNodeID, targetNodeID }: IAddLink = {}): Link => { +// const addLink = ({ source, target, amount }: ILink = {}): Link => { +const addLink = (source?: Node, target?: Node, amount?: number): Link => { const link: Link = new Link(); - if (sourceNodeID !== undefined) { - link.sourceNode = addNode(sourceNodeID); + if (source !== undefined) { + link.source = source; + } + if (target !== undefined) { + link.target = target; } - if (targetNodeID !== undefined) { - link.targetNode = addNode(targetNodeID); + if (amount !== undefined) { + link.amount = amount; } links.push(link); @@ -68,11 +76,11 @@ const addLink = ({ sourceNodeID, targetNodeID }: IAddLink = {}): Link => { }; class Node { - id: string; + ID: string; title: string; - constructor(id: string) { - this.id = id; - this.title = id; + constructor(ID: string) { + this.ID = ID; + this.title = ID; } } @@ -81,25 +89,28 @@ class Node { * * @param id - The id Node */ -const addNode = (id: string): Node => { - id = common.sanitizeText(id, configApi.getConfig()); - if (nodes[id] === undefined) { - nodes[id] = new Node(id); +const addNode = (ID: string): Node => { + ID = common.sanitizeText(ID, configApi.getConfig()); + if (nodesHash[ID] === undefined) { + nodesHash[ID] = new Node(ID); } - const node = nodes[id]; + const node = nodesHash[ID]; + nodes.push(node); + // debugger; return node; }; export default { - // sankey interface + nodesHash, + nodes, + links, addLink, addNode, - // common DB interface // TODO: If this is a must this probably should be an interface - // getAccTitle, - // setAccTitle, - // getAccDescription, - // setAccDescription, + getAccTitle, + setAccTitle, + getAccDescription, + setAccDescription, getDiagramTitle, setDiagramTitle, clear, diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 916fd7ed0d..5d7fb2f64b 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -1,22 +1,202 @@ +// @ts-nocheck TODO: fix file import { Diagram } from '../../Diagram.js'; +import { log } from '../../logger.js'; +import * as configApi from '../../config.js'; +import { + select as d3select, + scaleOrdinal as d3scaleOrdinal, + schemeTableau10 as d3schemeTableau10, + // rgb as d3rgb, + map as d3map, +} from 'd3'; +import { + sankey as d3sankey, + sankeyLinkHorizontal +} from 'd3-sankey'; +import { configureSvgSize } from '../../setupGraphViewbox.js'; +import sankeyDB from './sankeyDB.js'; /** * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text. * - * @param _text - The text of the diagram + * @param text - The text of the diagram * @param id - The id of the diagram which will be used as a DOM element id¨ * @param _version - Mermaid version from package.json * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram */ -export const draw = function (text: string, id: string, _version: string, diagObj: Diagram) { - // debugger; - // diagObj.db.clear(); +export const draw = function (text: string, id: string, _version: string, diagObj: Diagram): void { + + // First of all parse sankey language + // Everything that is parsed will be stored in diagObj.DB + // That is why we need to clear DB first + // + if (typeof (diagObj?.db?.clear) !== 'undefined') { // why do we need to check for undefined? typescript complains + diagObj?.db?.clear(); + } + // Launch parsing diagObj.parser.parse(text); + log.debug('Parsed sankey diagram'); + + // Figure out what is happening there + // The main thing is svg object that is a wrapper from d3 for svg operations + // + const { securityLevel, sequence: conf } = configApi.getConfig(); + let sandboxElement; + if (securityLevel === 'sandbox') { + sandboxElement = select('#i' + id); + } + const root = + securityLevel === 'sandbox' + ? d3select(sandboxElement.nodes()[0].contentDocument.body) + : d3select('body'); + const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; + const svg = securityLevel === 'sandbox' ? root.select(`[id="${id}"]`) : d3select(`[id="${id}"]`); + + // Establish svg dimensions + // + const elem = doc.getElementById(id); + const width = elem.parentElement.offsetWidth; + + const height = 600; + configureSvgSize(svg, height, width, true); + + // Prepare data for construction + // This must be a mutable object with 2 properties: + // `nodes` and `links` + // + // let graph = { + // "nodes": [ + // { "id": "Alice" }, + // { "id": "Bob" }, + // { "id": "Carol" } + // ], + // "links": [ + // { "source": "Alice", "target": "Bob", "value": 23 }, + // { "source": "Bob", "target": "Carol", "value": 43 } + // ] + // }; + // + let graph = { + "nodes": [ + { "id": "Alice" }, + { "id": "Bob" }, + { "id": "Carol" } + ], + "links": [ + { "source": "Alice", "target": "Bob", "value": 23 }, + { "source": "Bob", "target": "Carol", "value": 43 } + ] + }; + + // Construct and configure a Sankey generator + // That will be a functino that calculates nodes and links dimentions + // + const sankey = d3sankey() + .nodeId((d) => d.id) // we use 'id' property to identify node + .nodeWidth(36) + .nodePadding(290) + .size([width, height]); + + // .nodeAlign(d3Sankey.sankeyLeft) // d3.sankeyLeft, etc. + // .nodeWidth(15) + // .nodePadding(10) + // .extent([[1, 5], [width - 1, height - 5]]); + // .nodeId(d => d['id']) + // + + // Compute the Sankey layout + // Namely calalculate nodes and links positions + // Our `graph` object will be mutated by this + // + sankey(graph); + + // debugger; + + // const node = svg.append("g") + // .selectAll("rect") + // .data(graph.nodes) + // .join("rect") + // .attr("x", d => d.x0) + // .attr("y", d => d.y0) + // .attr("height", d => d.y1 - d.y0) + // .attr("width", d => d.x1 - d.x0); + // // .attr("stroke", nodeStroke) + // // .attr("stroke-width", nodeStrokeWidth) + // // .attr("stroke-opacity", nodeStrokeOpacity) + // // .attr("stroke-linejoin", nodeStrokeLinejoin) + + var color = d3scaleOrdinal(d3schemeTableau10); + // Creates the rects that represent the nodes. + const rect = svg.append("g") + .attr("stroke", "#000") + .selectAll("rect") + .data(graph.nodes) + .join("rect") + .attr("x", d => d.x0) + .attr("y", d => d.y0) + .attr("height", d => d.y1 - d.y0) + .attr("width", d => d.x1 - d.x0) + .attr("fill", d => color(d.node)); + + + // // add in the links + // var link = svg.append("g") + // .selectAll(".link") + // .data(graph.links) + // .enter() + // .append("path") + // .attr("class", "link") + // .attr("d", sankeyLinkHorizontal()) + // .style("stroke-width", function (d) { return Math.max(1, d.dy); }) + // .sort(function (a, b) { return b.dy - a.dy; }); - // const elem = doc.getElementById(id); + // // add in the nodes + // var node = svg.append("g") + // .selectAll(".node") + // .data(graph.nodes) + // .enter().append("g") + // .attr("class", "node") + // .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; }) + // // .call(d3.drag() + // // .subject(function(d) { return d; }) + // // .on("start", function() { this.parentNode.appendChild(this); }) + // // .on("drag", dragmove)) + // ; + + // // add the rectangles for the nodes + // node + // .append("rect") + // .attr("height", function (d) { return d.dy; }) + // .attr("width", generator.nodeWidth()) + // .style("fill", function (d) { return d.color = color(d.name.replace(/ .*/, "")); }) + // .style("stroke", function (d) { return d3rgb(d.color).darker(2); }) + // // Add hover text + // .append("title") + // .text(function (d) { return d.name + "\n" + "There is " + d.value + " stuff in this node"; }); + + + // // add in the title for the nodes + // node + // .append("text") + // .attr("x", -6) + // .attr("y", function (d) { return d.dy / 2; }) + // .attr("dy", ".35em") + // .attr("text-anchor", "end") + // .attr("transform", null) + // .text(function (d) { return d.name; }) + // .filter(function (d) { return d.x < width / 2; }) + // .attr("x", 6 + generator.nodeWidth()) + // .attr("text-anchor", "start"); + + // console.log(); // debugger; - return 'TEST'; + // .layout(1); + + // const { nodes, links } = generator({ + // nodes: graph.nodes, + // links: graph.links, + // }); }; export default { diff --git a/run b/run index 9b02b07410..09f63cb82a 100755 --- a/run +++ b/run @@ -10,23 +10,19 @@ args=${@:2} case $command in sh) -$RUN mermaid sh $args +$RUN --service-ports mermaid sh $args ;; i | install) $RUN mermaid sh -c "npx pnpm install $args" ;; -test) -$RUN mermaid sh -c "npx pnpm test $args" +add) +$RUN mermaid sh -c "npx pnpm -w add $args" ;; -vitest) -$RUN mermaid sh -c "npx pnpm vitest $args" -;; - -e2e) -$RUN mermaid sh -c "npx pnpm e2e $args" +test | vitest | e2e ) +$RUN mermaid sh -c "npx pnpm $command $args" ;; lint) @@ -46,6 +42,7 @@ Run commonly used commands within docker containers \033[1m$name install\033[0m # Equvalent of pnpm install \033[1m$name dev\033[0m # Run dev server with examples, open http://localhost:9000 +$name add # Add package, 'run add d3-sankey' $name lint # Equvalent of pnpm -w run lint:fix $name test # Run unit tests $name vitest # Run watcher for unit tests From 81542142f569c87efbb29abb96024c1dccfd5997 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 01:32:45 +0300 Subject: [PATCH 061/595] Fix errors --- packages/mermaid/src/config.type.ts | 2 +- .../src/diagrams/sankey/sankeyRenderer.ts | 55 ++++++++----------- pnpm-lock.yaml | 4 ++ 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index 3f3716928e..f50a15d6b1 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -412,7 +412,7 @@ export interface FlowchartDiagramConfig extends BaseDiagramConfig { wrappingWidth?: number; } -export interface SankeyDiagramConfig extends BaseDiagramConfig {} +export type SankeyDiagramConfig = BaseDiagramConfig; export interface FontConfig { fontSize?: string | number; diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 5d7fb2f64b..8731dd5cef 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -9,10 +9,7 @@ import { // rgb as d3rgb, map as d3map, } from 'd3'; -import { - sankey as d3sankey, - sankeyLinkHorizontal -} from 'd3-sankey'; +import { sankey as d3sankey, sankeyLinkHorizontal } from 'd3-sankey'; import { configureSvgSize } from '../../setupGraphViewbox.js'; import sankeyDB from './sankeyDB.js'; @@ -25,12 +22,12 @@ import sankeyDB from './sankeyDB.js'; * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram */ export const draw = function (text: string, id: string, _version: string, diagObj: Diagram): void { - // First of all parse sankey language // Everything that is parsed will be stored in diagObj.DB // That is why we need to clear DB first // - if (typeof (diagObj?.db?.clear) !== 'undefined') { // why do we need to check for undefined? typescript complains + if (diagObj?.db?.clear !== undefined) { + // why do we need to check for undefined? typescript complains diagObj?.db?.clear(); } // Launch parsing @@ -75,21 +72,17 @@ export const draw = function (text: string, id: string, _version: string, diagOb // { "source": "Bob", "target": "Carol", "value": 43 } // ] // }; - // - let graph = { - "nodes": [ - { "id": "Alice" }, - { "id": "Bob" }, - { "id": "Carol" } + // + const graph = { + nodes: [{ id: 'Alice' }, { id: 'Bob' }, { id: 'Carol' }], + links: [ + { source: 'Alice', target: 'Bob', value: 23 }, + { source: 'Bob', target: 'Carol', value: 43 }, ], - "links": [ - { "source": "Alice", "target": "Bob", "value": 23 }, - { "source": "Bob", "target": "Carol", "value": 43 } - ] }; // Construct and configure a Sankey generator - // That will be a functino that calculates nodes and links dimentions + // That will be a function that calculates nodes and links dimensions // const sankey = d3sankey() .nodeId((d) => d.id) // we use 'id' property to identify node @@ -102,10 +95,10 @@ export const draw = function (text: string, id: string, _version: string, diagOb // .nodePadding(10) // .extent([[1, 5], [width - 1, height - 5]]); // .nodeId(d => d['id']) - // + // // Compute the Sankey layout - // Namely calalculate nodes and links positions + // Namely calculate nodes and links positions // Our `graph` object will be mutated by this // sankey(graph); @@ -125,19 +118,19 @@ export const draw = function (text: string, id: string, _version: string, diagOb // // .attr("stroke-opacity", nodeStrokeOpacity) // // .attr("stroke-linejoin", nodeStrokeLinejoin) - var color = d3scaleOrdinal(d3schemeTableau10); + const color = d3scaleOrdinal(d3schemeTableau10); // Creates the rects that represent the nodes. - const rect = svg.append("g") - .attr("stroke", "#000") - .selectAll("rect") + const rect = svg + .append('g') + .attr('stroke', '#000') + .selectAll('rect') .data(graph.nodes) - .join("rect") - .attr("x", d => d.x0) - .attr("y", d => d.y0) - .attr("height", d => d.y1 - d.y0) - .attr("width", d => d.x1 - d.x0) - .attr("fill", d => color(d.node)); - + .join('rect') + .attr('x', (d) => d.x0) + .attr('y', (d) => d.y0) + .attr('height', (d) => d.y1 - d.y0) + .attr('width', (d) => d.x1 - d.x0) + .attr('fill', (d) => color(d.node)); // // add in the links // var link = svg.append("g") @@ -163,7 +156,6 @@ export const draw = function (text: string, id: string, _version: string, diagOb // // .on("drag", dragmove)) // ; - // // add the rectangles for the nodes // node // .append("rect") @@ -175,7 +167,6 @@ export const draw = function (text: string, id: string, _version: string, diagOb // .append("title") // .text(function (d) { return d.name + "\n" + "There is " + d.value + " stuff in this node"; }); - // // add in the title for the nodes // node // .append("text") diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da40c7d36f..f02a51f093 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15810,3 +15810,7 @@ packages: /zwitch@2.0.2: resolution: {integrity: sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==} dev: true + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false From c41fc672545b9936d3d3e2e5472103c361464cd8 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 03:23:11 +0300 Subject: [PATCH 062/595] Added nodes and paths --- .../src/diagrams/sankey/sankeyRenderer.ts | 130 ++++++++++++++---- packages/mermaid/src/setupGraphViewbox.js | 1 + 2 files changed, 107 insertions(+), 24 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 8731dd5cef..6a184ef86e 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -9,7 +9,7 @@ import { // rgb as d3rgb, map as d3map, } from 'd3'; -import { sankey as d3sankey, sankeyLinkHorizontal } from 'd3-sankey'; +import { sankey as d3Sankey, sankeyLinkHorizontal as d3SankeyLinkHorizontal } from 'd3-sankey'; import { configureSvgSize } from '../../setupGraphViewbox.js'; import sankeyDB from './sankeyDB.js'; @@ -35,7 +35,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb log.debug('Parsed sankey diagram'); // Figure out what is happening there - // The main thing is svg object that is a wrapper from d3 for svg operations + // The main thing is svg object that is a d3 wrapper for svg operations // const { securityLevel, sequence: conf } = configApi.getConfig(); let sandboxElement; @@ -49,13 +49,15 @@ export const draw = function (text: string, id: string, _version: string, diagOb const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; const svg = securityLevel === 'sandbox' ? root.select(`[id="${id}"]`) : d3select(`[id="${id}"]`); - // Establish svg dimensions + // Establish svg dimensions and get width and height // const elem = doc.getElementById(id); const width = elem.parentElement.offsetWidth; + const height = 100; // TODO calculate height? - const height = 600; + // FIX: using max width prevents height from being set configureSvgSize(svg, height, width, true); + svg.attr('height', height); // that's why we need this line // Prepare data for construction // This must be a mutable object with 2 properties: @@ -84,7 +86,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb // Construct and configure a Sankey generator // That will be a function that calculates nodes and links dimensions // - const sankey = d3sankey() + const sankey = d3Sankey() .nodeId((d) => d.id) // we use 'id' property to identify node .nodeWidth(36) .nodePadding(290) @@ -100,10 +102,10 @@ export const draw = function (text: string, id: string, _version: string, diagOb // Compute the Sankey layout // Namely calculate nodes and links positions // Our `graph` object will be mutated by this + // and enriched with some properties // sankey(graph); - // debugger; // const node = svg.append("g") // .selectAll("rect") @@ -118,30 +120,110 @@ export const draw = function (text: string, id: string, _version: string, diagOb // // .attr("stroke-opacity", nodeStrokeOpacity) // // .attr("stroke-linejoin", nodeStrokeLinejoin) + // Get color scheme for the graph const color = d3scaleOrdinal(d3schemeTableau10); - // Creates the rects that represent the nodes. - const rect = svg + + // Creates the groups for nodes + svg .append('g') - .attr('stroke', '#000') - .selectAll('rect') + .attr('class', 'nodes') + .attr('stroke', '#000') + .selectAll('.node') .data(graph.nodes) - .join('rect') - .attr('x', (d) => d.x0) - .attr('y', (d) => d.y0) - .attr('height', (d) => d.y1 - d.y0) - .attr('width', (d) => d.x1 - d.x0) - .attr('fill', (d) => color(d.node)); - - // // add in the links - // var link = svg.append("g") + .join('g') + .attr('class', 'node') + .attr("transform", function (d) { return "translate(" + d.x0 + "," + d.y0 + ")"; }) + .attr('x', (d) => d.x0) + .attr('y', (d) => d.y0) + .append('rect') + .attr('height', (d) => {console.log(d); return (d.y1 - d.y0);}) + .attr('width', (d) => d.x1 - d.x0) + .attr('fill', (d) => color(d.id)); + + // Create text for nodes + svg + .append("g") + .attr('class', 'node-labels') + .attr("font-family", "sans-serif") + .attr("font-size", 12) + .selectAll('text') + .data(graph.nodes) + .join('text') + .attr("x", d => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6) + .attr("y", d => (d.y1 + d.y0) / 2) + .attr("dy", "0.35em") + .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") + .text(d => d.id) + + // Add links + // svg + // .append("g") // .selectAll(".link") // .data(graph.links) // .enter() - // .append("path") - // .attr("class", "link") - // .attr("d", sankeyLinkHorizontal()) - // .style("stroke-width", function (d) { return Math.max(1, d.dy); }) - // .sort(function (a, b) { return b.dy - a.dy; }); + // .append("path") + // .attr("class", "link") + // .attr("d", sankeyLinkHorizontal()) + // .style("stroke-width", function (d) { return Math.max(1, d.dy); }) + // .sort(function (a, b) { return b.dy - a.dy; }); + + // Creates the paths that represent the links. + const link_g = svg.append("g") + .attr('class', 'links') + .attr("fill", "none") + .attr("stroke-opacity", 0.5) + .selectAll(".link") + .data(graph.links) + .join("g") + .attr('class', 'link') + .style("mix-blend-mode", "multiply"); + + link_g.append("path") + .attr("d", d3SankeyLinkHorizontal()) + .attr("stroke", d => color(d.source.id)) + .attr("stroke-width", d => Math.max(1, d.width)); + + // linkColor === "source-target" ? (d) => d.uid + // : linkColor === "source" ? (d) => color(d.source.category) + // : linkColor === "target" ? (d) => color(d.target.category) + // : linkColor + + // svg.append("g") + // .attr("font-family", "sans-serif") + // .attr("font-size", 10) + // .selectAll("text") + // .data(nodes) + // .join("text") + // .attr("x", d => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6) + // .attr("y", d => (d.y1 + d.y0) / 2) + // .attr("dy", "0.35em") + // .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") + // .text(d => d.name); + + // Create links + // .attr("transform", null) + // .append("g") + // .attr("font-family", "sans-serif") + // .attr("font-size", 10) + // .selectAll("text") + // .data(nodes) + // .join("text") + // .attr("x", d => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6) + // .attr("y", d => (d.y1 + d.y0) / 2) + // .attr("dy", "0.35em") + // .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") + // .text(d => d.name); + // .attr("y", function (d) { return d.dy / 2; }) + // .attr("dy", ".35em") + // .attr("text-anchor", "end") + // .attr("transform", null) + // .text(function (d) { return d.name; }) + // .filter(function (d) { return d.x < width / 2; }) + // .attr("x", 6 + generator.nodeWidth()) + // .attr("text-anchor", "start"); + + // .selectAll('rect') + // // add in the nodes // var node = svg.append("g") diff --git a/packages/mermaid/src/setupGraphViewbox.js b/packages/mermaid/src/setupGraphViewbox.js index 0396d654f7..9294f80242 100644 --- a/packages/mermaid/src/setupGraphViewbox.js +++ b/packages/mermaid/src/setupGraphViewbox.js @@ -25,6 +25,7 @@ export const calculateSvgSizeAttrs = function (height, width, useMaxWidth) { if (useMaxWidth) { attrs.set('width', '100%'); attrs.set('style', `max-width: ${width}px;`); + // TODO: when using max width it does not set height? Is it intended? } else { attrs.set('height', height); attrs.set('width', width); From f5add81e29114dc5dd2e88041da80ecef4db32b9 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 03:36:54 +0300 Subject: [PATCH 063/595] Simple flow is done --- .../src/diagrams/sankey/sankeyRenderer.ts | 143 +++--------------- 1 file changed, 25 insertions(+), 118 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 6a184ef86e..484eeab1a3 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -7,9 +7,16 @@ import { scaleOrdinal as d3scaleOrdinal, schemeTableau10 as d3schemeTableau10, // rgb as d3rgb, - map as d3map, + // map as d3map, } from 'd3'; -import { sankey as d3Sankey, sankeyLinkHorizontal as d3SankeyLinkHorizontal } from 'd3-sankey'; + +import { + sankey as d3Sankey, + sankeyLinkHorizontal as d3SankeyLinkHorizontal, + sankeyLeft as d3SankeyLeft, + sankeyRight as d3SankeyRight, + sankeyJustify as d3SankeyJustify, +} from 'd3-sankey'; import { configureSvgSize } from '../../setupGraphViewbox.js'; import sankeyDB from './sankeyDB.js'; @@ -53,7 +60,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb // const elem = doc.getElementById(id); const width = elem.parentElement.offsetWidth; - const height = 100; // TODO calculate height? + const height = 300; // TODO calculate height? // FIX: using max width prevents height from being set configureSvgSize(svg, height, width, true); @@ -76,10 +83,18 @@ export const draw = function (text: string, id: string, _version: string, diagOb // }; // const graph = { - nodes: [{ id: 'Alice' }, { id: 'Bob' }, { id: 'Carol' }], + nodes: [ + { id: 'Alice' }, + { id: 'Bob' }, + { id: 'Carol' }, + { id: 'Andrew' }, + { id: 'Peter' } + ], links: [ + { source: 'Alice', target: 'Andrew', value: 11 }, { source: 'Alice', target: 'Bob', value: 23 }, { source: 'Bob', target: 'Carol', value: 43 }, + { source: 'Peter', target: 'Carol', value: 15 }, ], }; @@ -88,11 +103,12 @@ export const draw = function (text: string, id: string, _version: string, diagOb // const sankey = d3Sankey() .nodeId((d) => d.id) // we use 'id' property to identify node - .nodeWidth(36) - .nodePadding(290) + .nodeWidth(10) + .nodePadding(10) + .nodeAlign(d3SankeyJustify) // d3.sankeyLeft, etc. .size([width, height]); - - // .nodeAlign(d3Sankey.sankeyLeft) // d3.sankeyLeft, etc. + + //["left", "sankeyLeft"], ["right", "sankeyRight"], ["center", "sankeyCenter"], ["justify", "sankeyJustify"] // .nodeWidth(15) // .nodePadding(10) // .extent([[1, 5], [width - 1, height - 5]]); @@ -106,20 +122,6 @@ export const draw = function (text: string, id: string, _version: string, diagOb // sankey(graph); - - // const node = svg.append("g") - // .selectAll("rect") - // .data(graph.nodes) - // .join("rect") - // .attr("x", d => d.x0) - // .attr("y", d => d.y0) - // .attr("height", d => d.y1 - d.y0) - // .attr("width", d => d.x1 - d.x0); - // // .attr("stroke", nodeStroke) - // // .attr("stroke-width", nodeStrokeWidth) - // // .attr("stroke-opacity", nodeStrokeOpacity) - // // .attr("stroke-linejoin", nodeStrokeLinejoin) - // Get color scheme for the graph const color = d3scaleOrdinal(d3schemeTableau10); @@ -145,7 +147,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb .append("g") .attr('class', 'node-labels') .attr("font-family", "sans-serif") - .attr("font-size", 12) + .attr("font-size", 14) .selectAll('text') .data(graph.nodes) .join('text') @@ -155,18 +157,6 @@ export const draw = function (text: string, id: string, _version: string, diagOb .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") .text(d => d.id) - // Add links - // svg - // .append("g") - // .selectAll(".link") - // .data(graph.links) - // .enter() - // .append("path") - // .attr("class", "link") - // .attr("d", sankeyLinkHorizontal()) - // .style("stroke-width", function (d) { return Math.max(1, d.dy); }) - // .sort(function (a, b) { return b.dy - a.dy; }); - // Creates the paths that represent the links. const link_g = svg.append("g") .attr('class', 'links') @@ -183,89 +173,6 @@ export const draw = function (text: string, id: string, _version: string, diagOb .attr("stroke", d => color(d.source.id)) .attr("stroke-width", d => Math.max(1, d.width)); - // linkColor === "source-target" ? (d) => d.uid - // : linkColor === "source" ? (d) => color(d.source.category) - // : linkColor === "target" ? (d) => color(d.target.category) - // : linkColor - - // svg.append("g") - // .attr("font-family", "sans-serif") - // .attr("font-size", 10) - // .selectAll("text") - // .data(nodes) - // .join("text") - // .attr("x", d => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6) - // .attr("y", d => (d.y1 + d.y0) / 2) - // .attr("dy", "0.35em") - // .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") - // .text(d => d.name); - - // Create links - // .attr("transform", null) - // .append("g") - // .attr("font-family", "sans-serif") - // .attr("font-size", 10) - // .selectAll("text") - // .data(nodes) - // .join("text") - // .attr("x", d => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6) - // .attr("y", d => (d.y1 + d.y0) / 2) - // .attr("dy", "0.35em") - // .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") - // .text(d => d.name); - // .attr("y", function (d) { return d.dy / 2; }) - // .attr("dy", ".35em") - // .attr("text-anchor", "end") - // .attr("transform", null) - // .text(function (d) { return d.name; }) - // .filter(function (d) { return d.x < width / 2; }) - // .attr("x", 6 + generator.nodeWidth()) - // .attr("text-anchor", "start"); - - // .selectAll('rect') - - - // // add in the nodes - // var node = svg.append("g") - // .selectAll(".node") - // .data(graph.nodes) - // .enter().append("g") - // .attr("class", "node") - // .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; }) - // // .call(d3.drag() - // // .subject(function(d) { return d; }) - // // .on("start", function() { this.parentNode.appendChild(this); }) - // // .on("drag", dragmove)) - // ; - - // // add the rectangles for the nodes - // node - // .append("rect") - // .attr("height", function (d) { return d.dy; }) - // .attr("width", generator.nodeWidth()) - // .style("fill", function (d) { return d.color = color(d.name.replace(/ .*/, "")); }) - // .style("stroke", function (d) { return d3rgb(d.color).darker(2); }) - // // Add hover text - // .append("title") - // .text(function (d) { return d.name + "\n" + "There is " + d.value + " stuff in this node"; }); - - // // add in the title for the nodes - // node - // .append("text") - // .attr("x", -6) - // .attr("y", function (d) { return d.dy / 2; }) - // .attr("dy", ".35em") - // .attr("text-anchor", "end") - // .attr("transform", null) - // .text(function (d) { return d.name; }) - // .filter(function (d) { return d.x < width / 2; }) - // .attr("x", 6 + generator.nodeWidth()) - // .attr("text-anchor", "start"); - - // console.log(); - // debugger; - // .layout(1); - // const { nodes, links } = generator({ // nodes: graph.nodes, // links: graph.links, From d22131e2fb373065379de8ca9837b2e9c51f42e0 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 04:33:20 +0300 Subject: [PATCH 064/595] It can read syntax and draw diagram --- .../mermaid/src/diagrams/sankey/sankeyDB.ts | 35 ++++++------ .../src/diagrams/sankey/sankeyRenderer.ts | 53 +++++++++++++------ 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts index 4f50fa4cc5..23ef95528c 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts @@ -23,7 +23,7 @@ let links: Array = []; let nodes: Array = []; let nodesHash: Record = {}; -const clear = () => { +const clear = function() { links = []; nodes = []; nodesHash = {}; @@ -32,20 +32,20 @@ const clear = () => { type Nullable = T | null; -interface ILink { - source?: Node; - target?: Node; - amount?: number; -} +// interface ILink { +// source?: Node; +// target?: Node; +// value?: number; +// } class Link { source: Nullable; target: Nullable; - amount: Nullable; + value: Nullable; constructor() { this.source = null; this.target = null; - this.amount = 0; + this.value = 0; } } @@ -54,20 +54,21 @@ class Link { * * @param source - Node where the link starts * @param target - Node where the link ends - * @param amount - number, float or integer, describes the amount to be passed + * @param value - number, float or integer, describes the amount to be passed */ // const addLink = ({ source, target, amount }: ILink = {}): Link => { -const addLink = (source?: Node, target?: Node, amount?: number): Link => { +const addLink = function(source?: Node, target?: Node, value?: number): Link { const link: Link = new Link(); + // TODO: make attribute setters if (source !== undefined) { link.source = source; } if (target !== undefined) { link.target = target; } - if (amount !== undefined) { - link.amount = amount; + if (value !== undefined) { + link.value = value; } links.push(link); @@ -89,7 +90,7 @@ class Node { * * @param id - The id Node */ -const addNode = (ID: string): Node => { +const addNode = function(ID: string): Node { ID = common.sanitizeText(ID, configApi.getConfig()); if (nodesHash[ID] === undefined) { nodesHash[ID] = new Node(ID); @@ -100,10 +101,14 @@ const addNode = (ID: string): Node => { return node; }; +const getNodes = () => nodes; +const getLinks = () => links; + export default { nodesHash, - nodes, - links, + getConfig: () => configApi.getConfig().sankey, + getNodes, + getLinks, addLink, addNode, // TODO: If this is a must this probably should be an interface diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 484eeab1a3..b0fac5c125 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -15,10 +15,13 @@ import { sankeyLinkHorizontal as d3SankeyLinkHorizontal, sankeyLeft as d3SankeyLeft, sankeyRight as d3SankeyRight, + sankeyCenter as d3SankeyCenter, sankeyJustify as d3SankeyJustify, } from 'd3-sankey'; import { configureSvgSize } from '../../setupGraphViewbox.js'; import sankeyDB from './sankeyDB.js'; +import { db } from '../info/infoDb.js'; +import { debug } from 'console'; /** * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text. @@ -39,6 +42,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb } // Launch parsing diagObj.parser.parse(text); + debugger; log.debug('Parsed sankey diagram'); // Figure out what is happening there @@ -66,7 +70,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb configureSvgSize(svg, height, width, true); svg.attr('height', height); // that's why we need this line - // Prepare data for construction + // Prepare data for construction based on diagObj.db // This must be a mutable object with 2 properties: // `nodes` and `links` // @@ -82,21 +86,36 @@ export const draw = function (text: string, id: string, _version: string, diagOb // ] // }; // - const graph = { - nodes: [ - { id: 'Alice' }, - { id: 'Bob' }, - { id: 'Carol' }, - { id: 'Andrew' }, - { id: 'Peter' } - ], - links: [ - { source: 'Alice', target: 'Andrew', value: 11 }, - { source: 'Alice', target: 'Bob', value: 23 }, - { source: 'Bob', target: 'Carol', value: 43 }, - { source: 'Peter', target: 'Carol', value: 15 }, - ], - }; + let graph = { + nodes: [], + links: [] + } + + diagObj.db.getNodes().forEach(node => { + graph.nodes.push({id: node.ID}); + }); + + diagObj.db.getLinks().forEach(link => { + graph.links.push({source: link.source.ID, target: link.target.ID, value: link.value}); + }); + + + debugger; + // const graph = { + // nodes: [ + // { id: 'Alice' }, + // { id: 'Bob' }, + // { id: 'Carol' }, + // { id: 'Andrew' }, + // { id: 'Peter' } + // ], + // links: [ + // { source: 'Alice', target: 'Andrew', value: 11 }, + // { source: 'Alice', target: 'Bob', value: 23 }, + // { source: 'Bob', target: 'Carol', value: 43 }, + // { source: 'Peter', target: 'Carol', value: 15 }, + // ], + // }; // Construct and configure a Sankey generator // That will be a function that calculates nodes and links dimensions @@ -107,6 +126,8 @@ export const draw = function (text: string, id: string, _version: string, diagOb .nodePadding(10) .nodeAlign(d3SankeyJustify) // d3.sankeyLeft, etc. .size([width, height]); + // .extent([[5, 20], [width - 5, height - 20]]); alias for size + // paddings //["left", "sankeyLeft"], ["right", "sankeyRight"], ["center", "sankeyCenter"], ["justify", "sankeyJustify"] // .nodeWidth(15) From 19f858b73b9baf093e53fbd9bc1e3961deb89dad Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Sun, 18 Jun 2023 23:53:57 +0300 Subject: [PATCH 065/595] Fixed nodes duplicates --- demos/sankey.html | 10 ++++++---- packages/mermaid/src/diagrams/sankey/sankeyDB.ts | 10 ++++++---- packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts | 1 - 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/demos/sankey.html b/demos/sankey.html index b06ead15eb..ebacae6494 100644 --- a/demos/sankey.html +++ b/demos/sankey.html @@ -17,10 +17,12 @@

    Sankey diagram demos

    Simple flow

           sankey
    -      node_a->10->node_b;
    -      node_c->20->node_b;
    -      node_b->15->node_d;
    -      node_a-> 7->node_d;
    +      a->28->b->10->c
    +      a->11->b
    +      k->18->b->35->d->13->e->43->dd11
    +      d->5->e
    +      d->10->c
    +      k->25->e
         
    - - + + + + \ No newline at end of file diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 54b1290987..06a33980b9 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -42,7 +42,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb } // Launch parsing diagObj.parser.parse(text); - debugger; + // debugger; log.debug('Parsed sankey diagram'); // Figure out what is happening there @@ -86,20 +86,20 @@ export const draw = function (text: string, id: string, _version: string, diagOb // ] // }; // - let graph = { + const graph = { nodes: [], links: [] } diagObj.db.getNodes().forEach(node => { - graph.nodes.push({id: node.ID}); + graph.nodes.push({ id: node.ID }); }); diagObj.db.getLinks().forEach(link => { - graph.links.push({source: link.source.ID, target: link.target.ID, value: link.value}); + graph.links.push({ source: link.source.ID, target: link.target.ID, value: link.value }); }); - debugger; + // debugger; // const graph = { // nodes: [ // { id: 'Alice' }, @@ -125,10 +125,10 @@ export const draw = function (text: string, id: string, _version: string, diagOb .nodePadding(10) .nodeAlign(d3SankeyJustify) // d3.sankeyLeft, etc. .size([width, height]); - // .extent([[5, 20], [width - 5, height - 20]]); alias for size - // paddings - - //["left", "sankeyLeft"], ["right", "sankeyRight"], ["center", "sankeyCenter"], ["justify", "sankeyJustify"] + // .extent([[5, 20], [width - 5, height - 20]]); alias for size + // paddings + + //["left", "sankeyLeft"], ["right", "sankeyRight"], ["center", "sankeyCenter"], ["justify", "sankeyJustify"] // .nodeWidth(15) // .nodePadding(10) // .extent([[1, 5], [width - 1, height - 5]]); @@ -148,45 +148,45 @@ export const draw = function (text: string, id: string, _version: string, diagOb // Creates the groups for nodes svg .append('g') - .attr('class', 'nodes') - .attr('stroke', '#000') + .attr('class', 'nodes') + .attr('stroke', '#000') .selectAll('.node') .data(graph.nodes) .join('g') - .attr('class', 'node') - .attr("transform", function (d) { return "translate(" + d.x0 + "," + d.y0 + ")"; }) - .attr('x', (d) => d.x0) - .attr('y', (d) => d.y0) - .append('rect') - .attr('height', (d) => {console.log(d); return (d.y1 - d.y0);}) - .attr('width', (d) => d.x1 - d.x0) - .attr('fill', (d) => color(d.id)); + .attr('class', 'node') + .attr("transform", function (d) { return "translate(" + d.x0 + "," + d.y0 + ")"; }) + .attr('x', (d) => d.x0) + .attr('y', (d) => d.y0) + .append('rect') + .attr('height', (d) => { console.log(d); return (d.y1 - d.y0); }) + .attr('width', (d) => d.x1 - d.x0) + .attr('fill', (d) => color(d.id)); // Create text for nodes svg .append("g") - .attr('class', 'node-labels') - .attr("font-family", "sans-serif") - .attr("font-size", 14) + .attr('class', 'node-labels') + .attr("font-family", "sans-serif") + .attr("font-size", 14) .selectAll('text') .data(graph.nodes) .join('text') - .attr("x", d => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6) - .attr("y", d => (d.y1 + d.y0) / 2) - .attr("dy", "0.35em") - .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") - .text(d => d.id) + .attr("x", d => d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6) + .attr("y", d => (d.y1 + d.y0) / 2) + .attr("dy", "0.35em") + .attr("text-anchor", d => d.x0 < width / 2 ? "start" : "end") + .text(d => d.id) // Creates the paths that represent the links. const link_g = svg.append("g") - .attr('class', 'links') - .attr("fill", "none") - .attr("stroke-opacity", 0.5) + .attr('class', 'links') + .attr("fill", "none") + .attr("stroke-opacity", 0.5) .selectAll(".link") .data(graph.links) .join("g") - .attr('class', 'link') - .style("mix-blend-mode", "multiply"); + .attr('class', 'link') + .style("mix-blend-mode", "multiply"); link_g.append("path") .attr("d", d3SankeyLinkHorizontal()) From 726efdad5346c7969f683de0490f0050b0e2a9a0 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Mon, 19 Jun 2023 01:09:21 +0300 Subject: [PATCH 067/595] Fixed packaged --- package.json | 6 +----- pnpm-lock.yaml | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 6a291f0d67..785f8056cb 100644 --- a/package.json +++ b/package.json @@ -85,12 +85,8 @@ "coveralls": "^3.1.1", "cypress": "^12.10.0", "cypress-image-snapshot": "^4.0.1", -<<<<<<< HEAD - "esbuild": "^0.18.0", -======= "d3-sankey": "^0.12.3", - "esbuild": "^0.17.18", ->>>>>>> 84c278d0 (At last something is working) + "esbuild": "^0.18.0", "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-cypress": "^2.13.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f02a51f093..365f1bc5cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - importers: .: @@ -86,6 +82,9 @@ importers: cypress-image-snapshot: specifier: ^4.0.1 version: 4.0.1(cypress@12.10.0)(jest@29.5.0) + d3-sankey: + specifier: ^0.12.3 + version: 0.12.3 esbuild: specifier: ^0.18.0 version: 0.18.0 @@ -7046,6 +7045,12 @@ packages: lodash: 4.17.21 dev: false + /d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + dependencies: + internmap: 1.0.1 + dev: true + /d3-array@3.2.0: resolution: {integrity: sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==} engines: {node: '>=12'} @@ -7163,6 +7168,10 @@ packages: d3-color: 3.1.0 dev: false + /d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + dev: true + /d3-path@3.0.1: resolution: {integrity: sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==} engines: {node: '>=12'} @@ -7183,6 +7192,13 @@ packages: engines: {node: '>=12'} dev: false + /d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + dev: true + /d3-scale-chromatic@3.0.0: resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} engines: {node: '>=12'} @@ -7207,6 +7223,12 @@ packages: engines: {node: '>=12'} dev: false + /d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + dependencies: + d3-path: 1.0.9 + dev: true + /d3-shape@3.1.0: resolution: {integrity: sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==} engines: {node: '>=12'} @@ -9442,6 +9464,10 @@ packages: side-channel: 1.0.4 dev: true + /internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + dev: true + /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} From 6722ac754082d3ba77bbe7d9be23a6e0c70ce2d7 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Mon, 19 Jun 2023 03:45:24 +0300 Subject: [PATCH 068/595] Multiple improvements on syntax Syntax has been simplified Removed extra initial states Removed unused groups Nodes can be wrapped in double qotes Updated demo page --- demos/sankey.html | 95 +++++++++++++++++-- .../src/diagrams/sankey/parser/sankey.jison | 66 ++++++------- .../src/diagrams/sankey/parser/sankey.spec.js | 93 +++++++++++++++++- .../mermaid/src/diagrams/sankey/sankeyDB.ts | 4 +- .../src/diagrams/sankey/sankeyRenderer.ts | 12 +-- 5 files changed, 214 insertions(+), 56 deletions(-) diff --git a/demos/sankey.html b/demos/sankey.html index 2cf778206f..c35b907d29 100644 --- a/demos/sankey.html +++ b/demos/sankey.html @@ -16,16 +16,93 @@

    Sankey diagram demos

    -

    Simple flow

    +

    Simple example

    -      sankey
    -      a->28->b->10->c
    -      a->11->b
    -      k->18->b->35->d->13->e->43->dd11
    -      d->5->e
    -      d->10->c
    -      k->25->e
    -    
    + sankey + + node[title="hello, how are you?"] + node[title="hello, mister Sankey"] + + First -> 30 -> Second + First -> 10 -> Third + Second -> 20 -> Third + + + +

    Energy flow

    +
    +    sankey
    +
    +    "Agricultural 'waste'"      ->      124.729  -> "Bio-conversion"
    +    "Bio-conversion"            ->      0.597    -> "Liquid"
    +    "Bio-conversion"            ->      26.862   -> "Losses"
    +    "Bio-conversion"            ->      280.322  -> "Solid"
    +    "Bio-conversion"            ->      81.144   -> "Gas"
    +    "Biofuel imports"           ->      35       -> "Liquid"
    +    "Biomass imports"           ->      35       -> "Solid"
    +    "Coal imports"              ->      11.606   -> "Coal"
    +    "Coal reserves"             ->      63.965   -> "Coal"
    +    "Coal"                      ->      75.571   -> "Solid"
    +    "District heating"          ->      10.639   -> "Industry"
    +    "District heating"          ->      22.505   -> "Heating and cooling - commercial"
    +    "District heating"          ->      46.184   -> "Heating and cooling - homes"
    +    "Electricity grid"          ->      104.453  -> "Over generation / exports"
    +    "Electricity grid"          ->      113.726  -> "Heating and cooling - homes"
    +    "Electricity grid"          ->      27.14    -> "H2 conversion"
    +    "Electricity grid"          ->      342.165  -> "Industry"
    +    "Electricity grid"          ->      37.797   -> "Road transport"
    +    "Electricity grid"          ->      4.412    -> "Agriculture"
    +    "Electricity grid"          ->      40.858   -> "Heating and cooling - commercial"
    +    "Electricity grid"          ->      56.691   -> "Losses"
    +    "Electricity grid"          ->      7.863    -> "Rail transport"
    +    "Electricity grid"          ->      90.008   -> "Lighting & appliances - commercial"
    +    "Electricity grid"          ->      93.494   -> "Lighting & appliances - homes"
    +    "Gas imports"               ->      40.719   -> "Ngas"
    +    "Gas reserves"              ->      82.233   -> "Ngas"
    +    "Gas"                       ->      0.129    -> "Heating and cooling - commercial"
    +    "Gas"                       ->      1.401    -> "Losses"
    +    "Gas"                       ->      151.891  -> "Thermal generation"
    +    "Gas"                       ->      2.096    -> "Agriculture"
    +    "Gas"                       ->      48.58    -> "Industry"
    +    "Geothermal"                ->      7.013    -> "Electricity grid"
    +    "H2 conversion"             ->      20.897   -> "H2"
    +    "H2 conversion"             ->      6.242    -> "Losses"
    +    "H2"                        ->      20.897   -> "Road transport"
    +    "Hydro"                     ->      6.995    -> "Electricity grid"
    +    "Liquid"                    ->      121.066  -> "Industry"
    +    "Liquid"                    ->      128.69   -> "International shipping"
    +    "Liquid"                    ->      135.835  -> "Road transport"
    +    "Liquid"                    ->      14.458   -> "Domestic aviation"
    +    "Liquid"                    ->      206.267  -> "International aviation"
    +    "Liquid"                    ->      3.64     -> "Agriculture"
    +    "Liquid"                    ->      33.218   -> "National navigation"
    +    "Liquid"                    ->      4.413    -> "Rail transport"
    +    "Marine algae"              ->      4.375    -> "Bio-conversion"
    +    "Ngas"                      ->      122.952  -> "Gas"
    +    "Nuclear"                   ->      839.978  -> "Thermal generation"
    +    "Oil imports"               ->      504.287  -> "Oil"
    +    "Oil reserves"              ->      107.703  -> "Oil"
    +    "Oil"                       ->      611.99   -> "Liquid"
    +    "Other waste"               ->      56.587   -> "Solid"
    +    "Other waste"               ->      77.81    -> "Bio-conversion"
    +    "Pumped heat"               ->      193.026  -> "Heating and cooling - homes"
    +    "Pumped heat"               ->      70.672   -> "Heating and cooling - commercial"
    +    "Solar PV"                  ->      59.901   -> "Electricity grid"
    +    "Solar Thermal"             ->      19.263   -> "Heating and cooling - homes"
    +    "Solar"                     ->      19.263   -> "Solar Thermal"
    +    "Solar"                     ->      59.901   -> "Solar PV"
    +    "Solid"                     ->      0.882    -> "Agriculture"
    +    "Solid"                     ->      400.12   -> "Thermal generation"
    +    "Solid"                     ->      46.477   -> "Industry"
    +    "Thermal generation"        ->      525.531  -> "Electricity grid"
    +    "Thermal generation"        ->      787.129  -> "Losses"
    +    "Thermal generation"        ->      79.329   -> "District heating"
    +    "Tidal"                     ->      9.452    -> "Electricity grid"
    +    "UK land based bioenergy"   ->      182.01   -> "Bio-conversion"
    +    "Wave"                      ->      19.013   -> "Electricity grid"
    +    "Wind"                      ->      289.366  -> "Electricity grid"
    +  
    + - + - \ No newline at end of file + + + diff --git a/run b/run index 473c6aaff2..0f9c451d95 100755 --- a/run +++ b/run @@ -47,6 +47,7 @@ Run commonly used commands within docker containers \033[1m$name dev\033[0m # Run dev server with examples, open http://localhost:9000 $name add # Add package, 'run add d3-sankey' +$name prettier # Prettify a file 'run prettier ' $name lint # Equvalent of pnpm -w run lint:fix $name test # Run unit tests $name vitest # Run watcher for unit tests @@ -65,4 +66,4 @@ echo -n -e "$usage" $name help ;; -esac \ No newline at end of file +esac From 14582fb13dc1ed05441aa2ab0d7faa6879e98401 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 04:53:17 +0000 Subject: [PATCH 071/595] fix(deps): update all patch dependencies --- packages/mermaid/src/docs/package.json | 2 +- pnpm-lock.yaml | 117 +++++++++++++++++++++++-- 2 files changed, 110 insertions(+), 9 deletions(-) diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index 820d3da4a8..63d06fd216 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -30,7 +30,7 @@ "unplugin-vue-components": "^0.25.0", "vite": "^4.3.3", "vite-plugin-pwa": "^0.16.0", - "vitepress": "1.0.0-beta.1", + "vitepress": "1.0.0-beta.2", "workbox-window": "^6.5.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da40c7d36f..308f6e32e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -445,8 +445,8 @@ importers: specifier: ^0.16.0 version: 0.16.0(vite@4.3.3)(workbox-build@7.0.0)(workbox-window@6.5.4) vitepress: - specifier: 1.0.0-beta.1 - version: 1.0.0-beta.1(@algolia/client-search@4.14.2)(@types/node@18.16.0) + specifier: 1.0.0-beta.2 + version: 1.0.0-beta.2(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0) workbox-window: specifier: ^6.5.4 version: 6.5.4 @@ -478,6 +478,29 @@ packages: '@algolia/autocomplete-shared': 1.8.2 dev: true + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) + search-insights: 2.6.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + /@algolia/autocomplete-preset-algolia@1.8.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2): resolution: {integrity: sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==} peerDependencies: @@ -489,10 +512,31 @@ packages: algoliasearch: 4.14.2 dev: true + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) + '@algolia/client-search': 4.14.2 + algoliasearch: 4.14.2 + dev: true + /@algolia/autocomplete-shared@1.8.2: resolution: {integrity: sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==} dev: true + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 4.14.2 + algoliasearch: 4.14.2 + dev: true + /@algolia/cache-browser-local-storage@4.14.2: resolution: {integrity: sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==} dependencies: @@ -2706,6 +2750,10 @@ packages: resolution: {integrity: sha512-NaXVp3I8LdmJ54fn038KHgG7HmbIzZlKS2FkVf6mKcW5bYMJovkx4947joQyZk5yubxOZ+ddHSh79y39Aevufg==} dev: true + /@docsearch/css@3.5.1: + resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} + dev: true + /@docsearch/js@3.3.5(@algolia/client-search@4.14.2): resolution: {integrity: sha512-nZi074OCryZnzva2LNcbQkwBJIND6cvuFI4s1FIe6Ygf6n9g6B/IYUULXNx05rpoCZ+KEoEt3taROpsHBliuSw==} dependencies: @@ -2718,6 +2766,19 @@ packages: - react-dom dev: true + /@docsearch/js@3.5.1(@algolia/client-search@4.14.2)(search-insights@2.6.0): + resolution: {integrity: sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==} + dependencies: + '@docsearch/react': 3.5.1(@algolia/client-search@4.14.2)(search-insights@2.6.0) + preact: 10.11.0 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + /@docsearch/react@3.3.5(@algolia/client-search@4.14.2): resolution: {integrity: sha512-Zuxf4z5PZ9eIQkVCNu76v1H+KAztKItNn3rLzZa7kpBS+++TgNARITnZeUS7C1DKoAhJZFr6T/H+Lvc6h/iiYg==} peerDependencies: @@ -2740,6 +2801,29 @@ packages: - '@algolia/client-search' dev: true + /@docsearch/react@3.5.1(@algolia/client-search@4.14.2)(search-insights@2.6.0): + resolution: {integrity: sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) + '@docsearch/css': 3.5.1 + algoliasearch: 4.14.2 + transitivePeerDependencies: + - '@algolia/client-search' + - search-insights + dev: true + /@es-joy/jsdoccomment@0.37.1: resolution: {integrity: sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==} engines: {node: ^14 || ^16 || ^17 || ^18 || ^19 || ^20} @@ -4784,6 +4868,17 @@ packages: vue: 3.3.4 dev: true + /@vitejs/plugin-vue@4.2.3(vite@4.3.9)(vue@3.3.4): + resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.2.25 + dependencies: + vite: 4.3.9(@types/node@18.16.0) + vue: 3.3.4 + dev: true + /@vitest/coverage-istanbul@0.32.2(vitest@0.32.2): resolution: {integrity: sha512-B5VSvfzwTsDt9HjFmQ4sZ2tQHivmHJpAoG/BJwNNQeBtSCSdY1L6tfCjwZLo7ryOmZEDA3ck/DAmHCUZqa+MWA==} peerDependencies: @@ -13101,6 +13196,11 @@ packages: ajv-keywords: 5.1.0(ajv@8.11.0) dev: true + /search-insights@2.6.0: + resolution: {integrity: sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==} + engines: {node: '>=8.16.0'} + dev: true + /secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} dev: true @@ -14839,13 +14939,13 @@ packages: - terser dev: true - /vitepress@1.0.0-beta.1(@algolia/client-search@4.14.2)(@types/node@18.16.0): - resolution: {integrity: sha512-V2yyCwQ+v9fh7rbnGDLp8M7vHa9sLElexXf/JHtBOsOwv7ed9wt1QI4WUagYgKR3TeoJT9v2s6f0UaQSne0EvQ==} + /vitepress@1.0.0-beta.2(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0): + resolution: {integrity: sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==} hasBin: true dependencies: - '@docsearch/css': 3.3.5 - '@docsearch/js': 3.3.5(@algolia/client-search@4.14.2) - '@vitejs/plugin-vue': 4.2.3(vite@4.3.8)(vue@3.3.4) + '@docsearch/css': 3.5.1 + '@docsearch/js': 3.5.1(@algolia/client-search@4.14.2)(search-insights@2.6.0) + '@vitejs/plugin-vue': 4.2.3(vite@4.3.9)(vue@3.3.4) '@vue/devtools-api': 6.5.0 '@vueuse/core': 10.1.2(vue@3.3.4) '@vueuse/integrations': 10.1.2(focus-trap@7.4.3)(vue@3.3.4) @@ -14854,7 +14954,7 @@ packages: mark.js: 8.11.1 minisearch: 6.1.0 shiki: 0.14.2 - vite: 4.3.8(@types/node@18.16.0) + vite: 4.3.9(@types/node@18.16.0) vue: 3.3.4 transitivePeerDependencies: - '@algolia/client-search' @@ -14874,6 +14974,7 @@ packages: - react - react-dom - sass + - search-insights - sortablejs - stylus - sugarss From 34a47706fd94c46862f9be1b32d328c48e658ed5 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 13:41:36 +0300 Subject: [PATCH 072/595] update pnpm-lock.yaml --- pnpm-lock.yaml | 689 +++++++++++++++++++------------------------------ 1 file changed, 272 insertions(+), 417 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e3b80f0df..d650bfbaf2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -353,10 +353,10 @@ importers: version: 1.0.0 vitepress: specifier: ^1.0.0-alpha.72 - version: 1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) + version: 1.0.0-alpha.72(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) vitepress-plugin-search: specifier: ^1.0.4-alpha.20 - version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.2.47) + version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.2.47) packages/mermaid-example-diagram: dependencies: @@ -439,8 +439,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 unocss: - specifier: ^0.52.0 - version: 0.52.0(postcss@8.4.23)(rollup@2.79.1)(vite@4.3.3) + specifier: ^0.53.0 + version: 0.53.0(postcss@8.4.24)(rollup@2.79.1)(vite@4.3.9) unplugin-vue-components: specifier: ^0.25.0 version: 0.25.0(rollup@2.79.1)(vue@3.2.47) @@ -448,63 +448,11 @@ importers: specifier: ^4.3.3 version: 4.3.9(@types/node@18.16.0) vite-plugin-pwa: - specifier: ^0.15.0 - version: 0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4) - vitepress: - specifier: 1.0.0-beta.1 - version: 1.0.0-beta.1(@algolia/client-search@4.14.2)(@types/node@18.16.0) - workbox-window: - specifier: ^6.5.4 - version: 6.5.4 - - packages/mermaid/src/vitepress: - dependencies: - '@vueuse/core': - specifier: ^10.1.0 - version: 10.1.0(vue@3.2.47) - jiti: - specifier: ^1.18.2 - version: 1.18.2 - vue: - specifier: ^3.2.47 - version: 3.2.47 - devDependencies: - '@iconify-json/carbon': - specifier: ^1.1.16 - version: 1.1.16 - '@unocss/reset': - specifier: ^0.52.0 - version: 0.52.0 - '@vite-pwa/vitepress': - specifier: ^0.0.5 - version: 0.0.5(vite-plugin-pwa@0.15.0) - '@vitejs/plugin-vue': - specifier: ^4.2.1 - version: 4.2.1(vite@4.3.3)(vue@3.2.47) - fast-glob: - specifier: ^3.2.12 - version: 3.2.12 - https-localhost: - specifier: ^4.7.1 - version: 4.7.1 - pathe: - specifier: ^1.1.0 - version: 1.1.0 - unocss: - specifier: ^0.52.0 - version: 0.52.0(postcss@8.4.23)(rollup@2.79.1)(vite@4.3.3) - unplugin-vue-components: - specifier: ^0.24.1 - version: 0.24.1(rollup@2.79.1)(vue@3.2.47) - vite: - specifier: ^4.3.3 - version: 4.3.3(@types/node@18.16.0) - vite-plugin-pwa: - specifier: ^0.15.0 - version: 0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4) + specifier: ^0.16.0 + version: 0.16.0(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@6.5.4) vitepress: specifier: 1.0.0-beta.2 - version: 1.0.0-beta.2(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0) + version: 1.0.0-beta.2(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) workbox-window: specifier: ^6.5.4 version: 6.5.4 @@ -520,7 +468,7 @@ importers: devDependencies: webpack: specifier: ^5.74.0 - version: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + version: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 version: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) @@ -533,26 +481,20 @@ packages: /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2)(search-insights@2.6.0): resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} dependencies: - '@algolia/autocomplete-shared': 1.8.2 - dev: true - - /@algolia/autocomplete-core@1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0): - resolution: {integrity: sha512-hkG80c9kx9ClVAEcUJbTd2ziVC713x9Bji9Ty4XJfKXlxlsx3iXsoNhAwfeR4ulzIUg7OE5gez0UU1zVDdG7kg==} - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0) - '@algolia/autocomplete-shared': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2)(search-insights@2.6.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights dev: true - /@algolia/autocomplete-plugin-algolia-insights@1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0): - resolution: {integrity: sha512-2LVsf4W66hVHQ3Ua/8k15oPlxjELCztbAkQm/hP42Sw+GLkHAdY1vaVRYziaWq64+Oljfg6FKkZHCdgXH+CGIA==} + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2)(search-insights@2.6.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} peerDependencies: search-insights: '>= 1 < 3' dependencies: - '@algolia/autocomplete-shared': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2) search-insights: 2.6.0 transitivePeerDependencies: - '@algolia/client-search' @@ -570,26 +512,18 @@ packages: algoliasearch: 4.17.2 dev: true - /@algolia/autocomplete-preset-algolia@1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2): - resolution: {integrity: sha512-pqgIm2GNqtCT59Y1ICctIPrYTi34+wNPiNWEclD/yDzp5uDUUsyGe5XrUjCNyQRTKonAlmYxoaEHOn8FWgmBHA==} + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: - '@algolia/autocomplete-shared': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) - '@algolia/client-search': 4.14.2 - algoliasearch: 4.14.2 - dev: true - - /@algolia/autocomplete-shared@1.8.2: - resolution: {integrity: sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==} + '@algolia/client-search': 4.17.2 + algoliasearch: 4.17.2 dev: true - /@algolia/autocomplete-shared@1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2): - resolution: {integrity: sha512-XxX6YDn+7LG+SmdpXEOnj7fc3TjiVpQ0CbGhjLwrd2tYr6LVY2D4Iiu/iuYJ4shvVDWWnpwArSk0uIWC/8OPUA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' + /@algolia/cache-browser-local-storage@4.17.2: + resolution: {integrity: sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==} dependencies: '@algolia/cache-common': 4.17.2 dev: true @@ -702,11 +636,7 @@ packages: resolution: {integrity: sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==} dev: true - /@antfu/utils@0.7.2: - resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==} - dev: true - - /@apideck/better-ajv-errors@0.3.6(ajv@8.11.0): + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} peerDependencies: @@ -848,7 +778,7 @@ packages: '@applitools/eg-frpc': 1.0.3 '@applitools/eg-socks5-proxy-server': 0.5.4 '@applitools/logger': 1.1.53 - dotenv: 16.3.0 + dotenv: 16.3.1 encoding: 0.1.13 fastify: 3.29.5 fastify-plugin: 3.0.1 @@ -2830,7 +2760,7 @@ packages: bluebird: 3.7.1 debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + webpack: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -2853,31 +2783,11 @@ packages: resolution: {integrity: sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==} dev: true - /@docsearch/css@3.3.5: - resolution: {integrity: sha512-NaXVp3I8LdmJ54fn038KHgG7HmbIzZlKS2FkVf6mKcW5bYMJovkx4947joQyZk5yubxOZ+ddHSh79y39Aevufg==} - dev: true - - /@docsearch/css@3.5.0: - resolution: {integrity: sha512-Ob5FQLubplcBNihAVtriR59FRBeP8u69F6mu4L4yIr60KfsPc10bOV0DoPErJw0zF9IBN2cNLW9qdmt8zWPxyg==} - dev: true - - /@docsearch/js@3.3.5(@algolia/client-search@4.14.2): - resolution: {integrity: sha512-nZi074OCryZnzva2LNcbQkwBJIND6cvuFI4s1FIe6Ygf6n9g6B/IYUULXNx05rpoCZ+KEoEt3taROpsHBliuSw==} + /@docsearch/js@3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0): + resolution: {integrity: sha512-EXi8de5njxgP6TV3N9ytnGRLG9zmBNTEZjR4VzwPcpPLbZxxTLG2gaFyJyKiFVQxHW/DPlMrDJA3qoRRGEkgZw==} dependencies: '@docsearch/react': 3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0) preact: 10.15.1 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - dev: true - - /@docsearch/js@3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0): - resolution: {integrity: sha512-WqB+z+zVKSXDkGq028nClT9RvMzfFlemZuIulX5ZwWkdUtl4k7M9cmZA/c6kuZf7FG24XQsMHWuBjeUo9hLRyA==} - dependencies: - '@docsearch/react': 3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0) - preact: 10.11.0 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -2904,28 +2814,6 @@ packages: '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.17.2)(algoliasearch@4.17.2) '@docsearch/css': 3.5.1 algoliasearch: 4.17.2 - transitivePeerDependencies: - - '@algolia/client-search' - dev: true - - /@docsearch/react@3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0): - resolution: {integrity: sha512-3IG8mmSMzSHNGy2S1VuPyYU9tFCxFpj5Ov8SYwsSHM4yMvFsaO9oFxXocA5lSenliIELhuOuS5+BdxHa/Qlf2A==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - dependencies: - '@algolia/autocomplete-core': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2)(search-insights@2.6.0) - '@algolia/autocomplete-preset-algolia': 1.9.2(@algolia/client-search@4.14.2)(algoliasearch@4.14.2) - '@docsearch/css': 3.5.0 - algoliasearch: 4.14.2 transitivePeerDependencies: - '@algolia/client-search' - search-insights @@ -2940,8 +2828,8 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true - /@esbuild/android-arm64@0.17.18: - resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2958,8 +2846,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.18: - resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -2976,8 +2864,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.18: - resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} + /@esbuild/android-x64@0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2994,8 +2882,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.18: - resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} + /@esbuild/darwin-arm64@0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3012,8 +2900,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.18: - resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} + /@esbuild/darwin-x64@0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3030,8 +2918,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.18: - resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} + /@esbuild/freebsd-arm64@0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3048,8 +2936,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.18: - resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} + /@esbuild/freebsd-x64@0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3066,8 +2954,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.18: - resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3084,8 +2972,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.18: - resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3102,8 +2990,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.18: - resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} + /@esbuild/linux-ia32@0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3120,8 +3008,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.18: - resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3138,8 +3026,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.18: - resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} + /@esbuild/linux-mips64el@0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3156,8 +3044,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.18: - resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} + /@esbuild/linux-ppc64@0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3174,8 +3062,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.18: - resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} + /@esbuild/linux-riscv64@0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3192,8 +3080,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.18: - resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} + /@esbuild/linux-s390x@0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3210,8 +3098,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.18: - resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} + /@esbuild/linux-x64@0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3228,8 +3116,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.18: - resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} + /@esbuild/netbsd-x64@0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3246,8 +3134,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.18: - resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} + /@esbuild/openbsd-x64@0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3264,8 +3152,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.18: - resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} + /@esbuild/sunos-x64@0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3282,8 +3170,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.18: - resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} + /@esbuild/win32-arm64@0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3300,8 +3188,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.18: - resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} + /@esbuild/win32-ia32@0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3318,8 +3206,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.18: - resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} + /@esbuild/win32-x64@0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -4489,7 +4377,6 @@ packages: /@types/web-bluetooth@0.0.16: resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} - dev: false /@types/web-bluetooth@0.0.17: resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} @@ -4709,12 +4596,20 @@ packages: eslint-visitor-keys: 3.4.1 dev: true - /@unocss/astro@0.52.0(rollup@2.79.1)(vite@4.3.3): - resolution: {integrity: sha512-vgEOFj+q4DY1F0kwqydbaNQjZSSYBqCV8eiE5ZpRfhQ+k0S71e7yudgYW5Np2sYBbih7v57GKnuQDwno3M6yDQ==} + /@typescript-eslint/visitor-keys@5.59.11: + resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@unocss/core': 0.52.0 - '@unocss/reset': 0.52.0 - '@unocss/vite': 0.52.0(rollup@2.79.1)(vite@4.3.3) + '@typescript-eslint/types': 5.59.11 + eslint-visitor-keys: 3.4.1 + dev: true + + /@unocss/astro@0.53.0(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-8bR7ysIMZEOpcjd/cVmogcABSFDYPjUqMnbflv44p1A2/deemo9CIkpRARoq/96NQuzWJsKhKodcQodExZcqiA==} + dependencies: + '@unocss/core': 0.53.0 + '@unocss/reset': 0.53.0 + '@unocss/vite': 0.53.0(rollup@2.79.1)(vite@4.3.9) transitivePeerDependencies: - rollup - vite @@ -4746,8 +4641,8 @@ packages: resolution: {integrity: sha512-D9A3uFT6jSj/EgMOCpQQ+dPadLQDiEIb0BHa7BYW7/3STijnPMcFjPVjzABj9Wn7RQjka/MZ2/AvfH9eYMTR8g==} engines: {node: '>=14'} dependencies: - '@unocss/core': 0.52.0 - unconfig: 0.3.7 + '@unocss/core': 0.53.0 + unconfig: 0.3.9 dev: true /@unocss/core@0.53.0: @@ -4767,8 +4662,8 @@ packages: sirv: 2.0.3 dev: true - /@unocss/postcss@0.52.0(postcss@8.4.23): - resolution: {integrity: sha512-1KzpQlcMrLV0ZSbP+pNYuvXg/1+8c2HNKHBBEbzlsXI7G+f4IJPsxtYXE3N2HVIkEjxumcMrxV8dqXhcBLQShA==} + /@unocss/postcss@0.53.0(postcss@8.4.24): + resolution: {integrity: sha512-q+5aDvkwP1eEhDmdz32WrwsGEEcJdQLy3apiU/df+CaL71HATvUfMZJVZbXZlFqoed703c+cGLHOhRHMPDk/dw==} engines: {node: '>=14'} peerDependencies: postcss: ^8.4.21 @@ -4790,9 +4685,9 @@ packages: /@unocss/preset-icons@0.53.0: resolution: {integrity: sha512-0Et3dtrmBRVPZ5pGiITrwb9O01M88s0juOVSM7L4z0Uf0RNXuPCGwh2N5TRX2IIS7LAi4k0tAXFUORlkUiC2Lg==} dependencies: - '@iconify/utils': 2.1.5 - '@unocss/core': 0.52.0 - ofetch: 1.0.1 + '@iconify/utils': 2.1.6 + '@unocss/core': 0.53.0 + ofetch: 1.1.0 transitivePeerDependencies: - supports-color dev: true @@ -4828,8 +4723,8 @@ packages: /@unocss/preset-web-fonts@0.53.0: resolution: {integrity: sha512-CAZW/PSp9+VBvzE/T56v2Yb8Nk3xF9XJaQrDydF9cAPyz/gVOZBbKQSDS8OqyAqKiXbnn+NYCwEqTG8v/YOMyw==} dependencies: - '@unocss/core': 0.52.0 - ofetch: 1.0.1 + '@unocss/core': 0.53.0 + ofetch: 1.1.0 dev: true /@unocss/preset-wind@0.53.0: @@ -4878,8 +4773,8 @@ packages: '@unocss/core': 0.53.0 dev: true - /@unocss/vite@0.52.0(rollup@2.79.1)(vite@4.3.3): - resolution: {integrity: sha512-Ip2Jyu7dywqEsy3EacnItE+VXB77R72mQ9oA6TyrZpov5ZKoS327kqQSzHS/lYXzZ2yomFq9EsqbKQWIEInH9Q==} + /@unocss/vite@0.53.0(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-JoZhKVNruRjfySMVg/zNJbLEn/NTXj29Wf0SN4++xnGKrSapkPzYC46psL5bm5N5v4SHdpepTCoonC3FWCY6Fw==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 dependencies: @@ -4903,7 +4798,7 @@ packages: peerDependencies: vite-plugin-pwa: '>=0.16.3 <1' dependencies: - vite-plugin-pwa: 0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4) + vite-plugin-pwa: 0.16.0(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@6.5.4) dev: true /@vitejs/plugin-vue@4.2.1(vite@4.3.9)(vue@3.2.47): @@ -4958,14 +4853,14 @@ packages: '@vitest/utils': 0.32.2 concordance: 5.0.4 p-limit: 4.0.0 - pathe: 1.1.1 + pathe: 1.1.0 dev: true /@vitest/snapshot@0.32.2: resolution: {integrity: sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A==} dependencies: magic-string: 0.30.0 - pathe: 1.1.1 + pathe: 1.1.0 pretty-format: 27.5.1 dev: true @@ -5178,7 +5073,6 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue - dev: false /@vueuse/core@10.2.0(vue@3.3.4): resolution: {integrity: sha512-aHBnoCteIS3hFu7ZZkVB93SanVDY6t4TIb7XDLxJT/HQdAZz+2RdIEJ8rj5LUoEJr7Damb5+sJmtpCwGez5ozQ==} @@ -5244,7 +5138,6 @@ packages: /@vueuse/metadata@10.1.0: resolution: {integrity: sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg==} - dev: false /@vueuse/metadata@10.2.0: resolution: {integrity: sha512-IR7Mkq6QSgZ38q/2ZzOt+Zz1OpcEsnwE64WBumDQ+RGKrosFCtUA2zgRrOqDEzPBXrVB+4HhFkwDjQMu0fDBKw==} @@ -5257,7 +5150,6 @@ packages: transitivePeerDependencies: - '@vue/composition-api' - vue - dev: false /@vueuse/shared@10.2.0(vue@3.3.4): resolution: {integrity: sha512-dIeA8+g9Av3H5iF4NXR/sft4V6vys76CpZ6hxwj8eMXybXk2WRl3scSsOVi+kQ9SX38COR7AH7WwY83UcuxbSg==} @@ -5433,8 +5325,8 @@ packages: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + webpack: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) dev: true /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): @@ -5947,8 +5839,8 @@ packages: dependencies: '@babel/core': 7.22.5 find-cache-dir: 3.3.2 - schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + schema-utils: 4.2.0 + webpack: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) dev: true /babel-plugin-istanbul@6.1.1: @@ -6182,7 +6074,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001503 + caniuse-lite: 1.0.30001504 electron-to-chromium: 1.4.433 node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) @@ -6327,8 +6219,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001503: - resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} + /caniuse-lite@1.0.30001504: + resolution: {integrity: sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==} dev: true /caseless@0.12.0: @@ -7862,8 +7754,8 @@ packages: is-obj: 2.0.0 dev: true - /dotenv@16.3.0: - resolution: {integrity: sha512-tHB+hmf8MRCkT3VVivGiG8kq9HiGTmQ3FzOKgztfpJQH1IWuZTOvKSJmHNnQPowecAmkCJhLrxdPhOr06LLqIQ==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: true @@ -8039,34 +7931,34 @@ packages: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: true - /esbuild@0.17.18: - resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} + /esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.18 - '@esbuild/android-arm64': 0.17.18 - '@esbuild/android-x64': 0.17.18 - '@esbuild/darwin-arm64': 0.17.18 - '@esbuild/darwin-x64': 0.17.18 - '@esbuild/freebsd-arm64': 0.17.18 - '@esbuild/freebsd-x64': 0.17.18 - '@esbuild/linux-arm': 0.17.18 - '@esbuild/linux-arm64': 0.17.18 - '@esbuild/linux-ia32': 0.17.18 - '@esbuild/linux-loong64': 0.17.18 - '@esbuild/linux-mips64el': 0.17.18 - '@esbuild/linux-ppc64': 0.17.18 - '@esbuild/linux-riscv64': 0.17.18 - '@esbuild/linux-s390x': 0.17.18 - '@esbuild/linux-x64': 0.17.18 - '@esbuild/netbsd-x64': 0.17.18 - '@esbuild/openbsd-x64': 0.17.18 - '@esbuild/sunos-x64': 0.17.18 - '@esbuild/win32-arm64': 0.17.18 - '@esbuild/win32-ia32': 0.17.18 - '@esbuild/win32-x64': 0.17.18 + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 dev: true /esbuild@0.18.0: @@ -11716,13 +11608,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.0: - resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.1: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} @@ -11762,10 +11647,10 @@ packages: /mlly@1.3.0: resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 pathe: 1.1.0 - pkg-types: 1.0.2 - ufo: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.1.2 dev: true /mri@1.2.0: @@ -12478,7 +12363,7 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.2.0 + mlly: 1.3.0 pathe: 1.1.0 dev: true @@ -14107,8 +13992,8 @@ packages: iterm2-version: 4.2.0 dev: true - /terser-webpack-plugin@5.3.6(esbuild@0.17.18)(webpack@5.75.0): - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin@5.3.9(esbuild@0.18.0)(webpack@5.74.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -14123,13 +14008,13 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 - esbuild: 0.17.18 + '@jridgewell/trace-mapping': 0.3.18 + esbuild: 0.18.0 jest-worker: 27.5.1 - schema-utils: 3.1.1 - serialize-javascript: 6.0.0 - terser: 5.15.1 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.18.0 + webpack: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) dev: true /terser@5.18.0: @@ -14643,8 +14528,8 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unocss@0.52.0(postcss@8.4.23)(rollup@2.79.1)(vite@4.3.3): - resolution: {integrity: sha512-MholrJpVLH95SwCiQzXJiimkpUXqI1HWZCZBh4jklpfSGo3eZeo62f1BpXZThmLDPLZoBsf0qqItcvB803X37A==} + /unocss@0.53.0(postcss@8.4.24)(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-kY4h5ERiDYlSnL2X+hbDfh+uaF7QNouy7j51GOTUr3Q0aaWehaNd05b15SjHrab559dEC0mYfrSEdh/DnCK1cw==} engines: {node: '>=14'} peerDependencies: '@unocss/webpack': 0.53.0 @@ -14652,26 +14537,26 @@ packages: '@unocss/webpack': optional: true dependencies: - '@unocss/astro': 0.52.0(rollup@2.79.1)(vite@4.3.3) - '@unocss/cli': 0.52.0(rollup@2.79.1) - '@unocss/core': 0.52.0 - '@unocss/extractor-arbitrary-variants': 0.52.0 - '@unocss/postcss': 0.52.0(postcss@8.4.23) - '@unocss/preset-attributify': 0.52.0 - '@unocss/preset-icons': 0.52.0 - '@unocss/preset-mini': 0.52.0 - '@unocss/preset-tagify': 0.52.0 - '@unocss/preset-typography': 0.52.0 - '@unocss/preset-uno': 0.52.0 - '@unocss/preset-web-fonts': 0.52.0 - '@unocss/preset-wind': 0.52.0 - '@unocss/reset': 0.52.0 - '@unocss/transformer-attributify-jsx': 0.52.0 - '@unocss/transformer-attributify-jsx-babel': 0.52.0 - '@unocss/transformer-compile-class': 0.52.0 - '@unocss/transformer-directives': 0.52.0 - '@unocss/transformer-variant-group': 0.52.0 - '@unocss/vite': 0.52.0(rollup@2.79.1)(vite@4.3.3) + '@unocss/astro': 0.53.0(rollup@2.79.1)(vite@4.3.9) + '@unocss/cli': 0.53.0(rollup@2.79.1) + '@unocss/core': 0.53.0 + '@unocss/extractor-arbitrary-variants': 0.53.0 + '@unocss/postcss': 0.53.0(postcss@8.4.24) + '@unocss/preset-attributify': 0.53.0 + '@unocss/preset-icons': 0.53.0 + '@unocss/preset-mini': 0.53.0 + '@unocss/preset-tagify': 0.53.0 + '@unocss/preset-typography': 0.53.0 + '@unocss/preset-uno': 0.53.0 + '@unocss/preset-web-fonts': 0.53.0 + '@unocss/preset-wind': 0.53.0 + '@unocss/reset': 0.53.0 + '@unocss/transformer-attributify-jsx': 0.53.0 + '@unocss/transformer-attributify-jsx-babel': 0.53.0 + '@unocss/transformer-compile-class': 0.53.0 + '@unocss/transformer-directives': 0.53.0 + '@unocss/transformer-variant-group': 0.53.0 + '@unocss/vite': 0.53.0(rollup@2.79.1)(vite@4.3.9) transitivePeerDependencies: - postcss - rollup @@ -14846,7 +14731,7 @@ packages: dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) - mlly: 1.2.0 + mlly: 1.3.0 pathe: 1.1.0 picocolors: 1.0.0 vite: 4.3.9(@types/node@18.16.0) @@ -14874,8 +14759,9 @@ packages: - supports-color dev: true - /vite-plugin-pwa@0.15.0(vite@4.3.3)(workbox-build@6.5.4)(workbox-window@6.5.4): - resolution: {integrity: sha512-gpmx3BeubsRIXRBkjPToOTJbo8fknNmZFQs24i0TPZyaNVa0n27YHDo0Y72amnO70WvHKGE3e1fn8SYUP7e8SA==} + /vite-plugin-pwa@0.16.0(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@6.5.4): + resolution: {integrity: sha512-E+AQRzHxqNU4ZhEeR8X37/foZB+ezJEhXauE/mcf1UITY6k2Pa1dtlFl+BQu57fTdiVlWim5S0Qy44Yap93Dkg==} + engines: {node: '>=16.0.0'} peerDependencies: vite: ^3.1.0 || ^4.0.0 workbox-build: ^7.0.0 @@ -14884,8 +14770,8 @@ packages: debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.2.12 pretty-bytes: 6.1.0 - vite: 4.3.3(@types/node@18.16.0) - workbox-build: 6.5.4 + vite: 4.3.9(@types/node@18.16.0) + workbox-build: 7.0.0 workbox-window: 6.5.4 transitivePeerDependencies: - supports-color @@ -14917,14 +14803,14 @@ packages: optional: true dependencies: '@types/node': 18.16.0 - esbuild: 0.17.18 + esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 optionalDependencies: fsevents: 2.3.2 dev: true - /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-beta.1)(vue@3.2.47): + /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.2.47): resolution: {integrity: sha512-zG+ev9pw1Mg7htABlFCNXb8XwnKN+qfTKw+vU0Ers6RIrABx+45EAAFBoaL1mEpl1FRFn1o/dQ7F4b8GP6HdGQ==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} peerDependencies: @@ -14937,87 +14823,46 @@ packages: flexsearch: 0.7.31 glob-to-regexp: 0.4.1 markdown-it: 13.0.1 - vitepress: 1.0.0-beta.1(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) + vitepress: 1.0.0-alpha.72(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) vue: 3.2.47 dev: true - /vitepress@1.0.0-alpha.72(@algolia/client-search@4.14.2)(@types/node@18.16.0): + /vitepress@1.0.0-alpha.72(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0): resolution: {integrity: sha512-Ou7fNE/OVYLrKGQMHSTVG6AcNsdv7tm4ACrdhx93SPMzEDj8UgIb4RFa5CTTowaYf3jeDGi2EAJlzXVC+IE3dg==} hasBin: true dependencies: - '@docsearch/css': 3.3.3 - '@docsearch/js': 3.3.5(@algolia/client-search@4.14.2) - '@vitejs/plugin-vue': 4.2.3(vite@4.3.8)(vue@3.3.4) - '@vue/devtools-api': 6.5.0 - '@vueuse/core': 10.1.2(vue@3.3.4) - body-scroll-lock: 4.0.0-beta.0 - mark.js: 8.11.1 - minisearch: 6.0.1 - shiki: 0.14.1 - vite: 4.3.8(@types/node@18.16.0) - vue: 3.3.4 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/node' - - '@types/react' - - '@vue/composition-api' - - less - - react - - react-dom - - sass - - stylus - - sugarss - - terser - dev: true - - /vitepress@1.0.0-beta.1(@algolia/client-search@4.14.2)(@types/node@18.16.0): - resolution: {integrity: sha512-V2yyCwQ+v9fh7rbnGDLp8M7vHa9sLElexXf/JHtBOsOwv7ed9wt1QI4WUagYgKR3TeoJT9v2s6f0UaQSne0EvQ==} - hasBin: true - dependencies: - '@docsearch/css': 3.3.5 - '@docsearch/js': 3.3.5(@algolia/client-search@4.14.2) - '@vitejs/plugin-vue': 4.2.3(vite@4.3.8)(vue@3.3.4) + '@docsearch/css': 3.5.1 + '@docsearch/js': 3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0) + '@vitejs/plugin-vue': 4.2.1(vite@4.3.9)(vue@3.2.47) '@vue/devtools-api': 6.5.0 - '@vueuse/core': 10.1.2(vue@3.3.4) - '@vueuse/integrations': 10.1.2(focus-trap@7.4.3)(vue@3.3.4) + '@vueuse/core': 10.1.0(vue@3.2.47) body-scroll-lock: 4.0.0-beta.0 - focus-trap: 7.4.3 mark.js: 8.11.1 minisearch: 6.1.0 shiki: 0.14.2 - vite: 4.3.8(@types/node@18.16.0) - vue: 3.3.4 + vite: 4.3.9(@types/node@18.16.0) + vue: 3.2.47 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' - '@types/react' - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - fuse.js - - idb-keyval - - jwt-decode - less - - nprogress - - qrcode - react - react-dom - sass - - sortablejs + - search-insights - stylus - sugarss - terser - - universal-cookie dev: true - /vitepress@1.0.0-beta.2(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0): + /vitepress@1.0.0-beta.2(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0): resolution: {integrity: sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==} hasBin: true dependencies: - '@docsearch/css': 3.5.0 - '@docsearch/js': 3.5.0(@algolia/client-search@4.14.2)(search-insights@2.6.0) + '@docsearch/css': 3.5.1 + '@docsearch/js': 3.5.1(@algolia/client-search@4.17.2)(search-insights@2.6.0) '@vitejs/plugin-vue': 4.2.3(vite@4.3.9)(vue@3.3.4) '@vue/devtools-api': 6.5.0 '@vueuse/core': 10.2.0(vue@3.3.4) @@ -15169,7 +15014,6 @@ packages: optional: true dependencies: vue: 3.2.47 - dev: false /vue-demi@0.14.5(vue@3.3.4): resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} @@ -15339,9 +15183,9 @@ packages: import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) - webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) - webpack-merge: 5.8.0 + webpack: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.74.0) + webpack-merge: 5.9.0 dev: true /webpack-dev-middleware@5.3.3(webpack@5.74.0): @@ -15354,8 +15198,8 @@ packages: memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) + schema-utils: 4.2.0 + webpack: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) dev: true /webpack-dev-server@4.11.1(webpack-cli@4.10.0)(webpack@5.74.0): @@ -15396,10 +15240,10 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) - webpack-dev-middleware: 5.3.3(webpack@5.75.0) - ws: 8.9.0 + webpack: 5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) + webpack-dev-middleware: 5.3.3(webpack@5.74.0) + ws: 8.13.0 transitivePeerDependencies: - bufferutil - debug @@ -15424,8 +15268,8 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true - /webpack@5.75.0(esbuild@0.17.18)(webpack-cli@4.10.0): - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack@5.74.0(esbuild@0.18.0)(webpack-cli@4.10.0): + resolution: {integrity: sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -15455,7 +15299,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6(esbuild@0.17.18)(webpack@5.75.0) + terser-webpack-plugin: 5.3.9(esbuild@0.18.0)(webpack@5.74.0) watchpack: 2.4.0 webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.74.0) webpack-sources: 3.2.3 @@ -15605,22 +15449,22 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true - /workbox-background-sync@6.5.4: - resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==} + /workbox-background-sync@7.0.0: + resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} dependencies: idb: 7.1.1 - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true - /workbox-broadcast-update@6.5.4: - resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==} + /workbox-broadcast-update@7.0.0: + resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} dependencies: - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true - /workbox-build@6.5.4: - resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} - engines: {node: '>=10.0.0'} + /workbox-build@7.0.0: + resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} + engines: {node: '>=16.0.0'} dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) '@babel/core': 7.22.5 @@ -15644,104 +15488,108 @@ packages: strip-comments: 2.0.1 tempy: 0.6.0 upath: 1.2.0 - workbox-background-sync: 6.5.4 - workbox-broadcast-update: 6.5.4 - workbox-cacheable-response: 6.5.4 - workbox-core: 6.5.4 - workbox-expiration: 6.5.4 - workbox-google-analytics: 6.5.4 - workbox-navigation-preload: 6.5.4 - workbox-precaching: 6.5.4 - workbox-range-requests: 6.5.4 - workbox-recipes: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 - workbox-streams: 6.5.4 - workbox-sw: 6.5.4 - workbox-window: 6.5.4 + workbox-background-sync: 7.0.0 + workbox-broadcast-update: 7.0.0 + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-google-analytics: 7.0.0 + workbox-navigation-preload: 7.0.0 + workbox-precaching: 7.0.0 + workbox-range-requests: 7.0.0 + workbox-recipes: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + workbox-streams: 7.0.0 + workbox-sw: 7.0.0 + workbox-window: 7.0.0 transitivePeerDependencies: - '@types/babel__core' - supports-color dev: true - /workbox-cacheable-response@6.5.4: - resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==} + /workbox-cacheable-response@7.0.0: + resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} dependencies: - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true /workbox-core@6.5.4: resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==} dev: true - /workbox-expiration@6.5.4: - resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==} + /workbox-core@7.0.0: + resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} + dev: true + + /workbox-expiration@7.0.0: + resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} dependencies: idb: 7.1.1 - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true - /workbox-google-analytics@6.5.4: - resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==} + /workbox-google-analytics@7.0.0: + resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} dependencies: - workbox-background-sync: 6.5.4 - workbox-core: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 + workbox-background-sync: 7.0.0 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 dev: true - /workbox-navigation-preload@6.5.4: - resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==} + /workbox-navigation-preload@7.0.0: + resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} dependencies: - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true - /workbox-precaching@6.5.4: - resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==} + /workbox-precaching@7.0.0: + resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} dependencies: - workbox-core: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 dev: true - /workbox-range-requests@6.5.4: - resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==} + /workbox-range-requests@7.0.0: + resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} dependencies: - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true - /workbox-recipes@6.5.4: - resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==} + /workbox-recipes@7.0.0: + resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} dependencies: - workbox-cacheable-response: 6.5.4 - workbox-core: 6.5.4 - workbox-expiration: 6.5.4 - workbox-precaching: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-precaching: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 dev: true - /workbox-routing@6.5.4: - resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==} + /workbox-routing@7.0.0: + resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} dependencies: - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true - /workbox-strategies@6.5.4: - resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==} + /workbox-strategies@7.0.0: + resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} dependencies: - workbox-core: 6.5.4 + workbox-core: 7.0.0 dev: true - /workbox-streams@6.5.4: - resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==} + /workbox-streams@7.0.0: + resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} dependencies: - workbox-core: 6.5.4 - workbox-routing: 6.5.4 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 dev: true - /workbox-sw@6.5.4: - resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} + /workbox-sw@7.0.0: + resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} dev: true /workbox-window@6.5.4: @@ -15751,6 +15599,13 @@ packages: workbox-core: 6.5.4 dev: true + /workbox-window@7.0.0: + resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} + dependencies: + '@types/trusted-types': 2.0.3 + workbox-core: 7.0.0 + dev: true + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} From a92571d588a3cadf36442fd392dc4401c7abd901 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 17:40:01 +0300 Subject: [PATCH 073/595] add type-fest to mermaid dev deps --- packages/mermaid/package.json | 1 + pnpm-lock.yaml | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index c29ab82c75..285534df9c 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -103,6 +103,7 @@ "remark-gfm": "^3.0.1", "rimraf": "^5.0.0", "start-server-and-test": "^2.0.0", + "type-fest": "^3.12.0", "typedoc": "^0.24.5", "typedoc-plugin-markdown": "^3.15.2", "typescript": "^5.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d650bfbaf2..94486fbf87 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -339,6 +339,9 @@ importers: start-server-and-test: specifier: ^2.0.0 version: 2.0.0 + type-fest: + specifier: ^3.12.0 + version: 3.12.0 typedoc: specifier: ^0.24.5 version: 0.24.5(typescript@5.1.3) @@ -356,7 +359,7 @@ importers: version: 1.0.0-alpha.72(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) vitepress-plugin-search: specifier: ^1.0.4-alpha.20 - version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.2.47) + version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.3.4) packages/mermaid-example-diagram: dependencies: @@ -14341,6 +14344,11 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@3.12.0: + resolution: {integrity: sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==} + engines: {node: '>=14.16'} + dev: true + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -14810,7 +14818,7 @@ packages: fsevents: 2.3.2 dev: true - /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.2.47): + /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.3.4): resolution: {integrity: sha512-zG+ev9pw1Mg7htABlFCNXb8XwnKN+qfTKw+vU0Ers6RIrABx+45EAAFBoaL1mEpl1FRFn1o/dQ7F4b8GP6HdGQ==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} peerDependencies: @@ -14824,7 +14832,7 @@ packages: glob-to-regexp: 0.4.1 markdown-it: 13.0.1 vitepress: 1.0.0-alpha.72(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0) - vue: 3.2.47 + vue: 3.3.4 dev: true /vitepress@1.0.0-alpha.72(@algolia/client-search@4.17.2)(@types/node@18.16.0)(search-insights@2.6.0): From c894c1f5b5b5d7cbf21368ae118310ce239b5a78 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 17:45:38 +0300 Subject: [PATCH 074/595] add `Required` and `RequiredDeep` to pieDb, add config functions --- packages/mermaid/src/diagrams/pie/pieDb.ts | 55 +++++++++++++------ packages/mermaid/src/diagrams/pie/pieTypes.ts | 13 ++++- 2 files changed, 47 insertions(+), 21 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index 027356b214..7e8e39f060 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -1,6 +1,6 @@ import { log } from '../../logger.js'; import { parseDirective as _parseDirective } from '../../directiveUtils.js'; -import { getConfig } from '../../config.js'; +import { getConfig as commonGetConfig } from '../../config.js'; import { sanitizeText } from '../common/common.js'; import { setAccTitle, @@ -13,14 +13,15 @@ import { } from '../../commonDb.js'; import type { ParseDirectiveDefinition } from '../../diagram-api/types.js'; import type { PieFields, PieDb, Sections, PieDiagramConfig } from './pieTypes.js'; +import type { RequiredDeep } from 'type-fest'; -export const DEFAULT_PIE_CONFIG: PieDiagramConfig = { +export const DEFAULT_PIE_CONFIG: Required = { useMaxWidth: true, useWidth: 1200, textPosition: 0.75, } as const; -export const DEFAULT_PIE_DB: PieFields = { +export const DEFAULT_PIE_DB: RequiredDeep = { sections: {}, showData: false, config: DEFAULT_PIE_CONFIG, @@ -28,18 +29,38 @@ export const DEFAULT_PIE_DB: PieFields = { let sections: Sections = DEFAULT_PIE_DB.sections; let showData: boolean = DEFAULT_PIE_DB.showData; -const config: PieDiagramConfig = { +const config: Required = { useWidth: DEFAULT_PIE_DB.config.useWidth, useMaxWidth: DEFAULT_PIE_DB.config.useMaxWidth, textPosition: DEFAULT_PIE_DB.config.textPosition, }; -export const parseDirective: ParseDirectiveDefinition = (statement, context, type) => { +const setConfig = (conf: PieDiagramConfig): void => { + config.useWidth = conf.useWidth ?? DEFAULT_PIE_CONFIG.useWidth; + config.useMaxWidth = conf.useMaxWidth ?? DEFAULT_PIE_CONFIG.useMaxWidth; + config.textPosition = conf.textPosition ?? DEFAULT_PIE_CONFIG.textPosition; +}; + +const getConfig = (): Required => config; + +const reset = (): void => { + config.useWidth = DEFAULT_PIE_CONFIG.useWidth; + config.useMaxWidth = DEFAULT_PIE_CONFIG.useMaxWidth; + config.textPosition = DEFAULT_PIE_CONFIG.textPosition; +}; + +const parseDirective: ParseDirectiveDefinition = (statement, context, type) => { _parseDirective(this, statement, context, type); }; +const clear = (): void => { + sections = JSON.parse(JSON.stringify(DEFAULT_PIE_DB.sections)); + showData = DEFAULT_PIE_DB.showData; + commonClear(); +}; + const addSection = (label: string, value: number): void => { - label = sanitizeText(label, getConfig()); + label = sanitizeText(label, commonGetConfig()); if (sections[label] === undefined) { sections[label] = value; log.debug(`added new section: ${label}, with value: ${value}`); @@ -48,12 +69,6 @@ const addSection = (label: string, value: number): void => { const getSections = (): Sections => sections; -const setShowData = (toggle: boolean): void => { - showData = toggle; -}; - -const getShowData = (): boolean => showData; - const cleanupValue = (value: string): number => { if (value.substring(0, 1) === ':') { value = value.substring(1).trim(); @@ -63,22 +78,26 @@ const cleanupValue = (value: string): number => { } }; -const clear = (): void => { - sections = JSON.parse(JSON.stringify(DEFAULT_PIE_DB.sections)); - showData = DEFAULT_PIE_DB.showData; - commonClear(); +const setShowData = (toggle: boolean): void => { + showData = toggle; }; +const getShowData = (): boolean => showData; + export const db: PieDb = { - clear, - getConfig: () => getConfig().pie, + setConfig, + getConfig, + reset, + parseDirective, + clear, setDiagramTitle, getDiagramTitle, setAccTitle, getAccTitle, setAccDescription, getAccDescription, + addSection, getSections, cleanupValue, diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index 7c88e41c46..8e8826be3a 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -47,18 +47,25 @@ export interface D3Sections { } export interface PieDb extends DiagramDB { - clear: () => void; - getConfig: () => PieDiagramConfig | undefined; + // config + setConfig: (config: PieDiagramConfig) => void; + getConfig: () => Required; + reset: () => void; + + // common db parseDirective: ParseDirectiveDefinition; + clear: () => void; setDiagramTitle: (title: string) => void; getDiagramTitle: () => string; setAccTitle: (title: string) => void; getAccTitle: () => string; setAccDescription: (describetion: string) => void; getAccDescription: () => string; + + // diagram db addSection: (label: string, value: number) => void; - cleanupValue: (value: string) => number; getSections: () => Sections; + cleanupValue: (value: string) => number; setShowData: (toggle: boolean) => void; getShowData: () => boolean; } From 35c6b671de36543d7fbcd86a0b7063abe1ca638c Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 17:46:19 +0300 Subject: [PATCH 075/595] add config unit test cases for pie chart --- packages/mermaid/src/diagrams/pie/pie.spec.ts | 245 ++++++++++-------- 1 file changed, 133 insertions(+), 112 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts index 8f4a66bb08..af02ab7bb5 100644 --- a/packages/mermaid/src/diagrams/pie/pie.spec.ts +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -1,6 +1,6 @@ // @ts-ignore - jison doesn't export types import { parser } from './parser/pie.jison'; -import { db } from './pieDb.js'; +import { DEFAULT_PIE_DB, db } from './pieDb.js'; import { setConfig } from '../../config.js'; setConfig({ @@ -10,139 +10,160 @@ setConfig({ describe('pie chart', () => { beforeEach(() => { parser.yy = db; - parser.yy.clear(); + db.clear(); + db.reset(); }); - it('should handle very simple pie', () => { - parser.parse(`pie - "ash": 100 - `); - const sections = db.getSections(); - expect(sections['ash']).toBe(100); - }); - - it('should handle simple pie', () => { - parser.parse(`pie - "ash" : 60 - "bat" : 40 - `); - - const sections = db.getSections(); - expect(sections['ash']).toBe(60); - expect(sections['bat']).toBe(40); - }); - - it('should handle simple pie with comments', () => { - parser.parse(`pie - %% comments - "ash" : 60 - "bat" : 40 - `); - - const sections = db.getSections(); - expect(sections['ash']).toBe(60); - expect(sections['bat']).toBe(40); - }); + describe('parse', () => { + it('should handle very simple pie', () => { + parser.parse(`pie + "ash": 100 + `); + const sections = db.getSections(); + expect(sections['ash']).toBe(100); + }); - it('should handle simple pie with a directive', () => { - parser.parse(`%%{init: {'logLevel':0}}%% - pie - "ash" : 60 - "bat" : 40 - `); - const sections = db.getSections(); - expect(sections['ash']).toBe(60); - expect(sections['bat']).toBe(40); - }); + it('should handle simple pie', () => { + parser.parse(`pie + "ash" : 60 + "bat" : 40 + `); - it('should handle simple pie with a title', () => { - parser.parse(`pie title a 60/40 pie - "ash" : 60 - "bat" : 40 - `); + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); - const title = db.getDiagramTitle(); - expect(title).toBe('a 60/40 pie'); + it('should handle simple pie with comments', () => { + parser.parse(`pie + %% comments + "ash" : 60 + "bat" : 40 + `); - const sections = db.getSections(); - expect(sections['ash']).toBe(60); - expect(sections['bat']).toBe(40); - }); + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); - it('should handle simple pie with an acc title (accTitle)', () => { - parser.parse(`pie title a neat chart - accTitle: a neat acc title - "ash" : 60 - "bat" : 40 - `); + it('should handle simple pie with a directive', () => { + parser.parse(`%%{init: {'logLevel':0}}%% + pie + "ash" : 60 + "bat" : 40 + `); + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with a title', () => { + parser.parse(`pie title a 60/40 pie + "ash" : 60 + "bat" : 40 + `); - const title = db.getDiagramTitle(); - expect(title).toBe('a neat chart'); + const title = db.getDiagramTitle(); + expect(title).toBe('a 60/40 pie'); - const accTitle = db.getAccTitle(); - expect(accTitle).toBe('a neat acc title'); + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); - const sections = db.getSections(); - expect(sections['ash']).toBe(60); - expect(sections['bat']).toBe(40); - }); + it('should handle simple pie with an acc title (accTitle)', () => { + parser.parse(`pie title a neat chart + accTitle: a neat acc title + "ash" : 60 + "bat" : 40 + `); - it('should handle simple pie with an acc description (accDescr)', () => { - parser.parse(`pie title a neat chart - accDescr: a neat description - "ash" : 60 - "bat" : 40 - `); + const title = db.getDiagramTitle(); + expect(title).toBe('a neat chart'); - const title = db.getDiagramTitle(); - expect(title).toBe('a neat chart'); + const accTitle = db.getAccTitle(); + expect(accTitle).toBe('a neat acc title'); - const description = db.getAccDescription(); - expect(description).toBe('a neat description'); + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); - const sections = db.getSections(); - expect(sections['ash']).toBe(60); - expect(sections['bat']).toBe(40); - }); + it('should handle simple pie with an acc description (accDescr)', () => { + parser.parse(`pie title a neat chart + accDescr: a neat description + "ash" : 60 + "bat" : 40 + `); - it('should handle simple pie with a multiline acc description (accDescr)', () => { - parser.parse(`pie title a neat chart - accDescr { - a neat description - on multiple lines - } - "ash" : 60 - "bat" : 40 + const title = db.getDiagramTitle(); + expect(title).toBe('a neat chart'); + + const description = db.getAccDescription(); + expect(description).toBe('a neat description'); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with a multiline acc description (accDescr)', () => { + parser.parse(`pie title a neat chart + accDescr { + a neat description + on multiple lines + } + "ash" : 60 + "bat" : 40 `); - const title = db.getDiagramTitle(); - expect(title).toBe('a neat chart'); + const title = db.getDiagramTitle(); + expect(title).toBe('a neat chart'); - const description = db.getAccDescription(); - expect(description).toBe('a neat description\non multiple lines'); + const description = db.getAccDescription(); + expect(description).toBe('a neat description\non multiple lines'); - const sections = db.getSections(); - expect(sections['ash']).toBe(60); - expect(sections['bat']).toBe(40); - }); + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); - it('should handle simple pie with positive decimal', () => { - parser.parse(`pie - "ash" : 60.67 - "bat" : 40 - `); + it('should handle simple pie with positive decimal', () => { + parser.parse(`pie + "ash" : 60.67 + "bat" : 40 + `); - const sections = db.getSections(); - expect(sections['ash']).toBe(60.67); - expect(sections['bat']).toBe(40); + const sections = db.getSections(); + expect(sections['ash']).toBe(60.67); + expect(sections['bat']).toBe(40); + }); + + it('should handle simple pie with negative decimal', () => { + expect(() => { + parser.parse(`pie + "ash" : -60.67 + "bat" : 40.12 + `); + }).toThrowError(); + }); }); - it('should handle simple pie with negative decimal', () => { - expect(() => { - parser.parse(`pie - "ash" : -60.67 - "bat" : 40.12 - `); - }).toThrowError(); + describe('config', () => { + it('setConfig', () => { + db.setConfig({ useWidth: 850, useMaxWidth: undefined }); + expect(db.getConfig().useWidth).toBe(850); + expect(db.getConfig().useMaxWidth).toBeTruthy(); + }); + + it('getConfig', () => { + expect(db.getConfig()).toStrictEqual(DEFAULT_PIE_DB.config); + }); + + it('reset', () => { + db.setConfig({ useWidth: 850 }); + db.reset(); + expect(db.getConfig().useWidth).toStrictEqual(DEFAULT_PIE_DB.config.useWidth); + }); }); }); From cecf759b0b661bd0b09ace9e3f4c408e8a2f2de4 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 17:52:28 +0300 Subject: [PATCH 076/595] add showData unit test case --- packages/mermaid/src/diagrams/pie/pie.spec.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts index af02ab7bb5..928fb09fbc 100644 --- a/packages/mermaid/src/diagrams/pie/pie.spec.ts +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -34,6 +34,19 @@ describe('pie chart', () => { expect(sections['bat']).toBe(40); }); + it('should handle simple pie with showData', () => { + parser.parse(`pie showData + "ash" : 60 + "bat" : 40 + `); + + expect(db.getShowData()).toBeTruthy(); + + const sections = db.getSections(); + expect(sections['ash']).toBe(60); + expect(sections['bat']).toBe(40); + }); + it('should handle simple pie with comments', () => { parser.parse(`pie %% comments @@ -161,9 +174,9 @@ describe('pie chart', () => { }); it('reset', () => { - db.setConfig({ useWidth: 850 }); + db.setConfig({ textPosition: 0 }); db.reset(); - expect(db.getConfig().useWidth).toStrictEqual(DEFAULT_PIE_DB.config.useWidth); + expect(db.getConfig().textPosition).toStrictEqual(DEFAULT_PIE_DB.config.textPosition); }); }); }); From 3a22d4a501249c8765f03ade9ce9f846460e8ffb Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 17:57:39 +0300 Subject: [PATCH 077/595] shorten vitest pie.spec.ts by removing one time use variables --- packages/mermaid/src/diagrams/pie/pie.spec.ts | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts index 928fb09fbc..68b31dc5c6 100644 --- a/packages/mermaid/src/diagrams/pie/pie.spec.ts +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -19,6 +19,7 @@ describe('pie chart', () => { parser.parse(`pie "ash": 100 `); + const sections = db.getSections(); expect(sections['ash']).toBe(100); }); @@ -76,8 +77,7 @@ describe('pie chart', () => { "bat" : 40 `); - const title = db.getDiagramTitle(); - expect(title).toBe('a 60/40 pie'); + expect(db.getDiagramTitle()).toBe('a 60/40 pie'); const sections = db.getSections(); expect(sections['ash']).toBe(60); @@ -91,11 +91,9 @@ describe('pie chart', () => { "bat" : 40 `); - const title = db.getDiagramTitle(); - expect(title).toBe('a neat chart'); + expect(db.getDiagramTitle()).toBe('a neat chart'); - const accTitle = db.getAccTitle(); - expect(accTitle).toBe('a neat acc title'); + expect(db.getAccTitle()).toBe('a neat acc title'); const sections = db.getSections(); expect(sections['ash']).toBe(60); @@ -109,11 +107,9 @@ describe('pie chart', () => { "bat" : 40 `); - const title = db.getDiagramTitle(); - expect(title).toBe('a neat chart'); + expect(db.getDiagramTitle()).toBe('a neat chart'); - const description = db.getAccDescription(); - expect(description).toBe('a neat description'); + expect(db.getAccDescription()).toBe('a neat description'); const sections = db.getSections(); expect(sections['ash']).toBe(60); @@ -130,11 +126,9 @@ describe('pie chart', () => { "bat" : 40 `); - const title = db.getDiagramTitle(); - expect(title).toBe('a neat chart'); + expect(db.getDiagramTitle()).toBe('a neat chart'); - const description = db.getAccDescription(); - expect(description).toBe('a neat description\non multiple lines'); + expect(db.getAccDescription()).toBe('a neat description\non multiple lines'); const sections = db.getSections(); expect(sections['ash']).toBe(60); @@ -165,8 +159,10 @@ describe('pie chart', () => { describe('config', () => { it('setConfig', () => { db.setConfig({ useWidth: 850, useMaxWidth: undefined }); - expect(db.getConfig().useWidth).toBe(850); - expect(db.getConfig().useMaxWidth).toBeTruthy(); + + const config = db.getConfig(); + expect(config.useWidth).toBe(850); + expect(config.useMaxWidth).toBeTruthy(); }); it('getConfig', () => { From 9c2b95fc3cd3bbe9f0870077a1749fa63b9e3ebe Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 20:13:15 +0300 Subject: [PATCH 078/595] add config functions to DiagramDB interface --- packages/mermaid/src/diagram-api/types.ts | 14 ++++++++++++-- packages/mermaid/src/diagrams/pie/pieTypes.ts | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/diagram-api/types.ts b/packages/mermaid/src/diagram-api/types.ts index 265af65874..5f7c9b2c5a 100644 --- a/packages/mermaid/src/diagram-api/types.ts +++ b/packages/mermaid/src/diagram-api/types.ts @@ -1,5 +1,5 @@ import { Diagram } from '../Diagram.js'; -import { MermaidConfig } from '../config.type.js'; +import type { BaseDiagramConfig, MermaidConfig } from '../config.type.js'; import type * as d3 from 'd3'; export interface InjectUtils { @@ -16,11 +16,21 @@ export interface InjectUtils { * Generic Diagram DB that may apply to any diagram type. */ export interface DiagramDB { + // config + reset?: () => void; + setConfig?: (config: BaseDiagramConfig) => void; + getConfig?: () => Required; + + // db clear?: () => void; setDiagramTitle?: (title: string) => void; - setDisplayMode?: (title: string) => void; + getDiagramTitle?: () => string; + setAccTitle?: (title: string) => void; getAccTitle?: () => string; + setAccDescription?: (describetion: string) => void; getAccDescription?: () => string; + + setDisplayMode?: (title: string) => void; bindFunctions?: (element: Element) => void; } diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index 8e8826be3a..cc90a4d589 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -48,9 +48,9 @@ export interface D3Sections { export interface PieDb extends DiagramDB { // config + reset: () => void; setConfig: (config: PieDiagramConfig) => void; getConfig: () => Required; - reset: () => void; // common db parseDirective: ParseDirectiveDefinition; From 67d287f85e14ec1adaba9568aecbe5b8f1286cad Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 21:51:38 +0300 Subject: [PATCH 079/595] use local config instead of glolal one in pieRenderer --- .../mermaid/src/diagrams/pie/pieRenderer.ts | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts index 3878304ad2..bbf002ce46 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -5,7 +5,8 @@ import { configureSvgSize } from '../../setupGraphViewbox.js'; import { getConfig } from '../../config.js'; import { parseFontSize } from '../../utils.js'; import { DrawDefinition, HTML } from '../../diagram-api/types.js'; -import type { D3Sections, PieDb, Sections } from './pieTypes.js'; +import type { D3Sections, PieDb, PieDiagramConfig, Sections } from './pieTypes.js'; +import { MermaidConfig } from '../../config.type.js'; /** * Draws a Pie Chart with the data given in text. @@ -16,11 +17,13 @@ import type { D3Sections, PieDb, Sections } from './pieTypes.js'; export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { try { log.debug('rendering pie chart\n' + txt); + const db = diagramObject.db as PieDb; + db.clear(); + const globalConfig: MermaidConfig = getConfig(); + const config: Required = db.getConfig(); - let width: number | undefined; const height = 450; - const config = getConfig(); - const { securityLevel } = config; + const { securityLevel } = globalConfig; // handle root and document for when rendering in sandbox mode let sandboxElement: HTML | undefined; if (securityLevel === 'sandbox') { @@ -32,24 +35,14 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { : select('body'); const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; const elem = doc?.getElementById(id); - width = elem?.parentElement?.offsetWidth; - - // Parse the Pie Chart definition - const db = diagramObject.db as PieDb; - db.clear(); + const width: number = elem?.parentElement?.offsetWidth ?? config.useWidth; + // parse the pie chart definition log.debug('parsing pie chart'); diagramObject.parser.parse(txt); - if (width === undefined) { - width = 1200; - } - if (config.pie?.useWidth !== undefined) { - width = config.pie.useWidth; - } - const diagram = root.select('#' + id); - configureSvgSize(diagram, height, width, config.pie?.useMaxWidth ?? true); + configureSvgSize(diagram, height, width, config.useMaxWidth); // Set viewBox elem?.setAttribute('viewBox', '0 0 ' + width + ' ' + height); @@ -70,7 +63,7 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { sum += sections[key]; }); - const themeVariables = config.themeVariables; + const { themeVariables } = globalConfig; const myGeneratedColors = [ themeVariables.pie1, themeVariables.pie2, @@ -86,7 +79,7 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { themeVariables.pie12, ]; - const textPosition = config.pie?.textPosition ?? 0.75; + const textPosition = config.textPosition; let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth); outerStrokeWidth ??= 2; @@ -106,7 +99,8 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { // Sort slices in clockwise direction return a.order - b.order; }); - const pie = d3pie().value((d: unknown): number => d.value); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const pie = d3pie().value((d: any): number => d.value); // @ts-ignore - figure out how to assign D3Section[] to PieArcDatum const dataReady = pie(pieData); @@ -145,7 +139,8 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { .text((datum: { data: D3Sections }): string => { return ((datum.data.value / sum) * 100).toFixed(0) + '%'; }) - .attr('transform', (datum: unknown): string => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + .attr('transform', (datum: any): string => { return 'translate(' + labelArcGenerator.centroid(datum) + ')'; }) .style('text-anchor', 'middle') From ae8860eec3df7a8616c140c94099960261050074 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 21:56:35 +0300 Subject: [PATCH 080/595] add `undefined` to getConfig return type until handle other diagrams --- packages/mermaid/src/diagram-api/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagram-api/types.ts b/packages/mermaid/src/diagram-api/types.ts index 5f7c9b2c5a..3e863ded18 100644 --- a/packages/mermaid/src/diagram-api/types.ts +++ b/packages/mermaid/src/diagram-api/types.ts @@ -19,7 +19,7 @@ export interface DiagramDB { // config reset?: () => void; setConfig?: (config: BaseDiagramConfig) => void; - getConfig?: () => Required; + getConfig?: () => BaseDiagramConfig | undefined; // db clear?: () => void; From ce9d0e2e6a9b286b6dd39b7d4d393348d65c0f57 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Mon, 19 Jun 2023 22:07:15 +0300 Subject: [PATCH 081/595] use global useMaxWidth until making setConfig updates pie setConfig --- packages/mermaid/src/diagrams/pie/pieRenderer.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts index bbf002ce46..9f9bb1039d 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -42,7 +42,8 @@ export const draw: DrawDefinition = (txt, id, _version, diagramObject) => { diagramObject.parser.parse(txt); const diagram = root.select('#' + id); - configureSvgSize(diagram, height, width, config.useMaxWidth); + // TODO: use global `useMaxWidth` until making setConfig update pie setConfig + configureSvgSize(diagram, height, width, globalConfig?.pie?.useMaxWidth ?? true); // Set viewBox elem?.setAttribute('viewBox', '0 0 ' + width + ' ' + height); From 53eada80280233b672fd78db64e7a9f2732de7d3 Mon Sep 17 00:00:00 2001 From: Tobie Langel Date: Mon, 19 Jun 2023 21:33:40 +0200 Subject: [PATCH 082/595] Fix typo in quadrant chart documentation --- packages/mermaid/src/docs/syntax/quadrantChart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/docs/syntax/quadrantChart.md b/packages/mermaid/src/docs/syntax/quadrantChart.md index 4f5d8cbe59..2ba661e1c9 100644 --- a/packages/mermaid/src/docs/syntax/quadrantChart.md +++ b/packages/mermaid/src/docs/syntax/quadrantChart.md @@ -133,6 +133,6 @@ quadrantChart y-axis Not Important --> "Important ❤" quadrant-1 Plan quadrant-2 Do - quadrant-3 Deligate + quadrant-3 Delegate quadrant-4 Delete ``` From 6077ba54054eed165052d73fe342b6ad3bf04e8c Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Tue, 20 Jun 2023 02:37:27 +0300 Subject: [PATCH 083/595] Updated syntax and fixed comments from review --- .../src/diagrams/sankey/parser/sankey.jison | 113 +++++++++++------- .../src/diagrams/sankey/parser/sankey.spec.js | 12 +- .../mermaid/src/diagrams/sankey/sankeyDB.ts | 86 +++++-------- .../src/diagrams/sankey/sankeyDiagram.ts | 2 +- .../src/diagrams/sankey/sankeyRenderer.ts | 43 ++----- 5 files changed, 115 insertions(+), 141 deletions(-) diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison index 8f970b815c..c981267a01 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.jison +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.jison @@ -1,39 +1,58 @@ /** mermaid */ %lex +TOKEN \w+ +NUM \d+(.\d+)? %options case-insensitive -%options easy_keyword_rules +%options easy_keword_rules + +%s link_value -// when we are inside [] section we are defining attrubutes %x attributes -// or if we use "" we are expecting a string containing value +%x attr_value %x string -%x value %% +//-------------------------------------------------------------- // skip all whitespace EXCEPT newlines, but not within a string -[^\S\r\n]+ {} - -// main -"sankey" { return 'SANKEY'; } -\d+(.\d+)? { return 'AMOUNT'; } -"->" { return 'ARROW'; } -\w+ { return 'NODE'; } -(?:<>|[\n;])+ { return 'EOS'; } // end of statement is semicolon ; new line \n or end of file +//-------------------------------------------------------------- + +[^\S\r\n]+ {} + +//-------------- +// basic tokens +//-------------- + +(<>|[\n;])+ { return 'EOS'; } // end of statement is semicolon ; new line \n or end of file +"sankey" { return 'SANKEY'; } +{TOKEN} { return 'NODE_ID'; } +{NUM} { return 'AMOUNT'; } +"->" { + if(this.topState()!=='link_value') this.pushState('link_value'); + else this.popState(); + return 'ARROW'; + } +//------------ // attributes -"[" { this.pushState('attributes'); return 'OPEN_ATTRIBUTES'; } -"]" { this.popState(); return 'CLOSE_ATTRIBUTES'; } -\w+ { return 'ATTRIBUTE'; } -\= { this.pushState('value'); return 'EQUAL'; } -\w+ { this.popState(); return 'VALUE'; } +//------------ + +"[" { this.pushState('attributes'); return 'OPEN_ATTRIBUTES'; } +"]" { this.popState(); return 'CLOSE_ATTRIBUTES'; } +{TOKEN} { return 'ATTRIBUTE'; } +\= { this.pushState('attr_value'); return 'EQUAL'; } +{TOKEN} { this.popState(); return 'VALUE'; } + +//------------ // strings -\" { this.pushState('string'); return 'OPEN_STRING'; } -(?!\\)\" { - if(this.topState()==='string') this.popState(); - if(this.topState()==='value') this.popState(); - return 'CLOSE_STRING'; - } -([^"\\]|\\\"|\\\\)+ { return 'STRING'; } +//------------ + +\" { this.pushState('string'); return 'OPEN_STRING'; } +(?!\\)\" { + if(this.topState()==='string') this.popState(); + if(this.topState()==='attr_value') this.popState(); + return 'CLOSE_STRING'; + } +([^"\\]|\\\"|\\\\)+ { return 'STRING'; } /lex @@ -43,20 +62,20 @@ %% // language grammar start - : EOS SANKEY document - | SANKEY document - ; + : EOS SANKEY document + | SANKEY document + ; document - : line document - | - ; + : line document + | + ; line - : stream optional_attributes EOS - | node optional_attributes EOS - | EOS - ; + : node optional_attributes EOS + | stream optional_attributes EOS + | EOS + ; optional_attributes: OPEN_ATTRIBUTES attributes CLOSE_ATTRIBUTES | ; @@ -65,20 +84,22 @@ attribute: ATTRIBUTE EQUAL value | ATTRIBUTE; value: VALUE | OPEN_STRING STRING CLOSE_STRING; -stream: node[source] ARROW amount ARROW tail[target] { - $$=$source; - yy.addLink($source, $target, $amount); -}; - -amount: AMOUNT { $$=parseFloat($AMOUNT); }; +stream + : node\[source] ARROW amount ARROW tail\[target] { + $$=$source; + yy.addLink($source, $target, $amount); + } + ; tail - : stream { $$ = $stream } - | node { $$ = $node; } - ; + : stream { $$ = $stream } + | node { $$ = $node; } + ; + +amount: AMOUNT { $$=parseFloat($AMOUNT); }; node - : NODE { $$ = yy.addNode($NODE); } - | OPEN_STRING STRING[title] CLOSE_STRING { $$ = yy.addNode($title); /* TODO: add title and id separately?*/ } - ; + : NODE_ID { $$ = yy.findOrCreateNode($NODE_ID); } + | OPEN_STRING STRING\[node_label] CLOSE_STRING { $$ = yy.findOrCreateNode($node_label); } + ; diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js index d42fa7f74c..58fe31ab15 100644 --- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js +++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.js @@ -50,11 +50,20 @@ describe('Sankey diagram', function () { }); describe('while attributes parsing', () => { + it('recognized node and attribute ids starting with numbers', () => { + const str = ` + sankey + 1st -> 200 -> 2nd -> 180 -> 3rd; + `; + + parser.parse(str); + }); + it('parses different quotless variations', () => { const str = ` sankey node[] - + node[attr=1] node_a -> 30 -> node_b node[attrWithoutValue] @@ -149,6 +158,7 @@ describe('Sankey diagram', function () { "Wave" -> 19.013 -> "Electricity grid" "Wind" -> 289.366 -> "Electricity grid" `; + parser.parse(str); }); }); diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts index fd96ef1c20..d44f3e6e81 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts @@ -12,16 +12,13 @@ import { clear as commonClear, } from '../../commonDb.js'; -// export const parseDirective = function (statement, context, type) { -// mermaidAPI.parseDirective(this, statement, context, type); -// }; - -// export const cleanupComments = (text: string): string => { -// return text.trimStart().replace(/^\s*%%(?!{)[^\n]+\n?/gm, ''); -// }; -let links: Array = []; -let nodes: Array = []; -let nodesHash: Record = {}; +// Variables where graph data is stored +// Sankey diagram represented by nodes and links between those nodes +// We have to track nodes uniqueness (by ID), thats why we need hash also +// +let links: Array = []; +let nodes: Array = []; +let nodesHash: Record = {}; const clear = function () { links = []; @@ -30,71 +27,35 @@ const clear = function () { commonClear(); }; -type Nullable = T | null; - -// interface ILink { -// source?: Node; -// target?: Node; -// value?: number; -// } - -class Link { - source: Nullable; - target: Nullable; - value: Nullable; - constructor() { - this.source = null; - this.target = null; - this.value = 0; - } +class SankeyLink { + constructor(public source: SankeyNode, public target: SankeyNode, public value: number = 0) {} } /** - * Adds a link between two elements on the diagram - * * @param source - Node where the link starts * @param target - Node where the link ends * @param value - number, float or integer, describes the amount to be passed */ -// const addLink = ({ source, target, amount }: ILink = {}): Link => { -const addLink = function (source?: Node, target?: Node, value?: number): Link { - const link: Link = new Link(); - - // TODO: make attribute setters - if (source !== undefined) { - link.source = source; - } - if (target !== undefined) { - link.target = target; - } - if (value !== undefined) { - link.value = value; - } +const addLink = function (source: SankeyNode, target: SankeyNode, value: number): SankeyLink { + const link: SankeyLink = new SankeyLink(source, target, value); links.push(link); return link; }; -class Node { - ID: string; - title: string; - constructor(ID: string, title: string = ID) { - this.ID = ID; - this.title = title; - } +class SankeyNode { + constructor(public ID: string, public label: string = ID) {} } /** - * Finds or creates a new Node by ID - * - * @param id - The id Node + * @param ID - The id of the node */ -const addNode = function (ID: string): Node { +const findOrCreateNode = function (ID: string): SankeyNode { ID = common.sanitizeText(ID, configApi.getConfig()); - let node: Node; + let node: SankeyNode; if (nodesHash[ID] === undefined) { - node = new Node(ID); + node = new SankeyNode(ID); nodesHash[ID] = node; nodes.push(node); } else { @@ -103,16 +64,27 @@ const addNode = function (ID: string): Node { return node; }; +// TODO: this will be better using getters in typescript const getNodes = () => nodes; const getLinks = () => links; +const getGraph = () => ({ + nodes: nodes.map((node) => ({ id: node.ID, label: node.label })), + links: links.map((link) => ({ + source: link.source.ID, + target: link.target.ID, + value: link.value, + })), +}); + export default { nodesHash, getConfig: () => configApi.getConfig().sankey, getNodes, getLinks, + getGraph, addLink, - addNode, + findOrCreateNode, // TODO: If this is a must this probably should be an interface getAccTitle, setAccTitle, diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts index e7a46d8bcb..9c8fbaa2d7 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDiagram.ts @@ -1,5 +1,5 @@ import { DiagramDefinition } from '../../diagram-api/types.js'; -// @ts-ignore: TODO Fix ts errors +// @ts-ignore: jison doesn't export types import parser from './parser/sankey.jison'; import db from './sankeyDB.js'; import styles from './styles.js'; diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index 37362803aa..c8a3edaa87 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -2,6 +2,7 @@ import { Diagram } from '../../Diagram.js'; // import { log } from '../../logger.js'; import * as configApi from '../../config.js'; + import { select as d3select, scaleOrdinal as d3scaleOrdinal, @@ -19,9 +20,7 @@ import { sankeyJustify as d3SankeyJustify, } from 'd3-sankey'; import { configureSvgSize } from '../../setupGraphViewbox.js'; -import sankeyDB from './sankeyDB.js'; -import { db } from '../info/infoDb.js'; -import { debug } from 'console'; +// import { debug } from 'console'; /** * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text. @@ -51,7 +50,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb const { securityLevel, sequence: conf } = configApi.getConfig(); let sandboxElement; if (securityLevel === 'sandbox') { - sandboxElement = select('#i' + id); + sandboxElement = d3select('#i' + id); } const root = securityLevel === 'sandbox' @@ -86,35 +85,8 @@ export const draw = function (text: string, id: string, _version: string, diagOb // ] // }; // - const graph = { - nodes: [], - links: [], - }; - - diagObj.db.getNodes().forEach((node) => { - graph.nodes.push({ id: node.ID, title: node.title }); - }); - diagObj.db.getLinks().forEach((link) => { - graph.links.push({ source: link.source.ID, target: link.target.ID, value: link.value }); - }); - - // debugger; - // const graph = { - // nodes: [ - // { id: 'Alice' }, - // { id: 'Bob' }, - // { id: 'Carol' }, - // { id: 'Andrew' }, - // { id: 'Peter' } - // ], - // links: [ - // { source: 'Alice', target: 'Andrew', value: 11 }, - // { source: 'Alice', target: 'Bob', value: 23 }, - // { source: 'Bob', target: 'Carol', value: 43 }, - // { source: 'Peter', target: 'Carol', value: 15 }, - // ], - // }; + const graph = diagObj.db.getGraph(); // Construct and configure a Sankey generator // That will be a function that calculates nodes and links dimensions @@ -145,11 +117,10 @@ export const draw = function (text: string, id: string, _version: string, diagOb // Get color scheme for the graph const color = d3scaleOrdinal(d3schemeTableau10); - // Creates the groups for nodes + // Create groups for nodes svg .append('g') .attr('class', 'nodes') - .attr('stroke', '#000') .selectAll('.node') .data(graph.nodes) .join('g') @@ -166,7 +137,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb .attr('width', (d) => d.x1 - d.x0) .attr('fill', (d) => color(d.id)); - // Create text for nodes + // Create labels for nodes svg .append('g') .attr('class', 'node-labels') @@ -179,7 +150,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb .attr('y', (d) => (d.y1 + d.y0) / 2) .attr('dy', '0.35em') .attr('text-anchor', (d) => (d.x0 < width / 2 ? 'start' : 'end')) - .text((d) => d.title); + .text((d) => d.label); // Creates the paths that represent the links. const link_g = svg From 3d117815425cbd05105ec0f0192adc0be91931f2 Mon Sep 17 00:00:00 2001 From: sidharthv96 Date: Tue, 20 Jun 2023 07:34:18 +0000 Subject: [PATCH 084/595] Update docs --- docs/syntax/quadrantChart.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/syntax/quadrantChart.md b/docs/syntax/quadrantChart.md index 10becf2e49..9e93bd3a4d 100644 --- a/docs/syntax/quadrantChart.md +++ b/docs/syntax/quadrantChart.md @@ -152,7 +152,7 @@ quadrantChart y-axis Not Important --> "Important ❤" quadrant-1 Plan quadrant-2 Do - quadrant-3 Deligate + quadrant-3 Delegate quadrant-4 Delete ``` @@ -163,6 +163,6 @@ quadrantChart y-axis Not Important --> "Important ❤" quadrant-1 Plan quadrant-2 Do - quadrant-3 Deligate + quadrant-3 Delegate quadrant-4 Delete ``` From 99da3d7cd50eab5a05a31cd4b4c0ea6383fcf4d3 Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Tue, 20 Jun 2023 17:49:07 +0300 Subject: [PATCH 085/595] validate that `height` in `putInfoIframe` is defined --- docs/config/setup/modules/mermaidAPI.md | 6 +++--- packages/mermaid/src/mermaidAPI.ts | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/config/setup/modules/mermaidAPI.md b/docs/config/setup/modules/mermaidAPI.md index 591b6841a0..7601c50698 100644 --- a/docs/config/setup/modules/mermaidAPI.md +++ b/docs/config/setup/modules/mermaidAPI.md @@ -96,7 +96,7 @@ mermaid.initialize(config); #### Defined in -[mermaidAPI.ts:663](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L663) +[mermaidAPI.ts:665](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L665) ## Functions @@ -127,7 +127,7 @@ Return the last node appended #### Defined in -[mermaidAPI.ts:308](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L308) +[mermaidAPI.ts:310](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L310) --- @@ -320,4 +320,4 @@ Remove any existing elements from the given document #### Defined in -[mermaidAPI.ts:358](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L358) +[mermaidAPI.ts:360](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L360) diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index 753e4944ab..b29b4a35cd 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -285,7 +285,9 @@ export const cleanUpSvgCode = ( * TODO replace btoa(). Replace with buf.toString('base64')? */ export const putIntoIFrame = (svgCode = '', svgElement?: D3Element): string => { - const height = svgElement ? svgElement.viewBox.baseVal.height + 'px' : IFRAME_HEIGHT; + const height = svgElement?.viewBox?.baseVal?.height + ? svgElement.viewBox.baseVal.height + 'px' + : IFRAME_HEIGHT; const base64encodedSrc = btoa('' + svgCode + ''); return ` `, @@ -47,8 +47,8 @@ describe('when securityLevel is antiscript, all script must be removed', functio }); }); -describe('Sanitize text', function () { - it('should remove script tag', function () { +describe('Sanitize text', () => { + it('should remove script tag', () => { const maliciousStr = 'javajavascript:script:alert(1)'; const result = sanitizeText(maliciousStr, { securityLevel: 'strict', @@ -58,8 +58,8 @@ describe('Sanitize text', function () { }); }); -describe('generic parser', function () { - it('should parse generic types', function () { +describe('generic parser', () => { + it('should parse generic types', () => { expect(parseGenericTypes('test~T~')).toEqual('test'); expect(parseGenericTypes('test~Array~Array~string~~~')).toEqual('test>>'); expect(parseGenericTypes('test~Array~Array~string[]~~~')).toEqual( diff --git a/packages/mermaid/src/diagrams/common/svgDrawCommon.js b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts similarity index 92% rename from packages/mermaid/src/diagrams/common/svgDrawCommon.js rename to packages/mermaid/src/diagrams/common/svgDrawCommon.ts index 9a4ce8aa2b..7e89b7e7f7 100644 --- a/packages/mermaid/src/diagrams/common/svgDrawCommon.js +++ b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts @@ -1,3 +1,4 @@ +// @ts-nocheck - ignore to convert to TS import { sanitizeUrl } from '@braintree/sanitize-url'; export const drawRect = function (elem, rectData) { @@ -12,7 +13,7 @@ export const drawRect = function (elem, rectData) { rectElem.attr('ry', rectData.ry); if (rectData.attrs !== 'undefined' && rectData.attrs !== null) { - for (let attrKey in rectData.attrs) { + for (const attrKey in rectData.attrs) { rectElem.attr(attrKey, rectData.attrs[attrKey]); } } @@ -27,8 +28,8 @@ export const drawRect = function (elem, rectData) { /** * Draws a background rectangle * - * @param {any} elem Diagram (reference for bounds) - * @param {any} bounds Shape of the rectangle + * @param elem - Diagram (reference for bounds) + * @param bounds - Shape of the rectangle */ export const drawBackgroundRect = function (elem, bounds) { const rectElem = drawRect(elem, { @@ -69,7 +70,7 @@ export const drawImage = function (elem, x, y, link) { const imageElem = elem.append('image'); imageElem.attr('x', x); imageElem.attr('y', y); - var sanitizedLink = sanitizeUrl(link); + const sanitizedLink = sanitizeUrl(link); imageElem.attr('xlink:href', sanitizedLink); }; From 22b172d873ac54256d409586e1d6ce401a6086ef Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Fri, 11 Aug 2023 20:56:00 +0300 Subject: [PATCH 477/595] add types to `svgDrawCommon.ts` --- .../src/diagrams/common/commonTypes.ts | 58 +++++++++ .../src/diagrams/common/svgDrawCommon.ts | 110 ++++++++++-------- 2 files changed, 121 insertions(+), 47 deletions(-) create mode 100644 packages/mermaid/src/diagrams/common/commonTypes.ts diff --git a/packages/mermaid/src/diagrams/common/commonTypes.ts b/packages/mermaid/src/diagrams/common/commonTypes.ts new file mode 100644 index 0000000000..6a728bd5d8 --- /dev/null +++ b/packages/mermaid/src/diagrams/common/commonTypes.ts @@ -0,0 +1,58 @@ +export interface RectData { + x?: number; + y?: number; + fill?: string; + width?: number; + height?: number; + stroke?: string; + class?: string; + color?: string | number; + rx?: number; + ry?: number; + attrs?: Record; + anchor?: string; +} + +export interface Bound { + startx: number; + stopx: number; + starty: number; + stopy: number; + fill: string; + stroke: string; +} + +export interface TextData { + x: number; + y: number; + anchor: string; + text: string; + textMargin: number; + class?: string; +} + +export interface TextObject { + x: number; + y: number; + width: number; + height: number; + fill?: string; + anchor?: string; + 'text-anchor': string; + style: string; + textMargin: number; + rx: number; + ry: number; + tspan: boolean; + valign: unknown; +} + +export type D3RectElement = d3.Selection; + +export type D3UseElement = d3.Selection; + +export type D3ImageElement = d3.Selection; + +export type D3TextElement = d3.Selection; + +export type D3TSpanElement = d3.Selection; diff --git a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts index 7e89b7e7f7..316a659fc8 100644 --- a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts +++ b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts @@ -1,38 +1,49 @@ -// @ts-nocheck - ignore to convert to TS import { sanitizeUrl } from '@braintree/sanitize-url'; +import type { Group, SVG } from '../../diagram-api/types.js'; +import type { + Bound, + D3ImageElement, + D3RectElement, + D3TSpanElement, + D3TextElement, + D3UseElement, + RectData, + TextData, + TextObject, +} from './commonTypes.js'; -export const drawRect = function (elem, rectData) { - const rectElem = elem.append('rect'); - rectElem.attr('x', rectData.x); - rectElem.attr('y', rectData.y); - rectElem.attr('fill', rectData.fill); - rectElem.attr('stroke', rectData.stroke); - rectElem.attr('width', rectData.width); - rectElem.attr('height', rectData.height); - rectElem.attr('rx', rectData.rx); - rectElem.attr('ry', rectData.ry); +export const drawRect = (element: SVG | Group, rectData: RectData): D3RectElement => { + const rectElement: D3RectElement = element.append('rect'); + rectData.x !== undefined && rectElement.attr('x', rectData.x); + rectData.y !== undefined && rectElement.attr('y', rectData.y); + rectData.fill !== undefined && rectElement.attr('fill', rectData.fill); + rectData.stroke !== undefined && rectElement.attr('stroke', rectData.stroke); + rectData.width !== undefined && rectElement.attr('width', rectData.width); + rectData.height !== undefined && rectElement.attr('height', rectData.height); + rectData.rx !== undefined && rectElement.attr('rx', rectData.rx); + rectData.ry !== undefined && rectElement.attr('ry', rectData.ry); - if (rectData.attrs !== 'undefined' && rectData.attrs !== null) { + if (rectData.attrs !== undefined && rectData.attrs !== null) { for (const attrKey in rectData.attrs) { - rectElem.attr(attrKey, rectData.attrs[attrKey]); + rectElement.attr(attrKey, rectData.attrs[attrKey]); } } - if (rectData.class !== 'undefined') { - rectElem.attr('class', rectData.class); + if (rectData.class !== undefined) { + rectElement.attr('class', rectData.class); } - return rectElem; + return rectElement; }; /** * Draws a background rectangle * - * @param elem - Diagram (reference for bounds) + * @param element - Diagram (reference for bounds) * @param bounds - Shape of the rectangle */ -export const drawBackgroundRect = function (elem, bounds) { - const rectElem = drawRect(elem, { +export const drawBackgroundRect = (element: SVG | Group, bounds: Bound): void => { + const rectData: RectData = { x: bounds.startx, y: bounds.starty, width: bounds.stopx - bounds.startx, @@ -40,50 +51,53 @@ export const drawBackgroundRect = function (elem, bounds) { fill: bounds.fill, stroke: bounds.stroke, class: 'rect', - }); - rectElem.lower(); + }; + const rectElement: D3RectElement = drawRect(element, rectData); + rectElement.lower(); }; -export const drawText = function (elem, textData) { +export const drawText = (element: SVG | Group, textData: TextData): D3TextElement => { // Remove and ignore br:s - const nText = textData.text.replace(//gi, ' '); + const nText: string = textData.text.replace(//gi, ' '); - const textElem = elem.append('text'); + const textElem: D3TextElement = element.append('text'); textElem.attr('x', textData.x); textElem.attr('y', textData.y); textElem.attr('class', 'legend'); textElem.style('text-anchor', textData.anchor); + textData.class !== undefined && textElem.attr('class', textData.class); - if (textData.class !== undefined) { - textElem.attr('class', textData.class); - } - - const span = textElem.append('tspan'); - span.attr('x', textData.x + textData.textMargin * 2); - span.text(nText); + const tspan: D3TSpanElement = textElem.append('tspan'); + tspan.attr('x', textData.x + textData.textMargin * 2); + tspan.text(nText); return textElem; }; -export const drawImage = function (elem, x, y, link) { - const imageElem = elem.append('image'); - imageElem.attr('x', x); - imageElem.attr('y', y); - const sanitizedLink = sanitizeUrl(link); - imageElem.attr('xlink:href', sanitizedLink); +export const drawImage = (elem: SVG | Group, x: number, y: number, link: string): void => { + const imageElement: D3ImageElement = elem.append('image'); + imageElement.attr('x', x); + imageElement.attr('y', y); + const sanitizedLink: string = sanitizeUrl(link); + imageElement.attr('xlink:href', sanitizedLink); }; -export const drawEmbeddedImage = function (elem, x, y, link) { - const imageElem = elem.append('use'); - imageElem.attr('x', x); - imageElem.attr('y', y); - const sanitizedLink = sanitizeUrl(link); - imageElem.attr('xlink:href', '#' + sanitizedLink); +export const drawEmbeddedImage = ( + element: SVG | Group, + x: number, + y: number, + link: string +): void => { + const imageElement: D3UseElement = element.append('use'); + imageElement.attr('x', x); + imageElement.attr('y', y); + const sanitizedLink: string = sanitizeUrl(link); + imageElement.attr('xlink:href', `#${sanitizedLink}`); }; -export const getNoteRect = function () { - return { +export const getNoteRect = (): RectData => { + const noteRectData: RectData = { x: 0, y: 0, width: 100, @@ -94,10 +108,11 @@ export const getNoteRect = function () { rx: 0, ry: 0, }; + return noteRectData; }; -export const getTextObj = function () { - return { +export const getTextObj = (): TextObject => { + const testObject: TextObject = { x: 0, y: 0, width: 100, @@ -112,4 +127,5 @@ export const getTextObj = function () { tspan: true, valign: undefined, }; + return testObject; }; From 5a2ea7c297d7424207aa5e4f4a9b525a74c4a451 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Fri, 11 Aug 2023 21:09:00 +0300 Subject: [PATCH 478/595] fix svgDrawCommon import by adding `.js` --- packages/mermaid/src/diagrams/c4/svgDraw.js | 2 +- packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts | 2 +- packages/mermaid/src/diagrams/sequence/svgDraw.js | 2 +- packages/mermaid/src/diagrams/user-journey/svgDraw.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/mermaid/src/diagrams/c4/svgDraw.js b/packages/mermaid/src/diagrams/c4/svgDraw.js index 5ca2f55f81..9ec7422613 100644 --- a/packages/mermaid/src/diagrams/c4/svgDraw.js +++ b/packages/mermaid/src/diagrams/c4/svgDraw.js @@ -1,5 +1,5 @@ import common from '../common/common.js'; -import * as svgDrawCommon from '../common/svgDrawCommon'; +import * as svgDrawCommon from '../common/svgDrawCommon.js'; import { sanitizeUrl } from '@braintree/sanitize-url'; export const drawRect = function (elem, rectData) { diff --git a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts index f6fde5001d..feee7157f7 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts @@ -3,7 +3,7 @@ import { select, selectAll } from 'd3'; import svgDraw, { ACTOR_TYPE_WIDTH, drawText, fixLifeLineHeights } from './svgDraw.js'; import { log } from '../../logger.js'; import common from '../common/common.js'; -import * as svgDrawCommon from '../common/svgDrawCommon'; +import * as svgDrawCommon from '../common/svgDrawCommon.js'; import * as configApi from '../../config.js'; import assignWithDepth from '../../assignWithDepth.js'; import utils from '../../utils.js'; diff --git a/packages/mermaid/src/diagrams/sequence/svgDraw.js b/packages/mermaid/src/diagrams/sequence/svgDraw.js index 0c7bc64213..e0aaa1eb93 100644 --- a/packages/mermaid/src/diagrams/sequence/svgDraw.js +++ b/packages/mermaid/src/diagrams/sequence/svgDraw.js @@ -1,5 +1,5 @@ import common from '../common/common.js'; -import * as svgDrawCommon from '../common/svgDrawCommon'; +import * as svgDrawCommon from '../common/svgDrawCommon.js'; import { addFunction } from '../../interactionDb.js'; import { ZERO_WIDTH_SPACE, parseFontSize } from '../../utils.js'; import { sanitizeUrl } from '@braintree/sanitize-url'; diff --git a/packages/mermaid/src/diagrams/user-journey/svgDraw.js b/packages/mermaid/src/diagrams/user-journey/svgDraw.js index 108f4b2f96..7a8f791fac 100644 --- a/packages/mermaid/src/diagrams/user-journey/svgDraw.js +++ b/packages/mermaid/src/diagrams/user-journey/svgDraw.js @@ -1,5 +1,5 @@ import { arc as d3arc } from 'd3'; -import * as svgDrawCommon from '../common/svgDrawCommon'; +import * as svgDrawCommon from '../common/svgDrawCommon.js'; export const drawRect = function (elem, rectData) { return svgDrawCommon.drawRect(elem, rectData); From 95382335739f2a3954c627f23843b493fe0a2d82 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Fri, 11 Aug 2023 21:16:53 +0300 Subject: [PATCH 479/595] use lineBreakRegex in `svgDrawCommon` --- packages/mermaid/src/diagrams/common/common.ts | 1 + packages/mermaid/src/diagrams/common/svgDrawCommon.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts index 243c0cbf25..24591642b2 100644 --- a/packages/mermaid/src/diagrams/common/common.ts +++ b/packages/mermaid/src/diagrams/common/common.ts @@ -1,6 +1,7 @@ import DOMPurify from 'dompurify'; import { MermaidConfig } from '../../config.type.js'; +// Remove and ignore br:s export const lineBreakRegex = //gi; /** diff --git a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts index 316a659fc8..c2d9864b1e 100644 --- a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts +++ b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts @@ -11,6 +11,7 @@ import type { TextData, TextObject, } from './commonTypes.js'; +import { lineBreakRegex } from './common.js'; export const drawRect = (element: SVG | Group, rectData: RectData): D3RectElement => { const rectElement: D3RectElement = element.append('rect'); @@ -57,8 +58,7 @@ export const drawBackgroundRect = (element: SVG | Group, bounds: Bound): void => }; export const drawText = (element: SVG | Group, textData: TextData): D3TextElement => { - // Remove and ignore br:s - const nText: string = textData.text.replace(//gi, ' '); + const nText: string = textData.text.replace(lineBreakRegex, ' '); const textElem: D3TextElement = element.append('text'); textElem.attr('x', textData.x); From 99c1758490306cef3b5d038061891c132e029da6 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Sat, 12 Aug 2023 20:25:10 +0300 Subject: [PATCH 480/595] make more `RectData` required and remove optional assignment --- .../src/diagrams/common/commonTypes.ts | 16 +++++++------- .../src/diagrams/common/svgDrawCommon.ts | 21 +++++++------------ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/packages/mermaid/src/diagrams/common/commonTypes.ts b/packages/mermaid/src/diagrams/common/commonTypes.ts index 6a728bd5d8..84c26db6e1 100644 --- a/packages/mermaid/src/diagrams/common/commonTypes.ts +++ b/packages/mermaid/src/diagrams/common/commonTypes.ts @@ -1,12 +1,12 @@ export interface RectData { - x?: number; - y?: number; - fill?: string; - width?: number; - height?: number; - stroke?: string; + x: number; + y: number; + fill: string; + width: number; + height: number; + stroke: string; class?: string; - color?: string | number; + color?: string; rx?: number; ry?: number; attrs?: Record; @@ -44,7 +44,7 @@ export interface TextObject { rx: number; ry: number; tspan: boolean; - valign: unknown; + valign?: string; } export type D3RectElement = d3.Selection; diff --git a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts index c2d9864b1e..706d43ab9d 100644 --- a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts +++ b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts @@ -15,24 +15,22 @@ import { lineBreakRegex } from './common.js'; export const drawRect = (element: SVG | Group, rectData: RectData): D3RectElement => { const rectElement: D3RectElement = element.append('rect'); - rectData.x !== undefined && rectElement.attr('x', rectData.x); - rectData.y !== undefined && rectElement.attr('y', rectData.y); - rectData.fill !== undefined && rectElement.attr('fill', rectData.fill); - rectData.stroke !== undefined && rectElement.attr('stroke', rectData.stroke); - rectData.width !== undefined && rectElement.attr('width', rectData.width); - rectData.height !== undefined && rectElement.attr('height', rectData.height); + rectElement.attr('x', rectData.x); + rectElement.attr('y', rectData.y); + rectElement.attr('fill', rectData.fill); + rectElement.attr('stroke', rectData.stroke); + rectElement.attr('width', rectData.width); + rectElement.attr('height', rectData.height); rectData.rx !== undefined && rectElement.attr('rx', rectData.rx); rectData.ry !== undefined && rectElement.attr('ry', rectData.ry); - if (rectData.attrs !== undefined && rectData.attrs !== null) { + if (rectData.attrs !== undefined) { for (const attrKey in rectData.attrs) { rectElement.attr(attrKey, rectData.attrs[attrKey]); } } - if (rectData.class !== undefined) { - rectElement.attr('class', rectData.class); - } + rectData.class !== undefined && rectElement.attr('class', rectData.class); return rectElement; }; @@ -117,15 +115,12 @@ export const getTextObj = (): TextObject => { y: 0, width: 100, height: 100, - fill: undefined, - anchor: undefined, 'text-anchor': 'start', style: '#666', textMargin: 0, rx: 0, ry: 0, tspan: true, - valign: undefined, }; return testObject; }; From cb5f70c1396671d1570651b99b9ce79f27c60a2c Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Sat, 12 Aug 2023 21:09:14 +0300 Subject: [PATCH 481/595] add `structuredClone` in pie `getConfig` --- packages/mermaid/src/diagrams/pie/pieDb.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index d381aa9851..f55f3bc8ef 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -37,7 +37,7 @@ const setConfig = (conf: PieDiagramConfig): void => { config = cleanAndMerge(DEFAULT_PIE_CONFIG, conf); }; -const getConfig = (): Required => config; +const getConfig = (): Required => structuredClone(config); const resetConfig = (): void => { config = structuredClone(DEFAULT_PIE_CONFIG); From 3f3a7340e3e282443290af61198f25fb3e6e1964 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Sat, 12 Aug 2023 21:18:07 +0300 Subject: [PATCH 482/595] remove `setConfig` and `resetConfig` in pie --- packages/mermaid/src/diagram-api/types.ts | 2 -- packages/mermaid/src/diagrams/pie/pie.spec.ts | 10 +++++----- packages/mermaid/src/diagrams/pie/pieDb.ts | 14 +------------- packages/mermaid/src/diagrams/pie/pieTypes.ts | 2 -- 4 files changed, 6 insertions(+), 22 deletions(-) diff --git a/packages/mermaid/src/diagram-api/types.ts b/packages/mermaid/src/diagram-api/types.ts index bb2050ee70..4d30fe97dd 100644 --- a/packages/mermaid/src/diagram-api/types.ts +++ b/packages/mermaid/src/diagram-api/types.ts @@ -17,8 +17,6 @@ export interface InjectUtils { */ export interface DiagramDB { // config - resetConfig?: () => void; - setConfig?: (config: BaseDiagramConfig) => void; getConfig?: () => BaseDiagramConfig | undefined; // db diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts index fed10a49a5..65f302e51b 100644 --- a/packages/mermaid/src/diagrams/pie/pie.spec.ts +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -159,8 +159,8 @@ describe('pie chart', () => { }); describe('config', () => { - it('setConfig', () => { - db.setConfig({ useWidth: 850, useMaxWidth: undefined }); + it.todo('setConfig', () => { + // db.setConfig({ useWidth: 850, useMaxWidth: undefined }); const config = db.getConfig(); expect(config.useWidth).toBe(850); @@ -171,9 +171,9 @@ describe('pie chart', () => { expect(db.getConfig()).toStrictEqual(DEFAULT_PIE_DB.config); }); - it('reset', () => { - db.setConfig({ textPosition: 0 }); - db.resetConfig(); + it.todo('resetConfig', () => { + // db.setConfig({ textPosition: 0 }); + // db.resetConfig(); expect(db.getConfig().textPosition).toStrictEqual(DEFAULT_PIE_DB.config.textPosition); }); }); diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index f55f3bc8ef..00c67f08a9 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -15,7 +15,6 @@ import type { ParseDirectiveDefinition } from '../../diagram-api/types.js'; import type { PieFields, PieDB, Sections } from './pieTypes.js'; import type { RequiredDeep } from 'type-fest'; import type { PieDiagramConfig } from '../../config.type.js'; -import { cleanAndMerge } from '../../utils.js'; export const DEFAULT_PIE_CONFIG: Required = { useMaxWidth: true, @@ -31,18 +30,10 @@ export const DEFAULT_PIE_DB: RequiredDeep = { let sections: Sections = DEFAULT_PIE_DB.sections; let showData: boolean = DEFAULT_PIE_DB.showData; -let config: Required = structuredClone(DEFAULT_PIE_CONFIG); - -const setConfig = (conf: PieDiagramConfig): void => { - config = cleanAndMerge(DEFAULT_PIE_CONFIG, conf); -}; +const config: Required = structuredClone(DEFAULT_PIE_CONFIG); const getConfig = (): Required => structuredClone(config); -const resetConfig = (): void => { - config = structuredClone(DEFAULT_PIE_CONFIG); -}; - const parseDirective: ParseDirectiveDefinition = (statement, context, type) => { _parseDirective(this, statement, context, type); }; @@ -51,7 +42,6 @@ const clear = (): void => { sections = structuredClone(DEFAULT_PIE_DB.sections); showData = DEFAULT_PIE_DB.showData; commonClear(); - resetConfig(); }; const addSection = (label: string, value: number): void => { @@ -78,9 +68,7 @@ const setShowData = (toggle: boolean): void => { const getShowData = (): boolean => showData; export const db: PieDB = { - setConfig, getConfig, - resetConfig, parseDirective, clear, diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index 857d4c1b4e..67fb1dca25 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -43,8 +43,6 @@ export interface D3Sections { export interface PieDB extends DiagramDB { // config - resetConfig: () => void; - setConfig: (config: PieDiagramConfig) => void; getConfig: () => Required; // common db From b60410161dbc45fa94fc4cb947a184faf4dd6752 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 02:02:28 +0000 Subject: [PATCH 483/595] Update all patch dependencies --- docker-compose.yml | 4 +- package.json | 4 +- packages/mermaid/src/docs/package.json | 2 +- pnpm-lock.yaml | 90 +++++++++++++++++++------- 4 files changed, 72 insertions(+), 28 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 05fc241ba8..56a46e84c9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.9' services: mermaid: - image: node:18.17.0-alpine3.18 + image: node:18.17.1-alpine3.18 stdin_open: true tty: true working_dir: /mermaid @@ -17,7 +17,7 @@ services: - 9000:9000 - 3333:3333 cypress: - image: cypress/included:12.17.2 + image: cypress/included:12.17.3 stdin_open: true tty: true working_dir: /mermaid diff --git a/package.json b/package.json index 03ab8c6ecb..65230372bc 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "10.2.4", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "type": "module", - "packageManager": "pnpm@8.6.11", + "packageManager": "pnpm@8.6.12", "keywords": [ "diagram", "markdown", @@ -122,7 +122,7 @@ "vitest": "^0.33.0" }, "volta": { - "node": "18.17.0" + "node": "18.17.1" }, "nyc": { "report-dir": "coverage/cypress" diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index 922d8fa32b..001abd4c5c 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -31,7 +31,7 @@ "unplugin-vue-components": "^0.25.0", "vite": "^4.3.9", "vite-plugin-pwa": "^0.16.0", - "vitepress": "1.0.0-beta.7", + "vitepress": "1.0.0-rc.4", "workbox-window": "^7.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08487b8026..707ce41749 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -466,8 +466,8 @@ importers: specifier: ^0.16.0 version: 0.16.0(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@7.0.0) vitepress: - specifier: 1.0.0-beta.7 - version: 1.0.0-beta.7(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0) + specifier: 1.0.0-rc.4 + version: 1.0.0-rc.4(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -5169,14 +5169,14 @@ packages: vue: 3.3.4 dev: true - /@vitejs/plugin-vue@4.2.3(vite@4.4.7)(vue@3.3.4): + /@vitejs/plugin-vue@4.2.3(vite@4.4.9)(vue@3.3.4): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.4.7(@types/node@18.16.0) + vite: 4.4.9(@types/node@18.16.0) vue: 3.3.4 dev: true @@ -5438,20 +5438,20 @@ packages: - vue dev: true - /@vueuse/core@10.2.1(vue@3.3.4): - resolution: {integrity: sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==} + /@vueuse/core@10.3.0(vue@3.3.4): + resolution: {integrity: sha512-BEM5yxcFKb5btFjTSAFjTu5jmwoW66fyV9uJIP4wUXXU8aR5Hl44gndaaXp7dC5HSObmgbnR2RN+Un1p68Mf5Q==} dependencies: '@types/web-bluetooth': 0.0.17 - '@vueuse/metadata': 10.2.1 - '@vueuse/shared': 10.2.1(vue@3.3.4) + '@vueuse/metadata': 10.3.0 + '@vueuse/shared': 10.3.0(vue@3.3.4) vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/integrations@10.2.1(focus-trap@7.5.2)(vue@3.3.4): - resolution: {integrity: sha512-FDP5lni+z9FjHE9H3xuvwSjoRV9U8jmDvJpmHPCBjUgPGYRynwb60eHWXCFJXLUtb4gSIHy0e+iaEbrKdalCkQ==} + /@vueuse/integrations@10.3.0(focus-trap@7.5.2)(vue@3.3.4): + resolution: {integrity: sha512-Jgiv7oFyIgC6BxmDtiyG/fxyGysIds00YaY7sefwbhCZ2/tjEx1W/1WcsISSJPNI30in28+HC2J4uuU8184ekg==} peerDependencies: async-validator: '*' axios: '*' @@ -5491,8 +5491,8 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.2.1(vue@3.3.4) - '@vueuse/shared': 10.2.1(vue@3.3.4) + '@vueuse/core': 10.3.0(vue@3.3.4) + '@vueuse/shared': 10.3.0(vue@3.3.4) focus-trap: 7.5.2 vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: @@ -5508,8 +5508,8 @@ packages: resolution: {integrity: sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==} dev: true - /@vueuse/metadata@10.2.1: - resolution: {integrity: sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==} + /@vueuse/metadata@10.3.0: + resolution: {integrity: sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw==} dev: true /@vueuse/shared@10.1.0(vue@3.2.47): @@ -5530,8 +5530,8 @@ packages: - vue dev: true - /@vueuse/shared@10.2.1(vue@3.3.4): - resolution: {integrity: sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==} + /@vueuse/shared@10.3.0(vue@3.3.4): + resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} dependencies: vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: @@ -13561,6 +13561,14 @@ packages: fsevents: 2.3.2 dev: true + /rollup@3.28.0: + resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true @@ -15233,7 +15241,7 @@ packages: mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.6(@types/node@18.16.0) + vite: 4.4.7(@types/node@18.16.0) transitivePeerDependencies: - '@types/node' - less @@ -15415,6 +15423,42 @@ packages: fsevents: 2.3.2 dev: true + /vite@4.4.9(@types/node@18.16.0): + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.16.0 + esbuild: 0.18.11 + postcss: 8.4.27 + rollup: 3.28.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.3.4): resolution: {integrity: sha512-zG+ev9pw1Mg7htABlFCNXb8XwnKN+qfTKw+vU0Ers6RIrABx+45EAAFBoaL1mEpl1FRFn1o/dQ7F4b8GP6HdGQ==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} @@ -15461,22 +15505,22 @@ packages: - terser dev: true - /vitepress@1.0.0-beta.7(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0): - resolution: {integrity: sha512-P9Rw+FXatKIU4fVdtKxqwHl6fby8E/8zE3FIfep6meNgN4BxbWqoKJ6yfuuQQR9IrpQqwnyaBh4LSabyll6tWg==} + /vitepress@1.0.0-rc.4(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0): + resolution: {integrity: sha512-JCQ89Bm6ECUTnyzyas3JENo00UDJeK8q1SUQyJYou+4Yz5BKEc/F3O21cu++DnUT2zXc0kvQ2Aj4BZCc/nioXQ==} hasBin: true dependencies: '@docsearch/css': 3.5.1 '@docsearch/js': 3.5.1(@algolia/client-search@4.14.2)(search-insights@2.6.0) - '@vitejs/plugin-vue': 4.2.3(vite@4.4.7)(vue@3.3.4) + '@vitejs/plugin-vue': 4.2.3(vite@4.4.9)(vue@3.3.4) '@vue/devtools-api': 6.5.0 - '@vueuse/core': 10.2.1(vue@3.3.4) - '@vueuse/integrations': 10.2.1(focus-trap@7.5.2)(vue@3.3.4) + '@vueuse/core': 10.3.0(vue@3.3.4) + '@vueuse/integrations': 10.3.0(focus-trap@7.5.2)(vue@3.3.4) body-scroll-lock: 4.0.0-beta.0 focus-trap: 7.5.2 mark.js: 8.11.1 minisearch: 6.1.0 shiki: 0.14.3 - vite: 4.4.7(@types/node@18.16.0) + vite: 4.4.9(@types/node@18.16.0) vue: 3.3.4 transitivePeerDependencies: - '@algolia/client-search' From 2a8374312f7d18804f9212b32f56f931e257ffae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 03:07:45 +0000 Subject: [PATCH 484/595] Update all minor dependencies --- package.json | 10 +- packages/mermaid/src/docs/package.json | 4 +- pnpm-lock.yaml | 695 +++++++++++++------------ 3 files changed, 363 insertions(+), 346 deletions(-) diff --git a/package.json b/package.json index 03ab8c6ecb..76e3420c23 100644 --- a/package.json +++ b/package.json @@ -78,15 +78,15 @@ "@types/rollup-plugin-visualizer": "^4.2.1", "@typescript-eslint/eslint-plugin": "^5.59.0", "@typescript-eslint/parser": "^5.59.0", - "@vitest/coverage-v8": "^0.33.0", - "@vitest/spy": "^0.33.0", - "@vitest/ui": "^0.33.0", + "@vitest/coverage-v8": "^0.34.0", + "@vitest/spy": "^0.34.0", + "@vitest/ui": "^0.34.0", "ajv": "^8.12.0", "concurrently": "^8.0.1", "cors": "^2.8.5", "cypress": "^12.10.0", "cypress-image-snapshot": "^4.0.1", - "esbuild": "^0.18.0", + "esbuild": "^0.19.0", "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-cypress": "^2.13.2", @@ -119,7 +119,7 @@ "typescript": "^5.1.3", "vite": "^4.3.9", "vite-plugin-istanbul": "^4.1.0", - "vitest": "^0.33.0" + "vitest": "^0.34.0" }, "volta": { "node": "18.17.0" diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index 922d8fa32b..2ce557622e 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -21,13 +21,13 @@ }, "devDependencies": { "@iconify-json/carbon": "^1.1.16", - "@unocss/reset": "^0.54.0", + "@unocss/reset": "^0.55.0", "@vite-pwa/vitepress": "^0.2.0", "@vitejs/plugin-vue": "^4.2.1", "fast-glob": "^3.2.12", "https-localhost": "^4.7.1", "pathe": "^1.1.0", - "unocss": "^0.54.0", + "unocss": "^0.55.0", "unplugin-vue-components": "^0.25.0", "vite": "^4.3.9", "vite-plugin-pwa": "^0.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08487b8026..caff7de51b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,14 +63,14 @@ importers: specifier: ^5.59.0 version: 5.59.0(eslint@8.39.0)(typescript@5.1.3) '@vitest/coverage-v8': - specifier: ^0.33.0 - version: 0.33.0(vitest@0.33.0) + specifier: ^0.34.0 + version: 0.34.0(vitest@0.34.0) '@vitest/spy': - specifier: ^0.33.0 - version: 0.33.0 + specifier: ^0.34.0 + version: 0.34.0 '@vitest/ui': - specifier: ^0.33.0 - version: 0.33.0(vitest@0.33.0) + specifier: ^0.34.0 + version: 0.34.0(vitest@0.34.0) ajv: specifier: ^8.12.0 version: 8.12.0 @@ -87,8 +87,8 @@ importers: specifier: ^4.0.1 version: 4.0.1(cypress@12.10.0)(jest@29.5.0) esbuild: - specifier: ^0.18.0 - version: 0.18.0 + specifier: ^0.19.0 + version: 0.19.0 eslint: specifier: ^8.39.0 version: 8.39.0 @@ -186,8 +186,8 @@ importers: specifier: ^4.1.0 version: 4.1.0(vite@4.3.9) vitest: - specifier: ^0.33.0 - version: 0.33.0(@vitest/ui@0.33.0)(jsdom@22.0.0) + specifier: ^0.34.0 + version: 0.34.0(@vitest/ui@0.34.0)(jsdom@22.0.0) packages/mermaid: dependencies: @@ -436,8 +436,8 @@ importers: specifier: ^1.1.16 version: 1.1.16 '@unocss/reset': - specifier: ^0.54.0 - version: 0.54.0 + specifier: ^0.55.0 + version: 0.55.0 '@vite-pwa/vitepress': specifier: ^0.2.0 version: 0.2.0(vite-plugin-pwa@0.16.0) @@ -454,8 +454,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 unocss: - specifier: ^0.54.0 - version: 0.54.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) + specifier: ^0.55.0 + version: 0.55.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) unplugin-vue-components: specifier: ^0.25.0 version: 0.25.0(rollup@2.79.1)(vue@3.2.47) @@ -483,7 +483,7 @@ importers: devDependencies: webpack: specifier: ^5.74.0 - version: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + version: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 version: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) @@ -709,6 +709,10 @@ packages: resolution: {integrity: sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==} dev: true + /@antfu/utils@0.7.5: + resolution: {integrity: sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==} + dev: true + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} engines: {node: '>=10'} @@ -2791,7 +2795,7 @@ packages: bluebird: 3.7.1 debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -2910,8 +2914,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.0: - resolution: {integrity: sha512-nAwRCs5+jxi3gBMVkOqmRvsITB/UtfpvkbMwAwJUIbp66NnPbV2KGCFnjNn7IEqabJQXfBLe/QLdjCGpHU+yEw==} + /@esbuild/android-arm64@0.18.11: + resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2919,8 +2923,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.11: - resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + /@esbuild/android-arm64@0.19.0: + resolution: {integrity: sha512-AzsozJnB+RNaDncBCs3Ys5g3kqhPFUueItfEaCpp89JH2naFNX2mYDIvUgPYMqqjm8hiFoo+jklb3QHZyR3ubw==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2937,8 +2941,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.0: - resolution: {integrity: sha512-+uLHSiWK3qOeyDYCf/nuvIgCnQsYjXWNa3TlGYLW1pPG7OYMawllU+VyBgHQPjF2aIUVFpfrvz5aAfxGk/0qNg==} + /@esbuild/android-arm@0.18.11: + resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -2946,8 +2950,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.11: - resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + /@esbuild/android-arm@0.19.0: + resolution: {integrity: sha512-GAkjUyHgWTYuex3evPd5V7uV/XS4LMKr1PWHRPW1xNyy/Jx08x3uTrDFRefBYLKT/KpaWM8/YMQcwbp5a3yIDA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -2964,8 +2968,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.0: - resolution: {integrity: sha512-TiOJmHQ8bXCGlYLpBd3Qy7N8dxi4n6q+nOmTzPr5Hb/bUr+PKuP4e5lWaOlpkaKc1Q9wsFt+sHfQpFCrM7SMow==} + /@esbuild/android-x64@0.18.11: + resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2973,8 +2977,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.11: - resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + /@esbuild/android-x64@0.19.0: + resolution: {integrity: sha512-SUG8/qiVhljBDpdkHQ9DvOWbp7hFFIP0OzxOTptbmVsgBgzY6JWowmMd6yJuOhapfxmj/DrvwKmjRLvVSIAKZg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2991,8 +2995,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.0: - resolution: {integrity: sha512-5GsFovtGyjMIXJrcCzmI1hX3TneCrmFncFIlo0WrRvWcVU6H094P854ZaP8qoLgevXhggO2dhlEGYY0Zv6/S9Q==} + /@esbuild/darwin-arm64@0.18.11: + resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3000,8 +3004,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.11: - resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + /@esbuild/darwin-arm64@0.19.0: + resolution: {integrity: sha512-HkxZ8k3Jvcw0FORPNTavA8BMgQjLOB6AajT+iXmil7BwY3gU1hWvJJAyWyEogCmA4LdbGvKF8vEykdmJ4xNJJQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3018,8 +3022,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.0: - resolution: {integrity: sha512-4K/QCksQ8F58rvC1D62Xi4q4E7YWpiyc3zy2H/n1W7y0hjQpOBBxciLn0qycMskP/m/I5h9HNbRlu1aK821sHg==} + /@esbuild/darwin-x64@0.18.11: + resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3027,8 +3031,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.11: - resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + /@esbuild/darwin-x64@0.19.0: + resolution: {integrity: sha512-9IRWJjqpWFHM9a5Qs3r3bK834NCFuDY5ZaLrmTjqE+10B6w65UMQzeZjh794JcxpHolsAHqwsN/33crUXNCM2Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3045,8 +3049,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.0: - resolution: {integrity: sha512-DMazN0UGzipD0Fi1O9pRX0xfp+JC3gSnFWxTWq88Dr/odWhZzm8Jqy44LN2veYeipb1fBMxhoEp7eCr902SWqg==} + /@esbuild/freebsd-arm64@0.18.11: + resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3054,8 +3058,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.11: - resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + /@esbuild/freebsd-arm64@0.19.0: + resolution: {integrity: sha512-s7i2WcXcK0V1PJHVBe7NsGddsL62a9Vhpz2U7zapPrwKoFuxPP9jybwX8SXnropR/AOj3ppt2ern4ItblU6UQQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3072,8 +3076,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.0: - resolution: {integrity: sha512-GdkJAB3ZBiYnie9iFO9v/CM4ko0dm5SYkUs97lBKNLHw9mo4H9IXwGNKtUztisEsmUP0IWfEi4YTWOJF3DIO4w==} + /@esbuild/freebsd-x64@0.18.11: + resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3081,8 +3085,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.11: - resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + /@esbuild/freebsd-x64@0.19.0: + resolution: {integrity: sha512-NMdBSSdgwHCqCsucU5k1xflIIRU0qi1QZnM6+vdGy5fvxm1c8rKh50VzsWsIVTFUG3l91AtRxVwoz3Lcvy3I5w==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3099,8 +3103,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.0: - resolution: {integrity: sha512-Mb3yCN9PXA6G5qf84UF0IEuXP22eyNlquF17Zs2F1vVBM0CtyWLYosC5JaxBxfK6EzWwB2IkPBIjMeK3ek+ItA==} + /@esbuild/linux-arm64@0.18.11: + resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3108,8 +3112,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.11: - resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + /@esbuild/linux-arm64@0.19.0: + resolution: {integrity: sha512-I4zvE2srSZxRPapFnNqj+NL3sDJ1wkvEZqt903OZUlBBgigrQMvzUowvP/TTTu2OGYe1oweg5MFilfyrElIFag==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3126,8 +3130,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.0: - resolution: {integrity: sha512-A3Ue/oZdb43znNpeY71FrAjZF20MtnBKCGb1vXLIVg5qg8rRM1gRgn6X2ixYwATiw5dE04JnP+aV4OBf8c5ZvQ==} + /@esbuild/linux-arm@0.18.11: + resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3135,8 +3139,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.11: - resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + /@esbuild/linux-arm@0.19.0: + resolution: {integrity: sha512-2F1+lH7ZBcCcgxiSs8EXQV0PPJJdTNiNcXxDb61vzxTRJJkXX1I/ye9mAhfHyScXzHaEibEXg1Jq9SW586zz7w==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3153,8 +3157,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.0: - resolution: {integrity: sha512-WNDXgJdfDhN6ZxHU7HgR2BRDVx9iGN8SpmebUUGdENg4MZJndGcaQuf2kCJjMwoK0+es1g61TeJzAMxfgDcmcA==} + /@esbuild/linux-ia32@0.18.11: + resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3162,8 +3166,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.11: - resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + /@esbuild/linux-ia32@0.19.0: + resolution: {integrity: sha512-dz2Q7+P92r1Evc8kEN+cQnB3qqPjmCrOZ+EdBTn8lEc1yN8WDgaDORQQiX+mxaijbH8npXBT9GxUqE52Gt6Y+g==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3180,8 +3184,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.0: - resolution: {integrity: sha512-PBr8Lf+L8amvheTGFVNK/0qionszkOKMq2WyfFlVz8D41v0+uSth6fYYHwtASkMk4xf+oh0vW8NYuav3/3RHuQ==} + /@esbuild/linux-loong64@0.18.11: + resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3189,8 +3193,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.11: - resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + /@esbuild/linux-loong64@0.19.0: + resolution: {integrity: sha512-IcVJovJVflih4oFahhUw+N7YgNbuMSVFNr38awb0LNzfaiIfdqIh518nOfYaNQU3aVfiJnOIRVJDSAP4k35WxA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3207,8 +3211,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.0: - resolution: {integrity: sha512-Lg4ygah5bwfDDCOMFsBJjSVbD1UzNwWt4f7DhpaSIFOrJqoECX1VTByKw3iSDAVRlwl1cljlfy7wlysrRZcdiQ==} + /@esbuild/linux-mips64el@0.18.11: + resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3216,8 +3220,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.11: - resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + /@esbuild/linux-mips64el@0.19.0: + resolution: {integrity: sha512-bZGRAGySMquWsKw0gIdsClwfvgbsSq/7oq5KVu1H1r9Il+WzOcfkV1hguntIuBjRVL8agI95i4AukjdAV2YpUw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3234,8 +3238,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.0: - resolution: {integrity: sha512-obz/firdtou244DIjHzdKmJChwGseqA3tWGa6xPMfuq54Ca4Pp1a4ANMrqy2IZ67rfpRHcJTlb2h3rSfW6tvAA==} + /@esbuild/linux-ppc64@0.18.11: + resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3243,8 +3247,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.11: - resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + /@esbuild/linux-ppc64@0.19.0: + resolution: {integrity: sha512-3LC6H5/gCDorxoRBUdpLV/m7UthYSdar0XcCu+ypycQxMS08MabZ06y1D1yZlDzL/BvOYliRNRWVG/YJJvQdbg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3261,8 +3265,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.0: - resolution: {integrity: sha512-UkuBdxQsxi39wWrRLMOkJl//82/hpQw79TD+OBLw3IBYyVQ4Wfvpe56RfEGK/j439sIm79ccnD5RUNQceHvZdQ==} + /@esbuild/linux-riscv64@0.18.11: + resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3270,8 +3274,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.11: - resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + /@esbuild/linux-riscv64@0.19.0: + resolution: {integrity: sha512-jfvdKjWk+Cp2sgLtEEdSHXO7qckrw2B2eFBaoRdmfhThqZs29GMMg7q/LsQpybA7BxCLLEs4di5ucsWzZC5XPA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3288,8 +3292,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.0: - resolution: {integrity: sha512-MgyuC30oYB465hyAqsb3EH6Y4zTeqqgixRAOpsDNMCelyDiW9ZDPXvMPfBgCZGJlDZFGKDm2I9ou8E3VI+v7pg==} + /@esbuild/linux-s390x@0.18.11: + resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3297,8 +3301,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.11: - resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + /@esbuild/linux-s390x@0.19.0: + resolution: {integrity: sha512-ofcucfNLkoXmcnJaw9ugdEOf40AWKGt09WBFCkpor+vFJVvmk/8OPjl/qRtks2Z7BuZbG3ztJuK1zS9z5Cgx9A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3315,8 +3319,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.0: - resolution: {integrity: sha512-oLLKU3F4pKWAsNmfi7Rd4qkj0qvg1S923ZjlcISA2IMgHsODA9xzwerqWayI5nOhLGgKXviDofn9exTeA4EUQQ==} + /@esbuild/linux-x64@0.18.11: + resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3324,8 +3328,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.11: - resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + /@esbuild/linux-x64@0.19.0: + resolution: {integrity: sha512-Fpf7zNDBti3xrQKQKLdXT0hTyOxgFdRJIMtNy8x1az9ATR9/GJ1brYbB/GLWoXhKiHsoWs+2DLkFVNNMTCLEwA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3342,8 +3346,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.0: - resolution: {integrity: sha512-BEfJrZsZ/gMtpS2vC+2YoFGxmfLKiYQvj8lZrBfjKzQrwyMpH53CzQJj9ypOx9ldjM/MVxf9i9wi/rS4BWV7WA==} + /@esbuild/netbsd-x64@0.18.11: + resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3351,8 +3355,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.11: - resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + /@esbuild/netbsd-x64@0.19.0: + resolution: {integrity: sha512-AMQAp/5oENgDOvVhvOlbhVe1pWii7oFAMRHlmTjSEMcpjTpIHtFXhv9uAFgUERHm3eYtNvS9Vf+gT55cwuI6Aw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3369,8 +3373,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.0: - resolution: {integrity: sha512-eDolHeG3REnEIgwl7Lw2S0znUMY4PFVtCAzLKqdRO0HD+iPKJR8n2MEJJyhPdUjcobo8SEQ2AG6gtYfft9VFHg==} + /@esbuild/openbsd-x64@0.18.11: + resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3378,8 +3382,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.11: - resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + /@esbuild/openbsd-x64@0.19.0: + resolution: {integrity: sha512-fDztEve1QUs3h/Dw2AUmBlWGkNQbhDoD05ppm5jKvzQv+HVuV13so7m5RYeiSMIC2XQy7PAjZh+afkxAnCRZxA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3396,8 +3400,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.0: - resolution: {integrity: sha512-kl7vONem2wmRQke015rSrknmc6TYXKVNs2quiVTdvkSufscrjegpNqKyP7v6EHqXtvkzrB92ySjpfzazKG627g==} + /@esbuild/sunos-x64@0.18.11: + resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3405,8 +3409,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.11: - resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + /@esbuild/sunos-x64@0.19.0: + resolution: {integrity: sha512-bKZzJ2/rvUjDzA5Ddyva2tMk89WzNJEibZEaq+wY6SiqPlwgFbqyQLimouxLHiHh1itb5P3SNCIF1bc2bw5H9w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3423,8 +3427,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.0: - resolution: {integrity: sha512-WohArFQ3HStBu9MAsx3JUk2wfC2v8QoadnMoNfx3Y26ac54tD/wQhPzw4QOzQbSqOFqzIMLKWbxindTsko+9OA==} + /@esbuild/win32-arm64@0.18.11: + resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3432,8 +3436,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.11: - resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + /@esbuild/win32-arm64@0.19.0: + resolution: {integrity: sha512-NQJ+4jmnA79saI+sE+QzcEls19uZkoEmdxo7r//PDOjIpX8pmoWtTnWg6XcbnO7o4fieyAwb5U2LvgWynF4diA==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3450,8 +3454,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.0: - resolution: {integrity: sha512-SdnpSOxpeoewYCurmfLVepLuhOAphWkGTxWHifFjp37DaUHwF1fpGzyxhZoXMt5MKGuAO5aE3c5668YYtno+9Q==} + /@esbuild/win32-ia32@0.18.11: + resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3459,8 +3463,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.11: - resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + /@esbuild/win32-ia32@0.19.0: + resolution: {integrity: sha512-uyxiZAnsfu9diHm9/rIH2soecF/HWLXYUhJKW4q1+/LLmNQ+55lRjvSUDhUmsgJtSUscRJB/3S4RNiTb9o9mCg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3477,8 +3481,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.0: - resolution: {integrity: sha512-WJxImv0Pehpbo+pgg7Xrn88/b6ZzSweNHTw/2LW95JjeQUIS6ToJeQmjAdud9H3yiHJmhLOmEAOvUdNLhptD0w==} + /@esbuild/win32-x64@0.18.11: + resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -3486,8 +3490,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.11: - resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + /@esbuild/win32-x64@0.19.0: + resolution: {integrity: sha512-jl+NXUjK2StMgqnZnqgNjZuerFG8zQqWXMBZdMMv4W/aO1ZKQaYWZBxTrtWKphkCBVEMh0wMVfGgOd2BjOZqUQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -4916,7 +4920,7 @@ packages: '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.0.4) eslint: 8.39.0 eslint-scope: 5.1.1 - semver: 7.5.0 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript @@ -4936,7 +4940,7 @@ packages: '@typescript-eslint/typescript-estree': 5.59.0(typescript@5.1.3) eslint: 8.39.0 eslint-scope: 5.1.1 - semver: 7.5.0 + semver: 7.5.3 transitivePeerDependencies: - supports-color - typescript @@ -4950,190 +4954,195 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@unocss/astro@0.54.0(rollup@2.79.1)(vite@4.3.9): - resolution: {integrity: sha512-Zq4GGRiXbWCipN9lUKlu3fmlrqIYu3rFoGwjL+v7VJulP8tVhiqzfbLXFKQePOVvCmiSvCKr6leuqgFA7PlPBg==} + /@unocss/astro@0.55.0(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-Qqk8zONPBBigEcUOGhEwBPIQmWnQGpjpQrSdpjs86BphKbQcqWHES1fQA83Fk2tpZ08zo0zAPDJ8VhfR+c+yqg==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true dependencies: - '@unocss/core': 0.54.0 - '@unocss/reset': 0.54.0 - '@unocss/vite': 0.54.0(rollup@2.79.1)(vite@4.3.9) + '@unocss/core': 0.55.0 + '@unocss/reset': 0.55.0 + '@unocss/vite': 0.55.0(rollup@2.79.1)(vite@4.3.9) + vite: 4.3.9(@types/node@18.16.0) transitivePeerDependencies: - rollup - - vite dev: true - /@unocss/cli@0.54.0(rollup@2.79.1): - resolution: {integrity: sha512-SuQkqJxuvC9JHUpHbFQY5r+6/FoF0j4zTwY25POlr9SIz3CFrdn4tDndxvhClap9d6wVHKSbHBP9EY0fA2SQzw==} + /@unocss/cli@0.55.0(rollup@2.79.1): + resolution: {integrity: sha512-K8PR4UydtTfT8rMynDcNQKk1WWI97312kZYjBLHUlrJkNbSgcmpU3wfREIqvCSgPg61ttZAgE5uI6omf8FudtA==} engines: {node: '>=14'} hasBin: true dependencies: '@ampproject/remapping': 2.2.1 '@rollup/pluginutils': 5.0.2(rollup@2.79.1) - '@unocss/config': 0.54.0 - '@unocss/core': 0.54.0 - '@unocss/preset-uno': 0.54.0 + '@unocss/config': 0.55.0 + '@unocss/core': 0.55.0 + '@unocss/preset-uno': 0.55.0 cac: 6.7.14 chokidar: 3.5.3 colorette: 2.0.20 consola: 3.2.3 - fast-glob: 3.3.0 - magic-string: 0.30.1 + fast-glob: 3.3.1 + magic-string: 0.30.2 pathe: 1.1.1 perfect-debounce: 1.0.0 transitivePeerDependencies: - rollup dev: true - /@unocss/config@0.54.0: - resolution: {integrity: sha512-FT0zOJCR2qr5P08msNovsJ4Qx+P4rXoYlK2zt/hgLKiFRIUKxnwSBDvapqmW6vo3vzOsdmBBO0YKpaZJ877F8A==} + /@unocss/config@0.55.0: + resolution: {integrity: sha512-N1o49aqqMP8UTmFZKsqN+CZFxoiUbatTYdPixCGErI5H6jA0VByVU7RI3Dr+Lk3PTOxbmZUunaDaWZP3iT4X5w==} engines: {node: '>=14'} dependencies: - '@unocss/core': 0.54.0 - unconfig: 0.3.9 + '@unocss/core': 0.55.0 + unconfig: 0.3.10 dev: true - /@unocss/core@0.54.0: - resolution: {integrity: sha512-iHfJJ8U+pVhMrbVpzMb0GImZUJu3Xmp165Q5Qr44hGOEzcMdvdBxbMSSl2VBKjRsEuNudNVhh7XJAyUcKxnSWg==} + /@unocss/core@0.55.0: + resolution: {integrity: sha512-TcTugpuhsv6OwMsP3iFIG8FVc9N5JzkojIGNAKF8I2WBftZ//3QcpEHiHc1mH3MlPYfJgUvCcT6/Gad55qmHzg==} dev: true - /@unocss/extractor-arbitrary-variants@0.54.0: - resolution: {integrity: sha512-luJTF3TnXFbMZ2Gau56p0uRsR+yIUbvHbT6ag6mvv0TvUsnhEFsMUdkXVJ1arp0duIl/dg0r1drL/Ax75RszNw==} + /@unocss/extractor-arbitrary-variants@0.55.0: + resolution: {integrity: sha512-FCel+gJ3N8C/361yQ3gYTmbCjX3DXQ+LdxBiAawapbtTA4eXw55/f7cpiiWcHoouCRrWIEMOQN5DskAJvmMaTw==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 dev: true - /@unocss/inspector@0.54.0: - resolution: {integrity: sha512-D3yVO7zE4NY/sARiNCUXQC7HPQZhEy7U1mSZEPc+vsVKx3nJJuRMqK9qo60SV4AZuxnd8WhL0T00W7cjVldzRw==} + /@unocss/inspector@0.55.0: + resolution: {integrity: sha512-wIkypLsBUA76A9cpyf/VtbVU7TLJO9HETEVMZytxEyVpq4KVNJBwNLUGWQ07IOc0oRTX+HJKiQK9/bLnIYMCHA==} dependencies: gzip-size: 6.0.0 sirv: 2.0.3 dev: true - /@unocss/postcss@0.54.0(postcss@8.4.27): - resolution: {integrity: sha512-t1PmIkp2Qa9F/9swfCVCXMuheQxd1ddrcvf0+d4fOckpFF8YhvOi+WfMoZW4YFwoCmG5pvDg4VYgKbDunGHhRg==} + /@unocss/postcss@0.55.0(postcss@8.4.27): + resolution: {integrity: sha512-qytqO8riNLpy1m6qVfISVHw3dwNRHgpxcUaufSN7P8lgsbOimwh2nRE35f/HoKS1VV+5JVsVaHmUFQVxwiW6cw==} engines: {node: '>=14'} peerDependencies: postcss: ^8.4.21 dependencies: - '@unocss/config': 0.54.0 - '@unocss/core': 0.54.0 + '@unocss/config': 0.55.0 + '@unocss/core': 0.55.0 css-tree: 2.3.1 - fast-glob: 3.3.0 - magic-string: 0.30.1 + fast-glob: 3.3.1 + magic-string: 0.30.2 postcss: 8.4.27 dev: true - /@unocss/preset-attributify@0.54.0: - resolution: {integrity: sha512-5Ar1n7LHKF6z1BF9N5CR8jjl9TXrVktTDd+Ldyia69jDLi+stVhM9AOGEDE8wbDkLKwv9CK5XhvyPCazGHrG+A==} + /@unocss/preset-attributify@0.55.0: + resolution: {integrity: sha512-AbqoamJLsFqJih1MMyxEslLScWSpOdlTbF9R+gSnrWwkGZDuZszcyTDbXrhCPWPUkihR7NY9XQSKxUkTb6MJJg==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 dev: true - /@unocss/preset-icons@0.54.0: - resolution: {integrity: sha512-WHdkpMzj6tohIkCc/+mEOzn0Yppqoz3y5zbI3WsDqA2/QFNSXx4haWcjV5iJI42uGcLXRp4K3l9JV3EL+oAxbg==} + /@unocss/preset-icons@0.55.0: + resolution: {integrity: sha512-BeseXUz2WFRztLtfblGhpFBJkgKi8k7tKPyEx/QX2I/xhQNsXqfWqeiCEVLxrEI3HxXOZPV1G4idCCbBiZQ3ww==} dependencies: '@iconify/utils': 2.1.7 - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 ofetch: 1.1.1 transitivePeerDependencies: - supports-color dev: true - /@unocss/preset-mini@0.54.0: - resolution: {integrity: sha512-y+BnGpQAGC3ZWWZfXnsvUuTTO2rNnakHx4jIyf1cv7rw5oo7jL+ONb8stKqlmLGCzlQUKjG1xp+DGuKSVnRXBw==} + /@unocss/preset-mini@0.55.0: + resolution: {integrity: sha512-zAMLmpCBXE36CDCrMtvxNp7lN9mk5QpArPpLekR3lPZ7NTAYSxHkieCJ0TryeOYWlt1sBdrOFE8X0cQCyG96Zg==} dependencies: - '@unocss/core': 0.54.0 - '@unocss/extractor-arbitrary-variants': 0.54.0 + '@unocss/core': 0.55.0 + '@unocss/extractor-arbitrary-variants': 0.55.0 dev: true - /@unocss/preset-tagify@0.54.0: - resolution: {integrity: sha512-FTIZc0vMoX9+fcjPYMWALpCQp3cZQCFzR05CVJapvymxb6zl5eZq7e+tpvrmU9ZPSOdG+eHTd3SxhjeJSwh15g==} + /@unocss/preset-tagify@0.55.0: + resolution: {integrity: sha512-crvJAZpG2ge9Lq51vpWANiB3BKv8Vs8sjplwRfUVRCYMiN7ZNzq9bNzUwTXhJXmRJ4LVjTSFciKPQR7fCjUScA==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 dev: true - /@unocss/preset-typography@0.54.0: - resolution: {integrity: sha512-QqHmC49nDgYeoOCMZp1OPn6R7ISIb2LMpSq81iuuFDeYO8J+JTBWe+Z1TZhVRAXwc9rsVZeUWW6PqoBGP9QCOw==} + /@unocss/preset-typography@0.55.0: + resolution: {integrity: sha512-M4fJUEzkBqjxEUIDbwoWb00hjPbpwZKDOcB81S0F+xE3SVu1pQj8KgymhxaJvz+FxGZRajnJJ9esaGPIrzG2gQ==} dependencies: - '@unocss/core': 0.54.0 - '@unocss/preset-mini': 0.54.0 + '@unocss/core': 0.55.0 + '@unocss/preset-mini': 0.55.0 dev: true - /@unocss/preset-uno@0.54.0: - resolution: {integrity: sha512-09/sthjGLDNMr/Cayu0Gy9jTMSxUuTfetWnM3jkByNidhfuzMW26eaMhxTrbUd28H8Titt6M+WgbJ7Gi0lQtZA==} + /@unocss/preset-uno@0.55.0: + resolution: {integrity: sha512-iYGdE/MQLAvpQkyQ8f3aolC9NK9NtrG87LfQmiKu/RpzjghDlTY8VTuWIDcdIk80zTtOxRtitLqGEsoDl8WnuA==} dependencies: - '@unocss/core': 0.54.0 - '@unocss/preset-mini': 0.54.0 - '@unocss/preset-wind': 0.54.0 + '@unocss/core': 0.55.0 + '@unocss/preset-mini': 0.55.0 + '@unocss/preset-wind': 0.55.0 dev: true - /@unocss/preset-web-fonts@0.54.0: - resolution: {integrity: sha512-3x1SDbJ2omwNNc3eK19zOdNU6moJg4SEr09GkeV4MMHrMXM6BHW2mEJYFSVgmTVD1RN4LZuoy/gTHMWpJhTuzw==} + /@unocss/preset-web-fonts@0.55.0: + resolution: {integrity: sha512-nFA5q0WinD/z7Iqv3uJQ8sTK7mQf18qbcFKmgWZ+QZXdI/wACOfExd6futsXj5EdACJwsEixYJe4DURTsD5XtA==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 ofetch: 1.1.1 dev: true - /@unocss/preset-wind@0.54.0: - resolution: {integrity: sha512-SO971KQOYzM5IKwGDBve+EWBKevU1T0mK20g17BHxPI++ubHPWRRQIh/xxHyew592taBFWK6Q75fcbOgIodx4w==} + /@unocss/preset-wind@0.55.0: + resolution: {integrity: sha512-H9vNXdEJVQx1UO367V3RInAUj4qrsPCXm914RNC4D7qojOuPQlipW0YD5WFklcXeI/k0f1B30VjDYGZhV0jykg==} dependencies: - '@unocss/core': 0.54.0 - '@unocss/preset-mini': 0.54.0 + '@unocss/core': 0.55.0 + '@unocss/preset-mini': 0.55.0 dev: true - /@unocss/reset@0.54.0: - resolution: {integrity: sha512-zxvr96hVsmvJtxCLatLSCc67RBEgqvVDhEtkIFxIz5oCJzxvipJTGdKxM4F6Akyzx1A+q7zM8dimqvmC6D5Idw==} + /@unocss/reset@0.55.0: + resolution: {integrity: sha512-TzpcOCIr16IbFxQ4vrSfEV+A8k0N4mJkhl7J3SZfAxBpNDBKAWDB6VBW9iEQY5aBYDLN3wRx1LskgEoubqBCPQ==} dev: true - /@unocss/scope@0.54.0: - resolution: {integrity: sha512-47M3y3sl512BWZL5/aLrGPglQIRUjQrIW+WVVh3uzwIGVnDNHlxIhcHQUXXJuf8SLduXoIvcZQTfJt+jSXeuhA==} + /@unocss/scope@0.55.0: + resolution: {integrity: sha512-44xgHoklh2BWWuOkA0ZL1qgr4t/DGnynj3UI8K8YP+PClFFMZ/T+kfhsLBDOrS2a4ytzgh17cTGhjAc3cTwiEA==} dev: true - /@unocss/transformer-attributify-jsx-babel@0.54.0: - resolution: {integrity: sha512-+YWhyReh6JZvGiYFZ61tyqkKOc/Tn+hyYaO7VP+G2IvJqtjTwzAuyxANHimCle7O4GLodouiHPe3lKscVFt0vg==} + /@unocss/transformer-attributify-jsx-babel@0.55.0: + resolution: {integrity: sha512-gsPuD56gNw47AFgOmdpqT9+gdisLXKnPccF4ozZoqGOv3Hy2MPOc+Dkwk7qkDzzSdC39G5Aq09z8X9R2vU64XQ==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 dev: true - /@unocss/transformer-attributify-jsx@0.54.0: - resolution: {integrity: sha512-in5IglhFqY/3GFe7IZA7g5Q9fskjiWAZiKtCTp5vFExagq1d3Tr9VIOA98SEXBrpXXIh3lKbTiY0NusJRU3K2Q==} + /@unocss/transformer-attributify-jsx@0.55.0: + resolution: {integrity: sha512-17/4I2Uqj44JJ4iv3e/mBH1DsWvyVbbbA9JivS/iBPferdFTPtt4Buddhm7bkx1tE86KYZcokVZ8N5RA2zu2UQ==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 dev: true - /@unocss/transformer-compile-class@0.54.0: - resolution: {integrity: sha512-WK1fC+iDOl7Z7fO2ids6nWiMXMPHEfwMOs5dbv5lBz9UTrY1kpObToBsm3EfzhR6vwOTgld1UzpKAs3zCqZoKg==} + /@unocss/transformer-compile-class@0.55.0: + resolution: {integrity: sha512-aH2SWXqOGJAEuNS1S/fIfs0gFwnakxgG83PCS40uNbEiLv/iG0HuALaQbVvyWHo3O7xLoMa7os9p72Q2amaVQw==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 dev: true - /@unocss/transformer-directives@0.54.0: - resolution: {integrity: sha512-DJ9B5TSxScoj4B1C8H3qeUIfNGjUPuM42Lvl2exDEk4RhA/IwVePnCAjTl8UsHTDI9z+6H37v4p8j8srPrzEmQ==} + /@unocss/transformer-directives@0.55.0: + resolution: {integrity: sha512-bWfAOqQxzy5vIul/jgXN2b0APAk9tWKeTN9Rh4FWvz+dI0P7cBc3rHVEC5qM3i9xwYObtjQcNZjEfJpyeapnzg==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 css-tree: 2.3.1 dev: true - /@unocss/transformer-variant-group@0.54.0: - resolution: {integrity: sha512-qwviBwjBKhbXYK0T1wNuM3weY+RJbmrWmKqWTldXAuZDf0q06KAa4jQC8FF1YXhq5/Z6tn2MW2GFPVWd/8nPHQ==} + /@unocss/transformer-variant-group@0.55.0: + resolution: {integrity: sha512-0VSvQpEmN8/Y+CfVMhL1+u1+FjmDFtviqKz8aaLFBapC/hnxbkAQTZRVv7mFNvBhBVUHXZOz7LASR4q9RtIeVA==} dependencies: - '@unocss/core': 0.54.0 + '@unocss/core': 0.55.0 dev: true - /@unocss/vite@0.54.0(rollup@2.79.1)(vite@4.3.9): - resolution: {integrity: sha512-lABmJKYs/yNfZZSs3xwVhBZwNhfLaYcdKxPAopJ8MKiUqECdWvHqLvklKQvLttZpN3dQUmGTQLblM+55IodKEw==} + /@unocss/vite@0.55.0(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-qUOqJzSnztCQFXOCNOCqpwwziVMmygXmdbuaqNAmkAg2EzoMSacQKzmLIj49UU0l+iykf2mDh8DmQxpnEU2JSQ==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 dependencies: '@ampproject/remapping': 2.2.1 '@rollup/pluginutils': 5.0.2(rollup@2.79.1) - '@unocss/config': 0.54.0 - '@unocss/core': 0.54.0 - '@unocss/inspector': 0.54.0 - '@unocss/scope': 0.54.0 - '@unocss/transformer-directives': 0.54.0 + '@unocss/config': 0.55.0 + '@unocss/core': 0.55.0 + '@unocss/inspector': 0.55.0 + '@unocss/scope': 0.55.0 + '@unocss/transformer-directives': 0.55.0 chokidar: 3.5.3 - fast-glob: 3.3.0 - magic-string: 0.30.1 + fast-glob: 3.3.1 + magic-string: 0.30.2 vite: 4.3.9(@types/node@18.16.0) transitivePeerDependencies: - rollup @@ -5180,15 +5189,15 @@ packages: vue: 3.3.4 dev: true - /@vitest/coverage-v8@0.33.0(vitest@0.33.0): - resolution: {integrity: sha512-Rj5IzoLF7FLj6yR7TmqsfRDSeaFki6NAJ/cQexqhbWkHEV2htlVGrmuOde3xzvFsCbLCagf4omhcIaVmfU8Okg==} + /@vitest/coverage-v8@0.34.0(vitest@0.34.0): + resolution: {integrity: sha512-rUFY9xX6nnrFvVfTDjlEaOFzfHqolUoA+Unz356T38W100QA+NiaekCFq/3XB/LXBISaFreCsVjAbPV3hjV7Jg==} peerDependencies: vitest: '>=0.32.0 <1' dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 magic-string: 0.30.1 @@ -5196,58 +5205,58 @@ packages: std-env: 3.3.3 test-exclude: 6.0.0 v8-to-istanbul: 9.1.0 - vitest: 0.33.0(@vitest/ui@0.33.0)(jsdom@22.0.0) + vitest: 0.34.0(@vitest/ui@0.34.0)(jsdom@22.0.0) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@0.33.0: - resolution: {integrity: sha512-sVNf+Gla3mhTCxNJx+wJLDPp/WcstOe0Ksqz4Vec51MmgMth/ia0MGFEkIZmVGeTL5HtjYR4Wl/ZxBxBXZJTzQ==} + /@vitest/expect@0.34.0: + resolution: {integrity: sha512-d1ZU0XomWFAFyYIc6uNuY0N8NJIWESyO/6ZmwLvlHZw0GevH4AEEpq178KjXIvSCrbHN0GnzYzitd0yjfy7+Ow==} dependencies: - '@vitest/spy': 0.33.0 - '@vitest/utils': 0.33.0 + '@vitest/spy': 0.34.0 + '@vitest/utils': 0.34.0 chai: 4.3.7 dev: true - /@vitest/runner@0.33.0: - resolution: {integrity: sha512-UPfACnmCB6HKRHTlcgCoBh6ppl6fDn+J/xR8dTufWiKt/74Y9bHci5CKB8tESSV82zKYtkBJo9whU3mNvfaisg==} + /@vitest/runner@0.34.0: + resolution: {integrity: sha512-xaqM+oArJothtYXzy/dwu/iHe93Khq5QkvnYbzTxiLA0enD2peft1cask3yE6cJpwMkr7C2D1uMJwnTt4mquDw==} dependencies: - '@vitest/utils': 0.33.0 + '@vitest/utils': 0.34.0 p-limit: 4.0.0 pathe: 1.1.1 dev: true - /@vitest/snapshot@0.33.0: - resolution: {integrity: sha512-tJjrl//qAHbyHajpFvr8Wsk8DIOODEebTu7pgBrP07iOepR5jYkLFiqLq2Ltxv+r0uptUb4izv1J8XBOwKkVYA==} + /@vitest/snapshot@0.34.0: + resolution: {integrity: sha512-eGN5XBZHYOghxCOQbf8dcn6/3g7IW77GOOOC/mNFYwRXsPeoQgcgWnhj+6wgJ04pVv25wpxWL9jUkzaQ7LoFtg==} dependencies: magic-string: 0.30.1 pathe: 1.1.1 pretty-format: 29.5.0 dev: true - /@vitest/spy@0.33.0: - resolution: {integrity: sha512-Kv+yZ4hnH1WdiAkPUQTpRxW8kGtH8VRTnus7ZTGovFYM1ZezJpvGtb9nPIjPnptHbsyIAxYZsEpVPYgtpjGnrg==} + /@vitest/spy@0.34.0: + resolution: {integrity: sha512-0SZaWrQvL9ZiF/uJvyWSvsKjfuMvD1M6dE5BbE4Dmt8Vh3k4htwCV8g3ce8YOYmJSxkbh6TNOpippD6NVsxW6w==} dependencies: tinyspy: 2.1.1 dev: true - /@vitest/ui@0.33.0(vitest@0.33.0): - resolution: {integrity: sha512-7gbAjLqt30R4bodkJAutdpy4ncv+u5IKTHYTow1c2q+FOxZUC9cKOSqMUxjwaaTwLN+EnDnmXYPtg3CoahaUzQ==} + /@vitest/ui@0.34.0(vitest@0.34.0): + resolution: {integrity: sha512-+MPvbOiKrOWm1JL8hfROybzTB0Y6gWbMCQZlEI67M1+a1iTjaowXTeYSN4pGu0SubeGJw0JTrZ/Z/sRLmb9wLw==} peerDependencies: vitest: '>=0.30.1 <1' dependencies: - '@vitest/utils': 0.33.0 + '@vitest/utils': 0.34.0 fast-glob: 3.3.0 fflate: 0.8.0 flatted: 3.2.7 pathe: 1.1.1 picocolors: 1.0.0 sirv: 2.0.3 - vitest: 0.33.0(@vitest/ui@0.33.0)(jsdom@22.0.0) + vitest: 0.34.0(@vitest/ui@0.34.0)(jsdom@22.0.0) dev: true - /@vitest/utils@0.33.0: - resolution: {integrity: sha512-pF1w22ic965sv+EN6uoePkAOTkAPWM03Ri/jXNyMIKBb/XHLDPfhLvf/Fa9g0YECevAIz56oVYXhodLvLQ/awA==} + /@vitest/utils@0.34.0: + resolution: {integrity: sha512-IktrDLhBKf3dEUUxH+lcHiPnaw952+GdGvoxg99liMscgP6IePf6LuMY7B9dEIHkFunB1R8VMR/wmI/4UGg1aw==} dependencies: diff-sequences: 29.4.3 loupe: 2.3.6 @@ -5704,7 +5713,7 @@ packages: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) dev: true @@ -5817,12 +5826,12 @@ packages: acorn: 8.8.0 dev: true - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 dev: true /acorn-walk@7.2.0: @@ -6217,7 +6226,7 @@ packages: '@babel/core': 7.12.3 find-cache-dir: 3.3.2 schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) dev: true /babel-plugin-istanbul@6.1.1: @@ -8325,36 +8334,6 @@ packages: '@esbuild/win32-x64': 0.17.18 dev: true - /esbuild@0.18.0: - resolution: {integrity: sha512-/2sQaWHNX2jkglLu85EjmEAR2ANpKOa1kp2rAE3wjKcuYjEHFlB+D60tn6W9BRgHiAQEKYtl4hEygKWothfDEA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.0 - '@esbuild/android-arm64': 0.18.0 - '@esbuild/android-x64': 0.18.0 - '@esbuild/darwin-arm64': 0.18.0 - '@esbuild/darwin-x64': 0.18.0 - '@esbuild/freebsd-arm64': 0.18.0 - '@esbuild/freebsd-x64': 0.18.0 - '@esbuild/linux-arm': 0.18.0 - '@esbuild/linux-arm64': 0.18.0 - '@esbuild/linux-ia32': 0.18.0 - '@esbuild/linux-loong64': 0.18.0 - '@esbuild/linux-mips64el': 0.18.0 - '@esbuild/linux-ppc64': 0.18.0 - '@esbuild/linux-riscv64': 0.18.0 - '@esbuild/linux-s390x': 0.18.0 - '@esbuild/linux-x64': 0.18.0 - '@esbuild/netbsd-x64': 0.18.0 - '@esbuild/openbsd-x64': 0.18.0 - '@esbuild/sunos-x64': 0.18.0 - '@esbuild/win32-arm64': 0.18.0 - '@esbuild/win32-ia32': 0.18.0 - '@esbuild/win32-x64': 0.18.0 - dev: true - /esbuild@0.18.11: resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} engines: {node: '>=12'} @@ -8385,6 +8364,36 @@ packages: '@esbuild/win32-x64': 0.18.11 dev: true + /esbuild@0.19.0: + resolution: {integrity: sha512-i7i8TP4vuG55bKeLyqqk5sTPu1ZjPH3wkcLvAj/0X/222iWFo3AJUYRKjbOoY6BWFMH3teizxHEdV9Su5ESl0w==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.0 + '@esbuild/android-arm64': 0.19.0 + '@esbuild/android-x64': 0.19.0 + '@esbuild/darwin-arm64': 0.19.0 + '@esbuild/darwin-x64': 0.19.0 + '@esbuild/freebsd-arm64': 0.19.0 + '@esbuild/freebsd-x64': 0.19.0 + '@esbuild/linux-arm': 0.19.0 + '@esbuild/linux-arm64': 0.19.0 + '@esbuild/linux-ia32': 0.19.0 + '@esbuild/linux-loong64': 0.19.0 + '@esbuild/linux-mips64el': 0.19.0 + '@esbuild/linux-ppc64': 0.19.0 + '@esbuild/linux-riscv64': 0.19.0 + '@esbuild/linux-s390x': 0.19.0 + '@esbuild/linux-x64': 0.19.0 + '@esbuild/netbsd-x64': 0.19.0 + '@esbuild/openbsd-x64': 0.19.0 + '@esbuild/sunos-x64': 0.19.0 + '@esbuild/win32-arm64': 0.19.0 + '@esbuild/win32-ia32': 0.19.0 + '@esbuild/win32-x64': 0.19.0 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -8645,8 +8654,8 @@ packages: resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.0 dev: true @@ -8940,6 +8949,17 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -10409,6 +10429,15 @@ packages: supports-color: 7.2.0 dev: true + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} @@ -10929,6 +10958,12 @@ packages: /jiti@1.18.2: resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} hasBin: true + dev: false + + /jiti@1.19.1: + resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} + hasBin: true + dev: true /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -11477,6 +11512,13 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /magic-string@0.30.2: + resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -11484,6 +11526,13 @@ packages: semver: 6.3.0 dev: true + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.3 + dev: true + /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -14444,7 +14493,7 @@ packages: iterm2-version: 4.2.0 dev: true - /terser-webpack-plugin@5.3.6(esbuild@0.18.0)(webpack@5.75.0): + /terser-webpack-plugin@5.3.6(esbuild@0.19.0)(webpack@5.75.0): resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -14461,12 +14510,12 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.17 - esbuild: 0.18.0 + esbuild: 0.19.0 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 terser: 5.15.1 - webpack: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) dev: true /terser@5.15.1: @@ -14475,7 +14524,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.8.2 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -14564,8 +14613,8 @@ packages: resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} dev: true - /tinypool@0.6.0: - resolution: {integrity: sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==} + /tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} engines: {node: '>=14.0.0'} dev: true @@ -14913,12 +14962,13 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unconfig@0.3.9: - resolution: {integrity: sha512-8yhetFd48M641mxrkWA+C/lZU4N0rCOdlo3dFsyFPnBHBjMJfjT/3eAZBRT2RxCRqeBMAKBVgikejdS6yeBjMw==} + /unconfig@0.3.10: + resolution: {integrity: sha512-tj317lhIq2iZF/NXrJnU1t2UaGUKKz1eL1sK2t63Oq66V9BxqvZV12m55fp/fpQJ+DDmVlLgo7cnLVOZkhlO/A==} dependencies: - '@antfu/utils': 0.7.4 + '@antfu/utils': 0.7.5 defu: 6.1.2 - jiti: 1.18.2 + jiti: 1.19.1 + mlly: 1.4.0 dev: true /underscore@1.1.7: @@ -15022,40 +15072,43 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unocss@0.54.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9): - resolution: {integrity: sha512-SXjyQqt/MP1uW8mjEmQaSa0zd+QB3FwaGD/ityNlu+zNRx1D03BPP9ACbJDB1zZKx4aodMVSsHZ3TV5wsu+VRQ==} + /unocss@0.55.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-mjtN/2Dr495swOA/u/UaA0keCtv8/vFc114pd0D4XzpbK2/nKNB9Got/lmhJp8fxblV+oNtLkD0PaHtpAvSpsw==} engines: {node: '>=14'} peerDependencies: - '@unocss/webpack': 0.54.0 + '@unocss/webpack': 0.55.0 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 peerDependenciesMeta: '@unocss/webpack': optional: true + vite: + optional: true dependencies: - '@unocss/astro': 0.54.0(rollup@2.79.1)(vite@4.3.9) - '@unocss/cli': 0.54.0(rollup@2.79.1) - '@unocss/core': 0.54.0 - '@unocss/extractor-arbitrary-variants': 0.54.0 - '@unocss/postcss': 0.54.0(postcss@8.4.27) - '@unocss/preset-attributify': 0.54.0 - '@unocss/preset-icons': 0.54.0 - '@unocss/preset-mini': 0.54.0 - '@unocss/preset-tagify': 0.54.0 - '@unocss/preset-typography': 0.54.0 - '@unocss/preset-uno': 0.54.0 - '@unocss/preset-web-fonts': 0.54.0 - '@unocss/preset-wind': 0.54.0 - '@unocss/reset': 0.54.0 - '@unocss/transformer-attributify-jsx': 0.54.0 - '@unocss/transformer-attributify-jsx-babel': 0.54.0 - '@unocss/transformer-compile-class': 0.54.0 - '@unocss/transformer-directives': 0.54.0 - '@unocss/transformer-variant-group': 0.54.0 - '@unocss/vite': 0.54.0(rollup@2.79.1)(vite@4.3.9) + '@unocss/astro': 0.55.0(rollup@2.79.1)(vite@4.3.9) + '@unocss/cli': 0.55.0(rollup@2.79.1) + '@unocss/core': 0.55.0 + '@unocss/extractor-arbitrary-variants': 0.55.0 + '@unocss/postcss': 0.55.0(postcss@8.4.27) + '@unocss/preset-attributify': 0.55.0 + '@unocss/preset-icons': 0.55.0 + '@unocss/preset-mini': 0.55.0 + '@unocss/preset-tagify': 0.55.0 + '@unocss/preset-typography': 0.55.0 + '@unocss/preset-uno': 0.55.0 + '@unocss/preset-web-fonts': 0.55.0 + '@unocss/preset-wind': 0.55.0 + '@unocss/reset': 0.55.0 + '@unocss/transformer-attributify-jsx': 0.55.0 + '@unocss/transformer-attributify-jsx-babel': 0.55.0 + '@unocss/transformer-compile-class': 0.55.0 + '@unocss/transformer-directives': 0.55.0 + '@unocss/transformer-variant-group': 0.55.0 + '@unocss/vite': 0.55.0(rollup@2.79.1)(vite@4.3.9) + vite: 4.3.9(@types/node@18.16.0) transitivePeerDependencies: - postcss - rollup - supports-color - - vite dev: true /unpipe@1.0.0: @@ -15223,8 +15276,8 @@ packages: vfile-message: 3.1.2 dev: true - /vite-node@0.33.0(@types/node@18.16.0): - resolution: {integrity: sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==} + /vite-node@0.34.0(@types/node@18.16.0): + resolution: {integrity: sha512-rGZMvpb052rjUwJA/a17xMfOibzNF7byMdRSTcN2Lw8uxX08s5EfjWW5mBkm3MSFTPctMSVtT2yC+8ShrZbT5g==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: @@ -15233,7 +15286,7 @@ packages: mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.6(@types/node@18.16.0) + vite: 4.4.7(@types/node@18.16.0) transitivePeerDependencies: - '@types/node' - less @@ -15343,42 +15396,6 @@ packages: fsevents: 2.3.2 dev: true - /vite@4.4.6(@types/node@18.16.0): - resolution: {integrity: sha512-EY6Mm8vJ++S3D4tNAckaZfw3JwG3wa794Vt70M6cNJ6NxT87yhq7EC8Rcap3ahyHdo8AhCmV9PTk+vG1HiYn1A==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.16.0 - esbuild: 0.18.11 - postcss: 8.4.27 - rollup: 3.26.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vite@4.4.7(@types/node@18.16.0): resolution: {integrity: sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -15505,8 +15522,8 @@ packages: - universal-cookie dev: true - /vitest@0.33.0(@vitest/ui@0.33.0)(jsdom@22.0.0): - resolution: {integrity: sha512-1CxaugJ50xskkQ0e969R/hW47za4YXDUfWJDxip1hwbnhUjYolpfUn2AMOulqG/Dtd9WYAtkHmM/m3yKVrEejQ==} + /vitest@0.34.0(@vitest/ui@0.34.0)(jsdom@22.0.0): + resolution: {integrity: sha512-8Pnc1fVt1P6uBncdUZ++hgiJGgxIRKuz4bmS/PQziaEcUj0D1g9cGiR1MbLrcsvFTC6fgrqDhYoTAdBG356WMA==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -15539,12 +15556,12 @@ packages: '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 '@types/node': 18.16.0 - '@vitest/expect': 0.33.0 - '@vitest/runner': 0.33.0 - '@vitest/snapshot': 0.33.0 - '@vitest/spy': 0.33.0 - '@vitest/ui': 0.33.0(vitest@0.33.0) - '@vitest/utils': 0.33.0 + '@vitest/expect': 0.34.0 + '@vitest/runner': 0.34.0 + '@vitest/snapshot': 0.34.0 + '@vitest/spy': 0.34.0 + '@vitest/ui': 0.34.0(vitest@0.34.0) + '@vitest/utils': 0.34.0 acorn: 8.10.0 acorn-walk: 8.2.0 cac: 6.7.14 @@ -15558,9 +15575,9 @@ packages: std-env: 3.3.3 strip-literal: 1.0.1 tinybench: 2.5.0 - tinypool: 0.6.0 - vite: 4.4.6(@types/node@18.16.0) - vite-node: 0.33.0(@types/node@18.16.0) + tinypool: 0.7.0 + vite: 4.4.7(@types/node@18.16.0) + vite-node: 0.34.0(@types/node@18.16.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -15796,7 +15813,7 @@ packages: import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) webpack-merge: 5.8.0 dev: true @@ -15812,7 +15829,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) dev: true /webpack-dev-server@4.11.1(webpack-cli@4.10.0)(webpack@5.75.0): @@ -15853,7 +15870,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0) + webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) webpack-dev-middleware: 5.3.3(webpack@5.75.0) ws: 8.9.0 @@ -15881,7 +15898,7 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true - /webpack@5.75.0(esbuild@0.18.0)(webpack-cli@4.10.0): + /webpack@5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0): resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -15912,7 +15929,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6(esbuild@0.18.0)(webpack@5.75.0) + terser-webpack-plugin: 5.3.6(esbuild@0.19.0)(webpack@5.75.0) watchpack: 2.4.0 webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) webpack-sources: 3.2.3 From c1b9c54fc996eb11381ac3f8da970fdc608482ce Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Tue, 15 Aug 2023 17:56:18 +0300 Subject: [PATCH 485/595] use `DiagramStylesProvider` in `pieStyles.ts` --- packages/mermaid/src/diagrams/pie/pieStyles.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/pie/pieStyles.ts b/packages/mermaid/src/diagrams/pie/pieStyles.ts index 020bef8883..39a7f21d54 100644 --- a/packages/mermaid/src/diagrams/pie/pieStyles.ts +++ b/packages/mermaid/src/diagrams/pie/pieStyles.ts @@ -1,6 +1,7 @@ +import type { DiagramStylesProvider } from '../../diagram-api/types.js'; import type { PieStyleOptions } from './pieTypes.js'; -const getStyles = (options: PieStyleOptions) => +const getStyles: DiagramStylesProvider = (options: PieStyleOptions) => ` .pieCircle{ stroke: ${options.pieStrokeColor}; From 6ed0c9bc360e9f58f9078f8eeef665ef03c34027 Mon Sep 17 00:00:00 2001 From: Justin Greywolf Date: Tue, 15 Aug 2023 10:02:31 -0700 Subject: [PATCH 486/595] update tests --- demos/classchart.html | 6 ++++-- .../src/diagrams/class/classDiagram.spec.ts | 16 ++++++++++++---- .../src/diagrams/class/classTypes.spec.ts | 12 ++++++------ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/demos/classchart.html b/demos/classchart.html index 98162697ee..3ad8fb100b 100644 --- a/demos/classchart.html +++ b/demos/classchart.html @@ -38,12 +38,14 @@

    Class diagram demos

    +quack() } class Fish{ - -int sizeInFeet + -Listint sizeInFeet -canEat() } class Zebra{ +bool is_wild +run(List~T~, List~OT~) + %% +run-composite(List~T, K~) + +run-nested(List~List~OT~~) } @@ -154,7 +156,7 @@

    Class diagram demos

    ~InternalProperty : string ~AnotherInternalProperty : List~List~string~~ } - class People~List~Person~~ + class People List~List~Person~~
    diff --git a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts index f3568e7b85..b775521a41 100644 --- a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts +++ b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts @@ -1439,11 +1439,19 @@ class Class2 const testClasses = parser.yy.getClasses(); const testRelations = parser.yy.getRelations(); expect(Object.keys(testNamespaceA.classes).length).toBe(2); - expect(testNamespaceA.classes['A1'].members[0]).toBe('+foo : string'); - expect(testNamespaceA.classes['A2'].members[0]).toBe('+bar : int'); + expect(testNamespaceA.classes['A1'].members[0].getDisplayDetails().displayText).toBe( + '+foo : string' + ); + expect(testNamespaceA.classes['A2'].members[0].getDisplayDetails().displayText).toBe( + '+bar : int' + ); expect(Object.keys(testNamespaceB.classes).length).toBe(2); - expect(testNamespaceB.classes['B1'].members[0]).toBe('+foo : bool'); - expect(testNamespaceB.classes['B2'].members[0]).toBe('+bar : float'); + expect(testNamespaceB.classes['B1'].members[0].getDisplayDetails().displayText).toBe( + '+foo : bool' + ); + expect(testNamespaceB.classes['B2'].members[0].getDisplayDetails().displayText).toBe( + '+bar : float' + ); expect(Object.keys(testClasses).length).toBe(4); expect(testClasses['A1'].parent).toBe('A'); expect(testClasses['A2'].parent).toBe('A'); diff --git a/packages/mermaid/src/diagrams/class/classTypes.spec.ts b/packages/mermaid/src/diagrams/class/classTypes.spec.ts index 4a3493e0ab..56a865fe32 100644 --- a/packages/mermaid/src/diagrams/class/classTypes.spec.ts +++ b/packages/mermaid/src/diagrams/class/classTypes.spec.ts @@ -382,42 +382,42 @@ describe('given text representing a method, ', function () { const str = `getTimes(List~T~, List~OT~)`; const classMember = new ClassMember(str, 'method'); - expect(classMember.getDisplayDetails().displayText).toBe('getTimes(List, List'); + expect(classMember.getDisplayDetails().displayText).toBe('getTimes(List, List)'); }); it('should handle public visibility', function () { const str = `+getTimes(List~T~, List~OT~)`; const classMember = new ClassMember(str, 'method'); - expect(classMember.getDisplayDetails().displayText).toBe('+getTimes(List, List'); + expect(classMember.getDisplayDetails().displayText).toBe('+getTimes(List, List)'); }); it('should handle private visibility', function () { const str = `-getTimes(List~T~, List~OT~)`; const classMember = new ClassMember(str, 'method'); - expect(classMember.getDisplayDetails().displayText).toBe('-getTimes(List, List'); + expect(classMember.getDisplayDetails().displayText).toBe('-getTimes(List, List)'); }); it('should handle protected visibility', function () { const str = `#getTimes(List~T~, List~OT~)`; const classMember = new ClassMember(str, 'method'); - expect(classMember.getDisplayDetails().displayText).toBe('#getTimes(List, List'); + expect(classMember.getDisplayDetails().displayText).toBe('#getTimes(List, List)'); }); it('should handle internal visibility', function () { const str = `~getTimes(List~T~, List~OT~)`; const classMember = new ClassMember(str, 'method'); - expect(classMember.getDisplayDetails().displayText).toBe('~getTimes(List, List'); + expect(classMember.getDisplayDetails().displayText).toBe('~getTimes(List, List)'); }); it('should return correct css for static classifier', function () { const str = `getTimes(List~T~, List~OT~)$`; const classMember = new ClassMember(str, 'method'); - expect(classMember.getDisplayDetails().displayText).toBe('getTimes(List, List'); + expect(classMember.getDisplayDetails().displayText).toBe('getTimes(List, List)'); expect(classMember.getDisplayDetails().cssStyle).toBe(staticCssStyle); }); From bbaab54ec929d3a9690342e3781963e88a1fc091 Mon Sep 17 00:00:00 2001 From: Justin Greywolf Date: Tue, 15 Aug 2023 11:02:06 -0700 Subject: [PATCH 487/595] add tsdoc comments --- .../mermaid/src/diagrams/class/classTypes.ts | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/packages/mermaid/src/diagrams/class/classTypes.ts b/packages/mermaid/src/diagrams/class/classTypes.ts index 2f779a238c..de083bdcce 100644 --- a/packages/mermaid/src/diagrams/class/classTypes.ts +++ b/packages/mermaid/src/diagrams/class/classTypes.ts @@ -16,13 +16,32 @@ export interface ClassNode { tooltip?: string; } +export type Visibility = '#' | '+' | '~' | '-' | ''; +export const visibilityValues = ['#', '+', '~', '-', '']; + +/** + * Parses and stores class diagram member variables/methods. + * + */ export class ClassMember { id!: string; cssStyle!: string; memberType!: 'method' | 'attribute'; - visibility!: string; + visibility!: Visibility; + /** + * denote if static or to determine which css class to apply to the node + * @defaultValue '' + */ classifier!: string; + /** + * parameters for method + * @defaultValue '' + */ parameters!: string; + /** + * return type for method + * @defaultValue '' + */ returnType!: string; constructor(input: string, memberType: 'method' | 'attribute') { @@ -57,7 +76,12 @@ export class ClassMember { const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/; const match = input.match(methodRegEx); if (match) { - this.visibility = match[1] ? match[1].trim() : ''; + const detectedVisibility = match[1] ? match[1].trim() : ''; + + if (visibilityValues.includes(detectedVisibility)) { + this.visibility = detectedVisibility as Visibility; + } + this.id = match[2].trim(); this.parameters = match[3] ? match[3].trim() : ''; potentialClassifier = match[4] ? match[4].trim() : ''; @@ -76,8 +100,8 @@ export class ClassMember { const firstChar = input.substring(0, 1); const lastChar = input.substring(length - 1); - if (firstChar.match(/[#+~-]/)) { - this.visibility = firstChar; + if (visibilityValues.includes(firstChar)) { + this.visibility = firstChar as Visibility; } if (lastChar.match(/[*?]/)) { From 3f327196fdcc6cee1d344fcfe3b5800923341182 Mon Sep 17 00:00:00 2001 From: Justin Greywolf Date: Tue, 15 Aug 2023 11:07:21 -0700 Subject: [PATCH 488/595] return comment --- packages/mermaid/src/diagrams/common/common.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts index cb80498509..1c2f6f0755 100644 --- a/packages/mermaid/src/diagrams/common/common.ts +++ b/packages/mermaid/src/diagrams/common/common.ts @@ -188,6 +188,8 @@ export const parseGenericTypes = function (text: string): string { if (text.split('~').length - 1 >= 2) { let newCleanedText = cleanedText; + // use a do...while loop instead of replaceAll to detect recursion + // e.g. Array~Array~T~~ do { cleanedText = newCleanedText; newCleanedText = cleanedText.replace(/~([^\s:;]+)~/, '<$1>'); From 337ff3c32b954987ec64ae740272b85bfd9eb71a Mon Sep 17 00:00:00 2001 From: Jason Curtis Date: Wed, 16 Aug 2023 13:52:49 -0700 Subject: [PATCH 489/595] Documentation for #2509 --- packages/mermaid/src/docs/syntax/flowchart.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/mermaid/src/docs/syntax/flowchart.md b/packages/mermaid/src/docs/syntax/flowchart.md index 56cad19a03..16c9cc84d4 100644 --- a/packages/mermaid/src/docs/syntax/flowchart.md +++ b/packages/mermaid/src/docs/syntax/flowchart.md @@ -471,6 +471,29 @@ flowchart LR B1 --> B2 ``` +#### Limitation + +If any of a subgraph's nodes are linked to the outside, subgraph direction will be ignored. Instead the subgraph will inherit the direction of the parent graph: + +```mermaid-example +flowchart LR + subgraph subgraph1 + direction TB + top1[top] --> bottom1[bottom] + end + subgraph subgraph2 + direction TB + top2[top] --> bottom2[bottom] + end + %% ^ These subgraphs are identical, except for the links to them: + + %% Link *to* subgraph1: subgraph1 direction is mantained + outside --> subgraph1 + %% Link *within* subgraph2: + %% subgraph2 inherits the direction of the top-level graph (LR) + outside ---> top2 +``` + ## Markdown Strings The "Markdown Strings" feature enhances flowcharts and mind maps by offering a more versatile string type, which supports text formatting options such as bold and italics, and automatically wraps text within labels. From defe40692ae3b9646d4faa4495694acf5dc7e144 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Thu, 17 Aug 2023 01:42:41 +0300 Subject: [PATCH 490/595] change `defaultConfig` type to `RequiredDeep` and use it in `pieDb` --- docs/config/setup/modules/defaultConfig.md | 6 +++--- packages/mermaid/src/defaultConfig.ts | 8 +++++--- packages/mermaid/src/diagrams/pie/pieDb.ts | 7 ++----- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/docs/config/setup/modules/defaultConfig.md b/docs/config/setup/modules/defaultConfig.md index a55ec18085..ca01578fa1 100644 --- a/docs/config/setup/modules/defaultConfig.md +++ b/docs/config/setup/modules/defaultConfig.md @@ -14,13 +14,13 @@ #### Defined in -[defaultConfig.ts:266](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L266) +[defaultConfig.ts:267](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L267) --- ### default -• `Const` **default**: `Partial`<`MermaidConfig`> +• `Const` **default**: `RequiredDeep`<`MermaidConfig`> Default mermaid configuration options. @@ -30,4 +30,4 @@ Non-JSON JS default values are listed in this file, e.g. functions, or #### Defined in -[defaultConfig.ts:16](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L16) +[defaultConfig.ts:17](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L17) diff --git a/packages/mermaid/src/defaultConfig.ts b/packages/mermaid/src/defaultConfig.ts index 62b361cff4..0b232116da 100644 --- a/packages/mermaid/src/defaultConfig.ts +++ b/packages/mermaid/src/defaultConfig.ts @@ -1,5 +1,7 @@ +import type { RequiredDeep } from 'type-fest'; + import theme from './themes/index.js'; -import { type MermaidConfig } from './config.type.js'; +import type { MermaidConfig } from './config.type.js'; // Uses our custom Vite jsonSchemaPlugin to load only the default values from // our JSON Schema @@ -13,7 +15,7 @@ import defaultConfigJson from './schemas/config.schema.yaml?only-defaults=true'; * Non-JSON JS default values are listed in this file, e.g. functions, or * `undefined` (explicitly set so that `configKeys` finds them). */ -const config: Partial = { +const config: RequiredDeep = { ...defaultConfigJson, // Set, even though they're `undefined` so that `configKeys` finds these keys // TODO: Should we replace these with `null` so that they can go in the JSON Schema? @@ -232,7 +234,7 @@ const config: Partial = { }, pie: { ...defaultConfigJson.pie, - useWidth: undefined, + useWidth: 984, }, requirement: { ...defaultConfigJson.requirement, diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index 00c67f08a9..dbe50f08a0 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -15,12 +15,9 @@ import type { ParseDirectiveDefinition } from '../../diagram-api/types.js'; import type { PieFields, PieDB, Sections } from './pieTypes.js'; import type { RequiredDeep } from 'type-fest'; import type { PieDiagramConfig } from '../../config.type.js'; +import DEFAULT_CONFIG from '../../defaultConfig.js'; -export const DEFAULT_PIE_CONFIG: Required = { - useMaxWidth: true, - useWidth: 984, - textPosition: 0.75, -} as const; +export const DEFAULT_PIE_CONFIG: Required = DEFAULT_CONFIG.pie; export const DEFAULT_PIE_DB: RequiredDeep = { sections: {}, From 62142089f16ab862ce3bbdb59117fe1a303e83ea Mon Sep 17 00:00:00 2001 From: Yokozuna59 Date: Wed, 16 Aug 2023 22:47:51 +0000 Subject: [PATCH 491/595] Update docs --- docs/config/setup/modules/defaultConfig.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/config/setup/modules/defaultConfig.md b/docs/config/setup/modules/defaultConfig.md index ca01578fa1..2d23977fed 100644 --- a/docs/config/setup/modules/defaultConfig.md +++ b/docs/config/setup/modules/defaultConfig.md @@ -14,7 +14,7 @@ #### Defined in -[defaultConfig.ts:267](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L267) +[defaultConfig.ts:268](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L268) --- @@ -30,4 +30,4 @@ Non-JSON JS default values are listed in this file, e.g. functions, or #### Defined in -[defaultConfig.ts:17](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L17) +[defaultConfig.ts:18](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L18) From 77d8e15dc4de90a1210789d813bb8e7a45a3e2b3 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Thu, 17 Aug 2023 02:21:15 +0300 Subject: [PATCH 492/595] remove `chart` from `pie.spec.ts` description --- packages/mermaid/src/diagrams/pie/pie.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts index 65f302e51b..7c8e0809a3 100644 --- a/packages/mermaid/src/diagrams/pie/pie.spec.ts +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -7,7 +7,7 @@ setConfig({ securityLevel: 'strict', }); -describe('pie chart', () => { +describe('pie', () => { beforeAll(() => { parser.yy = db; }); From ef8b75a6da2e0074529028e8a373dcd60a8f1967 Mon Sep 17 00:00:00 2001 From: Jason Curtis Date: Thu, 17 Aug 2023 03:32:42 +0000 Subject: [PATCH 493/595] Remove whitespace on empty line --- packages/mermaid/src/docs/syntax/flowchart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/docs/syntax/flowchart.md b/packages/mermaid/src/docs/syntax/flowchart.md index 16c9cc84d4..01a33cf401 100644 --- a/packages/mermaid/src/docs/syntax/flowchart.md +++ b/packages/mermaid/src/docs/syntax/flowchart.md @@ -486,7 +486,7 @@ flowchart LR top2[top] --> bottom2[bottom] end %% ^ These subgraphs are identical, except for the links to them: - + %% Link *to* subgraph1: subgraph1 direction is mantained outside --> subgraph1 %% Link *within* subgraph2: From edb6ceae435dbb486ca22ece82eca1ab092a24f6 Mon Sep 17 00:00:00 2001 From: Jason Curtis Date: Thu, 17 Aug 2023 03:48:00 +0000 Subject: [PATCH 494/595] build docs --- docs/syntax/flowchart.md | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/docs/syntax/flowchart.md b/docs/syntax/flowchart.md index 0440c91691..ee635d451a 100644 --- a/docs/syntax/flowchart.md +++ b/docs/syntax/flowchart.md @@ -748,6 +748,48 @@ flowchart LR B1 --> B2 ``` +#### Limitation + +If any of a subgraph's nodes are linked to the outside, subgraph direction will be ignored. Instead the subgraph will inherit the direction of the parent graph: + +```mermaid-example +flowchart LR + subgraph subgraph1 + direction TB + top1[top] --> bottom1[bottom] + end + subgraph subgraph2 + direction TB + top2[top] --> bottom2[bottom] + end + %% ^ These subgraphs are identical, except for the links to them: + + %% Link *to* subgraph1: subgraph1 direction is mantained + outside --> subgraph1 + %% Link *within* subgraph2: + %% subgraph2 inherits the direction of the top-level graph (LR) + outside ---> top2 +``` + +```mermaid +flowchart LR + subgraph subgraph1 + direction TB + top1[top] --> bottom1[bottom] + end + subgraph subgraph2 + direction TB + top2[top] --> bottom2[bottom] + end + %% ^ These subgraphs are identical, except for the links to them: + + %% Link *to* subgraph1: subgraph1 direction is mantained + outside --> subgraph1 + %% Link *within* subgraph2: + %% subgraph2 inherits the direction of the top-level graph (LR) + outside ---> top2 +``` + ## Markdown Strings The "Markdown Strings" feature enhances flowcharts and mind maps by offering a more versatile string type, which supports text formatting options such as bold and italics, and automatically wraps text within labels. From 35cc34d422ac3dd840afdb3416d7a411847672d2 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Thu, 17 Aug 2023 10:28:50 +0530 Subject: [PATCH 495/595] chore: Move SVG import to comment. --- packages/mermaid/src/setupGraphViewbox.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/mermaid/src/setupGraphViewbox.js b/packages/mermaid/src/setupGraphViewbox.js index e4050c2051..ba74b79fdd 100644 --- a/packages/mermaid/src/setupGraphViewbox.js +++ b/packages/mermaid/src/setupGraphViewbox.js @@ -1,5 +1,4 @@ import { log } from './logger.js'; -import { SVG } from './diagram-api/types.js'; /** * Applies d3 attributes @@ -36,7 +35,7 @@ export const calculateSvgSizeAttrs = function (height, width, useMaxWidth) { /** * Applies attributes from `calculateSvgSizeAttrs` * - * @param {SVG} svgElem The SVG Element to configure + * @param {import('./diagram-api/types.js').SVG} svgElem The SVG Element to configure * @param {number} height The height of the SVG * @param {number} width The width of the SVG * @param {boolean} useMaxWidth Whether or not to use max-width and set width to 100% From aec97d68cc8451a38b073f6c7f91a2317e5de186 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Thu, 17 Aug 2023 15:21:51 +0300 Subject: [PATCH 496/595] Fixed wrong collapsible option at the left menu, updated vue Fixed badges Rely on classes instead of DOM structure Prettier Update docs --- docs/intro/index.md | 24 +- .../mermaid/src/docs/.vitepress/config.ts | 14 +- packages/mermaid/src/docs/intro/index.md | 24 +- packages/mermaid/src/docs/package.json | 2 +- pnpm-lock.yaml | 356 +++++------------- 5 files changed, 125 insertions(+), 295 deletions(-) diff --git a/docs/intro/index.md b/docs/intro/index.md index b6065c85f7..6b811d86ee 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -14,8 +14,12 @@ It is a JavaScript based diagramming and charting tool that renders Markdown-ins +
    + [![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) +
    + [![Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!](img/book-banner-post-release.jpg)](https://mermaid-js.github.io/mermaid/landing/) @@ -389,8 +393,12 @@ The above command generates files into the `dist` folder and publishes them to \ ## Contributors +
    + [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) +
    + Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. Detailed information about how to contribute can be found in the [contribution guide](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) @@ -424,20 +432,14 @@ A quick note from Knut Sveidqvist: _Mermaid was created by Knut Sveidqvist for easier documentation._ diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index 1d609c13e8..06485ab7d3 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -101,7 +101,7 @@ function sidebarAll() { return [ { text: '📔 Introduction', - collapsible: true, + collapsed: false, items: [ { text: 'About Mermaid', link: '/intro/' }, { text: 'Deployment', link: '/intro/n00b-gettingStarted' }, @@ -123,7 +123,7 @@ function sidebarSyntax() { return [ { text: '📊 Diagram Syntax', - collapsible: true, + collapsed: false, items: [ { text: 'Flowchart', link: '/syntax/flowchart' }, { text: 'Sequence Diagram', link: '/syntax/sequenceDiagram' }, @@ -154,7 +154,7 @@ function sidebarConfig() { return [ { text: '⚙️ Deployment and Configuration', - collapsible: true, + collapsed: false, items: [ { text: 'Configuration', link: '/config/configuration' }, { text: 'Tutorials', link: '/config/Tutorials' }, @@ -176,7 +176,7 @@ function sidebarEcosystem() { return [ { text: '📚 Ecosystem', - collapsible: true, + collapsed: false, items: [ { text: 'Showcases', link: '/ecosystem/showcases' }, { text: 'Use-Cases and Integrations', link: '/ecosystem/integrations' }, @@ -189,7 +189,7 @@ function sidebarCommunity() { return [ { text: '🙌 Contributions and Community', - collapsible: true, + collapsed: false, items: [ { text: 'Overview for Beginners', link: '/community/n00b-overview' }, ...sidebarCommunityDevelopContribute(), @@ -207,7 +207,7 @@ function sidebarCommunityDevelopContribute() { { text: 'Contributing to Mermaid', link: page_path + '#contributing-to-mermaid', - collapsible: true, + collapsed: false, items: [ { text: 'Technical Requirements and Setup', @@ -238,7 +238,7 @@ function sidebarNews() { return [ { text: '📰 Latest News', - collapsible: true, + collapsed: false, items: [ { text: 'Announcements', link: '/news/announcements' }, { text: 'Blog', link: '/news/blog' }, diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index 7f2a5c0521..c81cd0efc0 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -8,8 +8,12 @@ It is a JavaScript based diagramming and charting tool that renders Markdown-ins +
    + [![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) +
    + [![Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!](img/book-banner-post-release.jpg)](https://mermaid-js.github.io/mermaid/landing/) @@ -166,8 +170,12 @@ The above command generates files into the `dist` folder and publishes them to < ## Contributors +
    + [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) +
    + Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. Detailed information about how to contribute can be found in the [contribution guide](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) @@ -201,20 +209,14 @@ A quick note from Knut Sveidqvist: _Mermaid was created by Knut Sveidqvist for easier documentation._ diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index 2600d1cbf6..defc980825 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -17,7 +17,7 @@ "dependencies": { "@vueuse/core": "^10.1.0", "jiti": "^1.18.2", - "vue": "^3.2.47" + "vue": "^3.3" }, "devDependencies": { "@iconify-json/carbon": "^1.1.16", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e5fe15d49..f6aad72eaa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -424,13 +424,13 @@ importers: dependencies: '@vueuse/core': specifier: ^10.1.0 - version: 10.1.0(vue@3.2.47) + version: 10.1.0(vue@3.3.4) jiti: specifier: ^1.18.2 version: 1.18.2 vue: - specifier: ^3.2.47 - version: 3.2.47 + specifier: ^3.3 + version: 3.3.4 devDependencies: '@iconify-json/carbon': specifier: ^1.1.16 @@ -443,7 +443,7 @@ importers: version: 0.2.0(vite-plugin-pwa@0.16.0) '@vitejs/plugin-vue': specifier: ^4.2.1 - version: 4.2.1(vite@4.3.9)(vue@3.2.47) + version: 4.2.1(vite@4.3.9)(vue@3.3.4) fast-glob: specifier: ^3.2.12 version: 3.2.12 @@ -458,7 +458,59 @@ importers: version: 0.55.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) unplugin-vue-components: specifier: ^0.25.0 - version: 0.25.0(rollup@2.79.1)(vue@3.2.47) + version: 0.25.0(rollup@2.79.1)(vue@3.3.4) + vite: + specifier: ^4.3.9 + version: 4.3.9(@types/node@18.16.0) + vite-plugin-pwa: + specifier: ^0.16.0 + version: 0.16.0(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@7.0.0) + vitepress: + specifier: 1.0.0-rc.4 + version: 1.0.0-rc.4(@algolia/client-search@4.14.2)(@types/node@18.16.0)(search-insights@2.6.0) + workbox-window: + specifier: ^7.0.0 + version: 7.0.0 + + packages/mermaid/src/vitepress: + dependencies: + '@vueuse/core': + specifier: ^10.1.0 + version: 10.1.0(vue@3.3.4) + jiti: + specifier: ^1.18.2 + version: 1.18.2 + vue: + specifier: ^3.3 + version: 3.3.4 + devDependencies: + '@iconify-json/carbon': + specifier: ^1.1.16 + version: 1.1.16 + '@unocss/reset': + specifier: ^0.55.0 + version: 0.55.0 + '@vite-pwa/vitepress': + specifier: ^0.2.0 + version: 0.2.0(vite-plugin-pwa@0.16.0) + '@vitejs/plugin-vue': + specifier: ^4.2.1 + version: 4.2.1(vite@4.3.9)(vue@3.3.4) + fast-glob: + specifier: ^3.2.12 + version: 3.2.12 + https-localhost: + specifier: ^4.7.1 + version: 4.7.1 + pathe: + specifier: ^1.1.0 + version: 1.1.0 + unocss: + specifier: ^0.55.0 + version: 0.55.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) + unplugin-vue-components: + specifier: ^0.25.0 + version: 0.25.0(rollup@2.79.1)(vue@3.3.4) vite: specifier: ^4.3.9 version: 4.3.9(@types/node@18.16.0) @@ -705,10 +757,6 @@ packages: find-up: 5.0.0 dev: true - /@antfu/utils@0.7.4: - resolution: {integrity: sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ==} - dev: true - /@antfu/utils@0.7.5: resolution: {integrity: sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==} dev: true @@ -3590,7 +3638,7 @@ packages: resolution: {integrity: sha512-P8S3z/L1LcV4Qem9AoCfVAaTFGySEMzFEY4CHZLkfRj0Fv9LiR+AwjDgrDrzyI93U2L2mg9JHsbTJ52mF8suNw==} dependencies: '@antfu/install-pkg': 0.1.1 - '@antfu/utils': 0.7.4 + '@antfu/utils': 0.7.5 '@iconify/types': 2.0.0 debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 @@ -5156,7 +5204,7 @@ packages: vite-plugin-pwa: 0.16.0(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@7.0.0) dev: true - /@vitejs/plugin-vue@4.2.1(vite@4.3.9)(vue@3.2.47): + /@vitejs/plugin-vue@4.2.1(vite@4.3.9)(vue@3.3.4): resolution: {integrity: sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -5164,17 +5212,6 @@ packages: vue: ^3.2.25 dependencies: vite: 4.3.9(@types/node@18.16.0) - vue: 3.2.47 - dev: true - - /@vitejs/plugin-vue@4.2.3(vite@4.3.8)(vue@3.3.4): - resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.0.0 - vue: ^3.2.25 - dependencies: - vite: 4.3.8(@types/node@18.16.0) vue: 3.3.4 dev: true @@ -5229,7 +5266,7 @@ packages: /@vitest/snapshot@0.34.0: resolution: {integrity: sha512-eGN5XBZHYOghxCOQbf8dcn6/3g7IW77GOOOC/mNFYwRXsPeoQgcgWnhj+6wgJ04pVv25wpxWL9jUkzaQ7LoFtg==} dependencies: - magic-string: 0.30.1 + magic-string: 0.30.2 pathe: 1.1.1 pretty-format: 29.5.0 dev: true @@ -5246,7 +5283,7 @@ packages: vitest: '>=0.30.1 <1' dependencies: '@vitest/utils': 0.34.0 - fast-glob: 3.3.0 + fast-glob: 3.3.1 fflate: 0.8.0 flatted: 3.2.7 pathe: 1.1.1 @@ -5274,14 +5311,6 @@ packages: vue: 3.3.4 dev: false - /@vue/compiler-core@3.2.47: - resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} - dependencies: - '@babel/parser': 7.21.8 - '@vue/shared': 3.2.47 - estree-walker: 2.0.2 - source-map: 0.6.1 - /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: @@ -5290,32 +5319,12 @@ packages: estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.2.47: - resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==} - dependencies: - '@vue/compiler-core': 3.2.47 - '@vue/shared': 3.2.47 - /@vue/compiler-dom@3.3.4: resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} dependencies: '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 - /@vue/compiler-sfc@3.2.47: - resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} - dependencies: - '@babel/parser': 7.21.8 - '@vue/compiler-core': 3.2.47 - '@vue/compiler-dom': 3.2.47 - '@vue/compiler-ssr': 3.2.47 - '@vue/reactivity-transform': 3.2.47 - '@vue/shared': 3.2.47 - estree-walker: 2.0.2 - magic-string: 0.25.9 - postcss: 8.4.27 - source-map: 0.6.1 - /@vue/compiler-sfc@3.3.4: resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: @@ -5326,16 +5335,10 @@ packages: '@vue/reactivity-transform': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.30.1 + magic-string: 0.30.2 postcss: 8.4.27 source-map-js: 1.0.2 - /@vue/compiler-ssr@3.2.47: - resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} - dependencies: - '@vue/compiler-dom': 3.2.47 - '@vue/shared': 3.2.47 - /@vue/compiler-ssr@3.3.4: resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} dependencies: @@ -5345,15 +5348,6 @@ packages: /@vue/devtools-api@6.5.0: resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} - /@vue/reactivity-transform@3.2.47: - resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==} - dependencies: - '@babel/parser': 7.21.8 - '@vue/compiler-core': 3.2.47 - '@vue/shared': 3.2.47 - estree-walker: 2.0.2 - magic-string: 0.25.9 - /@vue/reactivity-transform@3.3.4: resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: @@ -5361,37 +5355,19 @@ packages: '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.30.1 - - /@vue/reactivity@3.2.47: - resolution: {integrity: sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==} - dependencies: - '@vue/shared': 3.2.47 + magic-string: 0.30.2 /@vue/reactivity@3.3.4: resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} dependencies: '@vue/shared': 3.3.4 - /@vue/runtime-core@3.2.47: - resolution: {integrity: sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==} - dependencies: - '@vue/reactivity': 3.2.47 - '@vue/shared': 3.2.47 - /@vue/runtime-core@3.3.4: resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} dependencies: '@vue/reactivity': 3.3.4 '@vue/shared': 3.3.4 - /@vue/runtime-dom@3.2.47: - resolution: {integrity: sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==} - dependencies: - '@vue/runtime-core': 3.2.47 - '@vue/shared': 3.2.47 - csstype: 2.6.21 - /@vue/runtime-dom@3.3.4: resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} dependencies: @@ -5399,15 +5375,6 @@ packages: '@vue/shared': 3.3.4 csstype: 3.1.2 - /@vue/server-renderer@3.2.47(vue@3.2.47): - resolution: {integrity: sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==} - peerDependencies: - vue: 3.2.47 - dependencies: - '@vue/compiler-ssr': 3.2.47 - '@vue/shared': 3.2.47 - vue: 3.2.47 - /@vue/server-renderer@3.3.4(vue@3.3.4): resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} peerDependencies: @@ -5417,35 +5384,20 @@ packages: '@vue/shared': 3.3.4 vue: 3.3.4 - /@vue/shared@3.2.47: - resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} - /@vue/shared@3.3.4: resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} - /@vueuse/core@10.1.0(vue@3.2.47): + /@vueuse/core@10.1.0(vue@3.3.4): resolution: {integrity: sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==} dependencies: '@types/web-bluetooth': 0.0.16 '@vueuse/metadata': 10.1.0 - '@vueuse/shared': 10.1.0(vue@3.2.47) - vue-demi: 0.14.5(vue@3.2.47) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - - /@vueuse/core@10.1.2(vue@3.3.4): - resolution: {integrity: sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==} - dependencies: - '@types/web-bluetooth': 0.0.17 - '@vueuse/metadata': 10.1.2 - '@vueuse/shared': 10.1.2(vue@3.3.4) + '@vueuse/shared': 10.1.0(vue@3.3.4) vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue - dev: true + dev: false /@vueuse/core@10.3.0(vue@3.3.4): resolution: {integrity: sha512-BEM5yxcFKb5btFjTSAFjTu5jmwoW66fyV9uJIP4wUXXU8aR5Hl44gndaaXp7dC5HSObmgbnR2RN+Un1p68Mf5Q==} @@ -5513,31 +5465,18 @@ packages: resolution: {integrity: sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg==} dev: false - /@vueuse/metadata@10.1.2: - resolution: {integrity: sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==} - dev: true - /@vueuse/metadata@10.3.0: resolution: {integrity: sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw==} dev: true - /@vueuse/shared@10.1.0(vue@3.2.47): + /@vueuse/shared@10.1.0(vue@3.3.4): resolution: {integrity: sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==} - dependencies: - vue-demi: 0.14.5(vue@3.2.47) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - - /@vueuse/shared@10.1.2(vue@3.3.4): - resolution: {integrity: sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==} dependencies: vue-demi: 0.14.5(vue@3.3.4) transitivePeerDependencies: - '@vue/composition-api' - vue - dev: true + dev: false /@vueuse/shared@10.3.0(vue@3.3.4): resolution: {integrity: sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg==} @@ -7321,7 +7260,7 @@ packages: cspell-glob: 6.31.1 cspell-io: 6.31.1 cspell-lib: 6.31.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 fast-json-stable-stringify: 2.1.0 file-entry-cache: 6.0.1 get-stdin: 8.0.0 @@ -7379,9 +7318,6 @@ packages: resolve: 1.22.1 dev: true - /csstype@2.6.21: - resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} - /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} @@ -8939,16 +8875,6 @@ packages: micromatch: 4.0.5 dev: true - /fast-glob@3.3.0: - resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -8958,7 +8884,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -9565,7 +9490,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.0 + fast-glob: 3.3.1 ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 @@ -9577,7 +9502,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.0 + fast-glob: 3.3.1 ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 @@ -9588,7 +9513,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 ignore: 5.2.0 merge2: 1.4.1 slash: 4.0.0 @@ -10963,7 +10888,6 @@ packages: /jiti@1.19.1: resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} hasBin: true - dev: true /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -11505,19 +11429,20 @@ packages: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 + dev: true /magic-string@0.30.1: resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /magic-string@0.30.2: resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -13602,14 +13527,6 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.26.0: - resolution: {integrity: sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /rollup@3.28.0: resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -14039,6 +13956,7 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + dev: true /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} @@ -14055,6 +13973,7 @@ packages: /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true /spawn-command@0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} @@ -14439,10 +14358,10 @@ packages: chokidar: 3.5.3 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.0 + fast-glob: 3.3.1 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.18.2 + jiti: 1.19.1 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -15124,7 +15043,7 @@ packages: engines: {node: '>= 0.8'} dev: true - /unplugin-vue-components@0.25.0(rollup@2.79.1)(vue@3.2.47): + /unplugin-vue-components@0.25.0(rollup@2.79.1)(vue@3.3.4): resolution: {integrity: sha512-HxrQ4GMSS1RwVww2av3a42cABo/v5AmTRN9iARv6e/xwkrfTyHhLh84kFwXxKkXK61vxDHxaryn694mQmkiVBg==} engines: {node: '>=14'} peerDependencies: @@ -15137,17 +15056,17 @@ packages: '@nuxt/kit': optional: true dependencies: - '@antfu/utils': 0.7.4 + '@antfu/utils': 0.7.5 '@rollup/pluginutils': 5.0.2(rollup@2.79.1) chokidar: 3.5.3 debug: 4.3.4(supports-color@8.1.1) - fast-glob: 3.3.0 + fast-glob: 3.3.1 local-pkg: 0.4.3 - magic-string: 0.30.1 + magic-string: 0.30.2 minimatch: 9.0.1 resolve: 1.22.2 unplugin: 1.3.1 - vue: 3.2.47 + vue: 3.3.4 transitivePeerDependencies: - rollup - supports-color @@ -15294,7 +15213,7 @@ packages: mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.7(@types/node@18.16.0) + vite: 4.4.9(@types/node@18.16.0) transitivePeerDependencies: - '@types/node' - less @@ -15329,7 +15248,7 @@ packages: workbox-window: ^7.0.0 dependencies: debug: 4.3.4(supports-color@8.1.1) - fast-glob: 3.2.12 + fast-glob: 3.3.1 pretty-bytes: 6.1.0 vite: 4.3.9(@types/node@18.16.0) workbox-build: 7.0.0 @@ -15338,39 +15257,6 @@ packages: - supports-color dev: true - /vite@4.3.8(@types/node@18.16.0): - resolution: {integrity: sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.16.0 - esbuild: 0.17.18 - postcss: 8.4.27 - rollup: 3.26.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vite@4.3.9(@types/node@18.16.0): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -15399,43 +15285,7 @@ packages: '@types/node': 18.16.0 esbuild: 0.17.18 postcss: 8.4.27 - rollup: 3.26.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /vite@4.4.7(@types/node@18.16.0): - resolution: {integrity: sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.16.0 - esbuild: 0.18.11 - postcss: 8.4.27 - rollup: 3.26.0 + rollup: 3.28.0 optionalDependencies: fsevents: 2.3.2 dev: true @@ -15499,14 +15349,14 @@ packages: dependencies: '@docsearch/css': 3.3.3 '@docsearch/js': 3.3.5(@algolia/client-search@4.14.2) - '@vitejs/plugin-vue': 4.2.3(vite@4.3.8)(vue@3.3.4) + '@vitejs/plugin-vue': 4.2.3(vite@4.4.9)(vue@3.3.4) '@vue/devtools-api': 6.5.0 - '@vueuse/core': 10.1.2(vue@3.3.4) + '@vueuse/core': 10.3.0(vue@3.3.4) body-scroll-lock: 4.0.0-beta.0 mark.js: 8.11.1 minisearch: 6.0.1 shiki: 0.14.1 - vite: 4.3.8(@types/node@18.16.0) + vite: 4.4.9(@types/node@18.16.0) vue: 3.3.4 transitivePeerDependencies: - '@algolia/client-search' @@ -15514,6 +15364,7 @@ packages: - '@types/react' - '@vue/composition-api' - less + - lightningcss - react - react-dom - sass @@ -15620,7 +15471,7 @@ packages: strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.7.0 - vite: 4.4.7(@types/node@18.16.0) + vite: 4.4.9(@types/node@18.16.0) vite-node: 0.34.0(@types/node@18.16.0) why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -15675,21 +15526,6 @@ packages: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} dev: true - /vue-demi@0.14.5(vue@3.2.47): - resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - dependencies: - vue: 3.2.47 - dev: false - /vue-demi@0.14.5(vue@3.3.4): resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} engines: {node: '>=12'} @@ -15703,16 +15539,6 @@ packages: optional: true dependencies: vue: 3.3.4 - dev: true - - /vue@3.2.47: - resolution: {integrity: sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==} - dependencies: - '@vue/compiler-dom': 3.2.47 - '@vue/compiler-sfc': 3.2.47 - '@vue/runtime-dom': 3.2.47 - '@vue/server-renderer': 3.2.47(vue@3.2.47) - '@vue/shared': 3.2.47 /vue@3.3.4: resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} From 341130856f04be7266d9385c9546c3beeacb79f8 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Thu, 17 Aug 2023 23:52:56 +0300 Subject: [PATCH 497/595] Split development documentation in several separate pages, fixes for the sidebar menu United similar sections at the intro page Fix spelling Update docs --- README.md | 2 +- README.zh-CN.md | 2 +- cSpell.json | 1 + docs/community/code.md | 176 +++++++++ docs/community/development.md | 367 ++---------------- docs/community/docker-development.md | 109 ++++++ docs/community/documentation.md | 106 +++++ docs/community/n00b-overview.md | 74 ---- docs/community/questionsAndSuggestions.md | 28 ++ docs/intro/index.md | 35 +- docs/intro/n00b-syntaxReference.md | 4 +- .../mermaid/src/docs/.vitepress/config.ts | 52 +-- .../src/docs/.vitepress/theme/redirect.ts | 1 + packages/mermaid/src/docs/community/code.md | 165 ++++++++ .../mermaid/src/docs/community/development.md | 355 ++--------------- .../src/docs/community/docker-development.md | 104 +++++ .../src/docs/community/documentation.md | 93 +++++ .../src/docs/community/n00b-overview.md | 68 ---- .../docs/community/questionsAndSuggestions.md | 22 ++ packages/mermaid/src/docs/intro/index.md | 35 +- .../src/docs/intro/n00b-syntaxReference.md | 4 +- run | 3 + 22 files changed, 921 insertions(+), 885 deletions(-) create mode 100644 docs/community/code.md create mode 100644 docs/community/docker-development.md create mode 100644 docs/community/documentation.md delete mode 100644 docs/community/n00b-overview.md create mode 100644 docs/community/questionsAndSuggestions.md create mode 100644 packages/mermaid/src/docs/community/code.md create mode 100644 packages/mermaid/src/docs/community/docker-development.md create mode 100644 packages/mermaid/src/docs/community/documentation.md delete mode 100644 packages/mermaid/src/docs/community/n00b-overview.md create mode 100644 packages/mermaid/src/docs/community/questionsAndSuggestions.md diff --git a/README.md b/README.md index bdffbe1758..0f47ceca2d 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Use Mermaid with your favorite applications, check out the list of [Integrations You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations.md). -For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/community/n00b-overview.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/config/Tutorials.md). +For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/intro/n00b-gettingStarted.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/config/Tutorials.md). In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests. diff --git a/README.zh-CN.md b/README.zh-CN.md index 9a2e797be9..0cc05906e2 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -55,7 +55,7 @@ Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它 Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。
    你可以访问 [教程](./docs/config/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/ecosystem/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。 -如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/community/n00b-overview.md), [用法](./docs/config/usage.md) 和 [教程](./docs/config/Tutorials.md). +如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/intro/n00b-gettingStarted.md), [用法](./docs/config/usage.md) 和 [教程](./docs/config/Tutorials.md). diff --git a/cSpell.json b/cSpell.json index af7a9ca46f..055c4b20b7 100644 --- a/cSpell.json +++ b/cSpell.json @@ -91,6 +91,7 @@ "nextra", "nikolay", "nirname", + "npmjs", "orlandoni", "pathe", "pbrolin", diff --git a/docs/community/code.md b/docs/community/code.md new file mode 100644 index 0000000000..7f4b1e1056 --- /dev/null +++ b/docs/community/code.md @@ -0,0 +1,176 @@ +> **Warning** +> +> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. +> +> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/code.md](../../packages/mermaid/src/docs/community/code.md). + +# Contributing Code + +The basic steps for contributing code are: + +```mermaid-example +graph LR + git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge] +``` + +```mermaid +graph LR + git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge] +``` + +1. **Create** and checkout a git branch and work on your code in the branch +2. Write and update **tests** (unit and perhaps even integration (e2e) tests) (If you do TDD/BDD, the order might be different.) +3. **Let users know** that things have changed or been added in the documents! This is often overlooked, but _critical_ +4. **Submit** your code as a _pull request_. +5. Maintainers will **review** your code. If there are no changes necessary, the PR will be merged. Otherwise, make the requested changes and repeat. + +## 1. Checkout a git branch + +Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching. + +Development is done in the `develop` branch. + +Once development is done we create a `release/vX.X.X` branch from `develop` for testing. + +Once the release happens we add a tag to the `release` branch and merge it with `master`. The live product and on-line documentation are what is in the `master` branch. + +**All new work should be based on the `develop` branch.** + +**When you are ready to do work, always, ALWAYS:** + +1. Make sure you have the most up-to-date version of the `develop` branch. (fetch or pull to update it) +2. Check out the `develop` branch +3. Create a new branch for your work. Please name the branch following our naming convention below. + +We use the follow naming convention for branches: + +```txt + [feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces] +``` + +You can always check current [configuration of labelling and branch prefixes](https://github.com/mermaid-js/mermaid/blob/develop/.github/pr-labeler.yml) + +- The first part is the **type** of change: a feature, bug, chore, or documentation change ('docs') +- followed by a _slash_ (which helps to group like types together in many git tools) +- followed by the **issue number** +- followed by an _underscore_ ('\_') +- followed by a short text description (but use dashes ('-') or underscores ('\_') instead of spaces) + +If your work is specific to a single diagram type, it is a good idea to put the diagram type at the start of the description. This will help us keep release notes organized: it will help us keep changes for a diagram type together. + +**Ex: A new feature described in issue 2945 that adds a new arrow type called 'florbs' to state diagrams** + +`feature/2945_state-diagram-new-arrow-florbs` + +**Ex: A bug described in issue 1123 that causes random ugly red text in multiple diagram types** +`bug/1123_fix_random_ugly_red_text` + +## 2. Write Tests + +Tests ensure that each function, module, or part of code does what it says it will do. This is critically +important when other changes are made to ensure that existing code is not broken (no regression). + +Just as important, the tests act as _specifications:_ they specify what the code does (or should do). +Whenever someone is new to a section of code, they should be able to read the tests to get a thorough understanding of what it does and why. + +If you are fixing a bug, you should add tests to ensure that your code has actually fixed the bug, to specify/describe what the code is doing, and to ensure the bug doesn't happen again. +(If there had been a test for the situation, the bug never would have happened in the first place.) +You may need to change existing tests if they were inaccurate. + +If you are adding a feature, you will definitely need to add tests. Depending on the size of your feature, you may need to add integration tests. + +### Unit Tests + +Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run. + +Unit tests are mandatory all code except the renderers. (The renderers are tested with integration tests.) + +We use [Vitest](https://vitest.dev) to run unit tests. + +You can use the following command to run the unit tests: + +```sh +pnpm test +``` + +When writing new tests, it's easier to have the tests automatically run as you make changes. You can do this by running the following command: + +```sh +pnpm test:watch +``` + +### Integration/End-to-End (e2e) tests + +These test the rendering and visual appearance of the diagrams. +This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! + +To start working with the e2e tests: + +1. Run `pnpm dev` to start the dev server +2. Start **Cypress** by running `pnpm cypress:open`. + +The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. + +When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs. + +This is what a rendering test looks like: + +```js +it('should render forks and joins', () => { + imgSnapshotTest( + ` + stateDiagram + state fork_state <<fork>> + [*] --> fork_state + fork_state --> State2 + fork_state --> State3 + + state join_state <<join>> + State2 --> join_state + State3 --> join_state + join_state --> State4 + State4 --> [*] + `, + { logLevel: 0 } + ); + cy.get('svg'); +}); +``` + +**_\[TODO - running the tests against what is expected in development. ]_** + +**_\[TODO - how to generate new screenshots]_** +.... + +## 3. Update Documentation + +If the users have no way to know that things have changed, then you haven't really _fixed_ anything for the users; you've just added to making Mermaid feel broken. +Likewise, if users don't know that there is a new feature that you've implemented, it will forever remain unknown and unused. + +The documentation has to be updated to users know that things have changed and added! +If you are adding a new feature, add `(v+)` in the title or description. It will be replaced automatically with the current version number when the release happens. + +eg: `# Feature Name (v+)` + +We know it can sometimes be hard to code _and_ write user documentation. + +Our documentation is managed in `packages/mermaid/src/docs`. Details on how to edit is in the [Contributing Documentation](#contributing-documentation) section. + +Create another issue specifically for the documentation.\ +You will need to help with the PR, but definitely ask for help if you feel stuck. +When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work! + +When in doubt, write up and submit what you can. It can be clarified and refined later. (With documentation, something is better than nothing!) + +## 4. Submit your pull request + +**\[TODO - PR titles should start with (fix | feat | ....)]** + +We make all changes via Pull Requests (PRs). As we have many Pull Requests from developers new to Mermaid, we have put in place a process wherein _knsv, Knut Sveidqvist_ is in charge of the final release process and the active maintainers are in charge of reviewing and merging most PRs. + +- PRs will be reviewed by active maintainers, who will provide feedback and request changes as needed. +- The maintainers will request a review from knsv, if necessary. +- Once the PR is approved, the maintainers will merge the PR into the `develop` branch. +- When a release is ready, the `release/x.x.x` branch will be created, extensively tested and knsv will be in charge of the release process. + +**Reminder: Pull Requests should be submitted to the develop branch.** diff --git a/docs/community/development.md b/docs/community/development.md index f8c8b06384..65ee186607 100644 --- a/docs/community/development.md +++ b/docs/community/development.md @@ -6,15 +6,9 @@ # Contributing to Mermaid -## Contents - -- [Technical Requirements and Setup](#technical-requirements-and-setup) -- [Contributing Code](#contributing-code) -- [Contributing Documentation](#contributing-documentation) -- [Questions or Suggestions?](#questions-or-suggestions) -- [Last Words](#last-words) - ---- +> The following documentation describes how to work with Mermaid in your host environment. +> There's also a [Docker installation guide](../community/docker-development.md) +> if you prefer to work in a Docker environment. So you want to help? That's great! @@ -22,369 +16,76 @@ So you want to help? That's great! Here are a few things to get you started on the right path. -## Technical Requirements and Setup +## Get the Source Code -### Technical Requirements +In GitHub, you first **fork** a repository when you are going to make changes and submit pull requests. -These are the tools we use for working with the code and documentation. +Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with. -- [volta](https://volta.sh/) to manage node versions. -- [Node.js](https://nodejs.org/en/). `volta install node` -- [pnpm](https://pnpm.io/) package manager. `volta install pnpm` -- [npx](https://docs.npmjs.com/cli/v8/commands/npx) the packaged executor in npm. This is needed [to install pnpm.](#2-install-pnpm) +[Fork mermaid](https://github.com/mermaid-js/mermaid/fork) to start contributing to the main project and its documentaion, or [search for other repositories](https://github.com/orgs/mermaid-js/repositories). -Follow [the setup steps below](#setup) to install them and verify they are working - -### Setup +[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo) -Follow these steps to set up the environment you need to work on code and/or documentation. +## Technical Requirements -#### 1. Fork and clone the repository +> The following documentation describes how to work with Mermaid in your host environment. +> There's also a [Docker installation guide](../community/docker-development.md) +> if you prefer to work in a Docker environment. -In GitHub, you first _fork_ a repository when you are going to make changes and submit pull requests. +These are the tools we use for working with the code and documentation: -Then you _clone_ a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with. +- [volta](https://volta.sh/) to manage node versions. +- [Node.js](https://nodejs.org/en/). `volta install node` +- [pnpm](https://pnpm.io/) package manager. `volta install pnpm` +- [npx](https://docs.npmjs.com/cli/v8/commands/npx) the packaged executor in npm. This is needed [to install pnpm.](#install-packages) -[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo) +Follow the setup steps below to install them and start the development. -#### 2. Install pnpm +## Setup and Launch -Once you have cloned the repository onto your development machine, change into the `mermaid` project folder so that you can install `pnpm`. You will need `npx` to install pnpm because volta doesn't support it yet. +### Switch to project -Ex: +Once you have cloned the repository onto your development machine, change into the `mermaid` project folder (the top level directory of the mermaid project repository) ```bash -# Change into the mermaid directory (the top level director of the mermaid project repository) cd mermaid -# npx is required for first install because volta does not support pnpm yet -npx pnpm install ``` -#### 3. Verify Everything Is Working +### Install packages -Once you have installed pnpm, you can run the `test` script to verify that pnpm is working _and_ that the repository has been cloned correctly: +Run `npx pnpm install`. You will need `npx` for this because volta doesn't support it yet. ```bash -pnpm test +npx pnpm install # npx is required for first install ``` -The `test` script and others are in the top-level `package.json` file. - -All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ "warnings"; those are ok during this step.) - -#### 4. Make your changes +### Launch -Now you are ready to make your changes! -Edit whichever files in `src` as required. +```bash +npx pnpm run dev +``` -#### 5. See your changes +Now you are ready to make your changes! Edit whichever files in `src` as required. Open in your browser, after starting the dev server. There is a list of demos that can be used to see and test your changes. If you need a specific diagram, you can duplicate the `example.html` file in `/demos/dev` and add your own mermaid code to your copy. + That will be served at . After making code changes, the dev server will rebuild the mermaid library. You will need to reload the browser page yourself to see the changes. (PRs for auto reload are welcome!) -### Docker +## Verify Everything is Working -If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands: +You can run the `test` script to verify that pnpm is working _and_ that the repository has been cloned correctly: ```bash -./run install # npx pnpm install -./run test # pnpm test -``` - -## Contributing Code - -The basic steps for contributing code are: - -```mermaid-example -graph LR - git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge] -``` - -```mermaid -graph LR - git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge] -``` - -1. **Create** and checkout a git branch and work on your code in the branch -2. Write and update **tests** (unit and perhaps even integration (e2e) tests) (If you do TDD/BDD, the order might be different.) -3. **Let users know** that things have changed or been added in the documents! This is often overlooked, but _critical_ -4. **Submit** your code as a _pull request_. -5. Maintainers will **review** your code. If there are no changes necessary, the PR will be merged. Otherwise, make the requested changes and repeat. - -### 1. Checkout a git branch - -Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching. - -Development is done in the `develop` branch. - -Once development is done we create a `release/vX.X.X` branch from `develop` for testing. - -Once the release happens we add a tag to the `release` branch and merge it with `master`. The live product and on-line documentation are what is in the `master` branch. - -**All new work should be based on the `develop` branch.** - -**When you are ready to do work, always, ALWAYS:** - -1. Make sure you have the most up-to-date version of the `develop` branch. (fetch or pull to update it) -2. Check out the `develop` branch -3. Create a new branch for your work. Please name the branch following our naming convention below. - -We use the follow naming convention for branches: - -```text - [feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces] -``` - -- The first part is the **type** of change: a feature, bug, chore, or documentation change ('docs') -- followed by a _slash_ (which helps to group like types together in many git tools) -- followed by the **issue number** -- followed by an _underscore_ ('\_') -- followed by a short text description (but use dashes ('-') or underscores ('\_') instead of spaces) - -If your work is specific to a single diagram type, it is a good idea to put the diagram type at the start of the description. This will help us keep release notes organized: it will help us keep changes for a diagram type together. - -**Ex: A new feature described in issue 2945 that adds a new arrow type called 'florbs' to state diagrams** - -`feature/2945_state-diagram-new-arrow-florbs` - -**Ex: A bug described in issue 1123 that causes random ugly red text in multiple diagram types** -`bug/1123_fix_random_ugly_red_text` - -### 2. Write Tests - -Tests ensure that each function, module, or part of code does what it says it will do. This is critically -important when other changes are made to ensure that existing code is not broken (no regression). - -Just as important, the tests act as _specifications:_ they specify what the code does (or should do). -Whenever someone is new to a section of code, they should be able to read the tests to get a thorough understanding of what it does and why. - -If you are fixing a bug, you should add tests to ensure that your code has actually fixed the bug, to specify/describe what the code is doing, and to ensure the bug doesn't happen again. -(If there had been a test for the situation, the bug never would have happened in the first place.) -You may need to change existing tests if they were inaccurate. - -If you are adding a feature, you will definitely need to add tests. Depending on the size of your feature, you may need to add integration tests. - -#### Unit Tests - -Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run. - -Unit tests are mandatory all code except the renderers. (The renderers are tested with integration tests.) - -We use [Vitest](https://vitest.dev) to run unit tests. - -You can use the following command to run the unit tests: - -```sh pnpm test ``` -When writing new tests, it's easier to have the tests automatically run as you make changes. You can do this by running the following command: - -```sh -pnpm test:watch -``` - -#### Integration/End-to-End (e2e) tests - -These test the rendering and visual appearance of the diagrams. -This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! - -To start working with the e2e tests: - -1. Run `pnpm dev` to start the dev server -2. Start **Cypress** by running `pnpm cypress:open`. - -The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. - -When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs. - -This is what a rendering test looks like: - -```js -it('should render forks and joins', () => { - imgSnapshotTest( - ` - stateDiagram - state fork_state <<fork>> - [*] --> fork_state - fork_state --> State2 - fork_state --> State3 - - state join_state <<join>> - State2 --> join_state - State3 --> join_state - join_state --> State4 - State4 --> [*] - `, - { logLevel: 0 } - ); - cy.get('svg'); -}); -``` - -**_\[TODO - running the tests against what is expected in development. ]_** - -**_\[TODO - how to generate new screenshots]_** -.... - -### 3. Update Documentation - -If the users have no way to know that things have changed, then you haven't really _fixed_ anything for the users; you've just added to making Mermaid feel broken. -Likewise, if users don't know that there is a new feature that you've implemented, it will forever remain unknown and unused. - -The documentation has to be updated to users know that things have changed and added! -If you are adding a new feature, add `(v+)` in the title or description. It will be replaced automatically with the current version number when the release happens. - -eg: `# Feature Name (v+)` - -We know it can sometimes be hard to code _and_ write user documentation. - -Our documentation is managed in `packages/mermaid/src/docs`. Details on how to edit is in the [Contributing Documentation](#contributing-documentation) section. - -Create another issue specifically for the documentation.\ -You will need to help with the PR, but definitely ask for help if you feel stuck. -When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work! - -When in doubt, write up and submit what you can. It can be clarified and refined later. (With documentation, something is better than nothing!) - -### 4. Submit your pull request - -**\[TODO - PR titles should start with (fix | feat | ....)]** - -We make all changes via Pull Requests (PRs). As we have many Pull Requests from developers new to Mermaid, we have put in place a process wherein _knsv, Knut Sveidqvist_ is in charge of the final release process and the active maintainers are in charge of reviewing and merging most PRs. - -- PRs will be reviewed by active maintainers, who will provide feedback and request changes as needed. -- The maintainers will request a review from knsv, if necessary. -- Once the PR is approved, the maintainers will merge the PR into the `develop` branch. -- When a release is ready, the `release/x.x.x` branch will be created, extensively tested and knsv will be in charge of the release process. - -**Reminder: Pull Requests should be submitted to the develop branch.** - -## Contributing Documentation - -**_\[TODO: This section is still a WIP. It still needs MAJOR revision.]_** - -If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature? - -The docs are located in the `packages/mermaid/src/docs` folder and are written in Markdown. Just pick the right section and start typing. - -The contents of [mermaid.js.org](https://mermaid.js.org/) are based on the docs from the `master` branch. -Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid.js.org/) once published. - -### How to Contribute to Documentation - -We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. - -The documentation is located in the `packages/mermaid/src/docs` directory and organized according to relevant subfolder. - -The `docs` folder will be automatically generated when committing to `packages/mermaid/src/docs` and **should not** be edited manually. - -```mermaid-example -flowchart LR - classDef default fill:#fff,color:black,stroke:black - - source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"] - -``` - -```mermaid -flowchart LR - classDef default fill:#fff,color:black,stroke:black - - source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"] - -``` - -You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box. -Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly. - -```` -```note -Note content -``` - -```tip -Tip content -``` - -```warning -Warning content -``` - -```danger -Danger content -``` - -```` - -> **Note** -> If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. - -We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs). - -**_DO NOT CHANGE FILES IN `/docs`_** - -### The official documentation site - -**[The mermaid documentation site](https://mermaid.js.org/) is powered by [Vitepress](https://vitepress.vuejs.org/).** - -To run the documentation site locally: - -1. Run `pnpm --filter mermaid run docs:dev` to start the dev server. (Or `pnpm docs:dev` inside the `packages/mermaid` directory.) -2. Open in your browser. - -Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). - -To edit Docs on your computer: - -_\[TODO: need to keep this in sync with [check out a git branch in Contributing Code above](#1-checkout-a-git-branch) ]_ - -1. Create a fork of the develop branch to work on. -2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory. -3. Make changes or add new documentation. -4. Commit changes to your branch and push it to GitHub (which should create a new branch). -5. Create a Pull Request of your fork. - -To edit Docs on GitHub: - -1. Login to [GitHub.com](https://www.github.com). -2. Navigate to [packages/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs) in the mermaid-js repository. -3. To edit a file, click the pencil icon at the top-right of the file contents panel. -4. Describe what you changed in the **Propose file change** section, located at the bottom of the page. -5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch). -6. Visit the Actions tab in Github, `https://github.com//mermaid/actions` and enable the actions for your fork. This will ensure that the documentation is built and updated in your fork. -7. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button. - -### Documentation organization: Sidebar navigation - -If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation.** - -The sidebar navigation is defined in [the vitepress configuration file config.ts](../.vitepress/config.ts). - -## Questions or Suggestions? - -#### First search to see if someone has already asked (and hopefully been answered) or suggested the same thing. - -- Search in Discussions -- Search in open Issues -- Search in closed Issues - -If you find an open issue or discussion thread that is similar to your question but isn't answered, you can let us know that you are also interested in it. -Use the GitHub reactions to add a thumbs-up to the issue or discussion thread. - -This helps the team know the relative interest in something and helps them set priorities and assignments. - -Feel free to add to the discussion on the issue or topic. - -If you can't find anything that already addresses your question or suggestion, _open a new issue:_ - -Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). +The `test` script and others are in the top-level `package.json` file. -### How to Contribute a Suggestion +All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ warnings; those are ok during this step.) ## Last Words diff --git a/docs/community/docker-development.md b/docs/community/docker-development.md new file mode 100644 index 0000000000..4b206408cf --- /dev/null +++ b/docs/community/docker-development.md @@ -0,0 +1,109 @@ +> **Warning** +> +> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. +> +> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/docker-development.md](../../packages/mermaid/src/docs/community/docker-development.md). + +# Contributing to Mermaid via Docker + +> The following documentation describes how to work with Mermaid in a Docker environment. +> There's also a [host installation guide](../community/development.md) +> if you prefer to work without a Docker environment. + +So you want to help? That's great! + +![Image of happy people jumping with excitement](https://media.giphy.com/media/BlVnrxJgTGsUw/giphy.gif) + +Here are a few things to get you started on the right path. + +## Get the Source Code + +In GitHub, you first **fork** a repository when you are going to make changes and submit pull requests. + +Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with. + +[Fork mermaid](https://github.com/mermaid-js/mermaid/fork) to start contributing to the main project and its documentaion, or [search for other repositories](https://github.com/orgs/mermaid-js/repositories). + +[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo) + +## Technical Requirements + +> The following documentation describes how to work with Mermaid in a Docker environment. +> There's also a [host installation guide](../community/development.md) +> if you prefer to work without a Docker environment. + +[Install Docker](https://docs.docker.com/engine/install/). And that is pretty much all you need. + +Optionally, to run GUI (Cypress) within Docker you will also need X11 server installed. +Maybe you already have it installed, so check it first: + +```bash +echo $DISPLAY +``` + +If variable `$DISPLAY` is not empty, then it must be working. Otherwise install it. + +## Setup and Launch + +### Switch to project + +Once you have cloned the repository onto your development machine, change into the `mermaid` project folder (the top level directory of the mermaid project repository) + +```bash +cd mermaid +``` + +### Make `./run` executable + +For development using Docker there is a self-documented `run` bash script, which provides convenient aliases for `docker compose` commands. + +Ensure `./run` script is executable: + +```bash +chmod +x run +``` + +> **💡 Tip** +> To get detailed help simply type `./run` or `./run help`. +> +> It also has short _Development quick start guide_ embedded. + +### Install packages + +```bash +./run pnpm install # Install packages +``` + +### Launch + +```bash +./run dev +``` + +Now you are ready to make your changes! Edit whichever files in `src` as required. + +Open in your browser, after starting the dev server. +There is a list of demos that can be used to see and test your changes. + +If you need a specific diagram, you can duplicate the `example.html` file in `/demos/dev` and add your own mermaid code to your copy. + +That will be served at . +After making code changes, the dev server will rebuild the mermaid library. You will need to reload the browser page yourself to see the changes. (PRs for auto reload are welcome!) + +## Verify Everything is Working + +```bash +./run pnpm test +``` + +The `test` script and others are in the top-level `package.json` file. + +All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ warnings; those are ok during this step.) + +## Last Words + +Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there. + +[Join our Slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) + +![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) diff --git a/docs/community/documentation.md b/docs/community/documentation.md new file mode 100644 index 0000000000..b4f19597ac --- /dev/null +++ b/docs/community/documentation.md @@ -0,0 +1,106 @@ +> **Warning** +> +> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. +> +> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/documentation.md](../../packages/mermaid/src/docs/community/documentation.md). + +# Contributing Documentation + +**_\[TODO: This section is still a WIP. It still needs MAJOR revision.]_** + +If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature? + +The docs are located in the `packages/mermaid/src/docs` folder and are written in Markdown. Just pick the right section and start typing. + +The contents of [mermaid.js.org](https://mermaid.js.org/) are based on the docs from the `master` branch. +Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid.js.org/) once published. + +## How to Contribute to Documentation + +We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. + +The documentation is located in the `packages/mermaid/src/docs` directory and organized according to relevant subfolder. + +The `docs` folder will be automatically generated when committing to `packages/mermaid/src/docs` and **should not** be edited manually. + +```mermaid-example +flowchart LR + classDef default fill:#fff,color:black,stroke:black + + source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"] + +``` + +```mermaid +flowchart LR + classDef default fill:#fff,color:black,stroke:black + + source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"] + +``` + +You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box. +Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly. + +```` +```note +Note content +``` + +```tip +Tip content +``` + +```warning +Warning content +``` + +```danger +Danger content +``` + +```` + +> **Note** +> If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. + +We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs). + +**_DO NOT CHANGE FILES IN `/docs`_** + +## The official documentation site + +**[The mermaid documentation site](https://mermaid.js.org/) is powered by [Vitepress](https://vitepress.vuejs.org/).** + +To run the documentation site locally: + +1. Run `pnpm --filter mermaid run docs:dev` to start the dev server. (Or `pnpm docs:dev` inside the `packages/mermaid` directory.) +2. Open in your browser. + +Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). + +To edit Docs on your computer: + +_\[TODO: need to keep this in sync with [check out a git branch in Contributing Code above](#1-checkout-a-git-branch) ]_ + +1. Create a fork of the develop branch to work on. +2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory. +3. Make changes or add new documentation. +4. Commit changes to your branch and push it to GitHub (which should create a new branch). +5. Create a Pull Request of your fork. + +To edit Docs on GitHub: + +1. Login to [GitHub.com](https://www.github.com). +2. Navigate to [packages/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs) in the mermaid-js repository. +3. To edit a file, click the pencil icon at the top-right of the file contents panel. +4. Describe what you changed in the **Propose file change** section, located at the bottom of the page. +5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch). +6. Visit the Actions tab in Github, `https://github.com//mermaid/actions` and enable the actions for your fork. This will ensure that the documentation is built and updated in your fork. +7. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button. + +## Documentation organization: Sidebar navigation + +If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation.** + +The sidebar navigation is defined in [the vitepress configuration file config.ts](../.vitepress/config.ts). diff --git a/docs/community/n00b-overview.md b/docs/community/n00b-overview.md deleted file mode 100644 index afb110e9ec..0000000000 --- a/docs/community/n00b-overview.md +++ /dev/null @@ -1,74 +0,0 @@ -> **Warning** -> -> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. -> -> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/n00b-overview.md](../../packages/mermaid/src/docs/community/n00b-overview.md). - -# Overview for Beginners - -**Explaining with a Diagram** - -A picture is worth a thousand words, a good diagram is undoubtedly worth more. They make understanding easier. - -## Creating and Maintaining Diagrams - -Anyone who has used Visio, or (God Forbid) Excel to make a Gantt Chart, knows how hard it is to create, edit and maintain good visualizations. - -Diagrams/Charts are significant but also become obsolete/inaccurate very fast. This catch-22 hobbles the productivity of teams. - -# Doc Rot in Diagrams - -Doc-Rot kills diagrams as quickly as it does text, but it takes hours in a desktop application to produce a diagram. - -Mermaid seeks to change using markdown-inspired syntax. The process is a quicker, less complicated, and more convenient way of going from concept to visualization. - -It is a relatively straightforward solution to a significant hurdle with the software teams. - -# Definition of Terms/ Dictionary - -**Mermaid text definitions can be saved for later reuse and editing.** - -> These are the Mermaid diagram definitions inside `
    ` tags, with the `class=mermaid`. - -```html -
    -    graph TD
    -    A[Client] --> B[Load Balancer]
    -    B --> C[Server01]
    -    B --> D[Server02]
    -
    -``` - -**render** - -> This is the core function of the Mermaid API. It reads all the `Mermaid Definitions` inside `div` tags and returns an SVG file, based on the definition. - -**Nodes** - -> These are the boxes that contain text or otherwise discrete pieces of each diagram, separated generally by arrows, except for Gantt Charts and User Journey Diagrams. They will be referred often in the instructions. Read for Diagram Specific [Syntax](../intro/n00b-syntaxReference.md) - -## Advantages of using Mermaid - -- Ease to generate, modify and render diagrams when you make them. -- The number of integrations and plugins it has. -- You can add it to your or companies website. -- Diagrams can be created through comments like this in a script: - -## The catch-22 of Diagrams and Charts: - -**Diagramming and charting is a large waste of developer's time, but not having diagrams ruins productivity.** - -Mermaid solves this by reducing the time and effort required to create diagrams and charts. - -Because, the text base for the diagrams allows it to be updated easily. Also, it can be made part of production scripts (and other pieces of code). So less time is spent on documenting, as a separate task. - -## Catching up with Development - -Being based on markdown, Mermaid can be used, not only by accomplished front-end developers, but by most computer savvy people to render diagrams, at much faster speeds. -In fact one can pick up the syntax for it quite easily from the examples given and there are many tutorials available in the internet. - -## Mermaid is for everyone. - -Video [Tutorials](https://mermaid.js.org/config/Tutorials.html) are also available for the mermaid [live editor](https://mermaid.live/). - -Alternatively you can use Mermaid [Plug-Ins](https://mermaid-js.github.io/mermaid/#/./integrations), with tools you already use, like Google Docs. diff --git a/docs/community/questionsAndSuggestions.md b/docs/community/questionsAndSuggestions.md new file mode 100644 index 0000000000..28b107d1f5 --- /dev/null +++ b/docs/community/questionsAndSuggestions.md @@ -0,0 +1,28 @@ +> **Warning** +> +> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. +> +> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/questionsAndSuggestions.md](../../packages/mermaid/src/docs/community/questionsAndSuggestions.md). + +# Questions or Suggestions? + +**_\[TODO: This section is still a WIP. It still needs MAJOR revision.]_** + +## First search to see if someone has already asked (and hopefully been answered) or suggested the same thing. + +- Search in Discussions +- Search in open Issues +- Search in closed Issues + +If you find an open issue or discussion thread that is similar to your question but isn't answered, you can let us know that you are also interested in it. +Use the GitHub reactions to add a thumbs-up to the issue or discussion thread. + +This helps the team know the relative interest in something and helps them set priorities and assignments. + +Feel free to add to the discussion on the issue or topic. + +If you can't find anything that already addresses your question or suggestion, _open a new issue:_ + +Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). + +## How to Contribute a Suggestion diff --git a/docs/intro/index.md b/docs/intro/index.md index 6b811d86ee..89af6ecd1a 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -322,6 +322,7 @@ To Deploy Mermaid: - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) +- [HTTP Server](https://github.com/TomWright/mermaid-server) ## Request for Assistance @@ -338,7 +339,17 @@ Together we could continue the work with things like: Don't hesitate to contact me if you want to get involved! -## For contributors +## Contributors + +
    + +[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) + +
    + +Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. + +Detailed information about how to contribute can be found in the [contribution guideline](/community/development). ### Requirements @@ -346,7 +357,7 @@ Don't hesitate to contact me if you want to get involved! - [Node.js](https://nodejs.org/en/). `volta install node` - [pnpm](https://pnpm.io/) package manager. `volta install pnpm` -## Development Installation +### Development Installation ```bash git clone git@github.com:mermaid-js/mermaid.git @@ -383,25 +394,7 @@ Update version number in `package.json`. npm publish ``` -The above command generates files into the `dist` folder and publishes them to \. - -## Related projects - -- [Command Line Interface](https://github.com/mermaid-js/mermaid-cli) -- [Live Editor](https://github.com/mermaid-js/mermaid-live-editor) -- [HTTP Server](https://github.com/TomWright/mermaid-server) - -## Contributors - -
    - -[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) - -
    - -Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. - -Detailed information about how to contribute can be found in the [contribution guide](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) +The above command generates files into the `dist` folder and publishes them to [npmjs.org](npmjs.org). ## Security and safe diagrams diff --git a/docs/intro/n00b-syntaxReference.md b/docs/intro/n00b-syntaxReference.md index c51b1680e8..e8c5dab68e 100644 --- a/docs/intro/n00b-syntaxReference.md +++ b/docs/intro/n00b-syntaxReference.md @@ -56,11 +56,11 @@ One should **beware the use of some words or symbols** that can break diagrams. | 'end' | The word "End" can cause Flowcharts and Sequence diagrams to break | Wrap them in quotation marks to prevent breakage. | | [Nodes inside Nodes](../syntax/flowchart.md?id=special-characters-that-break-syntax) | Mermaid gets confused with nested shapes | wrap them in quotation marks to prevent breaking | -### Mermaid Live Editor +## Mermaid Live Editor Now, that you've seen what you should not add to your diagrams, you can play around with them in the [Mermaid Live Editor](https://mermaid.live). -# Configuration +## Configuration Configuration is the third part of Mermaid, after deployment and syntax. It deals with the different ways that Mermaid can be customized across different deployments. diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index 06485ab7d3..f86da04906 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -72,6 +72,11 @@ function nav() { activeMatch: '/config/', }, { text: 'Integrations', link: '/ecosystem/integrations', activeMatch: '/ecosystem/' }, + { + text: 'Contributing', + link: '/community/development.html', + activeMatch: '/community/', + }, { text: 'Latest News', link: '/news/announcements', @@ -104,11 +109,8 @@ function sidebarAll() { collapsed: false, items: [ { text: 'About Mermaid', link: '/intro/' }, - { text: 'Deployment', link: '/intro/n00b-gettingStarted' }, - { - text: 'Syntax and Configuration', - link: '/intro/n00b-syntaxReference', - }, + { text: 'Getting Started', link: '/intro/n00b-gettingStarted' }, + { text: 'Syntax and Configuration', link: '/intro/n00b-syntaxReference' }, ], }, ...sidebarSyntax(), @@ -191,8 +193,10 @@ function sidebarCommunity() { text: '🙌 Contributions and Community', collapsed: false, items: [ - { text: 'Overview for Beginners', link: '/community/n00b-overview' }, - ...sidebarCommunityDevelopContribute(), + { text: 'Contributing to Mermaid', link: '/community/development' }, + { text: 'Contributing Code', link: '/community/code' }, + { text: 'Contributing Documentation', link: '/community/documentation' }, + { text: 'Questions and Suggestions', link: '/community/questionsAndSuggestions' }, { text: 'Adding Diagrams', link: '/community/newDiagram' }, { text: 'Security', link: '/community/security' }, ], @@ -200,40 +204,6 @@ function sidebarCommunity() { ]; } -// Development and Contributing -function sidebarCommunityDevelopContribute() { - const page_path = '/community/development'; - return [ - { - text: 'Contributing to Mermaid', - link: page_path + '#contributing-to-mermaid', - collapsed: false, - items: [ - { - text: 'Technical Requirements and Setup', - link: pathToId(page_path, 'technical-requirements-and-setup'), - }, - { - text: 'Contributing Code', - link: pathToId(page_path, 'contributing-code'), - }, - { - text: 'Contributing Documentation', - link: pathToId(page_path, 'contributing-documentation'), - }, - { - text: 'Questions or Suggestions?', - link: pathToId(page_path, 'questions-or-suggestions'), - }, - { - text: 'Last Words', - link: pathToId(page_path, 'last-words'), - }, - ], - }, - ]; -} - function sidebarNews() { return [ { diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts index da32e5f8f3..da4326be77 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts @@ -50,6 +50,7 @@ const idRedirectMap: Record = { 'n00b-advanced': 'config/n00b-advanced', 'n00b-gettingstarted': 'intro/n00b-gettingStarted', 'n00b-overview': 'community/n00b-overview', + 'community/n00b-overview': 'intro/n00b-gettingStarted', 'n00b-syntaxreference': 'intro/n00b-syntaxReference', newdiagram: 'community/newDiagram', pie: 'syntax/pie', diff --git a/packages/mermaid/src/docs/community/code.md b/packages/mermaid/src/docs/community/code.md new file mode 100644 index 0000000000..cfbba8b7e2 --- /dev/null +++ b/packages/mermaid/src/docs/community/code.md @@ -0,0 +1,165 @@ +# Contributing Code + +The basic steps for contributing code are: + +```mermaid +graph LR + git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge] +``` + +1. **Create** and checkout a git branch and work on your code in the branch +2. Write and update **tests** (unit and perhaps even integration (e2e) tests) (If you do TDD/BDD, the order might be different.) +3. **Let users know** that things have changed or been added in the documents! This is often overlooked, but _critical_ +4. **Submit** your code as a _pull request_. +5. Maintainers will **review** your code. If there are no changes necessary, the PR will be merged. Otherwise, make the requested changes and repeat. + +## 1. Checkout a git branch + +Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching. + +Development is done in the `develop` branch. + +Once development is done we create a `release/vX.X.X` branch from `develop` for testing. + +Once the release happens we add a tag to the `release` branch and merge it with `master`. The live product and on-line documentation are what is in the `master` branch. + +**All new work should be based on the `develop` branch.** + +**When you are ready to do work, always, ALWAYS:** + +1. Make sure you have the most up-to-date version of the `develop` branch. (fetch or pull to update it) +2. Check out the `develop` branch +3. Create a new branch for your work. Please name the branch following our naming convention below. + +We use the follow naming convention for branches: + +```txt + [feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces] +``` + +You can always check current [configuration of labelling and branch prefixes](https://github.com/mermaid-js/mermaid/blob/develop/.github/pr-labeler.yml) + +- The first part is the **type** of change: a feature, bug, chore, or documentation change ('docs') +- followed by a _slash_ (which helps to group like types together in many git tools) +- followed by the **issue number** +- followed by an _underscore_ ('\_') +- followed by a short text description (but use dashes ('-') or underscores ('\_') instead of spaces) + +If your work is specific to a single diagram type, it is a good idea to put the diagram type at the start of the description. This will help us keep release notes organized: it will help us keep changes for a diagram type together. + +**Ex: A new feature described in issue 2945 that adds a new arrow type called 'florbs' to state diagrams** + +`feature/2945_state-diagram-new-arrow-florbs` + +**Ex: A bug described in issue 1123 that causes random ugly red text in multiple diagram types** +`bug/1123_fix_random_ugly_red_text` + +## 2. Write Tests + +Tests ensure that each function, module, or part of code does what it says it will do. This is critically +important when other changes are made to ensure that existing code is not broken (no regression). + +Just as important, the tests act as _specifications:_ they specify what the code does (or should do). +Whenever someone is new to a section of code, they should be able to read the tests to get a thorough understanding of what it does and why. + +If you are fixing a bug, you should add tests to ensure that your code has actually fixed the bug, to specify/describe what the code is doing, and to ensure the bug doesn't happen again. +(If there had been a test for the situation, the bug never would have happened in the first place.) +You may need to change existing tests if they were inaccurate. + +If you are adding a feature, you will definitely need to add tests. Depending on the size of your feature, you may need to add integration tests. + +### Unit Tests + +Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run. + +Unit tests are mandatory all code except the renderers. (The renderers are tested with integration tests.) + +We use [Vitest](https://vitest.dev) to run unit tests. + +You can use the following command to run the unit tests: + +```sh +pnpm test +``` + +When writing new tests, it's easier to have the tests automatically run as you make changes. You can do this by running the following command: + +```sh +pnpm test:watch +``` + +### Integration/End-to-End (e2e) tests + +These test the rendering and visual appearance of the diagrams. +This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! + +To start working with the e2e tests: + +1. Run `pnpm dev` to start the dev server +2. Start **Cypress** by running `pnpm cypress:open`. + +The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. + +When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs. + +This is what a rendering test looks like: + +```js +it('should render forks and joins', () => { + imgSnapshotTest( + ` + stateDiagram + state fork_state <<fork>> + [*] --> fork_state + fork_state --> State2 + fork_state --> State3 + + state join_state <<join>> + State2 --> join_state + State3 --> join_state + join_state --> State4 + State4 --> [*] + `, + { logLevel: 0 } + ); + cy.get('svg'); +}); +``` + +**_[TODO - running the tests against what is expected in development. ]_** + +**_[TODO - how to generate new screenshots]_** +.... + +## 3. Update Documentation + +If the users have no way to know that things have changed, then you haven't really _fixed_ anything for the users; you've just added to making Mermaid feel broken. +Likewise, if users don't know that there is a new feature that you've implemented, it will forever remain unknown and unused. + +The documentation has to be updated to users know that things have changed and added! +If you are adding a new feature, add `(v+)` in the title or description. It will be replaced automatically with the current version number when the release happens. + +eg: `# Feature Name (v+)` + +We know it can sometimes be hard to code _and_ write user documentation. + +Our documentation is managed in `packages/mermaid/src/docs`. Details on how to edit is in the [Contributing Documentation](#contributing-documentation) section. + +Create another issue specifically for the documentation. +You will need to help with the PR, but definitely ask for help if you feel stuck. +When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work! + +When in doubt, write up and submit what you can. It can be clarified and refined later. (With documentation, something is better than nothing!) + +## 4. Submit your pull request + +**[TODO - PR titles should start with (fix | feat | ....)]** + +We make all changes via Pull Requests (PRs). As we have many Pull Requests from developers new to Mermaid, we have put in place a process wherein _knsv, Knut Sveidqvist_ is in charge of the final release process and the active maintainers are in charge of reviewing and merging most PRs. + +- PRs will be reviewed by active maintainers, who will provide feedback and request changes as needed. +- The maintainers will request a review from knsv, if necessary. +- Once the PR is approved, the maintainers will merge the PR into the `develop` branch. +- When a release is ready, the `release/x.x.x` branch will be created, extensively tested and knsv will be in charge of the release process. + +**Reminder: Pull Requests should be submitted to the develop branch.** diff --git a/packages/mermaid/src/docs/community/development.md b/packages/mermaid/src/docs/community/development.md index 35a01e5899..e3c0826fd0 100644 --- a/packages/mermaid/src/docs/community/development.md +++ b/packages/mermaid/src/docs/community/development.md @@ -1,14 +1,8 @@ # Contributing to Mermaid -## Contents - -- [Technical Requirements and Setup](#technical-requirements-and-setup) -- [Contributing Code](#contributing-code) -- [Contributing Documentation](#contributing-documentation) -- [Questions or Suggestions?](#questions-or-suggestions) -- [Last Words](#last-words) - ---- +> The following documentation describes how to work with Mermaid in your host environment. +> There's also a [Docker installation guide](../community/docker-development.md) +> if you prefer to work in a Docker environment. So you want to help? That's great! @@ -16,357 +10,76 @@ So you want to help? That's great! Here are a few things to get you started on the right path. -## Technical Requirements and Setup +## Get the Source Code -### Technical Requirements +In GitHub, you first **fork** a repository when you are going to make changes and submit pull requests. -These are the tools we use for working with the code and documentation. - -- [volta](https://volta.sh/) to manage node versions. -- [Node.js](https://nodejs.org/en/). `volta install node` -- [pnpm](https://pnpm.io/) package manager. `volta install pnpm` -- [npx](https://docs.npmjs.com/cli/v8/commands/npx) the packaged executor in npm. This is needed [to install pnpm.](#2-install-pnpm) +Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with. -Follow [the setup steps below](#setup) to install them and verify they are working +[Fork mermaid](https://github.com/mermaid-js/mermaid/fork) to start contributing to the main project and its documentaion, or [search for other repositories](https://github.com/orgs/mermaid-js/repositories). -### Setup +[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo) -Follow these steps to set up the environment you need to work on code and/or documentation. +## Technical Requirements -#### 1. Fork and clone the repository +> The following documentation describes how to work with Mermaid in your host environment. +> There's also a [Docker installation guide](../community/docker-development.md) +> if you prefer to work in a Docker environment. -In GitHub, you first _fork_ a repository when you are going to make changes and submit pull requests. +These are the tools we use for working with the code and documentation: -Then you _clone_ a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with. +- [volta](https://volta.sh/) to manage node versions. +- [Node.js](https://nodejs.org/en/). `volta install node` +- [pnpm](https://pnpm.io/) package manager. `volta install pnpm` +- [npx](https://docs.npmjs.com/cli/v8/commands/npx) the packaged executor in npm. This is needed [to install pnpm.](#install-packages) -[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo) +Follow the setup steps below to install them and start the development. -#### 2. Install pnpm +## Setup and Launch -Once you have cloned the repository onto your development machine, change into the `mermaid` project folder so that you can install `pnpm`. You will need `npx` to install pnpm because volta doesn't support it yet. +### Switch to project -Ex: +Once you have cloned the repository onto your development machine, change into the `mermaid` project folder (the top level directory of the mermaid project repository) ```bash -# Change into the mermaid directory (the top level director of the mermaid project repository) cd mermaid -# npx is required for first install because volta does not support pnpm yet -npx pnpm install ``` -#### 3. Verify Everything Is Working +### Install packages -Once you have installed pnpm, you can run the `test` script to verify that pnpm is working _and_ that the repository has been cloned correctly: +Run `npx pnpm install`. You will need `npx` for this because volta doesn't support it yet. ```bash -pnpm test +npx pnpm install # npx is required for first install ``` -The `test` script and others are in the top-level `package.json` file. - -All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ "warnings"; those are ok during this step.) +### Launch -#### 4. Make your changes - -Now you are ready to make your changes! -Edit whichever files in `src` as required. +```bash +npx pnpm run dev +``` -#### 5. See your changes +Now you are ready to make your changes! Edit whichever files in `src` as required. Open in your browser, after starting the dev server. There is a list of demos that can be used to see and test your changes. If you need a specific diagram, you can duplicate the `example.html` file in `/demos/dev` and add your own mermaid code to your copy. + That will be served at . After making code changes, the dev server will rebuild the mermaid library. You will need to reload the browser page yourself to see the changes. (PRs for auto reload are welcome!) -### Docker +## Verify Everything is Working -If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands: +You can run the `test` script to verify that pnpm is working _and_ that the repository has been cloned correctly: ```bash -./run install # npx pnpm install -./run test # pnpm test -``` - -## Contributing Code - -The basic steps for contributing code are: - -```mermaid -graph LR - git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge] -``` - -1. **Create** and checkout a git branch and work on your code in the branch -2. Write and update **tests** (unit and perhaps even integration (e2e) tests) (If you do TDD/BDD, the order might be different.) -3. **Let users know** that things have changed or been added in the documents! This is often overlooked, but _critical_ -4. **Submit** your code as a _pull request_. -5. Maintainers will **review** your code. If there are no changes necessary, the PR will be merged. Otherwise, make the requested changes and repeat. - -### 1. Checkout a git branch - -Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching. - -Development is done in the `develop` branch. - -Once development is done we create a `release/vX.X.X` branch from `develop` for testing. - -Once the release happens we add a tag to the `release` branch and merge it with `master`. The live product and on-line documentation are what is in the `master` branch. - -**All new work should be based on the `develop` branch.** - -**When you are ready to do work, always, ALWAYS:** - -1. Make sure you have the most up-to-date version of the `develop` branch. (fetch or pull to update it) -2. Check out the `develop` branch -3. Create a new branch for your work. Please name the branch following our naming convention below. - -We use the follow naming convention for branches: - -```text - [feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces] -``` - -- The first part is the **type** of change: a feature, bug, chore, or documentation change ('docs') -- followed by a _slash_ (which helps to group like types together in many git tools) -- followed by the **issue number** -- followed by an _underscore_ ('\_') -- followed by a short text description (but use dashes ('-') or underscores ('\_') instead of spaces) - -If your work is specific to a single diagram type, it is a good idea to put the diagram type at the start of the description. This will help us keep release notes organized: it will help us keep changes for a diagram type together. - -**Ex: A new feature described in issue 2945 that adds a new arrow type called 'florbs' to state diagrams** - -`feature/2945_state-diagram-new-arrow-florbs` - -**Ex: A bug described in issue 1123 that causes random ugly red text in multiple diagram types** -`bug/1123_fix_random_ugly_red_text` - -### 2. Write Tests - -Tests ensure that each function, module, or part of code does what it says it will do. This is critically -important when other changes are made to ensure that existing code is not broken (no regression). - -Just as important, the tests act as _specifications:_ they specify what the code does (or should do). -Whenever someone is new to a section of code, they should be able to read the tests to get a thorough understanding of what it does and why. - -If you are fixing a bug, you should add tests to ensure that your code has actually fixed the bug, to specify/describe what the code is doing, and to ensure the bug doesn't happen again. -(If there had been a test for the situation, the bug never would have happened in the first place.) -You may need to change existing tests if they were inaccurate. - -If you are adding a feature, you will definitely need to add tests. Depending on the size of your feature, you may need to add integration tests. - -#### Unit Tests - -Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run. - -Unit tests are mandatory all code except the renderers. (The renderers are tested with integration tests.) - -We use [Vitest](https://vitest.dev) to run unit tests. - -You can use the following command to run the unit tests: - -```sh pnpm test ``` -When writing new tests, it's easier to have the tests automatically run as you make changes. You can do this by running the following command: - -```sh -pnpm test:watch -``` - -#### Integration/End-to-End (e2e) tests - -These test the rendering and visual appearance of the diagrams. -This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks! - -To start working with the e2e tests: - -1. Run `pnpm dev` to start the dev server -2. Start **Cypress** by running `pnpm cypress:open`. - -The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress. - -When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs. - -This is what a rendering test looks like: - -```js -it('should render forks and joins', () => { - imgSnapshotTest( - ` - stateDiagram - state fork_state <<fork>> - [*] --> fork_state - fork_state --> State2 - fork_state --> State3 - - state join_state <<join>> - State2 --> join_state - State3 --> join_state - join_state --> State4 - State4 --> [*] - `, - { logLevel: 0 } - ); - cy.get('svg'); -}); -``` - -**_[TODO - running the tests against what is expected in development. ]_** - -**_[TODO - how to generate new screenshots]_** -.... - -### 3. Update Documentation - -If the users have no way to know that things have changed, then you haven't really _fixed_ anything for the users; you've just added to making Mermaid feel broken. -Likewise, if users don't know that there is a new feature that you've implemented, it will forever remain unknown and unused. - -The documentation has to be updated to users know that things have changed and added! -If you are adding a new feature, add `(v+)` in the title or description. It will be replaced automatically with the current version number when the release happens. - -eg: `# Feature Name (v+)` - -We know it can sometimes be hard to code _and_ write user documentation. - -Our documentation is managed in `packages/mermaid/src/docs`. Details on how to edit is in the [Contributing Documentation](#contributing-documentation) section. - -Create another issue specifically for the documentation. -You will need to help with the PR, but definitely ask for help if you feel stuck. -When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work! - -When in doubt, write up and submit what you can. It can be clarified and refined later. (With documentation, something is better than nothing!) - -### 4. Submit your pull request - -**[TODO - PR titles should start with (fix | feat | ....)]** - -We make all changes via Pull Requests (PRs). As we have many Pull Requests from developers new to Mermaid, we have put in place a process wherein _knsv, Knut Sveidqvist_ is in charge of the final release process and the active maintainers are in charge of reviewing and merging most PRs. - -- PRs will be reviewed by active maintainers, who will provide feedback and request changes as needed. -- The maintainers will request a review from knsv, if necessary. -- Once the PR is approved, the maintainers will merge the PR into the `develop` branch. -- When a release is ready, the `release/x.x.x` branch will be created, extensively tested and knsv will be in charge of the release process. - -**Reminder: Pull Requests should be submitted to the develop branch.** - -## Contributing Documentation - -**_[TODO: This section is still a WIP. It still needs MAJOR revision.]_** - -If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature? - -The docs are located in the `packages/mermaid/src/docs` folder and are written in Markdown. Just pick the right section and start typing. - -The contents of [mermaid.js.org](https://mermaid.js.org/) are based on the docs from the `master` branch. -Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid.js.org/) once published. - -### How to Contribute to Documentation - -We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. - -The documentation is located in the `packages/mermaid/src/docs` directory and organized according to relevant subfolder. - -The `docs` folder will be automatically generated when committing to `packages/mermaid/src/docs` and **should not** be edited manually. - -```mermaid -flowchart LR - classDef default fill:#fff,color:black,stroke:black - - source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"] - -``` - -You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box. -Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly. - -```` -```note -Note content -``` - -```tip -Tip content -``` - -```warning -Warning content -``` - -```danger -Danger content -``` - -```` - -```note -If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. -``` - -We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs). - -**_DO NOT CHANGE FILES IN `/docs`_** - -### The official documentation site - -**[The mermaid documentation site](https://mermaid.js.org/) is powered by [Vitepress](https://vitepress.vuejs.org/).** - -To run the documentation site locally: - -1. Run `pnpm --filter mermaid run docs:dev` to start the dev server. (Or `pnpm docs:dev` inside the `packages/mermaid` directory.) -2. Open [http://localhost:3333/](http://localhost:3333/) in your browser. - -Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). - -To edit Docs on your computer: - -_[TODO: need to keep this in sync with [check out a git branch in Contributing Code above](#1-checkout-a-git-branch) ]_ - -1. Create a fork of the develop branch to work on. -2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory. -3. Make changes or add new documentation. -4. Commit changes to your branch and push it to GitHub (which should create a new branch). -5. Create a Pull Request of your fork. - -To edit Docs on GitHub: - -1. Login to [GitHub.com](https://www.github.com). -2. Navigate to [packages/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs) in the mermaid-js repository. -3. To edit a file, click the pencil icon at the top-right of the file contents panel. -4. Describe what you changed in the **Propose file change** section, located at the bottom of the page. -5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch). -6. Visit the Actions tab in Github, `https://github.com//mermaid/actions` and enable the actions for your fork. This will ensure that the documentation is built and updated in your fork. -7. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button. - -### Documentation organization: Sidebar navigation - -If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation.** - -The sidebar navigation is defined in [the vitepress configuration file config.ts](../.vitepress/config.ts). - -## Questions or Suggestions? - -#### First search to see if someone has already asked (and hopefully been answered) or suggested the same thing. - -- Search in Discussions -- Search in open Issues -- Search in closed Issues - -If you find an open issue or discussion thread that is similar to your question but isn't answered, you can let us know that you are also interested in it. -Use the GitHub reactions to add a thumbs-up to the issue or discussion thread. - -This helps the team know the relative interest in something and helps them set priorities and assignments. - -Feel free to add to the discussion on the issue or topic. - -If you can't find anything that already addresses your question or suggestion, _open a new issue:_ - -Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). +The `test` script and others are in the top-level `package.json` file. -### How to Contribute a Suggestion +All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ warnings; those are ok during this step.) ## Last Words diff --git a/packages/mermaid/src/docs/community/docker-development.md b/packages/mermaid/src/docs/community/docker-development.md new file mode 100644 index 0000000000..f3fb41391c --- /dev/null +++ b/packages/mermaid/src/docs/community/docker-development.md @@ -0,0 +1,104 @@ +# Contributing to Mermaid via Docker + +> The following documentation describes how to work with Mermaid in a Docker environment. +> There's also a [host installation guide](../community/development.md) +> if you prefer to work without a Docker environment. + +So you want to help? That's great! + +![Image of happy people jumping with excitement](https://media.giphy.com/media/BlVnrxJgTGsUw/giphy.gif) + +Here are a few things to get you started on the right path. + +## Get the Source Code + +In GitHub, you first **fork** a repository when you are going to make changes and submit pull requests. + +Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with. + +[Fork mermaid](https://github.com/mermaid-js/mermaid/fork) to start contributing to the main project and its documentaion, or [search for other repositories](https://github.com/orgs/mermaid-js/repositories). + +[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo) + +## Technical Requirements + +> The following documentation describes how to work with Mermaid in a Docker environment. +> There's also a [host installation guide](../community/development.md) +> if you prefer to work without a Docker environment. + +[Install Docker](https://docs.docker.com/engine/install/). And that is pretty much all you need. + +Optionally, to run GUI (Cypress) within Docker you will also need X11 server installed. +Maybe you already have it installed, so check it first: + +```bash +echo $DISPLAY +``` + +If variable `$DISPLAY` is not empty, then it must be working. Otherwise install it. + +## Setup and Launch + +### Switch to project + +Once you have cloned the repository onto your development machine, change into the `mermaid` project folder (the top level directory of the mermaid project repository) + +```bash +cd mermaid +``` + +### Make `./run` executable + +For development using Docker there is a self-documented `run` bash script, which provides convenient aliases for `docker compose` commands. + +Ensure `./run` script is executable: + +```bash +chmod +x run +``` + +```tip +To get detailed help simply type `./run` or `./run help`. + +It also has short _Development quick start guide_ embedded. +``` + +### Install packages + +```bash +./run pnpm install # Install packages +``` + +### Launch + +```bash +./run dev +``` + +Now you are ready to make your changes! Edit whichever files in `src` as required. + +Open in your browser, after starting the dev server. +There is a list of demos that can be used to see and test your changes. + +If you need a specific diagram, you can duplicate the `example.html` file in `/demos/dev` and add your own mermaid code to your copy. + +That will be served at . +After making code changes, the dev server will rebuild the mermaid library. You will need to reload the browser page yourself to see the changes. (PRs for auto reload are welcome!) + +## Verify Everything is Working + +```bash +./run pnpm test +``` + +The `test` script and others are in the top-level `package.json` file. + +All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ warnings; those are ok during this step.) + +## Last Words + +Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there. + +[Join our Slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) + +![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) diff --git a/packages/mermaid/src/docs/community/documentation.md b/packages/mermaid/src/docs/community/documentation.md new file mode 100644 index 0000000000..79a9843763 --- /dev/null +++ b/packages/mermaid/src/docs/community/documentation.md @@ -0,0 +1,93 @@ +# Contributing Documentation + +**_[TODO: This section is still a WIP. It still needs MAJOR revision.]_** + +If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature? + +The docs are located in the `packages/mermaid/src/docs` folder and are written in Markdown. Just pick the right section and start typing. + +The contents of [mermaid.js.org](https://mermaid.js.org/) are based on the docs from the `master` branch. +Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid.js.org/) once published. + +## How to Contribute to Documentation + +We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator. + +The documentation is located in the `packages/mermaid/src/docs` directory and organized according to relevant subfolder. + +The `docs` folder will be automatically generated when committing to `packages/mermaid/src/docs` and **should not** be edited manually. + +```mermaid +flowchart LR + classDef default fill:#fff,color:black,stroke:black + + source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"] + +``` + +You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box. +Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly. + +```` +```note +Note content +``` + +```tip +Tip content +``` + +```warning +Warning content +``` + +```danger +Danger content +``` + +```` + +```note +If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. +``` + +We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs). + +**_DO NOT CHANGE FILES IN `/docs`_** + +## The official documentation site + +**[The mermaid documentation site](https://mermaid.js.org/) is powered by [Vitepress](https://vitepress.vuejs.org/).** + +To run the documentation site locally: + +1. Run `pnpm --filter mermaid run docs:dev` to start the dev server. (Or `pnpm docs:dev` inside the `packages/mermaid` directory.) +2. Open [http://localhost:3333/](http://localhost:3333/) in your browser. + +Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). + +To edit Docs on your computer: + +_[TODO: need to keep this in sync with [check out a git branch in Contributing Code above](#1-checkout-a-git-branch) ]_ + +1. Create a fork of the develop branch to work on. +2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory. +3. Make changes or add new documentation. +4. Commit changes to your branch and push it to GitHub (which should create a new branch). +5. Create a Pull Request of your fork. + +To edit Docs on GitHub: + +1. Login to [GitHub.com](https://www.github.com). +2. Navigate to [packages/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs) in the mermaid-js repository. +3. To edit a file, click the pencil icon at the top-right of the file contents panel. +4. Describe what you changed in the **Propose file change** section, located at the bottom of the page. +5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch). +6. Visit the Actions tab in Github, `https://github.com//mermaid/actions` and enable the actions for your fork. This will ensure that the documentation is built and updated in your fork. +7. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button. + +## Documentation organization: Sidebar navigation + +If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation.** + +The sidebar navigation is defined in [the vitepress configuration file config.ts](../.vitepress/config.ts). diff --git a/packages/mermaid/src/docs/community/n00b-overview.md b/packages/mermaid/src/docs/community/n00b-overview.md deleted file mode 100644 index e8e84641a3..0000000000 --- a/packages/mermaid/src/docs/community/n00b-overview.md +++ /dev/null @@ -1,68 +0,0 @@ -# Overview for Beginners - -**Explaining with a Diagram** - -A picture is worth a thousand words, a good diagram is undoubtedly worth more. They make understanding easier. - -## Creating and Maintaining Diagrams - -Anyone who has used Visio, or (God Forbid) Excel to make a Gantt Chart, knows how hard it is to create, edit and maintain good visualizations. - -Diagrams/Charts are significant but also become obsolete/inaccurate very fast. This catch-22 hobbles the productivity of teams. - -# Doc Rot in Diagrams - -Doc-Rot kills diagrams as quickly as it does text, but it takes hours in a desktop application to produce a diagram. - -Mermaid seeks to change using markdown-inspired syntax. The process is a quicker, less complicated, and more convenient way of going from concept to visualization. - -It is a relatively straightforward solution to a significant hurdle with the software teams. - -# Definition of Terms/ Dictionary - -**Mermaid text definitions can be saved for later reuse and editing.** - -> These are the Mermaid diagram definitions inside `
    ` tags, with the `class=mermaid`. - -```html -
    -    graph TD
    -    A[Client] --> B[Load Balancer]
    -    B --> C[Server01]
    -    B --> D[Server02]
    -
    -``` - -**render** - -> This is the core function of the Mermaid API. It reads all the `Mermaid Definitions` inside `div` tags and returns an SVG file, based on the definition. - -**Nodes** - -> These are the boxes that contain text or otherwise discrete pieces of each diagram, separated generally by arrows, except for Gantt Charts and User Journey Diagrams. They will be referred often in the instructions. Read for Diagram Specific [Syntax](../intro/n00b-syntaxReference.md) - -## Advantages of using Mermaid - -- Ease to generate, modify and render diagrams when you make them. -- The number of integrations and plugins it has. -- You can add it to your or companies website. -- Diagrams can be created through comments like this in a script: - -## The catch-22 of Diagrams and Charts: - -**Diagramming and charting is a large waste of developer's time, but not having diagrams ruins productivity.** - -Mermaid solves this by reducing the time and effort required to create diagrams and charts. - -Because, the text base for the diagrams allows it to be updated easily. Also, it can be made part of production scripts (and other pieces of code). So less time is spent on documenting, as a separate task. - -## Catching up with Development - -Being based on markdown, Mermaid can be used, not only by accomplished front-end developers, but by most computer savvy people to render diagrams, at much faster speeds. -In fact one can pick up the syntax for it quite easily from the examples given and there are many tutorials available in the internet. - -## Mermaid is for everyone. - -Video [Tutorials](https://mermaid.js.org/config/Tutorials.html) are also available for the mermaid [live editor](https://mermaid.live/). - -Alternatively you can use Mermaid [Plug-Ins](https://mermaid-js.github.io/mermaid/#/./integrations), with tools you already use, like Google Docs. diff --git a/packages/mermaid/src/docs/community/questionsAndSuggestions.md b/packages/mermaid/src/docs/community/questionsAndSuggestions.md new file mode 100644 index 0000000000..f72d0a47d3 --- /dev/null +++ b/packages/mermaid/src/docs/community/questionsAndSuggestions.md @@ -0,0 +1,22 @@ +# Questions or Suggestions? + +**_[TODO: This section is still a WIP. It still needs MAJOR revision.]_** + +## First search to see if someone has already asked (and hopefully been answered) or suggested the same thing. + +- Search in Discussions +- Search in open Issues +- Search in closed Issues + +If you find an open issue or discussion thread that is similar to your question but isn't answered, you can let us know that you are also interested in it. +Use the GitHub reactions to add a thumbs-up to the issue or discussion thread. + +This helps the team know the relative interest in something and helps them set priorities and assignments. + +Feel free to add to the discussion on the issue or topic. + +If you can't find anything that already addresses your question or suggestion, _open a new issue:_ + +Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). + +## How to Contribute a Suggestion diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index c81cd0efc0..61fd064ec8 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -99,6 +99,7 @@ To Deploy Mermaid: - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) +- [HTTP Server](https://github.com/TomWright/mermaid-server) ## Request for Assistance @@ -115,7 +116,17 @@ Together we could continue the work with things like: Don't hesitate to contact me if you want to get involved! -## For contributors +## Contributors + +
    + +[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) + +
    + +Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. + +Detailed information about how to contribute can be found in the [contribution guideline](/community/development). ### Requirements @@ -123,7 +134,7 @@ Don't hesitate to contact me if you want to get involved! - [Node.js](https://nodejs.org/en/). `volta install node` - [pnpm](https://pnpm.io/) package manager. `volta install pnpm` -## Development Installation +### Development Installation ```bash git clone git@github.com:mermaid-js/mermaid.git @@ -160,25 +171,7 @@ Update version number in `package.json`. npm publish ``` -The above command generates files into the `dist` folder and publishes them to . - -## Related projects - -- [Command Line Interface](https://github.com/mermaid-js/mermaid-cli) -- [Live Editor](https://github.com/mermaid-js/mermaid-live-editor) -- [HTTP Server](https://github.com/TomWright/mermaid-server) - -## Contributors - -
    - -[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) - -
    - -Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. - -Detailed information about how to contribute can be found in the [contribution guide](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) +The above command generates files into the `dist` folder and publishes them to [npmjs.org](npmjs.org). ## Security and safe diagrams diff --git a/packages/mermaid/src/docs/intro/n00b-syntaxReference.md b/packages/mermaid/src/docs/intro/n00b-syntaxReference.md index 8e8c18a4d8..398f832576 100644 --- a/packages/mermaid/src/docs/intro/n00b-syntaxReference.md +++ b/packages/mermaid/src/docs/intro/n00b-syntaxReference.md @@ -38,11 +38,11 @@ One should **beware the use of some words or symbols** that can break diagrams. | 'end' | The word "End" can cause Flowcharts and Sequence diagrams to break | Wrap them in quotation marks to prevent breakage. | | [Nodes inside Nodes](../syntax/flowchart.md?id=special-characters-that-break-syntax) | Mermaid gets confused with nested shapes | wrap them in quotation marks to prevent breaking | -### Mermaid Live Editor +## Mermaid Live Editor Now, that you've seen what you should not add to your diagrams, you can play around with them in the [Mermaid Live Editor](https://mermaid.live). -# Configuration +## Configuration Configuration is the third part of Mermaid, after deployment and syntax. It deals with the different ways that Mermaid can be customized across different deployments. diff --git a/run b/run index cc169e209b..fbf4372631 100755 --- a/run +++ b/run @@ -80,6 +80,9 @@ $(bold ./$name cypress open --project .) $(bold ./$name cypress run --spec cypress/integration/rendering/)$(underline test.spec.ts) Run specific test in cypress\n +$(bold xhost +local:) + Allow local connections for x11 server + EOF ) From 7b45dbea1a74f46b136d3b7bcd4c001f685312cf Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Fri, 18 Aug 2023 03:14:12 +0300 Subject: [PATCH 498/595] Fixed links --- docs/intro/index.md | 2 +- packages/mermaid/src/docs/intro/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/intro/index.md b/docs/intro/index.md index 89af6ecd1a..b77dd454f7 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -37,7 +37,7 @@ Mermaid allows even non-programmers to easily create detailed and diagrams throu [Tutorials](../config/Tutorials.md) has video tutorials. Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](../ecosystem/integrations.md). -For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../community/n00b-overview.md) and [Usage](../config/usage.md). +For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../intro/n00b-gettingStarted.md) and [Usage](../config/usage.md). 🌐 [CDN](https://www.jsdelivr.com/package/npm/mermaid) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/development.md) | 🔌 [Plug-Ins](../ecosystem/integrations.md) diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index 61fd064ec8..c76f09a081 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -32,7 +32,7 @@ Mermaid allows even non-programmers to easily create detailed and diagrams throu [Tutorials](../config/Tutorials.md) has video tutorials. Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](../ecosystem/integrations.md). -For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../community/n00b-overview.md) and [Usage](../config/usage.md). +For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../intro/n00b-gettingStarted.md) and [Usage](../config/usage.md). 🌐 [CDN](https://www.jsdelivr.com/package/npm/mermaid) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/development.md) | 🔌 [Plug-Ins](../ecosystem/integrations.md) From cfffba28177505384ff124ce7477c4b30f1e7555 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Sun, 20 Aug 2023 00:59:58 +0530 Subject: [PATCH 499/595] chore: Add comments on redirectMaps --- packages/mermaid/src/docs/.vitepress/theme/redirect.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts index da32e5f8f3..cc15c243e1 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts @@ -24,6 +24,9 @@ const getBaseFile = (url: URL): Redirect => { return { path, id }; }; +/** + * Used to redirect old documentation pages to corresponding new pages. + */ const idRedirectMap: Record = { '8.6.0_docs': '', accessibility: 'config/theming', @@ -68,6 +71,9 @@ const idRedirectMap: Record = { 'user-journey': 'syntax/userJourney', }; +/** + * Used to redirect pages that have been moved in the vitepress site. + */ const urlRedirectMap: Record = { '/misc/faq.html': 'configure/faq.html', '/syntax/c4c.html': 'syntax/c4.html', From 4d84f1cd71eba0b1aa0e544e05c47e45c9355939 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Sat, 19 Aug 2023 11:19:18 +0530 Subject: [PATCH 500/595] feat(sankey): Show values (#4674) --- demos/sankey.html | 32 +++++++++++++++---- packages/mermaid/src/config.type.ts | 15 +++++++++ .../mermaid/src/diagrams/sankey/sankeyDB.ts | 2 +- .../src/diagrams/sankey/sankeyRenderer.ts | 26 ++++++++++----- .../mermaid/src/schemas/config.schema.yaml | 14 ++++++++ 5 files changed, 74 insertions(+), 15 deletions(-) diff --git a/demos/sankey.html b/demos/sankey.html index 0c9679c657..4c3eeac5e6 100644 --- a/demos/sankey.html +++ b/demos/sankey.html @@ -5,16 +5,13 @@ States Mermaid Quick Test Page -

    Sankey diagram demos

    +

    FY20-21 Performance

    +
    +

    Energy flow

           sankey-beta
    @@ -101,8 +98,31 @@ 

    Energy flow

    height: 600, linkColor: 'gradient', nodeAlignment: 'justify', + showValues: false, }, + startOnLoad: false, }); + // Render the Energy flow diagram + await mermaid.run(); + + mermaid.initialize({ + sankey: { + prefix: '$', + suffix: 'B', + }, + }); + + const { svg } = await mermaid.render( + 'ff', + ` +sankey-beta +Revenue,Expenses,10 +Revenue,Profit,10 +Expenses,Manufacturing,5 +Expenses,Tax,3 +Expenses,Research,2` + ); + document.getElementById('financials').innerHTML = svg; diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index c378660ca8..a4bf6cca8c 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -1298,6 +1298,21 @@ export interface SankeyDiagramConfig extends BaseDiagramConfig { */ nodeAlignment?: 'left' | 'right' | 'center' | 'justify'; useMaxWidth?: boolean; + /** + * Toggle to display or hide values along with title. + * + */ + showValues?: boolean; + /** + * The prefix to use for values + * + */ + prefix?: string; + /** + * The suffix to use for values + * + */ + suffix?: string; } /** * This interface was referenced by `MermaidConfig`'s JSON-Schema diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts index 1921e1b859..f6db1886d6 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts @@ -31,7 +31,7 @@ class SankeyLink { /** * @param source - Node where the link starts * @param target - Node where the link ends - * @param value - number, float or integer, describes the amount to be passed + * @param value - Describes the amount to be passed */ const addLink = (source: SankeyNode, target: SankeyNode, value: number): void => { links.push(new SankeyLink(source, target, value)); diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts index a9ee698e90..c40226b4cd 100644 --- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts +++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts @@ -18,7 +18,7 @@ import { } from 'd3-sankey'; import { configureSvgSize } from '../../setupGraphViewbox.js'; import { Uid } from '../../rendering-util/uid.js'; -import type { SankeyLinkColor, SankeyNodeAlignment } from '../../config.type.js'; +import type { SankeyNodeAlignment } from '../../config.type.js'; // Map config options to alignment functions const alignmentsMap: Record< @@ -62,10 +62,13 @@ export const draw = function (text: string, id: string, _version: string, diagOb // Establish svg dimensions and get width and height // - const width = conf?.width || defaultSankeyConfig.width!; - const height = conf?.height || defaultSankeyConfig.width!; - const useMaxWidth = conf?.useMaxWidth || defaultSankeyConfig.useMaxWidth!; - const nodeAlignment = conf?.nodeAlignment || defaultSankeyConfig.nodeAlignment!; + const width = conf?.width ?? defaultSankeyConfig.width!; + const height = conf?.height ?? defaultSankeyConfig.width!; + const useMaxWidth = conf?.useMaxWidth ?? defaultSankeyConfig.useMaxWidth!; + const nodeAlignment = conf?.nodeAlignment ?? defaultSankeyConfig.nodeAlignment!; + const prefix = conf?.prefix ?? defaultSankeyConfig.prefix!; + const suffix = conf?.suffix ?? defaultSankeyConfig.suffix!; + const showValues = conf?.showValues ?? defaultSankeyConfig.showValues!; // FIX: using max width prevents height from being set, is it intended? // to add height directly one can use `svg.attr('height', height)` @@ -94,7 +97,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb const sankey = d3Sankey() .nodeId((d: any) => d.id) // we use 'id' property to identify node .nodeWidth(nodeWidth) - .nodePadding(10) + .nodePadding(10 + (showValues ? 15 : 0)) .nodeAlign(nodeAlign) .extent([ [0, 0], @@ -130,6 +133,13 @@ export const draw = function (text: string, id: string, _version: string, diagOb .attr('width', (d: any) => d.x1 - d.x0) .attr('fill', (d: any) => colorScheme(d.id)); + const getText = ({ id, value }: { id: string; value: number }) => { + if (!showValues) { + return id; + } + return `${id}\n${prefix}${Math.round(value * 100) / 100}${suffix}`; + }; + // Create labels for nodes svg .append('g') @@ -141,9 +151,9 @@ export const draw = function (text: string, id: string, _version: string, diagOb .join('text') .attr('x', (d: any) => (d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6)) .attr('y', (d: any) => (d.y1 + d.y0) / 2) - .attr('dy', '0.35em') + .attr('dy', `${showValues ? '0' : '0.35'}em`) .attr('text-anchor', (d: any) => (d.x0 < width / 2 ? 'start' : 'end')) - .text((d: any) => d.id); + .text(getText); // Creates the paths that represent the links. const link = svg diff --git a/packages/mermaid/src/schemas/config.schema.yaml b/packages/mermaid/src/schemas/config.schema.yaml index 6e5f48d95e..9e7b3e6f39 100644 --- a/packages/mermaid/src/schemas/config.schema.yaml +++ b/packages/mermaid/src/schemas/config.schema.yaml @@ -1859,6 +1859,20 @@ $defs: # JSON Schema definition (maybe we should move these to a seperate file) default: justify useMaxWidth: default: false + showValues: + description: | + Toggle to display or hide values along with title. + default: true + prefix: + description: | + The prefix to use for values + type: string + default: '' + suffix: + description: | + The suffix to use for values + type: string + default: '' FontCalculator: title: Font Calculator From 7a547abd896ee906a277167ecdb27af4cc5d71e9 Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Sun, 20 Aug 2023 23:42:18 +0100 Subject: [PATCH 501/595] ci(release-drafter): add more release notes categories Add the following new categories to the release notes: - **BREAKING CHANGES** - Performance - Documentation I've also made the `feature`, `fix`, and `chore` label point to their appropriate section. --- .github/release-drafter.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 278151bca4..e650f8dd11 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,14 +1,27 @@ name-template: '$NEXT_PATCH_VERSION' tag-template: '$NEXT_PATCH_VERSION' categories: + - title: '🚨 **Breaking Changes**' + labels: + - 'Breaking Change' - title: '🚀 Features' labels: - 'Type: Enhancement' + - 'feature' # deprecated, new PRs shouldn't have this - title: '🐛 Bug Fixes' labels: - 'Type: Bug / Error' + - 'fix' # deprecated, new PRs shouldn't have this - title: '🧰 Maintenance' - label: 'Type: Other' + labels: + - 'Type: Other' + - 'chore' # deprecated, new PRs shouldn't have this + - title: '⚡️ Performance' + labels: + - 'Type: Performance' + - title: '📚 Documentation' + labels: + - 'Area: Documentation' change-template: '- $TITLE (#$NUMBER) @$AUTHOR' sort-by: title sort-direction: ascending From 21d0998db88238ac37a350f53751d9341b71fed7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 03:01:21 +0000 Subject: [PATCH 502/595] chore(deps): update all patch dependencies --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 56a46e84c9..2480311a21 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,7 @@ services: - 9000:9000 - 3333:3333 cypress: - image: cypress/included:12.17.3 + image: cypress/included:12.17.4 stdin_open: true tty: true working_dir: /mermaid From fae976e994a30336878444e148ed1ac19ca331f6 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 10:13:48 +0530 Subject: [PATCH 503/595] refactor: Rename and cleanup `directiveSanitizer` --- packages/mermaid/src/defaultConfig.ts | 2 +- packages/mermaid/src/utils.ts | 97 +++++++++++++-------------- 2 files changed, 47 insertions(+), 52 deletions(-) diff --git a/packages/mermaid/src/defaultConfig.ts b/packages/mermaid/src/defaultConfig.ts index 0b232116da..f8bd9b0b53 100644 --- a/packages/mermaid/src/defaultConfig.ts +++ b/packages/mermaid/src/defaultConfig.ts @@ -265,5 +265,5 @@ const keyify = (obj: any, prefix = ''): string[] => return [...res, prefix + el]; }, []); -export const configKeys: string[] = keyify(config, ''); +export const configKeys: Set = new Set(keyify(config, '')); export default config; diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index 937f3f8f84..f054ef29ff 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -102,7 +102,7 @@ export const detectInit = function (text: string, config?: MermaidConfig): Merma if (Array.isArray(inits)) { const args = inits.map((init) => init.args); - directiveSanitizer(args); + sanitizeDirective(args); results = assignWithDepth(results, [...args]); } else { @@ -842,67 +842,62 @@ export const entityDecode = function (html: string): string { * * @param args - Directive's JSON */ -export const directiveSanitizer = (args: any) => { - log.debug('directiveSanitizer called with', args); - if (typeof args === 'object') { - // check for array - if (args.length) { - args.forEach((arg) => directiveSanitizer(arg)); - } else { - // This is an object - Object.keys(args).forEach((key) => { - log.debug('Checking key', key); - if (key.startsWith('__')) { - log.debug('sanitize deleting __ option', key); - delete args[key]; - } +export const sanitizeDirective = (args: unknown): void => { + log.debug('sanitizeDirective called with', args); - if (key.includes('proto')) { - log.debug('sanitize deleting proto option', key); - delete args[key]; - } + // Return if not an object + if (typeof args !== 'object') { + return; + } - if (key.includes('constr')) { - log.debug('sanitize deleting constr option', key); - delete args[key]; - } + // Sanitize each element if an array + if (Array.isArray(args)) { + args.forEach((arg) => sanitizeDirective(arg)); + return; + } - if (key.includes('themeCSS')) { - log.debug('sanitizing themeCss option'); - args[key] = sanitizeCss(args[key]); - } - if (key.includes('fontFamily')) { - log.debug('sanitizing fontFamily option'); - args[key] = sanitizeCss(args[key]); - } - if (key.includes('altFontFamily')) { - log.debug('sanitizing altFontFamily option'); - args[key] = sanitizeCss(args[key]); - } - if (!configKeys.includes(key)) { - log.debug('sanitize deleting option', key); - delete args[key]; - } else { - if (typeof args[key] === 'object') { - log.debug('sanitize deleting object', key); - directiveSanitizer(args[key]); - } - } - }); + // Sanitize each key if an object + for (const key of Object.keys(args)) { + log.debug('Checking key', key); + if ( + key.startsWith('__') || + key.includes('proto') || + key.includes('constr') || + !configKeys.has(key) + ) { + log.debug('sanitize deleting key: ', key); + delete args[key]; + continue; + } + + // Recurse if an object + if (typeof args[key] === 'object') { + log.debug('sanitizing object', key); + sanitizeDirective(args[key]); + continue; + } + + const cssMatchers = ['themeCSS', 'fontFamily', 'altFontFamily']; + for (const cssKey of cssMatchers) { + if (key.includes(cssKey)) { + log.debug('sanitizing css option', key); + args[key] = sanitizeCss(args[key]); + } } } + if (args.themeVariables) { - const kArr = Object.keys(args.themeVariables); - for (const k of kArr) { + for (const k of Object.keys(args.themeVariables)) { const val = args.themeVariables[k]; - if (val && val.match && !val.match(/^[\d "#%(),.;A-Za-z]+$/)) { + if (val?.match && !val.match(/^[\d "#%(),.;A-Za-z]+$/)) { args.themeVariables[k] = ''; } } } log.debug('After sanitization', args); }; -export const sanitizeCss = (str) => { + +export const sanitizeCss = (str: string): string => { let startCnt = 0; let endCnt = 0; @@ -1019,8 +1014,8 @@ export default { random, runFunc, entityDecode, - initIdGenerator: initIdGenerator, - directiveSanitizer, + initIdGenerator, + sanitizeDirective, sanitizeCss, insertTitle, parseFontSize, From f422a66dde10ccbfd4716c4e62801d17a9679ea2 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 10:17:55 +0530 Subject: [PATCH 504/595] refactor: Move `sanitizeDirective` into `addDirective` --- packages/mermaid/src/config.spec.ts | 27 ++++++++++++++++--------- packages/mermaid/src/config.ts | 28 +++++++++----------------- packages/mermaid/src/directiveUtils.ts | 5 ----- packages/mermaid/src/mermaidAPI.ts | 3 +-- packages/mermaid/src/utils.ts | 2 -- 5 files changed, 29 insertions(+), 36 deletions(-) diff --git a/packages/mermaid/src/config.spec.ts b/packages/mermaid/src/config.spec.ts index 457cb82443..8dd4ff33c0 100644 --- a/packages/mermaid/src/config.spec.ts +++ b/packages/mermaid/src/config.spec.ts @@ -1,11 +1,13 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ import * as configApi from './config.js'; +import type { MermaidConfig } from './config.type.js'; -describe('when working with site config', function () { +describe('when working with site config', () => { beforeEach(() => { // Resets the site config to default config configApi.setSiteConfig({}); }); - it('should set site config and config properly', function () { + it('should set site config and config properly', () => { const config_0 = { fontFamily: 'foo-font', fontSize: 150 }; configApi.setSiteConfig(config_0); const config_1 = configApi.getSiteConfig(); @@ -14,19 +16,26 @@ describe('when working with site config', function () { expect(config_1.fontSize).toEqual(config_0.fontSize); expect(config_1).toEqual(config_2); }); - it('should respect secure keys when applying directives', function () { - const config_0 = { + it('should respect secure keys when applying directives', () => { + const config_0: MermaidConfig = { fontFamily: 'foo-font', + securityLevel: 'strict', // can't be changed fontSize: 12345, // can't be changed secure: [...configApi.defaultConfig.secure!, 'fontSize'], }; configApi.setSiteConfig(config_0); - const directive = { fontFamily: 'baf', fontSize: 54321 /* fontSize shouldn't be changed */ }; - const cfg = configApi.updateCurrentConfig(config_0, [directive]); + const directive: MermaidConfig = { + fontFamily: 'baf', + // fontSize and securityLevel shouldn't be changed + fontSize: 54321, + securityLevel: 'loose', + }; + const cfg: MermaidConfig = configApi.updateCurrentConfig(config_0, [directive]); expect(cfg.fontFamily).toEqual(directive.fontFamily); expect(cfg.fontSize).toBe(config_0.fontSize); + expect(cfg.securityLevel).toBe(config_0.securityLevel); }); - it('should allow setting partial options', function () { + it('should allow setting partial options', () => { const defaultConfig = configApi.getConfig(); configApi.setConfig({ @@ -42,7 +51,7 @@ describe('when working with site config', function () { updatedConfig.quadrantChart!.chartWidth ); }); - it('should set reset config properly', function () { + it('should set reset config properly', () => { const config_0 = { fontFamily: 'foo-font', fontSize: 150 }; configApi.setSiteConfig(config_0); const config_1 = { fontFamily: 'baf' }; @@ -55,7 +64,7 @@ describe('when working with site config', function () { const config_4 = configApi.getSiteConfig(); expect(config_4.fontFamily).toEqual(config_0.fontFamily); }); - it('should set global reset config properly', function () { + it('should set global reset config properly', () => { const config_0 = { fontFamily: 'foo-font', fontSize: 150 }; configApi.setSiteConfig(config_0); const config_1 = configApi.getSiteConfig(); diff --git a/packages/mermaid/src/config.ts b/packages/mermaid/src/config.ts index e006638275..c426e9122a 100644 --- a/packages/mermaid/src/config.ts +++ b/packages/mermaid/src/config.ts @@ -3,15 +3,16 @@ import { log } from './logger.js'; import theme from './themes/index.js'; import config from './defaultConfig.js'; import type { MermaidConfig } from './config.type.js'; +import { sanitizeDirective } from './utils.js'; export const defaultConfig: MermaidConfig = Object.freeze(config); let siteConfig: MermaidConfig = assignWithDepth({}, defaultConfig); let configFromInitialize: MermaidConfig; -let directives: any[] = []; +let directives: MermaidConfig[] = []; let currentConfig: MermaidConfig = assignWithDepth({}, defaultConfig); -export const updateCurrentConfig = (siteCfg: MermaidConfig, _directives: any[]) => { +export const updateCurrentConfig = (siteCfg: MermaidConfig, _directives: MermaidConfig[]) => { // start with config being the siteConfig let cfg: MermaidConfig = assignWithDepth({}, siteCfg); // let sCfg = assignWithDepth(defaultConfig, siteConfigDelta); @@ -20,7 +21,6 @@ export const updateCurrentConfig = (siteCfg: MermaidConfig, _directives: any[]) let sumOfDirectives: MermaidConfig = {}; for (const d of _directives) { sanitize(d); - // Apply the data from the directive where the the overrides the themeVariables sumOfDirectives = assignWithDepth(sumOfDirectives, d); } @@ -111,12 +111,6 @@ export const getSiteConfig = (): MermaidConfig => { * @returns The currentConfig merged with the sanitized conf */ export const setConfig = (conf: MermaidConfig): MermaidConfig => { - // sanitize(conf); - // Object.keys(conf).forEach(key => { - // const manipulator = manipulators[key]; - // conf[key] = manipulator ? manipulator(conf[key]) : conf[key]; - // }); - checkConfig(conf); assignWithDepth(currentConfig, conf); @@ -188,16 +182,14 @@ export const sanitize = (options: any) => { * * @param directive - The directive to push in */ -export const addDirective = (directive: any) => { - if (directive.fontFamily) { - if (!directive.themeVariables) { - directive.themeVariables = { fontFamily: directive.fontFamily }; - } else { - if (!directive.themeVariables.fontFamily) { - directive.themeVariables = { fontFamily: directive.fontFamily }; - } - } +export const addDirective = (directive: MermaidConfig) => { + sanitizeDirective(directive); + + // If the directive has a fontFamily, but no themeVariables, add the fontFamily to the themeVariables + if (directive.fontFamily && (!directive.themeVariables || !directive.themeVariables.fontFamily)) { + directive.themeVariables = { fontFamily: directive.fontFamily }; } + directives.push(directive); updateCurrentConfig(siteConfig, directives); }; diff --git a/packages/mermaid/src/directiveUtils.ts b/packages/mermaid/src/directiveUtils.ts index 563856631a..baf628e74c 100644 --- a/packages/mermaid/src/directiveUtils.ts +++ b/packages/mermaid/src/directiveUtils.ts @@ -1,7 +1,5 @@ import * as configApi from './config.js'; - import { log } from './logger.js'; -import { directiveSanitizer } from './utils.js'; let currentDirective: { type?: string; args?: any } | undefined = {}; @@ -60,9 +58,6 @@ const handleDirective = function (p: any, directive: any, type: string): void { delete directive.args[prop]; } }); - log.info('sanitize in handleDirective', directive.args); - directiveSanitizer(directive.args); - log.info('sanitize in handleDirective (done)', directive.args); configApi.addDirective(directive.args); break; } diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index f8a36f88e6..35b251bc7f 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -23,7 +23,7 @@ import { attachFunctions } from './interactionDb.js'; import { log, setLogLevel } from './logger.js'; import getStyles from './styles.js'; import theme from './themes/index.js'; -import utils, { directiveSanitizer } from './utils.js'; +import utils from './utils.js'; import DOMPurify from 'dompurify'; import { MermaidConfig } from './config.type.js'; import { evaluate } from './diagrams/common/common.js'; @@ -388,7 +388,6 @@ const render = async function ( // Add Directives. Must do this before getting the config and before creating the diagram. const graphInit = utils.detectInit(text); if (graphInit) { - directiveSanitizer(graphInit); configApi.addDirective(graphInit); } diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index f054ef29ff..dd574f86a8 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -102,8 +102,6 @@ export const detectInit = function (text: string, config?: MermaidConfig): Merma if (Array.isArray(inits)) { const args = inits.map((init) => init.args); - sanitizeDirective(args); - results = assignWithDepth(results, [...args]); } else { results = inits.args; From 767baa4ec6bd5d478df500b1c77b0e68a1e21794 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 10:18:23 +0530 Subject: [PATCH 505/595] chore: Fix type in assignWithDepth --- packages/mermaid/src/assignWithDepth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/assignWithDepth.ts b/packages/mermaid/src/assignWithDepth.ts index 831825779d..125b6f434a 100644 --- a/packages/mermaid/src/assignWithDepth.ts +++ b/packages/mermaid/src/assignWithDepth.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /** - * assignWithDepth Extends the functionality of {@link ObjectConstructor.assign} with the + * assignWithDepth Extends the functionality of {@link Object.assign} with the * ability to merge arbitrary-depth objects For each key in src with path `k` (recursively) * performs an Object.assign(dst[`k`], src[`k`]) with a slight change from the typical handling of * undefined for dst[`k`]: instead of raising an error, dst[`k`] is auto-initialized to `{}` and From 31c0a0cbab3d59f3e92b16a475e95a22e278550f Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 10:26:41 +0530 Subject: [PATCH 506/595] deps: Update unocss and webpack to address vulnerability. --- packages/mermaid/src/docs/package.json | 4 +- pnpm-lock.yaml | 533 ++++++++++++------------- tests/webpack/package.json | 2 +- 3 files changed, 257 insertions(+), 282 deletions(-) diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index defc980825..a5cb5859c6 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -21,13 +21,13 @@ }, "devDependencies": { "@iconify-json/carbon": "^1.1.16", - "@unocss/reset": "^0.55.0", + "@unocss/reset": "^0.55.2", "@vite-pwa/vitepress": "^0.2.0", "@vitejs/plugin-vue": "^4.2.1", "fast-glob": "^3.2.12", "https-localhost": "^4.7.1", "pathe": "^1.1.0", - "unocss": "^0.55.0", + "unocss": "^0.55.2", "unplugin-vue-components": "^0.25.0", "vite": "^4.3.9", "vite-plugin-pwa": "^0.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d30b49a73d..8dc7ec8462 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,7 +22,7 @@ importers: version: 6.31.1 '@cypress/code-coverage': specifier: ^3.10.7 - version: 3.10.7(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.75.0) + version: 3.10.7(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.88.2) '@rollup/plugin-typescript': specifier: ^11.1.1 version: 11.1.1(typescript@5.1.3) @@ -442,8 +442,8 @@ importers: specifier: ^1.1.16 version: 1.1.16 '@unocss/reset': - specifier: ^0.55.0 - version: 0.55.0 + specifier: ^0.55.2 + version: 0.55.2 '@vite-pwa/vitepress': specifier: ^0.2.0 version: 0.2.0(vite-plugin-pwa@0.16.0) @@ -460,8 +460,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 unocss: - specifier: ^0.55.0 - version: 0.55.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) + specifier: ^0.55.2 + version: 0.55.2(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) unplugin-vue-components: specifier: ^0.25.0 version: 0.25.0(rollup@2.79.1)(vue@3.3.4) @@ -494,8 +494,8 @@ importers: specifier: ^1.1.16 version: 1.1.16 '@unocss/reset': - specifier: ^0.55.0 - version: 0.55.0 + specifier: ^0.55.2 + version: 0.55.2 '@vite-pwa/vitepress': specifier: ^0.2.0 version: 0.2.0(vite-plugin-pwa@0.16.0) @@ -512,8 +512,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 unocss: - specifier: ^0.55.0 - version: 0.55.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) + specifier: ^0.55.2 + version: 0.55.2(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9) unplugin-vue-components: specifier: ^0.25.0 version: 0.25.0(rollup@2.79.1)(vue@3.3.4) @@ -540,14 +540,14 @@ importers: version: link:../../packages/mermaid devDependencies: webpack: - specifier: ^5.74.0 - version: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) + specifier: ^5.88.2 + version: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 - version: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + version: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) webpack-dev-server: specifier: ^4.11.1 - version: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) + version: 4.11.1(webpack-cli@4.10.0)(webpack@5.88.2) packages: @@ -2788,12 +2788,12 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@cypress/code-coverage@3.10.7(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.75.0): + /@cypress/code-coverage@3.10.7(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(cypress@12.10.0)(webpack@5.88.2): resolution: {integrity: sha512-kQFB8GemDAAk6JBINsR9MLEgCw2AKb3FcdHQjIJ3KV4ZER6ZF0NGdO8SRj5oTVp28oqfOab4cgoBdecRiOE3qA==} peerDependencies: cypress: '*' dependencies: - '@cypress/webpack-preprocessor': 5.17.1(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(webpack@5.75.0) + '@cypress/webpack-preprocessor': 5.17.1(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(webpack@5.88.2) chalk: 4.1.2 cypress: 12.10.0 dayjs: 1.10.7 @@ -2835,7 +2835,7 @@ packages: uuid: 8.3.2 dev: true - /@cypress/webpack-preprocessor@5.17.1(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(webpack@5.75.0): + /@cypress/webpack-preprocessor@5.17.1(@babel/core@7.12.3)(@babel/preset-env@7.20.2)(babel-loader@9.1.2)(webpack@5.88.2): resolution: {integrity: sha512-FE/e8ikPc8z4EVopJCaior3RGy0jd2q9Xcp5NtiwNG4XnLfEnUFTZlAGwXe75sEh4fNMPrBJW1KIz77PX5vGAw==} peerDependencies: '@babel/core': ^7.0.1 @@ -2845,11 +2845,11 @@ packages: dependencies: '@babel/core': 7.12.3 '@babel/preset-env': 7.20.2(@babel/core@7.12.3) - babel-loader: 9.1.2(@babel/core@7.12.3)(webpack@5.75.0) + babel-loader: 9.1.2(@babel/core@7.12.3)(webpack@5.88.2) bluebird: 3.7.1 debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -3898,8 +3898,8 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.17 @@ -4076,6 +4076,21 @@ packages: rollup: 2.79.1 dev: true + /@rollup/pluginutils@5.0.3(rollup@2.79.1): + resolution: {integrity: sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.0 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -4457,10 +4472,6 @@ packages: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} dev: true - /@types/estree@0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: true - /@types/estree@1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true @@ -5008,32 +5019,32 @@ packages: eslint-visitor-keys: 3.4.0 dev: true - /@unocss/astro@0.55.0(rollup@2.79.1)(vite@4.3.9): - resolution: {integrity: sha512-Qqk8zONPBBigEcUOGhEwBPIQmWnQGpjpQrSdpjs86BphKbQcqWHES1fQA83Fk2tpZ08zo0zAPDJ8VhfR+c+yqg==} + /@unocss/astro@0.55.2(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-cSzBKPEveZZQDZp5bq0UlL8CVvzB/1LsgZmZufxi9oMMjMJYqzfTkKg5z65GcP82Xp5c0N3KKkl/R6I+/7Iwvw==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 peerDependenciesMeta: vite: optional: true dependencies: - '@unocss/core': 0.55.0 - '@unocss/reset': 0.55.0 - '@unocss/vite': 0.55.0(rollup@2.79.1)(vite@4.3.9) + '@unocss/core': 0.55.2 + '@unocss/reset': 0.55.2 + '@unocss/vite': 0.55.2(rollup@2.79.1)(vite@4.3.9) vite: 4.3.9(@types/node@18.16.0) transitivePeerDependencies: - rollup dev: true - /@unocss/cli@0.55.0(rollup@2.79.1): - resolution: {integrity: sha512-K8PR4UydtTfT8rMynDcNQKk1WWI97312kZYjBLHUlrJkNbSgcmpU3wfREIqvCSgPg61ttZAgE5uI6omf8FudtA==} + /@unocss/cli@0.55.2(rollup@2.79.1): + resolution: {integrity: sha512-ZJ8aBhm+3WjGCA5HcOQ4C3mbtJwkgMX2gpjjJ0MPh/iZOz3+/zmHlrXJCS3jIFouRYSwxxanWdrGUuLIQLqPhQ==} engines: {node: '>=14'} hasBin: true dependencies: '@ampproject/remapping': 2.2.1 - '@rollup/pluginutils': 5.0.2(rollup@2.79.1) - '@unocss/config': 0.55.0 - '@unocss/core': 0.55.0 - '@unocss/preset-uno': 0.55.0 + '@rollup/pluginutils': 5.0.3(rollup@2.79.1) + '@unocss/config': 0.55.2 + '@unocss/core': 0.55.2 + '@unocss/preset-uno': 0.55.2 cac: 6.7.14 chokidar: 3.5.3 colorette: 2.0.20 @@ -5046,154 +5057,154 @@ packages: - rollup dev: true - /@unocss/config@0.55.0: - resolution: {integrity: sha512-N1o49aqqMP8UTmFZKsqN+CZFxoiUbatTYdPixCGErI5H6jA0VByVU7RI3Dr+Lk3PTOxbmZUunaDaWZP3iT4X5w==} + /@unocss/config@0.55.2: + resolution: {integrity: sha512-RYDv9QzhUeBz9BY+Pty0xc9vk/m4LGBNMiBghcItW6zXN554JbSuoPD55DmnvO2iXrIYujBZdB/Kob6GLCZpqw==} engines: {node: '>=14'} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 unconfig: 0.3.10 dev: true - /@unocss/core@0.55.0: - resolution: {integrity: sha512-TcTugpuhsv6OwMsP3iFIG8FVc9N5JzkojIGNAKF8I2WBftZ//3QcpEHiHc1mH3MlPYfJgUvCcT6/Gad55qmHzg==} + /@unocss/core@0.55.2: + resolution: {integrity: sha512-ZLEES8RDgWoK/vttUzl3PM2bZqL3HvhLgj8xdDa09Xw+JiTlR4c66s+hLn52oCoJTnT9lGsD2j7tTGN9ToSiTA==} dev: true - /@unocss/extractor-arbitrary-variants@0.55.0: - resolution: {integrity: sha512-FCel+gJ3N8C/361yQ3gYTmbCjX3DXQ+LdxBiAawapbtTA4eXw55/f7cpiiWcHoouCRrWIEMOQN5DskAJvmMaTw==} + /@unocss/extractor-arbitrary-variants@0.55.2: + resolution: {integrity: sha512-mHEoFx+ITe3OgFoIUhkCQxRgUjvOJeHtI1Z3Sm8NDMy2vTqOlkSf7NLWEyFfQsSFYqpWGTkaW1XiMZujGMoB/g==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 dev: true - /@unocss/inspector@0.55.0: - resolution: {integrity: sha512-wIkypLsBUA76A9cpyf/VtbVU7TLJO9HETEVMZytxEyVpq4KVNJBwNLUGWQ07IOc0oRTX+HJKiQK9/bLnIYMCHA==} + /@unocss/inspector@0.55.2: + resolution: {integrity: sha512-AMNZ7FsBFhQCMuAQugCk7d+3uoHDN2VFwCzSxk0ITgG51J90jfVgAo9mJf28W/AM4g0qVHScveJDPKzA+2o+Vg==} dependencies: gzip-size: 6.0.0 sirv: 2.0.3 dev: true - /@unocss/postcss@0.55.0(postcss@8.4.27): - resolution: {integrity: sha512-qytqO8riNLpy1m6qVfISVHw3dwNRHgpxcUaufSN7P8lgsbOimwh2nRE35f/HoKS1VV+5JVsVaHmUFQVxwiW6cw==} + /@unocss/postcss@0.55.2(postcss@8.4.27): + resolution: {integrity: sha512-HJLGINNlQ3DGL9zRGuctX+mOVW2w7o8Wj89v3/2qTcqXBDpwfn1+KlxSjU9rsEPdE4Ur3MIcVXcJC0wz4+EwEA==} engines: {node: '>=14'} peerDependencies: postcss: ^8.4.21 dependencies: - '@unocss/config': 0.55.0 - '@unocss/core': 0.55.0 + '@unocss/config': 0.55.2 + '@unocss/core': 0.55.2 css-tree: 2.3.1 fast-glob: 3.3.1 magic-string: 0.30.2 postcss: 8.4.27 dev: true - /@unocss/preset-attributify@0.55.0: - resolution: {integrity: sha512-AbqoamJLsFqJih1MMyxEslLScWSpOdlTbF9R+gSnrWwkGZDuZszcyTDbXrhCPWPUkihR7NY9XQSKxUkTb6MJJg==} + /@unocss/preset-attributify@0.55.2: + resolution: {integrity: sha512-jn5ulsKpAipsX3Gf2/iSZydgI0eP1ENeoS6rrNBL8zl1mRihnZYFegS75rGYjO6sEfEHrhkBiSHOw7Uv5KtLbw==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 dev: true - /@unocss/preset-icons@0.55.0: - resolution: {integrity: sha512-BeseXUz2WFRztLtfblGhpFBJkgKi8k7tKPyEx/QX2I/xhQNsXqfWqeiCEVLxrEI3HxXOZPV1G4idCCbBiZQ3ww==} + /@unocss/preset-icons@0.55.2: + resolution: {integrity: sha512-NK9LcTlBZv6zO8Qbu+VA9HblzYc5ebuFwaQMfQcYj2Z6dBOT27Ki41LY1qjEXzzMPXb44Q14Rlk0tJc8LtJIpQ==} dependencies: '@iconify/utils': 2.1.7 - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 ofetch: 1.1.1 transitivePeerDependencies: - supports-color dev: true - /@unocss/preset-mini@0.55.0: - resolution: {integrity: sha512-zAMLmpCBXE36CDCrMtvxNp7lN9mk5QpArPpLekR3lPZ7NTAYSxHkieCJ0TryeOYWlt1sBdrOFE8X0cQCyG96Zg==} + /@unocss/preset-mini@0.55.2: + resolution: {integrity: sha512-jwUsrwtPwMvFVJUP+FVFjq+sp+xQPyFLRPSb89ZI34F1a3EwJ2wioDICLqWjOjY7zei9UgtSY0owBM9vwxw/kg==} dependencies: - '@unocss/core': 0.55.0 - '@unocss/extractor-arbitrary-variants': 0.55.0 + '@unocss/core': 0.55.2 + '@unocss/extractor-arbitrary-variants': 0.55.2 dev: true - /@unocss/preset-tagify@0.55.0: - resolution: {integrity: sha512-crvJAZpG2ge9Lq51vpWANiB3BKv8Vs8sjplwRfUVRCYMiN7ZNzq9bNzUwTXhJXmRJ4LVjTSFciKPQR7fCjUScA==} + /@unocss/preset-tagify@0.55.2: + resolution: {integrity: sha512-m8/9wBtUQSwnwsLANhUOc7sukF8ReHJ7ZC6fCfTozRMOhwu+bDcf9G7pguXdNC4DdZXI15cvbZzkYF2l733qUw==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 dev: true - /@unocss/preset-typography@0.55.0: - resolution: {integrity: sha512-M4fJUEzkBqjxEUIDbwoWb00hjPbpwZKDOcB81S0F+xE3SVu1pQj8KgymhxaJvz+FxGZRajnJJ9esaGPIrzG2gQ==} + /@unocss/preset-typography@0.55.2: + resolution: {integrity: sha512-Y4JEihpKPDlXWXxnnMZbQclqZ4+DUD8RVFk46ERe9CLNEYkFObd4LG7yfSurr/C01zuU/GhEMyOWqSGsSyCxKg==} dependencies: - '@unocss/core': 0.55.0 - '@unocss/preset-mini': 0.55.0 + '@unocss/core': 0.55.2 + '@unocss/preset-mini': 0.55.2 dev: true - /@unocss/preset-uno@0.55.0: - resolution: {integrity: sha512-iYGdE/MQLAvpQkyQ8f3aolC9NK9NtrG87LfQmiKu/RpzjghDlTY8VTuWIDcdIk80zTtOxRtitLqGEsoDl8WnuA==} + /@unocss/preset-uno@0.55.2: + resolution: {integrity: sha512-8VJXC6+f5YBjUaTkf+EGAembDYMleb0zjkb4hwXxjPIsO+mXixdZC2icCiN/12DLlwH4FzEvObLKns3CGEAZZw==} dependencies: - '@unocss/core': 0.55.0 - '@unocss/preset-mini': 0.55.0 - '@unocss/preset-wind': 0.55.0 + '@unocss/core': 0.55.2 + '@unocss/preset-mini': 0.55.2 + '@unocss/preset-wind': 0.55.2 dev: true - /@unocss/preset-web-fonts@0.55.0: - resolution: {integrity: sha512-nFA5q0WinD/z7Iqv3uJQ8sTK7mQf18qbcFKmgWZ+QZXdI/wACOfExd6futsXj5EdACJwsEixYJe4DURTsD5XtA==} + /@unocss/preset-web-fonts@0.55.2: + resolution: {integrity: sha512-kRnrfZPDkU2r9tp507rsh4kwhUzZ76XBTZLmElYm8tlP6HZzIHcFF8fdW15J4nh81b/IGw8ZOS7aQmqtHu3A8A==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 ofetch: 1.1.1 dev: true - /@unocss/preset-wind@0.55.0: - resolution: {integrity: sha512-H9vNXdEJVQx1UO367V3RInAUj4qrsPCXm914RNC4D7qojOuPQlipW0YD5WFklcXeI/k0f1B30VjDYGZhV0jykg==} + /@unocss/preset-wind@0.55.2: + resolution: {integrity: sha512-th/aOokb10ApaiVLNI093mvko4XryJ70oEhzz4tHdSuhnQWf5eY7+k7y9EEYFz8i1OOrKuer0HzUV27llZaufw==} dependencies: - '@unocss/core': 0.55.0 - '@unocss/preset-mini': 0.55.0 + '@unocss/core': 0.55.2 + '@unocss/preset-mini': 0.55.2 dev: true - /@unocss/reset@0.55.0: - resolution: {integrity: sha512-TzpcOCIr16IbFxQ4vrSfEV+A8k0N4mJkhl7J3SZfAxBpNDBKAWDB6VBW9iEQY5aBYDLN3wRx1LskgEoubqBCPQ==} + /@unocss/reset@0.55.2: + resolution: {integrity: sha512-paInTGIhtI96fcJGZWbkPLW/7qiTlHxSbEIs1HGHcbf3WbwNuKrJUvKlQAhUs2HILNKhvsTXQl05Os8gtinLEA==} dev: true - /@unocss/scope@0.55.0: - resolution: {integrity: sha512-44xgHoklh2BWWuOkA0ZL1qgr4t/DGnynj3UI8K8YP+PClFFMZ/T+kfhsLBDOrS2a4ytzgh17cTGhjAc3cTwiEA==} + /@unocss/scope@0.55.2: + resolution: {integrity: sha512-o1b86ejgaFDqfC712mUZqZDQNf6o1xDzm6+bgHySdiltR8Quo6l8RcoZjZrCvEogtPbko4/XJ374t1NQMUQf4g==} dev: true - /@unocss/transformer-attributify-jsx-babel@0.55.0: - resolution: {integrity: sha512-gsPuD56gNw47AFgOmdpqT9+gdisLXKnPccF4ozZoqGOv3Hy2MPOc+Dkwk7qkDzzSdC39G5Aq09z8X9R2vU64XQ==} + /@unocss/transformer-attributify-jsx-babel@0.55.2: + resolution: {integrity: sha512-pmfF546i8pKfMNeYZOJz2UzbuUwj0v7GqcoP5fClyRUzBMUfXdJwBSdFaYkdWR5Q/O1sv+pI0S8r/G9T7QuldA==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 dev: true - /@unocss/transformer-attributify-jsx@0.55.0: - resolution: {integrity: sha512-17/4I2Uqj44JJ4iv3e/mBH1DsWvyVbbbA9JivS/iBPferdFTPtt4Buddhm7bkx1tE86KYZcokVZ8N5RA2zu2UQ==} + /@unocss/transformer-attributify-jsx@0.55.2: + resolution: {integrity: sha512-WerdaNagorTtYDvbhlZEmeuBrQ5lmPE0vG9r20bPR/vLy9UmbIFPpzt6b/hSLqOUnZnaEfbrpNUlpBZgUXpvsg==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 dev: true - /@unocss/transformer-compile-class@0.55.0: - resolution: {integrity: sha512-aH2SWXqOGJAEuNS1S/fIfs0gFwnakxgG83PCS40uNbEiLv/iG0HuALaQbVvyWHo3O7xLoMa7os9p72Q2amaVQw==} + /@unocss/transformer-compile-class@0.55.2: + resolution: {integrity: sha512-zKeJtAirFrgj8TheKplgdKrPV9hPN3i2gEy/aQ+CrHHImcQtxZ1FJzmJT1yV77MOXOdeRJOhiePNOe2TE1A4tw==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 dev: true - /@unocss/transformer-directives@0.55.0: - resolution: {integrity: sha512-bWfAOqQxzy5vIul/jgXN2b0APAk9tWKeTN9Rh4FWvz+dI0P7cBc3rHVEC5qM3i9xwYObtjQcNZjEfJpyeapnzg==} + /@unocss/transformer-directives@0.55.2: + resolution: {integrity: sha512-IJKL5clOiv2RjvHYr4xumS4eFScPsi3Vg4vGugsmn43PZ1FsApp8UElHfhuhBsEEiffnsgTD+N5u/EiPpyI0Gw==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 css-tree: 2.3.1 dev: true - /@unocss/transformer-variant-group@0.55.0: - resolution: {integrity: sha512-0VSvQpEmN8/Y+CfVMhL1+u1+FjmDFtviqKz8aaLFBapC/hnxbkAQTZRVv7mFNvBhBVUHXZOz7LASR4q9RtIeVA==} + /@unocss/transformer-variant-group@0.55.2: + resolution: {integrity: sha512-BIAigftn+mfUeQT7sPzJNgvvbrmLj0gmYmeK4U7/8NxUuOuC0ROTNSw+MKU7yDiPYHqb1kxVZ47LZ3GdUcNPRA==} dependencies: - '@unocss/core': 0.55.0 + '@unocss/core': 0.55.2 dev: true - /@unocss/vite@0.55.0(rollup@2.79.1)(vite@4.3.9): - resolution: {integrity: sha512-qUOqJzSnztCQFXOCNOCqpwwziVMmygXmdbuaqNAmkAg2EzoMSacQKzmLIj49UU0l+iykf2mDh8DmQxpnEU2JSQ==} + /@unocss/vite@0.55.2(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-JEyEaJt8D+Ed3Z8GDQ0hMWqKsB47/DoS+aPzDoXSIVozgi8seHtfSChBOBUSgcCrozfBVp42YHbYYyloDkb2Yw==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 dependencies: '@ampproject/remapping': 2.2.1 - '@rollup/pluginutils': 5.0.2(rollup@2.79.1) - '@unocss/config': 0.55.0 - '@unocss/core': 0.55.0 - '@unocss/inspector': 0.55.0 - '@unocss/scope': 0.55.0 - '@unocss/transformer-directives': 0.55.0 + '@rollup/pluginutils': 5.0.3(rollup@2.79.1) + '@unocss/config': 0.55.2 + '@unocss/core': 0.55.2 + '@unocss/inspector': 0.55.2 + '@unocss/scope': 0.55.2 + '@unocss/transformer-directives': 0.55.2 chokidar: 3.5.3 fast-glob: 3.3.1 magic-string: 0.30.2 @@ -5546,120 +5557,120 @@ packages: - typescript dev: true - /@webassemblyjs/ast@1.11.1: - resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + /@webassemblyjs/ast@1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: - '@webassemblyjs/helper-numbers': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 dev: true - /@webassemblyjs/floating-point-hex-parser@1.11.1: - resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} dev: true - /@webassemblyjs/helper-api-error@1.11.1: - resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} dev: true - /@webassemblyjs/helper-buffer@1.11.1: - resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} + /@webassemblyjs/helper-buffer@1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} dev: true - /@webassemblyjs/helper-numbers@1.11.1: - resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/helper-wasm-bytecode@1.11.1: - resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} dev: true - /@webassemblyjs/helper-wasm-section@1.11.1: - resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + /@webassemblyjs/helper-wasm-section@1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 dev: true - /@webassemblyjs/ieee754@1.11.1: - resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 dev: true - /@webassemblyjs/leb128@1.11.1: - resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 dev: true - /@webassemblyjs/utf8@1.11.1: - resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} dev: true - /@webassemblyjs/wasm-edit@1.11.1: - resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + /@webassemblyjs/wasm-edit@1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/helper-wasm-section': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-opt': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - '@webassemblyjs/wast-printer': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 dev: true - /@webassemblyjs/wasm-gen@1.11.1: - resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + /@webassemblyjs/wasm-gen@1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-opt@1.11.1: - resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + /@webassemblyjs/wasm-opt@1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 dev: true - /@webassemblyjs/wasm-parser@1.11.1: - resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + /@webassemblyjs/wasm-parser@1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wast-printer@1.11.1: - resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + /@webassemblyjs/wast-printer@1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} dependencies: - '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.75.0): + /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.88.2): resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) dev: true /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): @@ -5668,7 +5679,7 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.8.1 - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) dev: true /@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.11.1): @@ -5680,8 +5691,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) - webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) + webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.88.2) dev: true /@xtuc/ieee754@1.2.0: @@ -5763,12 +5774,12 @@ packages: acorn-walk: 7.2.0 dev: true - /acorn-import-assertions@1.8.0(acorn@8.8.0): - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + /acorn-import-assertions@1.9.0(acorn@8.10.0): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.0 + acorn: 8.10.0 dev: true /acorn-jsx@5.3.2(acorn@8.10.0): @@ -5800,12 +5811,6 @@ packages: hasBin: true dev: true - /acorn@8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -6161,7 +6166,7 @@ packages: - supports-color dev: true - /babel-loader@9.1.2(@babel/core@7.12.3)(webpack@5.75.0): + /babel-loader@9.1.2(@babel/core@7.12.3)(webpack@5.88.2): resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -6171,7 +6176,7 @@ packages: '@babel/core': 7.12.3 find-cache-dir: 3.3.2 schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) dev: true /babel-plugin-istanbul@6.1.1: @@ -6388,17 +6393,6 @@ packages: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} dev: true - /browserslist@4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001431 - electron-to-chromium: 1.4.284 - node-releases: 2.0.6 - update-browserslist-db: 1.0.10(browserslist@4.21.4) - dev: true - /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -6546,10 +6540,6 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001431: - resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} - dev: true - /caniuse-lite@1.0.30001457: resolution: {integrity: sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==} dev: true @@ -8100,8 +8090,8 @@ packages: once: 1.4.0 dev: true - /enhanced-resolve@5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.10 @@ -8176,8 +8166,8 @@ packages: which-typed-array: 1.1.9 dev: true - /es-module-lexer@0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + /es-module-lexer@1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} dev: true /es-set-tostringtag@2.0.1: @@ -12232,10 +12222,6 @@ packages: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true - /node-releases@2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} - dev: true - /nomnom@1.5.2: resolution: {integrity: sha512-fiVbT7BqxiQqjlR9U3FDGOSERFCKoXVCdxV2FwZuNN7/cmJ42iQx35nUFOAFDcyvemu9Adp+IlsCGlKQYLmBKw==} deprecated: Package no longer supported. Contact support@npmjs.com for more info. @@ -13501,7 +13487,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.15.1 + terser: 5.19.2 dev: true /rollup-plugin-visualizer@5.9.2: @@ -13611,8 +13597,8 @@ packages: xmlchars: 2.2.0 dev: true - /schema-utils@3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 @@ -13723,8 +13709,8 @@ packages: randombytes: 2.1.0 dev: true - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + /serialize-javascript@6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 dev: true @@ -14421,8 +14407,8 @@ packages: iterm2-version: 4.2.0 dev: true - /terser-webpack-plugin@5.3.6(esbuild@0.19.0)(webpack@5.75.0): - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin@5.3.9(esbuild@0.19.0)(webpack@5.88.2): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -14440,18 +14426,18 @@ packages: '@jridgewell/trace-mapping': 0.3.17 esbuild: 0.19.0 jest-worker: 27.5.1 - schema-utils: 3.1.1 - serialize-javascript: 6.0.0 - terser: 5.15.1 - webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.19.2 + webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) dev: true - /terser@5.15.1: - resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} + /terser@5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.2 + '@jridgewell/source-map': 0.3.5 acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -15005,11 +14991,11 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unocss@0.55.0(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9): - resolution: {integrity: sha512-mjtN/2Dr495swOA/u/UaA0keCtv8/vFc114pd0D4XzpbK2/nKNB9Got/lmhJp8fxblV+oNtLkD0PaHtpAvSpsw==} + /unocss@0.55.2(postcss@8.4.27)(rollup@2.79.1)(vite@4.3.9): + resolution: {integrity: sha512-+C8tFUFIEv40DpEhjA/Yv+RB5HZumkWiON2OlPyrbzapQ8x60F9TUwUS3pw7MlpxI6GfTCYwXKEE6DTGCm1SLA==} engines: {node: '>=14'} peerDependencies: - '@unocss/webpack': 0.55.0 + '@unocss/webpack': 0.55.2 vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 peerDependenciesMeta: '@unocss/webpack': @@ -15017,26 +15003,26 @@ packages: vite: optional: true dependencies: - '@unocss/astro': 0.55.0(rollup@2.79.1)(vite@4.3.9) - '@unocss/cli': 0.55.0(rollup@2.79.1) - '@unocss/core': 0.55.0 - '@unocss/extractor-arbitrary-variants': 0.55.0 - '@unocss/postcss': 0.55.0(postcss@8.4.27) - '@unocss/preset-attributify': 0.55.0 - '@unocss/preset-icons': 0.55.0 - '@unocss/preset-mini': 0.55.0 - '@unocss/preset-tagify': 0.55.0 - '@unocss/preset-typography': 0.55.0 - '@unocss/preset-uno': 0.55.0 - '@unocss/preset-web-fonts': 0.55.0 - '@unocss/preset-wind': 0.55.0 - '@unocss/reset': 0.55.0 - '@unocss/transformer-attributify-jsx': 0.55.0 - '@unocss/transformer-attributify-jsx-babel': 0.55.0 - '@unocss/transformer-compile-class': 0.55.0 - '@unocss/transformer-directives': 0.55.0 - '@unocss/transformer-variant-group': 0.55.0 - '@unocss/vite': 0.55.0(rollup@2.79.1)(vite@4.3.9) + '@unocss/astro': 0.55.2(rollup@2.79.1)(vite@4.3.9) + '@unocss/cli': 0.55.2(rollup@2.79.1) + '@unocss/core': 0.55.2 + '@unocss/extractor-arbitrary-variants': 0.55.2 + '@unocss/postcss': 0.55.2(postcss@8.4.27) + '@unocss/preset-attributify': 0.55.2 + '@unocss/preset-icons': 0.55.2 + '@unocss/preset-mini': 0.55.2 + '@unocss/preset-tagify': 0.55.2 + '@unocss/preset-typography': 0.55.2 + '@unocss/preset-uno': 0.55.2 + '@unocss/preset-web-fonts': 0.55.2 + '@unocss/preset-wind': 0.55.2 + '@unocss/reset': 0.55.2 + '@unocss/transformer-attributify-jsx': 0.55.2 + '@unocss/transformer-attributify-jsx-babel': 0.55.2 + '@unocss/transformer-compile-class': 0.55.2 + '@unocss/transformer-directives': 0.55.2 + '@unocss/transformer-variant-group': 0.55.2 + '@unocss/vite': 0.55.2(rollup@2.79.1)(vite@4.3.9) vite: 4.3.9(@types/node@18.16.0) transitivePeerDependencies: - postcss @@ -15097,17 +15083,6 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.4): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.4 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.5): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true @@ -15658,7 +15633,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-cli@4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0): + /webpack-cli@4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2): resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} engines: {node: '>=10.13.0'} hasBin: true @@ -15679,7 +15654,7 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.75.0) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.88.2) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.11.1) colorette: 2.0.19 @@ -15689,12 +15664,12 @@ packages: import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) - webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.75.0) + webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack-dev-server: 4.11.1(webpack-cli@4.10.0)(webpack@5.88.2) webpack-merge: 5.8.0 dev: true - /webpack-dev-middleware@5.3.3(webpack@5.75.0): + /webpack-dev-middleware@5.3.3(webpack@5.88.2): resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -15705,10 +15680,10 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) dev: true - /webpack-dev-server@4.11.1(webpack-cli@4.10.0)(webpack@5.75.0): + /webpack-dev-server@4.11.1(webpack-cli@4.10.0)(webpack@5.88.2): resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} engines: {node: '>= 12.13.0'} hasBin: true @@ -15746,9 +15721,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) - webpack-dev-middleware: 5.3.3(webpack@5.75.0) + webpack: 5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) + webpack-dev-middleware: 5.3.3(webpack@5.88.2) ws: 8.9.0 transitivePeerDependencies: - bufferutil @@ -15774,8 +15749,8 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true - /webpack@5.75.0(esbuild@0.19.0)(webpack-cli@4.10.0): - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack@5.88.2(esbuild@0.19.0)(webpack-cli@4.10.0): + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -15785,16 +15760,16 @@ packages: optional: true dependencies: '@types/eslint-scope': 3.7.4 - '@types/estree': 0.0.51 - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/wasm-edit': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.8.0 - acorn-import-assertions: 1.8.0(acorn@8.8.0) - browserslist: 4.21.4 + '@types/estree': 1.0.0 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.5 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.10.0 - es-module-lexer: 0.9.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -15803,11 +15778,11 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.1.1 + schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6(esbuild@0.19.0)(webpack@5.75.0) + terser-webpack-plugin: 5.3.9(esbuild@0.19.0)(webpack@5.88.2) watchpack: 2.4.0 - webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.75.0) + webpack-cli: 4.10.0(webpack-dev-server@4.11.1)(webpack@5.88.2) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' diff --git a/tests/webpack/package.json b/tests/webpack/package.json index e518453992..7f7bb5634a 100644 --- a/tests/webpack/package.json +++ b/tests/webpack/package.json @@ -12,7 +12,7 @@ "author": "", "license": "ISC", "devDependencies": { - "webpack": "^5.74.0", + "webpack": "^5.88.2", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.11.1" }, From a6e6c3fb1848bf37a001022324d7035a9f4e885d Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 12:09:38 +0530 Subject: [PATCH 507/595] feat: Add support for config in frontmatter --- .../rendering/conf-and-directives.spec.js | 70 ++++++++++++++++--- packages/mermaid/src/Diagram.ts | 2 +- packages/mermaid/src/config.ts | 7 +- .../src/diagram-api/frontmatter.spec.ts | 22 ++++++ .../mermaid/src/diagram-api/frontmatter.ts | 53 ++++++++------ packages/mermaid/src/mermaidAPI.ts | 8 ++- packages/mermaid/src/utils.ts | 36 ++++++---- 7 files changed, 150 insertions(+), 48 deletions(-) diff --git a/cypress/integration/rendering/conf-and-directives.spec.js b/cypress/integration/rendering/conf-and-directives.spec.js index bc17f62361..ca1fccf495 100644 --- a/cypress/integration/rendering/conf-and-directives.spec.js +++ b/cypress/integration/rendering/conf-and-directives.spec.js @@ -14,7 +14,6 @@ describe('Configuration and directives - nodes should be light blue', () => { `, {} ); - cy.get('svg'); }); it('Settings from initialize - nodes should be green', () => { imgSnapshotTest( @@ -28,7 +27,6 @@ graph TD end `, { theme: 'forest' } ); - cy.get('svg'); }); it('Settings from initialize overriding themeVariable - nodes should be red', () => { imgSnapshotTest( @@ -46,7 +44,6 @@ graph TD `, { theme: 'base', themeVariables: { primaryColor: '#ff0000' }, logLevel: 0 } ); - cy.get('svg'); }); it('Settings from directive - nodes should be grey', () => { imgSnapshotTest( @@ -62,7 +59,24 @@ graph TD `, {} ); - cy.get('svg'); + }); + it('Settings from frontmatter - nodes should be grey', () => { + imgSnapshotTest( + ` +--- +config: + theme: neutral +--- +graph TD + A(Start) --> B[/Another/] + A[/Another/] --> C[End] + subgraph section + B + C + end + `, + {} + ); }); it('Settings from directive overriding theme variable - nodes should be red', () => { @@ -79,7 +93,6 @@ graph TD `, {} ); - cy.get('svg'); }); it('Settings from initialize and directive - nodes should be grey', () => { imgSnapshotTest( @@ -95,7 +108,6 @@ graph TD `, { theme: 'forest' } ); - cy.get('svg'); }); it('Theme from initialize, directive overriding theme variable - nodes should be red', () => { imgSnapshotTest( @@ -111,8 +123,50 @@ graph TD `, { theme: 'base' } ); - cy.get('svg'); }); + it('Theme from initialize, frontmatter overriding theme variable - nodes should be red', () => { + imgSnapshotTest( + ` +--- +config: + theme: base + themeVariables: + primaryColor: '#ff0000' +--- +graph TD + A(Start) --> B[/Another/] + A[/Another/] --> C[End] + subgraph section + B + C + end + `, + { theme: 'forest' } + ); + }); + + it('should render if values are not quoted properly', () => { + // #ff0000 is not quoted properly, and will evaluate to null. + // This test ensures that the rendering still works. + imgSnapshotTest( + `--- +config: + theme: base + themeVariables: + primaryColor: #ff0000 +--- +graph TD + A(Start) --> B[/Another/] + A[/Another/] --> C[End] + subgraph section + B + C + end + `, + { theme: 'forest' } + ); + }); + it('Theme variable from initialize, theme from directive - nodes should be red', () => { imgSnapshotTest( ` @@ -127,13 +181,11 @@ graph TD `, { themeVariables: { primaryColor: '#ff0000' } } ); - cy.get('svg'); }); describe('when rendering several diagrams', () => { it('diagrams should not taint later diagrams', () => { const url = 'http://localhost:9000/theme-directives.html'; cy.visit(url); - cy.get('svg'); cy.matchImageSnapshot('conf-and-directives.spec-when-rendering-several-diagrams-diagram-1'); }); }); diff --git a/packages/mermaid/src/Diagram.ts b/packages/mermaid/src/Diagram.ts index 13fd3232b5..308e141d03 100644 --- a/packages/mermaid/src/Diagram.ts +++ b/packages/mermaid/src/Diagram.ts @@ -48,7 +48,7 @@ export class Diagram { // extractFrontMatter(). this.parser.parse = (text: string) => - originalParse(cleanupComments(extractFrontMatter(text, this.db))); + originalParse(cleanupComments(extractFrontMatter(text, this.db, configApi.addDirective))); this.parser.parser.yy = this.db; this.init = diagram.init; diff --git a/packages/mermaid/src/config.ts b/packages/mermaid/src/config.ts index c426e9122a..eb24b6268f 100644 --- a/packages/mermaid/src/config.ts +++ b/packages/mermaid/src/config.ts @@ -144,9 +144,12 @@ export const getConfig = (): MermaidConfig => { * @param options - The potential setConfig parameter */ export const sanitize = (options: any) => { + if (!options) { + return; + } // Checking that options are not in the list of excluded options ['secure', ...(siteConfig.secure ?? [])].forEach((key) => { - if (options[key] !== undefined) { + if (Object.hasOwn(options, key)) { // DO NOT attempt to print options[key] within `${}` as a malicious script // can exploit the logger's attempt to stringify the value and execute arbitrary code log.debug(`Denied attempt to modify a secure key ${key}`, options[key]); @@ -156,7 +159,7 @@ export const sanitize = (options: any) => { // Check that there no attempts of prototype pollution Object.keys(options).forEach((key) => { - if (key.indexOf('__') === 0) { + if (key.startsWith('__')) { delete options[key]; } }); diff --git a/packages/mermaid/src/diagram-api/frontmatter.spec.ts b/packages/mermaid/src/diagram-api/frontmatter.spec.ts index ef05c8f149..03d46c300c 100644 --- a/packages/mermaid/src/diagram-api/frontmatter.spec.ts +++ b/packages/mermaid/src/diagram-api/frontmatter.spec.ts @@ -2,8 +2,13 @@ import { vi } from 'vitest'; import { extractFrontMatter } from './frontmatter.js'; const dbMock = () => ({ setDiagramTitle: vi.fn() }); +const setConfigMock = vi.fn(); describe('extractFrontmatter', () => { + beforeEach(() => { + setConfigMock.mockClear(); + }); + it('returns text unchanged if no frontmatter', () => { expect(extractFrontMatter('diagram', dbMock())).toEqual('diagram'); }); @@ -75,4 +80,21 @@ describe('extractFrontmatter', () => { 'tag suffix cannot contain exclamation marks' ); }); + + it('handles frontmatter with config', () => { + const text = `--- +title: hello +config: + graph: + string: hello + number: 14 + boolean: false + array: [1, 2, 3] +--- +diagram`; + expect(extractFrontMatter(text, {}, setConfigMock)).toEqual('diagram'); + expect(setConfigMock).toHaveBeenCalledWith({ + graph: { string: 'hello', number: 14, boolean: false, array: [1, 2, 3] }, + }); + }); }); diff --git a/packages/mermaid/src/diagram-api/frontmatter.ts b/packages/mermaid/src/diagram-api/frontmatter.ts index f8d2e9c415..1ce673d4fd 100644 --- a/packages/mermaid/src/diagram-api/frontmatter.ts +++ b/packages/mermaid/src/diagram-api/frontmatter.ts @@ -1,3 +1,4 @@ +import { MermaidConfig } from '../config.type.js'; import { DiagramDB } from './types.js'; // The "* as yaml" part is necessary for tree-shaking import * as yaml from 'js-yaml'; @@ -9,38 +10,50 @@ import * as yaml from 'js-yaml'; // Relevant YAML spec: https://yaml.org/spec/1.2.2/#914-explicit-documents export const frontMatterRegex = /^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s; -type FrontMatterMetadata = { +interface FrontMatterMetadata { title?: string; // Allows custom display modes. Currently used for compact mode in gantt charts. displayMode?: string; -}; + config?: MermaidConfig; +} /** * Extract and parse frontmatter from text, if present, and sets appropriate * properties in the provided db. * @param text - The text that may have a YAML frontmatter. * @param db - Diagram database, could be of any diagram. + * @param setDiagramConfig - Optional function to set diagram config. * @returns text with frontmatter stripped out */ -export function extractFrontMatter(text: string, db: DiagramDB): string { +export function extractFrontMatter( + text: string, + db: DiagramDB, + setDiagramConfig?: (config: MermaidConfig) => void +): string { const matches = text.match(frontMatterRegex); - if (matches) { - const parsed: FrontMatterMetadata = yaml.load(matches[1], { - // To keep things simple, only allow strings, arrays, and plain objects. - // https://www.yaml.org/spec/1.2/spec.html#id2802346 - schema: yaml.FAILSAFE_SCHEMA, - }) as FrontMatterMetadata; - - if (parsed?.title) { - db.setDiagramTitle?.(parsed.title); - } - - if (parsed?.displayMode) { - db.setDisplayMode?.(parsed.displayMode); - } - - return text.slice(matches[0].length); - } else { + if (!matches) { return text; } + + const parsed: FrontMatterMetadata = yaml.load(matches[1], { + // To support config, we need JSON schema. + // https://www.yaml.org/spec/1.2/spec.html#id2803231 + schema: yaml.JSON_SCHEMA, + }) as FrontMatterMetadata; + + if (parsed?.title) { + // toString() is necessary because YAML could parse the title as a number/boolean + db.setDiagramTitle?.(parsed.title.toString()); + } + + if (parsed?.displayMode) { + // toString() is necessary because YAML could parse the title as a number/boolean + db.setDisplayMode?.(parsed.displayMode.toString()); + } + + if (parsed?.config) { + setDiagramConfig?.(parsed.config); + } + + return text.slice(matches[0].length); } diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index 35b251bc7f..0a5fae5758 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -30,6 +30,7 @@ import { evaluate } from './diagrams/common/common.js'; import isEmpty from 'lodash-es/isEmpty.js'; import { setA11yDiagramInfo, addSVGa11yTitleDescription } from './accessibility.js'; import { parseDirective } from './directiveUtils.js'; +import { extractFrontMatter } from './diagram-api/frontmatter.js'; // diagram names that support classDef statements const CLASSDEF_DIAGRAMS = [ @@ -385,7 +386,12 @@ const render = async function ( configApi.reset(); - // Add Directives. Must do this before getting the config and before creating the diagram. + // We need to add the directives before creating the diagram. + // So extractFrontMatter is called twice. Once here and once in the diagram parser. + // This can be fixed in a future refactor. + extractFrontMatter(text, {}, configApi.addDirective); + + // Add Directives. const graphInit = utils.detectInit(text); if (graphInit) { configApi.addDirective(graphInit); diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index dd574f86a8..cae3d5bfe8 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -96,7 +96,10 @@ const directiveWithoutOpen = * @param config - Optional mermaid configuration object. * @returns The json object representing the init passed to mermaid.initialize() */ -export const detectInit = function (text: string, config?: MermaidConfig): MermaidConfig { +export const detectInit = function ( + text: string, + config?: MermaidConfig +): MermaidConfig | undefined { const inits = detectDirective(text, /(?:init\b)|(?:initialize\b)/); let results = {}; @@ -106,20 +109,22 @@ export const detectInit = function (text: string, config?: MermaidConfig): Merma } else { results = inits.args; } - if (results) { - let type = detectType(text, config); - ['config'].forEach((prop) => { - if (results[prop] !== undefined) { - if (type === 'flowchart-v2') { - type = 'flowchart'; - } - results[type] = results[prop]; - delete results[prop]; - } - }); + + if (!results) { + return; } - // Todo: refactor this, these results are never used + let type = detectType(text, config); + ['config'].forEach((prop) => { + if (results[prop] !== undefined) { + if (type === 'flowchart-v2') { + type = 'flowchart'; + } + results[type] = results[prop]; + delete results[prop]; + } + }); + return results; }; @@ -844,7 +849,7 @@ export const sanitizeDirective = (args: unknown): void => { log.debug('sanitizeDirective called with', args); // Return if not an object - if (typeof args !== 'object') { + if (typeof args !== 'object' || args == null) { return; } @@ -861,7 +866,8 @@ export const sanitizeDirective = (args: unknown): void => { key.startsWith('__') || key.includes('proto') || key.includes('constr') || - !configKeys.has(key) + !configKeys.has(key) || + args[key] == null ) { log.debug('sanitize deleting key: ', key); delete args[key]; From fd35a5473568be0aad9fb1db6510a4b249daf0fc Mon Sep 17 00:00:00 2001 From: sidharthv96 Date: Mon, 21 Aug 2023 06:43:15 +0000 Subject: [PATCH 508/595] Update docs --- .../interfaces/mermaidAPI.ParseOptions.md | 2 +- .../interfaces/mermaidAPI.RenderResult.md | 4 +-- docs/config/setup/modules/config.md | 26 +++++++++---------- docs/config/setup/modules/defaultConfig.md | 2 +- docs/config/setup/modules/mermaidAPI.md | 22 ++++++++-------- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/docs/config/setup/interfaces/mermaidAPI.ParseOptions.md b/docs/config/setup/interfaces/mermaidAPI.ParseOptions.md index 8ab2598855..2082a081ea 100644 --- a/docs/config/setup/interfaces/mermaidAPI.ParseOptions.md +++ b/docs/config/setup/interfaces/mermaidAPI.ParseOptions.md @@ -16,4 +16,4 @@ #### Defined in -[mermaidAPI.ts:77](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L77) +[mermaidAPI.ts:78](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L78) diff --git a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md index 527b46d092..f84a51b87b 100644 --- a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md +++ b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md @@ -39,7 +39,7 @@ bindFunctions?.(div); // To call bindFunctions only if it's present. #### Defined in -[mermaidAPI.ts:97](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L97) +[mermaidAPI.ts:98](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L98) --- @@ -51,4 +51,4 @@ The svg code for the rendered graph. #### Defined in -[mermaidAPI.ts:87](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L87) +[mermaidAPI.ts:88](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L88) diff --git a/docs/config/setup/modules/config.md b/docs/config/setup/modules/config.md index 8381dc8c73..f1de64e2df 100644 --- a/docs/config/setup/modules/config.md +++ b/docs/config/setup/modules/config.md @@ -14,7 +14,7 @@ #### Defined in -[config.ts:7](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L7) +[config.ts:8](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L8) ## Functions @@ -26,9 +26,9 @@ Pushes in a directive to the configuration #### Parameters -| Name | Type | Description | -| :---------- | :---- | :----------------------- | -| `directive` | `any` | The directive to push in | +| Name | Type | Description | +| :---------- | :-------------- | :----------------------- | +| `directive` | `MermaidConfig` | The directive to push in | #### Returns @@ -36,7 +36,7 @@ Pushes in a directive to the configuration #### Defined in -[config.ts:191](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L191) +[config.ts:188](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L188) --- @@ -60,7 +60,7 @@ The currentConfig #### Defined in -[config.ts:137](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L137) +[config.ts:131](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L131) --- @@ -118,7 +118,7 @@ The siteConfig #### Defined in -[config.ts:223](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L223) +[config.ts:218](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L218) --- @@ -147,7 +147,7 @@ options in-place #### Defined in -[config.ts:152](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L152) +[config.ts:146](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L146) --- @@ -242,10 +242,10 @@ The new siteConfig #### Parameters -| Name | Type | -| :------------ | :-------------- | -| `siteCfg` | `MermaidConfig` | -| `_directives` | `any`\[] | +| Name | Type | +| :------------ | :----------------- | +| `siteCfg` | `MermaidConfig` | +| `_directives` | `MermaidConfig`\[] | #### Returns @@ -253,7 +253,7 @@ The new siteConfig #### Defined in -[config.ts:14](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L14) +[config.ts:15](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L15) --- diff --git a/docs/config/setup/modules/defaultConfig.md b/docs/config/setup/modules/defaultConfig.md index 2d23977fed..effaec7b13 100644 --- a/docs/config/setup/modules/defaultConfig.md +++ b/docs/config/setup/modules/defaultConfig.md @@ -10,7 +10,7 @@ ### configKeys -• `Const` **configKeys**: `string`\[] +• `Const` **configKeys**: `Set`<`string`> #### Defined in diff --git a/docs/config/setup/modules/mermaidAPI.md b/docs/config/setup/modules/mermaidAPI.md index 1160a5dda5..d5d4a1cbc1 100644 --- a/docs/config/setup/modules/mermaidAPI.md +++ b/docs/config/setup/modules/mermaidAPI.md @@ -25,7 +25,7 @@ Renames and re-exports [mermaidAPI](mermaidAPI.md#mermaidapi) #### Defined in -[mermaidAPI.ts:81](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L81) +[mermaidAPI.ts:82](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L82) ## Variables @@ -96,7 +96,7 @@ mermaid.initialize(config); #### Defined in -[mermaidAPI.ts:668](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L668) +[mermaidAPI.ts:673](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L673) ## Functions @@ -127,7 +127,7 @@ Return the last node appended #### Defined in -[mermaidAPI.ts:309](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L309) +[mermaidAPI.ts:310](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L310) --- @@ -153,7 +153,7 @@ the cleaned up svgCode #### Defined in -[mermaidAPI.ts:255](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L255) +[mermaidAPI.ts:256](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L256) --- @@ -179,7 +179,7 @@ the string with all the user styles #### Defined in -[mermaidAPI.ts:184](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L184) +[mermaidAPI.ts:185](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L185) --- @@ -202,7 +202,7 @@ the string with all the user styles #### Defined in -[mermaidAPI.ts:232](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L232) +[mermaidAPI.ts:233](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L233) --- @@ -229,7 +229,7 @@ with an enclosing block that has each of the cssClasses followed by !important; #### Defined in -[mermaidAPI.ts:168](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L168) +[mermaidAPI.ts:169](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L169) --- @@ -249,7 +249,7 @@ with an enclosing block that has each of the cssClasses followed by !important; #### Defined in -[mermaidAPI.ts:154](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L154) +[mermaidAPI.ts:155](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L155) --- @@ -269,7 +269,7 @@ with an enclosing block that has each of the cssClasses followed by !important; #### Defined in -[mermaidAPI.ts:125](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L125) +[mermaidAPI.ts:126](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L126) --- @@ -295,7 +295,7 @@ Put the svgCode into an iFrame. Return the iFrame code #### Defined in -[mermaidAPI.ts:286](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L286) +[mermaidAPI.ts:287](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L287) --- @@ -320,4 +320,4 @@ Remove any existing elements from the given document #### Defined in -[mermaidAPI.ts:359](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L359) +[mermaidAPI.ts:360](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L360) From 844a175039f5ba563cad9eac2d16cd6e247c2235 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 12:30:04 +0530 Subject: [PATCH 509/595] chore: Add test with both frontmatter and directive --- .../rendering/conf-and-directives.spec.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/cypress/integration/rendering/conf-and-directives.spec.js b/cypress/integration/rendering/conf-and-directives.spec.js index ca1fccf495..401a24894b 100644 --- a/cypress/integration/rendering/conf-and-directives.spec.js +++ b/cypress/integration/rendering/conf-and-directives.spec.js @@ -133,6 +133,27 @@ config: themeVariables: primaryColor: '#ff0000' --- +graph TD + A(Start) --> B[/Another/] + A[/Another/] --> C[End] + subgraph section + B + C + end + `, + { theme: 'forest' } + ); + }); + it('Theme from initialize, frontmatter overriding theme variable, directive overriding primaryColor - nodes should be red', () => { + imgSnapshotTest( + ` +--- +config: + theme: base + themeVariables: + primaryColor: '#00ff00' +--- +%%{init: {'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%% graph TD A(Start) --> B[/Another/] A[/Another/] --> C[End] From 534fd85339ffd283b0f6b89725ff00185df95c5f Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 12:53:29 +0530 Subject: [PATCH 510/595] chore: Minor typo fixes --- packages/mermaid/src/schemas/config.schema.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/schemas/config.schema.yaml b/packages/mermaid/src/schemas/config.schema.yaml index 6e5f48d95e..29e7455629 100644 --- a/packages/mermaid/src/schemas/config.schema.yaml +++ b/packages/mermaid/src/schemas/config.schema.yaml @@ -13,10 +13,10 @@ # Non-JSON values, like functions or `undefined`, still need to be manually # set in `src/defaultConfig.ts`) # - `src/docs.mts` -# Used to genereate Markdown documentation for this JSON Schema by using +# Used to generate Markdown documentation for this JSON Schema by using # the `@adobe/jsonschema2md` NPM package. -# Useful things to know when editting this file +# Useful things to know when editing this file # - Use the `|` character for multi-line strings # - Use `meta:enum` to document enum values (from jsonschema2md) # - Use `tsType` to override the TypeScript type (from json-schema-to-typescript) @@ -1851,7 +1851,7 @@ $defs: # JSON Schema definition (maybe we should move these to a seperate file) The color of the links in the sankey diagram. anyOf: - $ref: '#/$defs/SankeyLinkColor' - - description: An arbtirary [CSS color](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value) + - description: An arbitrary [CSS color](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value) type: string default: gradient nodeAlignment: From 2967b3c1bb5608b04bfcbe72f942094fe3877116 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 14:25:25 +0530 Subject: [PATCH 511/595] fix: XSS vulnerability --- packages/mermaid/src/utils.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index cae3d5bfe8..4f9cedebd7 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -105,6 +105,7 @@ export const detectInit = function ( if (Array.isArray(inits)) { const args = inits.map((init) => init.args); + sanitizeDirective(args); results = assignWithDepth(results, [...args]); } else { results = inits.args; From 8ac7dc81e08deb8b2659fa8af6275d0646a5f15f Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 15:02:05 +0530 Subject: [PATCH 512/595] docs: Add frontmatter config docs --- cSpell.json | 1 + docs/config/configuration.md | 33 ++++++++++++++++++- docs/config/directives.md | 3 ++ docs/config/setup/modules/config.md | 2 +- .../mermaid/src/docs/config/configuration.md | 20 ++++++++++- .../mermaid/src/docs/config/directives.md | 4 +++ 6 files changed, 60 insertions(+), 3 deletions(-) diff --git a/cSpell.json b/cSpell.json index af7a9ca46f..52012a3375 100644 --- a/cSpell.json +++ b/cSpell.json @@ -44,6 +44,7 @@ "faber", "flatmap", "foswiki", + "frontmatter", "ftplugin", "gantt", "gitea", diff --git a/docs/config/configuration.md b/docs/config/configuration.md index c7b780143d..1e85427ea7 100644 --- a/docs/config/configuration.md +++ b/docs/config/configuration.md @@ -10,10 +10,41 @@ When mermaid starts, configuration is extracted to determine a configuration to - The default configuration - Overrides at the site level are set by the initialize call, and will be applied to all diagrams in the site/app. The term for this is the **siteConfig**. -- Directives - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config. +- Frontmatter (v\+) - diagram authors can update select configuration parameters in the frontmatter of the diagram. These are applied to the render config. +- Directives (Deprecated by Frontmatter) - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config. **The render config** is configuration that is used when rendering by applying these configurations. +## Frontmatter config + +The entire mermaid configuration (except the secure configs) can be overridden by the diagram author in the frontmatter of the diagram. The frontmatter is a YAML block at the top of the diagram. + +```mermaid-example +--- +title: Hello Title +config: + theme: base + themeVariables: + primaryColor: "#00ff00" +--- +flowchart + Hello --> World + +``` + +```mermaid +--- +title: Hello Title +config: + theme: base + themeVariables: + primaryColor: "#00ff00" +--- +flowchart + Hello --> World + +``` + ## Theme configuration ## Starting mermaid diff --git a/docs/config/directives.md b/docs/config/directives.md index 27fd767c75..414565d53e 100644 --- a/docs/config/directives.md +++ b/docs/config/directives.md @@ -6,6 +6,9 @@ # Directives +> **Warning** +> Directives are deprecated from v\. Please use the `config` key in frontmatter to pass configuration. See [Configuration](./configuration.md) for more details. + ## Directives Directives give a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration. diff --git a/docs/config/setup/modules/config.md b/docs/config/setup/modules/config.md index f1de64e2df..e779224c15 100644 --- a/docs/config/setup/modules/config.md +++ b/docs/config/setup/modules/config.md @@ -118,7 +118,7 @@ The siteConfig #### Defined in -[config.ts:218](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L218) +[config.ts:217](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L217) --- diff --git a/packages/mermaid/src/docs/config/configuration.md b/packages/mermaid/src/docs/config/configuration.md index d248944ddd..e52f2c6d5d 100644 --- a/packages/mermaid/src/docs/config/configuration.md +++ b/packages/mermaid/src/docs/config/configuration.md @@ -4,10 +4,28 @@ When mermaid starts, configuration is extracted to determine a configuration to - The default configuration - Overrides at the site level are set by the initialize call, and will be applied to all diagrams in the site/app. The term for this is the **siteConfig**. -- Directives - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config. +- Frontmatter (v+) - diagram authors can update select configuration parameters in the frontmatter of the diagram. These are applied to the render config. +- Directives (Deprecated by Frontmatter) - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config. **The render config** is configuration that is used when rendering by applying these configurations. +## Frontmatter config + +The entire mermaid configuration (except the secure configs) can be overridden by the diagram author in the frontmatter of the diagram. The frontmatter is a YAML block at the top of the diagram. + +```mermaid-example +--- +title: Hello Title +config: + theme: base + themeVariables: + primaryColor: "#00ff00" +--- +flowchart + Hello --> World + +``` + ## Theme configuration ## Starting mermaid diff --git a/packages/mermaid/src/docs/config/directives.md b/packages/mermaid/src/docs/config/directives.md index c85d1d245e..5ce9fba6da 100644 --- a/packages/mermaid/src/docs/config/directives.md +++ b/packages/mermaid/src/docs/config/directives.md @@ -1,5 +1,9 @@ # Directives +```warning +Directives are deprecated from v. Please use the `config` key in frontmatter to pass configuration. See [Configuration](./configuration.md) for more details. +``` + ## Directives Directives give a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration. From 2b9dc0ea80ce1ef3df06a44e53a8ac6b3b650b85 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Mon, 21 Aug 2023 15:02:29 +0530 Subject: [PATCH 513/595] docs: Add frontmatter config demos --- demos/er.html | 2 ++ demos/flowchart.html | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/demos/er.html b/demos/er.html index 49f0a683f0..65e3049c8c 100644 --- a/demos/er.html +++ b/demos/er.html @@ -21,6 +21,8 @@
           ---
           title: This is a title
    +      config:
    +        theme: forest
           ---
           erDiagram
             %% title This is a title
    diff --git a/demos/flowchart.html b/demos/flowchart.html
    index 92c5bbd6e4..8389510b28 100644
    --- a/demos/flowchart.html
    +++ b/demos/flowchart.html
    @@ -123,6 +123,13 @@ 

    graph

    flowchart

    +    ---
    +    title: This is another complicated flow
    +    config:
    +      theme: base
    +      flowchart:
    +        curve: cardinal
    +    ---
         flowchart LR
         sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["
     
    
    From 5c9eafabae396813511e3cd0efd3ba599189e147 Mon Sep 17 00:00:00 2001
    From: sidharthv96 
    Date: Mon, 21 Aug 2023 09:36:24 +0000
    Subject: [PATCH 514/595] Update docs
    
    ---
     docs/config/setup/modules/config.md | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/docs/config/setup/modules/config.md b/docs/config/setup/modules/config.md
    index e779224c15..f1de64e2df 100644
    --- a/docs/config/setup/modules/config.md
    +++ b/docs/config/setup/modules/config.md
    @@ -118,7 +118,7 @@ The siteConfig
     
     #### Defined in
     
    -[config.ts:217](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L217)
    +[config.ts:218](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L218)
     
     ---
     
    
    From e5315f29335da4d0391994bd5b1e38bc4474925c Mon Sep 17 00:00:00 2001
    From: Tom PERRILLAT-COLLOMB 
    Date: Mon, 21 Aug 2023 23:33:42 +0200
    Subject: [PATCH 515/595] feat(er): add entity name alias
    
    ---
     demos/er.html                                 | 14 ++++++++++
     docs/syntax/entityRelationshipDiagram.md      | 28 +++++++++++++++++++
     packages/mermaid/src/diagrams/er/erDb.js      |  4 +--
     .../mermaid/src/diagrams/er/erRenderer.js     |  2 +-
     .../src/diagrams/er/parser/erDiagram.jison    | 10 +++++++
     .../src/diagrams/er/parser/erDiagram.spec.js  |  9 ++++++
     .../docs/syntax/entityRelationshipDiagram.md  | 16 +++++++++++
     7 files changed, 80 insertions(+), 3 deletions(-)
    
    diff --git a/demos/er.html b/demos/er.html
    index 49f0a683f0..f1233e19f7 100644
    --- a/demos/er.html
    +++ b/demos/er.html
    @@ -108,6 +108,20 @@
             }
             MANUFACTURER only one to zero or more CAR : makes
         
    +
    + +
    +    erDiagram
    +      p as Person {
    +        string firstName
    +        string lastName
    +      }
    +      a as "Customer Account" {
    +        string email
    +      }
    +      p ||--o| a : has
    +    
    +
    From a7ae1b68905a5fb1c97cd975d5cce68e3e31b3f0 Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Tue, 22 Aug 2023 11:05:09 +0200 Subject: [PATCH 523/595] feat(er): use square brackets to add aliases --- demos/er.html | 10 +++++----- docs/syntax/entityRelationshipDiagram.md | 10 +++++----- .../mermaid/src/diagrams/er/parser/erDiagram.jison | 11 ++++++----- .../mermaid/src/diagrams/er/parser/erDiagram.spec.js | 2 +- .../src/docs/syntax/entityRelationshipDiagram.md | 6 +++--- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/demos/er.html b/demos/er.html index f1233e19f7..eabae6acfa 100644 --- a/demos/er.html +++ b/demos/er.html @@ -112,12 +112,12 @@
         erDiagram
    -      p as Person {
    -        string firstName
    -        string lastName
    +      p[Person] {
    +          string firstName
    +          string lastName
           }
    -      a as "Customer Account" {
    -        string email
    +      a["Customer Account"] {
    +          string email
           }
           p ||--o| a : has
         
    diff --git a/docs/syntax/entityRelationshipDiagram.md b/docs/syntax/entityRelationshipDiagram.md index 5bc8df436c..ea3b8c0054 100644 --- a/docs/syntax/entityRelationshipDiagram.md +++ b/docs/syntax/entityRelationshipDiagram.md @@ -200,15 +200,15 @@ The `type` values must begin with an alphabetic character and may contain digits ### Entity Name Aliases (v\+) -An alias can be added to an entity using `as` keyword. If provided, the alias will be showed in the diagram instead of the entity name. +An alias can be added to an entity using square brackets. If provided, the alias will be showed in the diagram instead of the entity name. ```mermaid-example erDiagram - p as Person { + p[Person] { string firstName string lastName } - a as "Customer Account" { + a["Customer Account"] { string email } p ||--o| a : has @@ -216,11 +216,11 @@ erDiagram ```mermaid erDiagram - p as Person { + p[Person] { string firstName string lastName } - a as "Customer Account" { + a["Customer Account"] { string email } p ||--o| a : has diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.jison b/packages/mermaid/src/diagrams/er/parser/erDiagram.jison index 843fd99107..ea8abc21a9 100644 --- a/packages/mermaid/src/diagrams/er/parser/erDiagram.jison +++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.jison @@ -35,6 +35,8 @@ accDescr\s*"{"\s* { this.begin("acc_descr_multili [\n]+ /* nothing */ "}" { this.popState(); return 'BLOCK_STOP'; } . return yytext[0]; +"[" return 'SQS'; +"]" return 'SQE'; "one or zero" return 'ZERO_OR_ONE'; "one or more" return 'ONE_OR_MORE'; @@ -62,7 +64,6 @@ o\{ return 'ZERO_OR_MORE'; \-\- return 'IDENTIFYING'; "to" return 'IDENTIFYING'; "optionally to" return 'NON_IDENTIFYING'; -"as" return 'ALIAS'; \.\- return 'NON_IDENTIFYING'; \-\. return 'NON_IDENTIFYING'; [A-Za-z][A-Za-z0-9\-_]* return 'ALPHANUM'; @@ -114,15 +115,15 @@ statement } | entityName BLOCK_START BLOCK_STOP { yy.addEntity($1); } | entityName { yy.addEntity($1); } - | entityName ALIAS entityName BLOCK_START attributes BLOCK_STOP + | entityName SQS entityName SQE BLOCK_START attributes BLOCK_STOP { /* console.log('detected block'); */ yy.addEntity($1, $3); - yy.addAttributes($1, $5); + yy.addAttributes($1, $6); /* console.log('handled block'); */ } - | entityName ALIAS entityName BLOCK_START BLOCK_STOP { yy.addEntity($1, $3); } - | entityName ALIAS entityName { yy.addEntity($1, $3); } + | entityName SQS entityName SQE BLOCK_START BLOCK_STOP { yy.addEntity($1, $3); } + | entityName SQS entityName SQE { yy.addEntity($1, $3); } | title title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js index c23e31876c..a480e50e53 100644 --- a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js +++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js @@ -137,7 +137,7 @@ describe('when parsing ER diagram it...', function () { it('can have an alias', function () { const entity = 'foo'; const alias = 'bar'; - erDiagram.parser.parse(`erDiagram\n${entity} as "${alias}"\n`); + erDiagram.parser.parse(`erDiagram\n${entity}["${alias}"]\n`); const entities = erDb.getEntities(); expect(entities.hasOwnProperty(entity)).toBe(true); expect(entities[entity].alias).toBe(alias); diff --git a/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md b/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md index 71d91bab74..f2a5d5481f 100644 --- a/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md +++ b/packages/mermaid/src/docs/syntax/entityRelationshipDiagram.md @@ -146,15 +146,15 @@ The `type` values must begin with an alphabetic character and may contain digits ### Entity Name Aliases (v+) -An alias can be added to an entity using `as` keyword. If provided, the alias will be showed in the diagram instead of the entity name. +An alias can be added to an entity using square brackets. If provided, the alias will be showed in the diagram instead of the entity name. ```mermaid-example erDiagram - p as Person { + p[Person] { string firstName string lastName } - a as "Customer Account" { + a["Customer Account"] { string email } p ||--o| a : has From 4a06bc1a68ef2b425ed933989e5d29b3d80c6c47 Mon Sep 17 00:00:00 2001 From: Tom PERRILLAT-COLLOMB Date: Tue, 22 Aug 2023 13:36:25 +0200 Subject: [PATCH 524/595] test(er): add cypress test on entity name alias --- cypress/integration/rendering/erDiagram.spec.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/cypress/integration/rendering/erDiagram.spec.js b/cypress/integration/rendering/erDiagram.spec.js index 28c6191c8e..578f5a3984 100644 --- a/cypress/integration/rendering/erDiagram.spec.js +++ b/cypress/integration/rendering/erDiagram.spec.js @@ -305,4 +305,21 @@ ORDER ||--|{ LINE-ITEM : contains {} ); }); + + it('should render entities with entity name aliases', () => { + imgSnapshotTest( + ` + erDiagram + p[Person] { + varchar(64) firstName + varchar(64) lastName + } + c["Customer Account"] { + varchar(128) email + } + p ||--o| c : has + `, + { logLevel: 1 } + ); + }); }); From cee2a458f172bd28b73cb4969d1097cb1f0a308b Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Wed, 23 Aug 2023 00:23:14 +0300 Subject: [PATCH 525/595] Fixed docs according review Update docs --- docs/community/docker-development.md | 6 +++--- docs/community/documentation.md | 7 +++---- ...uggestions.md => questions-and-suggestions.md} | 4 +--- docs/intro/index.md | 15 ++++++++++++--- packages/mermaid/src/docs/.vitepress/config.ts | 2 +- .../mermaid/src/docs/.vitepress/theme/redirect.ts | 2 +- .../src/docs/community/docker-development.md | 6 +++--- .../mermaid/src/docs/community/documentation.md | 7 +++---- ...uggestions.md => questions-and-suggestions.md} | 2 -- packages/mermaid/src/docs/intro/index.md | 15 ++++++++++++--- 10 files changed, 39 insertions(+), 27 deletions(-) rename docs/community/{questionsAndSuggestions.md => questions-and-suggestions.md} (88%) rename packages/mermaid/src/docs/community/{questionsAndSuggestions.md => questions-and-suggestions.md} (96%) diff --git a/docs/community/docker-development.md b/docs/community/docker-development.md index 4b206408cf..42189a88e3 100644 --- a/docs/community/docker-development.md +++ b/docs/community/docker-development.md @@ -34,14 +34,14 @@ Then you **clone** a copy to your local development machine (e.g. where you code [Install Docker](https://docs.docker.com/engine/install/). And that is pretty much all you need. -Optionally, to run GUI (Cypress) within Docker you will also need X11 server installed. -Maybe you already have it installed, so check it first: +Optionally, to run GUI (Cypress) within Docker you will also need an X11 server installed. +You might already have it installed, so check this by running: ```bash echo $DISPLAY ``` -If variable `$DISPLAY` is not empty, then it must be working. Otherwise install it. +If the `$DISPLAY` variable is not empty, then an X11 server is running. Otherwise you may need to install one. ## Setup and Launch diff --git a/docs/community/documentation.md b/docs/community/documentation.md index b4f19597ac..67d35d3958 100644 --- a/docs/community/documentation.md +++ b/docs/community/documentation.md @@ -42,7 +42,7 @@ flowchart LR You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box. Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly. -```` +````markdown ```note Note content ``` @@ -58,11 +58,10 @@ Warning content ```danger Danger content ``` - ```` > **Note** -> If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. +> If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. In that case, your branch should be based on master, not develop. We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs). @@ -87,7 +86,7 @@ _\[TODO: need to keep this in sync with [check out a git branch in Contributing 2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory. 3. Make changes or add new documentation. 4. Commit changes to your branch and push it to GitHub (which should create a new branch). -5. Create a Pull Request of your fork. +5. Create a Pull Request from the branch of your fork. To edit Docs on GitHub: diff --git a/docs/community/questionsAndSuggestions.md b/docs/community/questions-and-suggestions.md similarity index 88% rename from docs/community/questionsAndSuggestions.md rename to docs/community/questions-and-suggestions.md index 28b107d1f5..23d6de50f3 100644 --- a/docs/community/questionsAndSuggestions.md +++ b/docs/community/questions-and-suggestions.md @@ -2,7 +2,7 @@ > > ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT. > -> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/questionsAndSuggestions.md](../../packages/mermaid/src/docs/community/questionsAndSuggestions.md). +> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/questions-and-suggestions.md](../../packages/mermaid/src/docs/community/questions-and-suggestions.md). # Questions or Suggestions? @@ -24,5 +24,3 @@ Feel free to add to the discussion on the issue or topic. If you can't find anything that already addresses your question or suggestion, _open a new issue:_ Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). - -## How to Contribute a Suggestion diff --git a/docs/intro/index.md b/docs/intro/index.md index b77dd454f7..0197d7950f 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -16,7 +16,14 @@ It is a JavaScript based diagramming and charting tool that renders Markdown-ins
    -[![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) +[![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) +[![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) +[![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid) +[![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) +[![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) +[![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) +[![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) +[![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_)
    @@ -322,7 +329,6 @@ To Deploy Mermaid: - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) -- [HTTP Server](https://github.com/TomWright/mermaid-server) ## Request for Assistance @@ -343,7 +349,9 @@ Don't hesitate to contact me if you want to get involved!
    -[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) +[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) +[![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) +[![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors)
    @@ -428,6 +436,7 @@ _Mermaid was created by Knut Sveidqvist for easier documentation._ .badges > p { display: flex; } + .badges > p > a { margin: 0 0.5rem; } diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index f86da04906..d787fe6ea1 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -196,7 +196,7 @@ function sidebarCommunity() { { text: 'Contributing to Mermaid', link: '/community/development' }, { text: 'Contributing Code', link: '/community/code' }, { text: 'Contributing Documentation', link: '/community/documentation' }, - { text: 'Questions and Suggestions', link: '/community/questionsAndSuggestions' }, + { text: 'Questions and Suggestions', link: '/community/questions-and-suggestions' }, { text: 'Adding Diagrams', link: '/community/newDiagram' }, { text: 'Security', link: '/community/security' }, ], diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts index da4326be77..951ee53711 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts @@ -49,7 +49,7 @@ const idRedirectMap: Record = { 'more-pages': '', 'n00b-advanced': 'config/n00b-advanced', 'n00b-gettingstarted': 'intro/n00b-gettingStarted', - 'n00b-overview': 'community/n00b-overview', + 'n00b-overview': 'intro/n00b-gettingStarted', 'community/n00b-overview': 'intro/n00b-gettingStarted', 'n00b-syntaxreference': 'intro/n00b-syntaxReference', newdiagram: 'community/newDiagram', diff --git a/packages/mermaid/src/docs/community/docker-development.md b/packages/mermaid/src/docs/community/docker-development.md index f3fb41391c..33cd6a201a 100644 --- a/packages/mermaid/src/docs/community/docker-development.md +++ b/packages/mermaid/src/docs/community/docker-development.md @@ -28,14 +28,14 @@ Then you **clone** a copy to your local development machine (e.g. where you code [Install Docker](https://docs.docker.com/engine/install/). And that is pretty much all you need. -Optionally, to run GUI (Cypress) within Docker you will also need X11 server installed. -Maybe you already have it installed, so check it first: +Optionally, to run GUI (Cypress) within Docker you will also need an X11 server installed. +You might already have it installed, so check this by running: ```bash echo $DISPLAY ``` -If variable `$DISPLAY` is not empty, then it must be working. Otherwise install it. +If the `$DISPLAY` variable is not empty, then an X11 server is running. Otherwise you may need to install one. ## Setup and Launch diff --git a/packages/mermaid/src/docs/community/documentation.md b/packages/mermaid/src/docs/community/documentation.md index 79a9843763..6a0df983d1 100644 --- a/packages/mermaid/src/docs/community/documentation.md +++ b/packages/mermaid/src/docs/community/documentation.md @@ -28,7 +28,7 @@ flowchart LR You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box. Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly. -```` +````markdown ```note Note content ``` @@ -44,11 +44,10 @@ Warning content ```danger Danger content ``` - ```` ```note -If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. +If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. In that case, your branch should be based on master, not develop. ``` We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs). @@ -74,7 +73,7 @@ _[TODO: need to keep this in sync with [check out a git branch in Contributing C 2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory. 3. Make changes or add new documentation. 4. Commit changes to your branch and push it to GitHub (which should create a new branch). -5. Create a Pull Request of your fork. +5. Create a Pull Request from the branch of your fork. To edit Docs on GitHub: diff --git a/packages/mermaid/src/docs/community/questionsAndSuggestions.md b/packages/mermaid/src/docs/community/questions-and-suggestions.md similarity index 96% rename from packages/mermaid/src/docs/community/questionsAndSuggestions.md rename to packages/mermaid/src/docs/community/questions-and-suggestions.md index f72d0a47d3..6d6f80fb6d 100644 --- a/packages/mermaid/src/docs/community/questionsAndSuggestions.md +++ b/packages/mermaid/src/docs/community/questions-and-suggestions.md @@ -18,5 +18,3 @@ Feel free to add to the discussion on the issue or topic. If you can't find anything that already addresses your question or suggestion, _open a new issue:_ Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22). - -## How to Contribute a Suggestion diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index c76f09a081..8410ef1cb6 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -10,7 +10,14 @@ It is a JavaScript based diagramming and charting tool that renders Markdown-ins
    -[![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) +[![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) +[![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) +[![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid) +[![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) +[![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) +[![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) +[![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) +[![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_)
    @@ -99,7 +106,6 @@ To Deploy Mermaid: - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) -- [HTTP Server](https://github.com/TomWright/mermaid-server) ## Request for Assistance @@ -120,7 +126,9 @@ Don't hesitate to contact me if you want to get involved!
    -[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) +[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) +[![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) +[![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors)
    @@ -205,6 +213,7 @@ _Mermaid was created by Knut Sveidqvist for easier documentation._ .badges > p { display: flex; } + .badges > p > a { margin: 0 0.5rem; } From 3ec32521f889529627da5a95207533d7d649f85f Mon Sep 17 00:00:00 2001 From: Justin Greywolf Date: Wed, 23 Aug 2023 05:22:23 -0700 Subject: [PATCH 526/595] Update packages/mermaid/src/diagrams/class/svgDraw.js Co-authored-by: Sidharth Vinod --- packages/mermaid/src/diagrams/class/svgDraw.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/mermaid/src/diagrams/class/svgDraw.js b/packages/mermaid/src/diagrams/class/svgDraw.js index ccc79aebbe..d6ed7bca4e 100644 --- a/packages/mermaid/src/diagrams/class/svgDraw.js +++ b/packages/mermaid/src/diagrams/class/svgDraw.js @@ -381,8 +381,7 @@ export const drawNote = function (elem, note, conf, diagObj) { * @param {{ padding: string; textHeight: string }} conf The configuration for the member */ const addTspan = function (textEl, member, isFirst, conf) { - const displayText = member.getDisplayDetails().displayText; - const cssStyle = member.getDisplayDetails().cssStyle; + const { displayText, cssStyle } = member.getDisplayDetails(); const tSpan = textEl.append('tspan').attr('x', conf.padding).text(displayText); if (cssStyle !== '') { From 108c25f19f72fad9f3e20551435439b18aac9267 Mon Sep 17 00:00:00 2001 From: Nikolay Rozhkov Date: Wed, 23 Aug 2023 23:32:33 +0300 Subject: [PATCH 527/595] Removed all n00b file names and added redirects --- docker-compose.yml | 2 +- packages/mermaid/src/docs/.vitepress/config.ts | 6 +++--- .../src/docs/.vitepress/theme/redirect.spec.ts | 4 ++-- .../mermaid/src/docs/.vitepress/theme/redirect.ts | 15 +++++++++------ packages/mermaid/src/docs/config/Tutorials.md | 2 +- .../docs/config/{n00b-advanced.md => advanced.md} | 2 +- packages/mermaid/src/docs/config/usage.md | 2 +- ...{n00b-gettingStarted.md => getting-started.md} | 4 ++-- packages/mermaid/src/docs/intro/index.md | 8 ++++---- ...00b-syntaxReference.md => syntax-reference.md} | 6 +++--- pnpm-lock.yaml | 2 +- 11 files changed, 28 insertions(+), 25 deletions(-) rename packages/mermaid/src/docs/config/{n00b-advanced.md => advanced.md} (90%) rename packages/mermaid/src/docs/intro/{n00b-gettingStarted.md => getting-started.md} (96%) rename packages/mermaid/src/docs/intro/{n00b-syntaxReference.md => syntax-reference.md} (95%) diff --git a/docker-compose.yml b/docker-compose.yml index 2480311a21..5ee31964dd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,7 @@ services: working_dir: /mermaid mem_limit: '2G' environment: - - NODE_OPTIONS=--max_old_space_size=2048 + - NODE_OPTIONS=--max_old_space_size=4096 volumes: - ./:/mermaid - root_cache:/root/.cache diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index d787fe6ea1..ede064fa46 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -109,8 +109,8 @@ function sidebarAll() { collapsed: false, items: [ { text: 'About Mermaid', link: '/intro/' }, - { text: 'Getting Started', link: '/intro/n00b-gettingStarted' }, - { text: 'Syntax and Configuration', link: '/intro/n00b-syntaxReference' }, + { text: 'Getting Started', link: '/intro/getting-started' }, + { text: 'Syntax and Configuration', link: '/intro/syntax-reference' }, ], }, ...sidebarSyntax(), @@ -167,7 +167,7 @@ function sidebarConfig() { { text: 'Theming', link: '/config/theming' }, { text: 'Accessibility', link: '/config/accessibility' }, { text: 'Mermaid CLI', link: '/config/mermaidCLI' }, - { text: 'Advanced usage', link: '/config/n00b-advanced' }, + { text: 'Advanced usage', link: '/config/advanced' }, { text: 'FAQ', link: '/config/faq' }, ], }, diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts index 3d88913d1e..b78f63990f 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.spec.ts @@ -19,8 +19,8 @@ test.each([ 'https://mermaid-js.github.io/mermaid/#/flowchart?another=test&id=my-id&one=more', // with multiple params 'syntax/flowchart.html#my-id', ], - ['https://mermaid-js.github.io/mermaid/#/n00b-advanced', 'config/n00b-advanced.html'], // without .md - ['https://mermaid-js.github.io/mermaid/#/n00b-advanced.md', 'config/n00b-advanced.html'], // with .md + ['https://mermaid-js.github.io/mermaid/#/n00b-advanced', 'config/advanced.html'], // without .md + ['https://mermaid-js.github.io/mermaid/#/n00b-advanced.md', 'config/advanced.html'], // with .md [ 'https://mermaid-js.github.io/mermaid/#/flowchart?id=a-node-in-the-form-of-a-circle', // with id, without .md 'syntax/flowchart.html#a-node-in-the-form-of-a-circle', diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts index 8d576fece9..98009ca6da 100644 --- a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts +++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts @@ -50,15 +50,18 @@ const idRedirectMap: Record = { mermaidcli: 'config/mermaidCLI', mindmap: 'syntax/mindmap', 'more-pages': '', - 'n00b-advanced': 'config/n00b-advanced', - 'n00b-gettingstarted': 'intro/n00b-gettingStarted', - 'n00b-overview': 'intro/n00b-gettingStarted', - 'community/n00b-overview': 'intro/n00b-gettingStarted', - 'n00b-syntaxreference': 'intro/n00b-syntaxReference', + 'n00b-advanced': 'config/advanced', + 'config/n00b-advanced': 'config/advanced', + 'n00b-gettingstarted': 'intro/getting-started', + 'intro/n00b-gettingStarted': 'intro/getting-started', + 'n00b-overview': 'intro/getting-started', + 'n00b-syntaxreference': 'intro/syntax-reference', + 'intro/n00b-syntaxReference': 'intro/syntax-reference', + 'community/n00b-overview': 'intro/getting-started', newdiagram: 'community/newDiagram', pie: 'syntax/pie', plugins: '', - quickstart: 'intro/n00b-gettingStarted', + quickstart: 'intro/getting-started', requirementdiagram: 'syntax/requirementDiagram', security: 'community/security', sequencediagram: 'syntax/sequenceDiagram', diff --git a/packages/mermaid/src/docs/config/Tutorials.md b/packages/mermaid/src/docs/config/Tutorials.md index c6db9dacf9..af7dbe672c 100644 --- a/packages/mermaid/src/docs/config/Tutorials.md +++ b/packages/mermaid/src/docs/config/Tutorials.md @@ -26,7 +26,7 @@ The definitions that can be generated the Live-Editor are also backwards-compati ## Mermaid with HTML -Examples are provided in [Getting Started](../intro/n00b-gettingStarted.md) +Examples are provided in [Getting Started](../intro/getting-started.md) **CodePen Examples:** diff --git a/packages/mermaid/src/docs/config/n00b-advanced.md b/packages/mermaid/src/docs/config/advanced.md similarity index 90% rename from packages/mermaid/src/docs/config/n00b-advanced.md rename to packages/mermaid/src/docs/config/advanced.md index 2932faa485..4ab4774285 100644 --- a/packages/mermaid/src/docs/config/n00b-advanced.md +++ b/packages/mermaid/src/docs/config/advanced.md @@ -1,4 +1,4 @@ -# Advanced n00b mermaid (Coming soon..) +# Advanced mermaid (Coming soon..) ## splitting mermaid code from html diff --git a/packages/mermaid/src/docs/config/usage.md b/packages/mermaid/src/docs/config/usage.md index 740b3509b5..7f3a04caa6 100644 --- a/packages/mermaid/src/docs/config/usage.md +++ b/packages/mermaid/src/docs/config/usage.md @@ -35,7 +35,7 @@ pnpm add mermaid **Hosting mermaid on a web page:** -> Note:This topic explored in greater depth in the [User Guide for Beginners](../intro/n00b-gettingStarted.md) +> Note:This topic explored in greater depth in the [User Guide for Beginners](../intro/getting-started.md) The easiest way to integrate mermaid on a web page requires two elements: diff --git a/packages/mermaid/src/docs/intro/n00b-gettingStarted.md b/packages/mermaid/src/docs/intro/getting-started.md similarity index 96% rename from packages/mermaid/src/docs/intro/n00b-gettingStarted.md rename to packages/mermaid/src/docs/intro/getting-started.md index fcb3f31ee1..47ffa72918 100644 --- a/packages/mermaid/src/docs/intro/n00b-gettingStarted.md +++ b/packages/mermaid/src/docs/intro/getting-started.md @@ -2,7 +2,7 @@ Mermaid is composed of three parts: Deployment, Syntax and Configuration. -This section talks about the different ways to deploy Mermaid. Learning the [Syntax](n00b-syntaxReference.md) would be of great help to the beginner. +This section talks about the different ways to deploy Mermaid. Learning the [Syntax](syntax-reference.md) would be of great help to the beginner. > Generally the live editor is enough for most general uses of mermaid, and is a good place to start learning. @@ -36,7 +36,7 @@ graph TD In the `Code` section one can write or edit raw mermaid code, and instantly `Preview` the rendered result on the panel beside it. -The `Configuration` Section is for changing the appearance and behavior of mermaid diagrams. An easy introduction to mermaid configuration is found in the [Advanced usage](../config/n00b-advanced.md) section. A complete configuration reference cataloging the default values can be found on the [mermaidAPI](../config/setup/README.md) page. +The `Configuration` Section is for changing the appearance and behavior of mermaid diagrams. An easy introduction to mermaid configuration is found in the [Advanced usage](../config/advanced.md) section. A complete configuration reference cataloging the default values can be found on the [mermaidAPI](../config/setup/README.md) page. ![Code,Config and Preview](./img/Code-Preview-Config.png) diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index 8410ef1cb6..554db5a123 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -4,7 +4,7 @@ It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically. -> If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](n00b-syntaxReference.md). +> If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](syntax-reference.md). @@ -39,7 +39,7 @@ Mermaid allows even non-programmers to easily create detailed and diagrams throu [Tutorials](../config/Tutorials.md) has video tutorials. Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](../ecosystem/integrations.md). -For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../intro/n00b-gettingStarted.md) and [Usage](../config/usage.md). +For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../intro/getting-started.md) and [Usage](../config/usage.md). 🌐 [CDN](https://www.jsdelivr.com/package/npm/mermaid) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/development.md) | 🔌 [Plug-Ins](../ecosystem/integrations.md) @@ -59,9 +59,9 @@ In our release process we rely heavily on visual regression tests using [applito ## Installation -**In depth guides and examples can be found at [Getting Started](./n00b-gettingStarted.md) and [Usage](../config/usage.md).** +**In depth guides and examples can be found at [Getting Started](./getting-started.md) and [Usage](../config/usage.md).** -**It would also be helpful to learn more about mermaid's [Syntax](./n00b-syntaxReference.md).** +**It would also be helpful to learn more about mermaid's [Syntax](./syntax-reference.md).** ### CDN diff --git a/packages/mermaid/src/docs/intro/n00b-syntaxReference.md b/packages/mermaid/src/docs/intro/syntax-reference.md similarity index 95% rename from packages/mermaid/src/docs/intro/n00b-syntaxReference.md rename to packages/mermaid/src/docs/intro/syntax-reference.md index 398f832576..51f25be354 100644 --- a/packages/mermaid/src/docs/intro/n00b-syntaxReference.md +++ b/packages/mermaid/src/docs/intro/syntax-reference.md @@ -24,7 +24,7 @@ erDiagram PRODUCT ||--o{ ORDER-ITEM : "ordered in" ``` -The [Getting Started](./n00b-gettingStarted.md) section can also provide some practical examples of mermaid syntax. +The [Getting Started](./getting-started.md) section can also provide some practical examples of mermaid syntax. ## Diagram Breaking @@ -48,13 +48,13 @@ Configuration is the third part of Mermaid, after deployment and syntax. It deal If you are interested in altering and customizing your Mermaid Diagrams, you will find the methods and values available for [Configuration](../config/setup/README.md) here. It includes themes. This section will introduce the different methods of configuring the behaviors and appearances of Mermaid Diagrams. -The following are the most commonly used methods, and they are all tied to Mermaid [Deployment](./n00b-gettingStarted.md) methods. +The following are the most commonly used methods, and they are all tied to Mermaid [Deployment](./getting-started.md) methods. ### Configuration Section in the [Live Editor](https://mermaid.live). Here you can edit certain values to change the behavior and appearance of the diagram. -### [The initialize() call](https://mermaid-js.github.io/mermaid/#/n00b-gettingStarted?id=_3-calling-the-javascript-api), +### [The initialize() call](https://mermaid-js.github.io/mermaid/#/getting-started?id=_3-calling-the-javascript-api), Used when Mermaid is called via an API, or through a `