From f5146c2cecb5aa6869e160e49168adec09488325 Mon Sep 17 00:00:00 2001 From: Jarek Danielak Date: Fri, 14 Feb 2025 17:50:51 +0100 Subject: [PATCH] feat: add `ad-hoc-sub-process` rule Verify that an ad-hoc sub-process is valid: * Must not contain start or end events. * Every intermediate event must have an outgoing sequence flow. Related to https://github.com/camunda/camunda-modeler/issues/4811 --- config/all.js | 1 + config/recommended.js | 1 + docs/rules/README.md | 1 + docs/rules/ad-hoc-sub-process.md | 20 +++ .../examples/ad-hoc-sub-process-correct.bpmn | 58 +++++++++ .../examples/ad-hoc-sub-process-correct.png | Bin 0 -> 24757 bytes .../ad-hoc-sub-process-incorrect.bpmn | 42 +++++++ .../examples/ad-hoc-sub-process-incorrect.png | Bin 0 -> 23180 bytes rules/ad-hoc-sub-process.js | 45 +++++++ .../compilation/test/bpmnlintrc.expected.js | 117 +++++++++--------- test/rules/ad-hoc-sub-process.mjs | 50 ++++++++ .../invalid-intermediate.bpmn | 24 ++++ .../ad-hoc-sub-process/invalid-start-end.bpmn | 22 ++++ test/rules/ad-hoc-sub-process/valid.bpmn | 53 ++++++++ 14 files changed, 378 insertions(+), 56 deletions(-) create mode 100644 docs/rules/ad-hoc-sub-process.md create mode 100644 docs/rules/examples/ad-hoc-sub-process-correct.bpmn create mode 100644 docs/rules/examples/ad-hoc-sub-process-correct.png create mode 100644 docs/rules/examples/ad-hoc-sub-process-incorrect.bpmn create mode 100644 docs/rules/examples/ad-hoc-sub-process-incorrect.png create mode 100644 rules/ad-hoc-sub-process.js create mode 100644 test/rules/ad-hoc-sub-process.mjs create mode 100644 test/rules/ad-hoc-sub-process/invalid-intermediate.bpmn create mode 100644 test/rules/ad-hoc-sub-process/invalid-start-end.bpmn create mode 100644 test/rules/ad-hoc-sub-process/valid.bpmn diff --git a/config/all.js b/config/all.js index 1a54780..e18d76c 100644 --- a/config/all.js +++ b/config/all.js @@ -1,4 +1,5 @@ const allRules = [ + 'ad-hoc-sub-process', 'conditional-flows', 'end-event-required', 'event-sub-process-typed-start-event', diff --git a/config/recommended.js b/config/recommended.js index d9fbe9a..d8cc9a1 100644 --- a/config/recommended.js +++ b/config/recommended.js @@ -1,5 +1,6 @@ module.exports = { rules: { + 'ad-hoc-sub-process': 'error', 'conditional-flows': 'error', 'end-event-required': 'error', 'event-sub-process-typed-start-event': 'error', diff --git a/docs/rules/README.md b/docs/rules/README.md index 342ada4..30537a1 100644 --- a/docs/rules/README.md +++ b/docs/rules/README.md @@ -2,6 +2,7 @@ This library implements the following lint rules: +* [Ad-Hoc Sub-Process](./ad-hoc-sub-process.md) * [Conditional Flows](./conditional-flows.md) * [End Event Required](./end-event-required.md) * [Event Sub-Process Typed Start Event](./event-sub-process-typed-start-event.md) diff --git a/docs/rules/ad-hoc-sub-process.md b/docs/rules/ad-hoc-sub-process.md new file mode 100644 index 0000000..1ce397f --- /dev/null +++ b/docs/rules/ad-hoc-sub-process.md @@ -0,0 +1,20 @@ +# Ad-hoc Sub-Process (ad-hoc-sub-process) + +Ensure that an Ad-Hoc Sub-Process is valid according to the BPMN specification: + +- Must not contain start or end events. +- Every intermediate event must have an outgoing sequence flow. + + +Example of __incorrect__ usage for this rule: + +![Incorrect usage example](./examples/ad-hoc-sub-process-incorrect.png) + +Cf. [`ad-hoc-sub-process-incorrect.bpmn`](./examples/no-complex-gateway-incorrect.bpmn). + + +Example of __correct__ usage for this rule: + +![Correct usage example](./examples/ad-hoc-sub-process-correct.png) + +Cf. [`ad-hoc-sub-process-correct.bpmn`](./examples/no-complex-gateway-correct.bpmn). diff --git a/docs/rules/examples/ad-hoc-sub-process-correct.bpmn b/docs/rules/examples/ad-hoc-sub-process-correct.bpmn new file mode 100644 index 0000000..a6958f1 --- /dev/null +++ b/docs/rules/examples/ad-hoc-sub-process-correct.bpmn @@ -0,0 +1,58 @@ + + + + + + Flow_0njsews + + + Flow_0njsews + + + + Flow_1ykoger + + + + + + + Flow_1ykoger + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/rules/examples/ad-hoc-sub-process-correct.png b/docs/rules/examples/ad-hoc-sub-process-correct.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7d79a0a269a14b8a05e495025148091ab5e8f9 GIT binary patch literal 24757 zcmeIb2UJvP*DiR#fUPaG5kZ0hML|F^NHib<5)=`Mr6M^=&Q&NXDoH^oau5j;CFdjp z5(|)=3P}YNP^6-OO7}hZ_5b&GZ_lh*cjnHT`%j;>Y))0ZXTN#xXFq$Nx8G=KC?DL< zz8`|1gDSUf+=ZaMiV(Ex%f7wf8?)3>Ht>hR>8|oMD5ryC4uVcWDmSj)bB|pZ^?BFl zQbk`Ooe@=4<$rzTK4DenCBb^fOa z7>NIZ}4I|xA%dIok|)fQG( zZ%?bMclC%#y<))%M#m`MTuXnSlEwhNQ@rj4uDL^}U-GiZdjF;Mz~#uW#{IcW&$xybOsd8ryVR_fRyp65K5nUV&^n9%j*(RGuF z7X_1F>X`-P_CUT@&icM<{F;{V=0J^;3gsuu0X0n^vs@2U?m*i*Vv;LIy0BC3wC}sG zn59TA9O7x$UQ~5!hfG7HFjLcP7r8-V7t>7>6O-Rhd~va<-kPZ@Jq$scUeC#y zZ&+JfS8mPZyRYXpP14BRuaz)DW8*bWTc)fH1IZ!t4dI}%{0uM3Nq%^{*VZ*CBea4H zt<+@l!wTYU(slp!RXzxMXi~M>(jDnJ+3wI(IA=toEEIGE{-_qIM(Z*_TK2pDm>>F( zS~bgBD_7?JiRwO70C0JY2Wm)vdOhT z^!!Wc+Gw<}iP`N)cjM_Hvl!dsM=)FWW1S~TuVsR*yyQA;s}S6p8+q8));1iki*Qlm zaM(;ckj)4s_WgFMCuQqEd|+NvV5TfYBw!Wn%2yN~V|`){2=0O)&#%cL9dCcs(ApoA zIhr;VRr`<|HSKEzK9~14iNIYGDJ}QPo>cd|6;vL- zJ`tcc@%n62V*+hGE!a9JD9E9|ZEi(~E|Rq);7&sKuJO_6%a6J}Yltp*0qq8$fo|Dt zE-y~Z#N>p?`_MKn3=a*l<21^@jDz07H5z#=C;3ml@mS;UPrY4z39Ov7&NC2{DCtw` zanI0GMciFh0>2U|ihFY{0D{tW827oDu1;n0`CfRm(52k)j43$B zki0aNxj&l$O1uxoBdCHNzcc-Z=De3fib&6}95(Ft;Ji;4mB&|T~`MOE8N9tOD zg;9a8GAG*u|0 zo)Qnn<^~xcUv)GX@>$9sqVCH~`vu@ut7xa0`*qaF?tyAk)j)GE8Qk}I%_j2cb0^q1 zi4o4U>2$Dhj_NZ)irH}E@O{~tv1B4%_m^z;lPCFcy_veK|0?j05rO{yWn8x-xS(ZY zIbnNbTTIERh)W(9jcqO8L`3v|Oi4L+KU?3(lRf5(K#4a(OkBL-U23X@6+1`0zddVv z``KiVp6}g1;1whB8{}0@kPfnR%0vtCzc(&PF7VS^;)Nw8C1@@N zdRwpz;f}PB@%rtgb01tua-_y^?VL9$Y6xIn#tI(QziRyUn|aeCe@=bR{ZNlM<^a&g z4Oj-oo|i8*6^Ha4vaAFeesieC=d8TK#^!^~LP;yQqVllZT1Km}|I3yq zqc2PENGm$`bzfhf`&zr{%B)F96P2X!N5B=IbN6q2qih|Rc#YxWL?c}91j=ovGg^Zk z39YUid(g9o+Y;+c9WOsQF+@Q0Ph)}=mIkCuDd@+uou{iR_e+fN=Uxi>EIG#Eb~|Ql z8iSF?w@EGXPkMPAgL))?^-K35gSd5z4i+zhE%c?GnS6I%1qPC{xNM z--2b9v@F=1LyTO^C zA{v$4q=|Ag_+`!#&10Rre_Kf?pu4e{6-6y@>E`hXjD=6P!(E|9AV)mG`GzfQo`Ob!{?R~?(wl#???ZiU143RqJ# z#Mtw}UQ(_5bZ!SI$ zNQ`}Rq$4Lb!E=7@Kdcg@=yO=nH~O;e5QZOz;qz&m8^gBd zSJ8>Stbemh&xV#89GY}H3b+%FSoh@!z{V0vr0qMU=ulwR9$Z{p9K2RM%=}i)m9AB% zq%}6?ML4!=ug$1~afO|ctgxFgY%jrNC_xNwy{6tP^W(0wP;Vri(=uR|`?ReOjFL6L zG?4GXBZ|Hg@jkA1rez=J${i4RHYD=+2C=Afs|eUSsP@%wpu*M&q1@P*y)1%-yRBNs zHF950#~Jg((rqFk#-sgP>Z5gj3R)Jw^+cqCA3O43SLK)B2myop(kyJ<_uwBpgr9D$ z9(x%9KiR|0u=|4DXn6@A4oTfUrq5WEl9!j~Xk6v#l5`F(K>WwQ0i*DbQwOhw|B6oC zKg;`nVtHT4LDV3_*XDaOVMUd1rSsn@D!;w9+R`<&#*;526m91y`U9@RSO2PSIwg9c z)y9+d$AP|?CMr}LOWVub+Tl^$(}2Y*wY|dhuHT1o_n9-aO;2&(-&cRzQDttoff60| zA&v6k(vHg;!MZFhUjKnKftEBXvCIpb{#m#Pd7z1=IZbJ;KH+Wix%_|hy5E^ccbVedH?`kS2_%Ai*y#sa9n#>VWB;&KuP8#B|WOb z+SDv6pbRYz_PpxIeI{(e{PxwWSJ$jzx$_~wR=zL^-twN7HEC>f|M`;jK=!lz<8n1p zG(uYiUw<$sdFvp>5-wYQ23WhFzEn~`2=WOw*a;8(2?-2E`-w8l zm@tqLZjFmW-D!)Ftm!;6YXrQlpa8+@N=MtaNWaH~DiUAeJ|I33enh>D(jD*-sQ$^3 zzP{ry3W%s&zgwr%xn}JCvthHv5)lHMI%{CsI9U0V0RFJ6p|!1T z&{=sIiJ5kU)>F3i*g>b6#`nscC;4@A7E1d{?6IZ9na^Ef?oaDXLER7$MhY5EYw3~R z4JqN)pj4nq&2mGe1Fr2_W}$wh!S0+siL`FudXfuKQ$Q zE-Kq`5zHOR9w^(A??sYBo=Xg&r9S_Y<8i&eJMW@tvpU8FH#wf8~Z$D-B*Lh*2p zLuZr1@nmHJ>+tU!CxGuS3|vT0k8}5^TNqSuUtf3^@a*lY%Pw(wtmkb~3EXeZ6AXH$ z6S$?GDvn4I%TI_qCKwySCY%(L9va8;aU|c1gr^@s@wz5J^Ru$6QnjG zF-=kC6ocP6q!QOTpmeo(R zqRDkQfiiU(E*c&WTx{rFL~iXz!OdGT^zWf)N8eZr`b$zlv8F;ROxq4~AgW1VNw9`tJPwr^wDQ{4*{)!|=aq zy=Y*&cR^#Byff_~9&5+Hg`N{?$P^Ih>R#0^EG+z%p_8emX>z1^I)V_8nwol|yXUC7 zx}OOk_db?+JP`|F*Yjk5Q%b)RFhU19U%#t!Y;4Tfb2mj)W~owny3)N%^ksw=|KGUy zZZ-h|#jo$2CB1g;K|0Hy@LIERwOQTv!45SL_FiD zT@T=r>wa;`n>bXYdN6oMJcOMMS3&PO_?IWmery!Tq&97_8Wz?i5c1bFgw5LOfK@`~ zwbwrD8W=bM+maajY7e2D7a8K#ecx86`9A_Ta?IOFPj-7?(t%E8`SuaVYQKyvqvQuX z2Cg7+Le(mc%uNKHJN$1o5&sX_<^lKI%6zfZF?XjCVOvkMf&w{9bh0ovkT9*&bB3gl z??6xH^)LojkRK4Eb-UVAErG)y0C<7QG2$-f0ikNAx=#ZRO`Q9)o-eJ8e8f#o1PF!b zg-xvY*n=ijovOpYN!v?zDBtHwW0R8BcqfZSkO)!`LUM30{Tr zh8R>&)&Hr}uNosEL z(dV^BU=>aCS_>(>88W6|HYP0qxNEG#Vs^>c+m*C%p_y4!F_m`41=dgiA7xa8ZKD&OfeSe4#fB6 zR4g6#=QgG;(sxMjSMf76Ce-B4u<^nkcl%J0uvf=OOVJSxshm#s^n(ZvHvk;TE7Eyp zi$m9}XD?ch(jUs>kTQCmXI}+9+lbX^lnyjX&?#T2L2mVXa`;-3Kk{Se;dB9* z7Z;EnnJctK}62Bdtc{9*la8%JX@a-stmQ117Ol?eJbR>D3)n?6EMw1)en=mz)c z-^mI4S3-zt&^phSeA8Y@mr?q-?SB^S%l682TpV z<{eG{kNt;-;s3k1Xj#zv=jM@Q5A3dq?UTq8J3&+!eGWh%ygqIeDd%OE^`Oi1Vqo{5 zxd80Ch&Afwz}1A;Ku7bufO~iFup)5ly5Anl7M{+qehIsZ=~n>~ti5SrPsb}PUV}kl z&nY1B;aM@UN~-1!zdvAjC=R=v?kq2M9#97lC`$fu4Sb(i4CBesTl>In@EroX23q%Z zJA7?uSS=SslYA>-!XBcSEG{l~EpN!oGDA>bU`A-co@WeAzchD}LMe51w8`mGv#7>9&MYm`!wMK|I?7b+%rS6nF#pbf`Q5 zVuZxAl9K9pcZIr>2@G%C$=12-S7^hmR;gAB~U4?81wExXh(96WRgv{Z--<-S36JY_RWbgU3MBU{yRr~SG0dqHsHnwMdpmV=ItP65@_yym2R zj+S`mV(3Haqg77V;QgZOizUw(#QLTm%axGmD7OI05J+i zu@m^LQSs3VH-5a#q^`O7_jhRidxtJP5UP}tGN*4>=2y2%5~6a9`m?l@E?sacr&UdD zH?h2cYrd?oPtkYpbfr^=28hk8EzbQ&OT#27Pg7as(;wm>O72iW4ryaa3IQlU{*YN_BK}^g`(mA(5$RUA_lw zZ3=K}WC-Qv^3?SocM%|fV@IVagvBW+DN!D1D zh8{L80U0ev8d9JVs?)CN)KR+VOJ4byYNiP4CYlE>(x=~=j6hoS(NpmVRKLR86cqR` zfT*;?zRO^`PsKyv;h^RQ032%l|me~q>g{lcqmBH`XIi5VH$;Br2+Y+IgH>Z#|o`9+fd-fsu= z=@kSOtaeAb)2Ol6Qv7umX{k6Fp(5YR=L7AdW^PztzL!fIN@HfE#rcZ;@YG0RXn(ttn{r}?Qbiv8>~PXcUp_d{K;X zr@&Ub{n~;PMz{QEr1?p=;R|%1zPTJ!&q)$6^*u_^wdC`>f9_MiVC)7jkWPd;XFq9rhUP4`F zHFma?-=4*W3+|cG!*!@l_f+$m0wO)f`Qp(RWDr7_f6NTP@!kcZ%n#N~Q351#v>zk6(j z1ADb3O&BRy3mA3FRxAQD_1X~h4xlqYL#C0vBQPDP-V_M=kzc_->P|! z;W2L%H*)h%4uAq94mcy19EG`Wla8B@e2zcWIr?&^R}+UGfUNH}C04|J^Ub`K#*@=O z8Bpzmbe~ttemB!#+t*>=(c;H45@UDLR%&=VK&VU>ZMdy)Ed6(opU4N#$gb`hx?I_I zG`@8^TEaG3R72rh$;f(>^IX37OFqBtyzaOBQ+)<@-`UcL>S5=nOU~+2e-2TwRj6z& zQ_ztvSaq?#hHXn)Jkm@L`#3-#V%TmDJ;tl0kxROFgr|I_uigMOL5%+0NlA9`K_0X>OlPlu7jqI zR2SWFIp)mN)bnX^$oqRT!IFNf2r)uhkNo1jt%{XthR$_m@S@wnH~8EVyN)e&kMR{? zWN;0vhzu zbAC)LpC7`VGP1OP^O_ciO$>HqvO&!iRAW8~PZu>T4Y)8+E~MhZ2R4?9~3@qISzr zdyHhR*166vg&^4`OYYIv7yEU<#EO~yZ*CUT^iqKSSq0qgyZ2|6rzbV#o12p5JJLfG zR6?B}eDsN!{c_{VrMw$goFAMK&@W7XngW4qc@!*9HDN zqAoxB>gH)1a9kk&+u_BvNp3d{Qcy*Ta)^2X*xhZow=mRrxb&MMwBPRQi{Cu9qi`Y? zo!V?-v!4S`NIS-F5J3hO4ltq^ZB4nbHK9@|HP`tMTyhfXnD`j8NxPG5=U|MY=ywWY zxRAawY3)c9@1LGAu)};(39EJ?YjDb>nlv%b4FH(5&~s5`m2l{+h~u~KfgI9S!FA2R zv--~IHWm(IGW-3xy0uufqcH)%5D94Z7ya)mOVii0FwQf3pYh^4-&uhd+p4=Xd#natQb{q{9@bmf} z_!QZcTas+bRY+MCOGB1@S;$qwXYI6^X*8leOj9l{E#C9IedX5u!R@|m1Kd0LsscKa z{K;c&hUj?v!eOlaW%CY}nOAUTq{|`S&I_eU&!ow#twK(%*=|$O*14EchsoAH+X7;Q z^wy`zf)U5ojuoP~xHy}nop)pKNpzk`liA1sTdT_5(PG=7`z0zaE-o3v#p*6D!}i{V zy|4pvK(LZ0ME1&;EY!;UJcsK*-Jm%^u3-7=0Ze_x%f~C!y-qWfhjyDFqV+FFfjxcr z`}^d4QgziDm~}MK4XB9@*~!AJstx^usu^JKr`}xEoXL9@V&0jUCW7>CH{>j^9hR6I zG%2ttQ_8g|9z5@&;Ypj%M78E(q=j;;Hazv{Z~2{7YLNY@z%6rfxqX4}@47xno#eh= zfMxIjUPt6z1X{2ahvwx@5GWa_v>6sQX_^rtjiH}u{@zl6kw@gZ*yJ}i4p!=7Y-&a^ z-Nm*s`7WTJJ4k@Gg>h5!SsW6GH?XTd&7WO*t*Vb9=siIaWb89J)q{A_pPq_h87>}m znu#QR27%l%{cN95MQY3KkV>&ZhJg5tNWT$QNEhMcGgw?;g{?LkDzZj5u;yx1G_VS( zzm>P@X=0NzyA7NCu4H9gnC4B412@=^-+%fOo3Ao0B`6)&`_!Z0GT%elj>XOt4=-IJ z3Y1#}P=2;xf!k$=#Z#}}*+lwDJ0UMidV_e`pT2_kB8D^)1Kh^K#p?U^&_X$MJdt?M}SoPVB9j{+=8n zR8)ec;mRuLoGF)0x<9GFj{nvVBdXePp-q{E#+8*)*^Svl*tA$Pn_CVRWt%`trE`1$eo9?#P>LoUZj_ zX$O_)y^n^K?}g()$L|9AHzqk)`ZVlzt8`a-tc`e25-mr|T|%b{FbWtX6GtqI{HAUw z+>WhYwzQdv0Hi@)w0R#WYPdyib!@csQG3=-=JtL^WtNgk@S%BxesaP0&Gi$83N5;1 zRaQwgEbYQg@elHT)yfRl+6ypnN|Qd=57YCRNVF;1D7BE5o*aT96HxD-+VyMvl|R(CC>99ya4gw$|iG_dnf- zXYXxt2FUX&?pCTTnaiJ;H(mT$KbEC+?#sj5(X!GpHu)Z~D(8`&EUcabSh;(fE>9i- z25M0y6htPcgNN-~%JEr7#UXMVLqY(j={;3Knbsea{JvN+CS^c>cUs6i*T>U*zUQ+_ zC;;6t0Kume(uVMM-}kT@hw{vIK6)cd8}Qw81@+s#=l`YyPcSfcLPk#Q#FS-|QI|f! z0}9(%AI*!DTcKck*cUIKRZ;pH!sGGtWu41LZpm1A**L{XbrC5!7D}%m<)&<$_F-;g zw{F{9dEAp8;slH`&OQn5@KOB&z;P&+!8$wIn*P8l!KH65Wt!EPBUW2erl3cDGjUfw z)m4GqNEP^A;~PuN6*4aZ#MpF@cam%S{JTO4sh{*;l!Q@zh+QexN+Y_=NH3 z8oQ`(jF^xLEq{2@j_)LxpJoHSs5SJQBdh|edtRk@;G-_A5P6!XnzbF<@_5a**XLA1 zmqsg62tp^ZFMg)QZMVV}o2R+wv$oTM1F!k&)J2t0Vn0GsPGVS0MFb!VL)R?=|9xJ# zGeI$6-!pg+s4R}S1e#=X;2VtQqSsx^QQH!1R9A8nkBYuvxdoE0fCjp=(T&X>Xam8T zg^yzPW3nnDkEgy<=5pu)*#vUy5!Kcb>`GcCpgs>&-h^ed*EEt^*%Y6}Id#~pwaP4g zF^Vv-8{}yQk{lbtQ5UjhD9iF-@vq3UXQ;>Y0e$GFw#c7Tc_r+;x@u?^>>DiM=;1uD zO|X3I42z6BIRi0RoVppbEfu1$@+1`IOr?R}sEW6%oa+nZMuhR`J$|zRRvNu*jLzk? zD2X_K6Z^FOpd&e3vV(}<<`|KY9Q8J64CVw@t!WCNIL!nOdo+*4$LDDZ^F9EcP9WBO#$#!3FW4jI!O!{dRdOvHpNFS5@FHH>Va^N_8#=i zD6E9J{s=-1N>QFpS>tKmZxn&ikg=mzZP0ygTDI9&EahwGlx>7~fJ{tLq_;X3$b?uZ zZ`Du<1!%SX2!g8MG0~is55gn5`S)Pq>}+R&X7vTiWO~j#UZALCo$M_^71SvJ{ z>!YosQ>17elK}IVyEd?CJv7YO+R!JN*~J$G6sYS3pR==#5{v3$7m6?pdiH)nPQBbY z?W~B~>CWHc~$R@=UHLI;~+UCJ}pZMx+QzJqXHBu%%Je7z}gj|4bZ7VF zHQz67hNSc!5UPv>X8fGWeIu9fyO;0s#9eW1g8^9R?N}*c*k>%vF%MB!YZX;E^E>-n z7_WCVpbuOFk`ft2n7}+Pf4i-)L>gJZb5oh*<Fba}2knHIU)AsX!*~Blh3eES zBY=&684uosKtW<|(G2^VbF2qvim*aX0(Mu{fMEpNRmlmeXL~9#9<7;{0}I zqaT$5^11z$L*frnKtRZJCFtn157ojNWOV3{|RqQ^E(EJ1kn0rbl>cB<;Wc4{CqovM=IRQ6W`+P&) z=>?DI;dgUCfEvo+(>VhwIT{MI^%J7n`@Y;DdvG&!e`=<%t@p#~dQfxg z?3ZdJp?(aRCML9B%xwDVtwmiQ9R#(cxMwHE%>pd(%XW@aw__x-3k|W)lzalaBNJve z`w96h`_nV{OhaliT2PJ8L3I$Zf#Vc(Ok&L>_hv|r*D4{3955f&l?>K&$O}EohGP^{ z*_W41xPa~Mxf7m|!FKklm37!$k#IM7H5HnVIs_i>vs=ma3y!+(D@|nW8O&TXH$*)#0fSMspcUglj&2KTUQ%d;9%|z zw4Id$&PUkL5Sv1D$7eb@gP_t&HX|lCbRq8$zn6;eq*ny!pd!{ z%!udlcar4=i6G;=L-seZThC$N+#<3Kh7noi^I+Rbj#0cU%XBeZDbvc_oTZA^`tP`+ z=BkJbWqOud?UGnNf!yNxj01(|Hzly9!7M-FdA|n&8-TzYH2KlJTKg;n9pTk}bg%5{ zcasB!se9($E7u_Ht2});w`C=k-*h{MMA5jf)@yNj$9jj31N8y1ABF*3r%6FBY9zr! z?3*V(I}Bt$omY8PEq95&-S2;(vUqE;o<*T$`6vB$XraxZh_#zhX5kVb-!2N+%WGd| zJXn`?R-Rer-cH)Z!8g*dG6nG_%_e3}5yzf%Z^{a<2Rl7WxrmhmC|2-H~+cH>cr(DR(5Y&ON= zvbEBALEgLJ%@D3I5YxL%UNQ;Z8P4<_YX?w_x#d<~6qld)TI>nQF>mWs^_Y#S4J_DD zWmA&2L+f5Ot}P!fmJy3(R2Sprs*$-|D5dMf@7GDw;ioZdJ9!@mW5GHHpki@piabt@l9#Jm(`ZnGkz@S14KtEF4WiQw5Kl zzny+7h&Ts>b^;P*`q}5}in958rQ<50u+spKC(n*&E3s63N68A-tBEThs4Dgc>_G?1 z*deUwGb3witzHXx23OpS`Bd(LkRPp}!yTi*ISot&HZ;1FxPqjpQlc|MUyDNjia+o`P90 zpN&C&DjLGj(LTkjiQSeMmyr(8Fa6>Gc36jwUrWP3@{zw(a9aDqG)XVo2q< zMxYX5a0-qMXjTaYl&tu$O@WRj6=e1r>W`sns($1cRqQc73wI(Y0iMRT_x{|`Gwm_F zDzI1>*mRe-3RPWJ*zO7m<-y32u60Ds3F{RM0W3FTpXBsqr4cKOXd0}M7Q)mlKMwt* z6fgtl{Ho$OY{jn>V1!{{R-YxoBUj#YD(H3HmAopB>vxpF*d0GmsR1|o?RAK;Q;{hD5KDRDM^sy^ z_R++2CfTEh&_<4r=2q?ic5cv`Ky@M@mJG&SkTG6#N5sa6HQjq-&|D=H(E1W+BhN>c z)EIlJ9B+cR)n{th!9EO$Hlun(vZrt2g)LXNAJ-~!LqGXyxNhn5H=YJ z5Mp_7UNb6`N6#!O1s0wPtl6EL`( z>jB{5VWwlyeKJTjw`^$}DZM;izuLfhgzv6XC>*?7sGwin**Mj}gS&uQLYeRIyr6X- zI7V>G-mA^CJSrd&(Qz%PAEsOR?~1}>*#OLu#W=jV`zb$3DI4Q;*Bu?PKU5bR^o!fn zsX1zdsPhN80Sj$YwTM}(p_6fUALO699d|{%1nZz%JhEN0x=?^YZ+nr(gkYl`Ah=De zF#>6-%I+`t{-U@hZ9a7o$f>QL@ z?#bkv!5rb*8f2YfYA)w$=k<`b{%tF3YmfuGE5E&Xcv{yyJ}yLo#?u_wS}=SA3W0|ZgjtteuV4XOFjEhml^AwwNCj0FUmKIC1gDf`MJ`&WRQI`jT4TsJRZ%a4FSpV{GvW_BCq89F)7C2~%Ogn2lj-))*e%*5m%!f6G5;dBEhB zhV0x2IFzK)?bxN{)EiC@1DUs7w-z(ggY7Oxsr7$TCQy|1$wYYpK127Qf4rI~0)I=c88k zW&O~gnu5>(!De`)h8%C`{xgMbt+&|4@?XTP>*8??@JHuBOeyttRCJfgP4l+MJis}^ z1g&=T7jF&n=5#af6I`5Yr0u9nKdBX_N9f+u_jGk}jmUm8V( zW1I;QfX4~XM#0qK2-Y|f_<|`tB|{mRQ`>kN9Ii-5vnL9#{Vf#_QgNI{R(Nq;OkHguTo-2$6km3ly+P)lOush>^J^vs}Vra%D*Y2k^bXO)9nuCpja1K1e}6HP$3 zh4&R%_3{D4^I&7tJoi#z=QX0I;RVLO3q25W0Fhclrs}|WN)#~mgMGPq+g5{*1B?f) zTH6ceGcvt%O)80f3Lw`%Wcs}_(+mMcZ?eI&>RTi&6p*;2x6|w4v;cz3@0+KW|7I#9 z!O1%GtH5u_2RTX0l6L*Tz8Bj5xMDk0tP;~FN~-`lSg_W1m~2Wj^Hy){?|DKgU15`~ zJ`cbNt&vKlm@Blu;pK>d2hFFN^8(Mm^o7&=Apo*0AZR8EfbnrSvgoyx=LJ)3@G8r# zT-A^Fo}ZHiFSdA4gUaam@36}N@+1dsek={z6sYHS3>p0Zi)2d+CO#l<6yqPh-0wh# z%&5fv_HBG_%#mP)^D3*&yvd?=l+9c&2XXnyrVu#56~+T2ju;7BIEbZRVi^ZQS)agb zui@SxEC%SGIG{O^<3lC(ygl&e#HZ2s%HbPewzlE$Hhlf>mnG%9_c7Q5;erh8FF?RB zq9{hpVHjxZHaRyC@L7H%on`K#bXv_ErVL2k(f#+^)y>;l(*XTn%^79kK37l(dTX_)l( zVV&pChB|3-KQ5eT3(|g_L6r0*9~iZrw31FJ)~#a@j#_+{0|~Aij=zc7G5015= z;H+O}8A>GJQLB3TLEMtEy@1g9!Ux7?Cu!uMBAmZ8WSw&hWU{FGzU!!3q{wFM-?1iZSPHe00LFRYGZCC00aa) z=PWH#Erl^3QWXs7*5!zS`Ax>>njM)H09`3{O5!6t)J)5a_@X4!4D_&pCDm zbB-2MzZwSoKLD6}du;)8-_b%PjfTN7%sIzIV>nqGj<_3|5k-CaqSiTio_%`eiy*DiEIvdS?2frElOG_4R>{Q& zG%*BoPfp8CC+*t8b&X=cD*%Iia>BEpyB+&;tj(G@i(7%eBMU+&@tG!o_ml_Jff*Na zDi2`RQO6}|x*Wy@<_cluI0(nUj%d!4UB2Hjh#9(cZlrW;s~89!X98S4bU6(E+H28C z5zfFWQppJY1gP=P>bABz8LK**?=x~~TNyeAG55}eD9B%c{{d9o0#g0nEh1?Ju=yAi zh6iW8Vr3@(4iAv4NQF(Mx9P;UH-m09er7MYMOOoRQYCbBL?4G_WYBH4dcOuvoz*GQ zxtN`mt!}Hc3UqxcHmKwi{11S15N;~-rVZk@z^gN`loS*2=5R;8J&>I!4?q=Ey#ozF zO6+aW!j;~AAv~}dU-(k*s%Md8=CPJtgCn50w|kQ_%>s9CX+9J&Dg3TGc*{yV=E=f< zFmSEbZ!1R&M^9yv#4av!BBl?VPIfaj zZHp3>NyR#NbyaP7%NN@W9_QE1e)9_5rv%>io)e1qwBk84G`yDf{FaxX<1xG)tREAjUrABdvR1deo7`HJmIWnh=CgHxdmF0}DXn0^z{i7LIA>lhIXhgUc~cF15NF(HnxsjXfE=g3cLhd()}~A?C)F$A zs(rvHKpKY?FC3`C{C>(`jsbM#2FDdc4#jPE#@%3mz>|-@zpGQiamrxZb`JMcbzK78XfqXl_X{MI~Pr5mEd4SRXCHzy;Bcm=43L62qG_#ev|7iL8`e*&bDwo`T z+%BfE0HYvvHu$vD{Ea>XR0t_L<^ZnMYyEZ7_1xB{hd|qI0EttMWd-q!TZ0(X`z|=2 z_h{@^{KJV)zrAmr7SZ1YDSkerc;O_7(eYpD@6UZ*bTS%^1na07J}xf>ocEd~ zOX>7e!UYM@g^k_wIJ|55LcNPxdr)e%epo*)+kcLR;eG*O_Prlh8( z_ER4m4r|h|iv6aeYaI1c1U&zEsKN~~;!19_u(cI1#P{OgKB%(NyGO*M;h$CC^D17D z>FwP$(S#9tBWP59G^Yq0#nFRN53wD_et!yJ=+iu#p~~s3&8`$R^yZvq#9M%aV#AUS;J3-!QE>iuNpXB2--w}7tv@BR!6$mm5${}0<3e>IMfzp-mf!+b<4l+N#SHqeb`dj+@vw|ykA*kg& zbWH>tUZpEbrZ%j64IqM-oa2ccVC)$`r>DP;5>0K`RX_-7X))FV2UsWG-gk;8Ezi=e zEr#S=xjlr}gHNEAPt7yA*)-Brvq&H_K+ErcJH?X;%48Xl$qy>*d=`d!BX=ZTXP4a^ zDs^d@iWD(*^xlrvG?in5d_~Urc3!NccF5!*soak-@u(YXb$(qV-j}0eVkS3NSn}h+ zdXDQeMY{l7lQE0XIi{mSeLP;P*_f?;UKxyE7JTqF{7N}|-O^C%gAFXW1jYXR?#}~* zc>a73H}tIUP7$d2kmAmb@6?~C3^~Gz09>b}!Q0UA^^W5oF{gG$Lh=9Av5`wQN(I%b l!T*l{*gJrr|C_UhQ^<(%FMku3>;MZ>QPQ}PbM4{t{|2GR*9!mu literal 0 HcmV?d00001 diff --git a/docs/rules/examples/ad-hoc-sub-process-incorrect.bpmn b/docs/rules/examples/ad-hoc-sub-process-incorrect.bpmn new file mode 100644 index 0000000..197b540 --- /dev/null +++ b/docs/rules/examples/ad-hoc-sub-process-incorrect.bpmn @@ -0,0 +1,42 @@ + + + + + + + + + + + Flow_0ej0cl8 + + + Flow_0ej0cl8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/rules/examples/ad-hoc-sub-process-incorrect.png b/docs/rules/examples/ad-hoc-sub-process-incorrect.png new file mode 100644 index 0000000000000000000000000000000000000000..64887d0735e8d8e1e8d4b4e2ca766061fabac61a GIT binary patch literal 23180 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 Vx@F6fJBL95;_2$=vd$@?2>{NMNHhQd literal 0 HcmV?d00001 diff --git a/rules/ad-hoc-sub-process.js b/rules/ad-hoc-sub-process.js new file mode 100644 index 0000000..791dc71 --- /dev/null +++ b/rules/ad-hoc-sub-process.js @@ -0,0 +1,45 @@ +const { + is, + isAny +} = require('bpmnlint-utils'); + +/** + * A rule that ensures that an Ad Hoc Sub Process is valid according to the BPMN spec: + * + * - No start or end events + * - Every intermediate event has an outgoing sequence flow + */ +module.exports = function() { + + function check(node, reporter) { + + if (!is(node, 'bpmn:AdHocSubProcess')) { + return; + } + + const flowElements = node.flowElements || []; + + flowElements.forEach(function(flowElement) { + + if (is(flowElement, 'bpmn:StartEvent')) { + reporter.report(flowElement.id, 'A is not allowed in '); + } + + if (is(flowElement, 'bpmn:EndEvent')) { + reporter.report(flowElement.id, 'An is not allowed in '); + } + + if (isAny(flowElement, [ 'bpmn:IntermediateCatchEvent', 'bpmn:IntermediateThrowEvent' ])) { + if (!flowElement.outgoing || flowElement.outgoing.length === 0) { + reporter.report(flowElement.id, 'An intermediate event inside must have an outgoing sequence flow'); + } + } + + }); + } + + return { + check + }; + +}; \ No newline at end of file diff --git a/test/integration/compilation/test/bpmnlintrc.expected.js b/test/integration/compilation/test/bpmnlintrc.expected.js index a53770e..0144c83 100644 --- a/test/integration/compilation/test/bpmnlintrc.expected.js +++ b/test/integration/compilation/test/bpmnlintrc.expected.js @@ -29,6 +29,7 @@ Resolver.prototype.resolveConfig = function(pkg, configName) { const resolver = new Resolver(); const rules = { + "ad-hoc-sub-process": "error", "conditional-flows": "error", "end-event-required": "error", "event-sub-process-typed-start-event": "error", @@ -72,114 +73,118 @@ export { resolver, config }; export default bundle; -import rule_0 from 'bpmnlint/rules/conditional-flows'; +import rule_0 from 'bpmnlint/rules/ad-hoc-sub-process'; -cache['bpmnlint/conditional-flows'] = rule_0; +cache['bpmnlint/ad-hoc-sub-process'] = rule_0; -import rule_1 from 'bpmnlint/rules/end-event-required'; +import rule_1 from 'bpmnlint/rules/conditional-flows'; -cache['bpmnlint/end-event-required'] = rule_1; +cache['bpmnlint/conditional-flows'] = rule_1; -import rule_2 from 'bpmnlint/rules/event-sub-process-typed-start-event'; +import rule_2 from 'bpmnlint/rules/end-event-required'; -cache['bpmnlint/event-sub-process-typed-start-event'] = rule_2; +cache['bpmnlint/end-event-required'] = rule_2; -import rule_3 from 'bpmnlint/rules/fake-join'; +import rule_3 from 'bpmnlint/rules/event-sub-process-typed-start-event'; -cache['bpmnlint/fake-join'] = rule_3; +cache['bpmnlint/event-sub-process-typed-start-event'] = rule_3; -import rule_4 from 'bpmnlint/rules/global'; +import rule_4 from 'bpmnlint/rules/fake-join'; -cache['bpmnlint/global'] = rule_4; +cache['bpmnlint/fake-join'] = rule_4; -import rule_5 from 'bpmnlint/rules/label-required'; +import rule_5 from 'bpmnlint/rules/global'; -cache['bpmnlint/label-required'] = rule_5; +cache['bpmnlint/global'] = rule_5; -import rule_6 from 'bpmnlint/rules/link-event'; +import rule_6 from 'bpmnlint/rules/label-required'; -cache['bpmnlint/link-event'] = rule_6; +cache['bpmnlint/label-required'] = rule_6; -import rule_7 from 'bpmnlint/rules/no-bpmndi'; +import rule_7 from 'bpmnlint/rules/link-event'; -cache['bpmnlint/no-bpmndi'] = rule_7; +cache['bpmnlint/link-event'] = rule_7; -import rule_8 from 'bpmnlint/rules/no-complex-gateway'; +import rule_8 from 'bpmnlint/rules/no-bpmndi'; -cache['bpmnlint/no-complex-gateway'] = rule_8; +cache['bpmnlint/no-bpmndi'] = rule_8; -import rule_9 from 'bpmnlint/rules/no-disconnected'; +import rule_9 from 'bpmnlint/rules/no-complex-gateway'; -cache['bpmnlint/no-disconnected'] = rule_9; +cache['bpmnlint/no-complex-gateway'] = rule_9; -import rule_10 from 'bpmnlint/rules/no-duplicate-sequence-flows'; +import rule_10 from 'bpmnlint/rules/no-disconnected'; -cache['bpmnlint/no-duplicate-sequence-flows'] = rule_10; +cache['bpmnlint/no-disconnected'] = rule_10; -import rule_11 from 'bpmnlint/rules/no-gateway-join-fork'; +import rule_11 from 'bpmnlint/rules/no-duplicate-sequence-flows'; -cache['bpmnlint/no-gateway-join-fork'] = rule_11; +cache['bpmnlint/no-duplicate-sequence-flows'] = rule_11; -import rule_12 from 'bpmnlint/rules/no-implicit-split'; +import rule_12 from 'bpmnlint/rules/no-gateway-join-fork'; -cache['bpmnlint/no-implicit-split'] = rule_12; +cache['bpmnlint/no-gateway-join-fork'] = rule_12; -import rule_13 from 'bpmnlint/rules/no-implicit-end'; +import rule_13 from 'bpmnlint/rules/no-implicit-split'; -cache['bpmnlint/no-implicit-end'] = rule_13; +cache['bpmnlint/no-implicit-split'] = rule_13; -import rule_14 from 'bpmnlint/rules/no-implicit-start'; +import rule_14 from 'bpmnlint/rules/no-implicit-end'; -cache['bpmnlint/no-implicit-start'] = rule_14; +cache['bpmnlint/no-implicit-end'] = rule_14; -import rule_15 from 'bpmnlint/rules/no-inclusive-gateway'; +import rule_15 from 'bpmnlint/rules/no-implicit-start'; -cache['bpmnlint/no-inclusive-gateway'] = rule_15; +cache['bpmnlint/no-implicit-start'] = rule_15; -import rule_16 from 'bpmnlint/rules/no-overlapping-elements'; +import rule_16 from 'bpmnlint/rules/no-inclusive-gateway'; -cache['bpmnlint/no-overlapping-elements'] = rule_16; +cache['bpmnlint/no-inclusive-gateway'] = rule_16; -import rule_17 from 'bpmnlint/rules/single-blank-start-event'; +import rule_17 from 'bpmnlint/rules/no-overlapping-elements'; -cache['bpmnlint/single-blank-start-event'] = rule_17; +cache['bpmnlint/no-overlapping-elements'] = rule_17; -import rule_18 from 'bpmnlint/rules/single-event-definition'; +import rule_18 from 'bpmnlint/rules/single-blank-start-event'; -cache['bpmnlint/single-event-definition'] = rule_18; +cache['bpmnlint/single-blank-start-event'] = rule_18; -import rule_19 from 'bpmnlint/rules/start-event-required'; +import rule_19 from 'bpmnlint/rules/single-event-definition'; -cache['bpmnlint/start-event-required'] = rule_19; +cache['bpmnlint/single-event-definition'] = rule_19; -import rule_20 from 'bpmnlint/rules/sub-process-blank-start-event'; +import rule_20 from 'bpmnlint/rules/start-event-required'; -cache['bpmnlint/sub-process-blank-start-event'] = rule_20; +cache['bpmnlint/start-event-required'] = rule_20; -import rule_21 from 'bpmnlint/rules/superfluous-gateway'; +import rule_21 from 'bpmnlint/rules/sub-process-blank-start-event'; -cache['bpmnlint/superfluous-gateway'] = rule_21; +cache['bpmnlint/sub-process-blank-start-event'] = rule_21; -import rule_22 from 'bpmnlint/rules/superfluous-termination'; +import rule_22 from 'bpmnlint/rules/superfluous-gateway'; -cache['bpmnlint/superfluous-termination'] = rule_22; +cache['bpmnlint/superfluous-gateway'] = rule_22; -import rule_23 from 'bpmnlint-plugin-test/rules/no-label-foo'; +import rule_23 from 'bpmnlint/rules/superfluous-termination'; -cache['bpmnlint-plugin-test/no-label-foo'] = rule_23; +cache['bpmnlint/superfluous-termination'] = rule_23; -import rule_24 from 'bpmnlint-plugin-exported/src/foo'; +import rule_24 from 'bpmnlint-plugin-test/rules/no-label-foo'; -cache['bpmnlint-plugin-exported/foo'] = rule_24; +cache['bpmnlint-plugin-test/no-label-foo'] = rule_24; -import rule_25 from 'bpmnlint-plugin-exported/src/bar'; +import rule_25 from 'bpmnlint-plugin-exported/src/foo'; -cache['bpmnlint-plugin-exported/bar'] = rule_25; +cache['bpmnlint-plugin-exported/foo'] = rule_25; -import rule_26 from 'bpmnlint-plugin-exported/rules/baz'; +import rule_26 from 'bpmnlint-plugin-exported/src/bar'; -cache['bpmnlint-plugin-exported/baz'] = rule_26; +cache['bpmnlint-plugin-exported/bar'] = rule_26; -import rule_27 from 'bpmnlint-plugin-exported/src/foo'; +import rule_27 from 'bpmnlint-plugin-exported/rules/baz'; -cache['bpmnlint-plugin-exported/foo-absolute'] = rule_27; \ No newline at end of file +cache['bpmnlint-plugin-exported/baz'] = rule_27; + +import rule_28 from 'bpmnlint-plugin-exported/src/foo'; + +cache['bpmnlint-plugin-exported/foo-absolute'] = rule_28; \ No newline at end of file diff --git a/test/rules/ad-hoc-sub-process.mjs b/test/rules/ad-hoc-sub-process.mjs new file mode 100644 index 0000000..06221fd --- /dev/null +++ b/test/rules/ad-hoc-sub-process.mjs @@ -0,0 +1,50 @@ +import RuleTester from '../../lib/testers/rule-tester.js'; + +import rule from '../../rules/ad-hoc-sub-process.js'; + +import { + readModdle +} from '../../lib/testers/helper.js'; + +import { stubCJS } from '../helper.mjs'; + +const { + __dirname +} = stubCJS(import.meta.url); + + +RuleTester.verify('ad-hoc-sub-process', rule, { + valid: [ + { + moddleElement: readModdle(__dirname + '/ad-hoc-sub-process/valid.bpmn') + } + ], + invalid: [ + { + moddleElement: readModdle(__dirname + '/ad-hoc-sub-process/invalid-start-end.bpmn'), + report: [ + { + id: 'StartEvent', + message: 'A is not allowed in ' + }, + { + id: 'EndEvent', + message: 'An is not allowed in ' + } + ] + }, + { + moddleElement: readModdle(__dirname + '/ad-hoc-sub-process/invalid-intermediate.bpmn'), + report: [ + { + id: 'ThrowEvent', + message: 'An intermediate event inside must have an outgoing sequence flow' + }, + { + id: 'CatchEvent', + message: 'An intermediate event inside must have an outgoing sequence flow' + } + ] + } + ] +}); \ No newline at end of file diff --git a/test/rules/ad-hoc-sub-process/invalid-intermediate.bpmn b/test/rules/ad-hoc-sub-process/invalid-intermediate.bpmn new file mode 100644 index 0000000..416bf56 --- /dev/null +++ b/test/rules/ad-hoc-sub-process/invalid-intermediate.bpmn @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/rules/ad-hoc-sub-process/invalid-start-end.bpmn b/test/rules/ad-hoc-sub-process/invalid-start-end.bpmn new file mode 100644 index 0000000..05f2b90 --- /dev/null +++ b/test/rules/ad-hoc-sub-process/invalid-start-end.bpmn @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/rules/ad-hoc-sub-process/valid.bpmn b/test/rules/ad-hoc-sub-process/valid.bpmn new file mode 100644 index 0000000..1a98ade --- /dev/null +++ b/test/rules/ad-hoc-sub-process/valid.bpmn @@ -0,0 +1,53 @@ + + + + + + Flow_1h8yyeu + + + + Flow_0wahprq + + + Flow_1h8yyeu + + + Flow_0wahprq + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +