mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 04:44:08 +01:00 
			
		
		
		
	Compare commits
	
		
			536 Commits
		
	
	
		
			release/10
			...
			gh-readonl
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c5d3244511 | ||
| 
						 | 
					c41cdcaf23 | ||
| 
						 | 
					99d3701a85 | ||
| 
						 | 
					6413529a6e | ||
| 
						 | 
					f5e1df08a0 | ||
| 
						 | 
					472a883c73 | ||
| 
						 | 
					22bd26272d | ||
| 
						 | 
					da150e8767 | ||
| 
						 | 
					1f64452716 | ||
| 
						 | 
					9986b023d7 | ||
| 
						 | 
					e68125eb6a | ||
| 
						 | 
					4f1c3547bf | ||
| 
						 | 
					e102ac2b58 | ||
| 
						 | 
					63dca5bb86 | ||
| 
						 | 
					bc7ecf330b | ||
| 
						 | 
					d4e00de1fd | ||
| 
						 | 
					c4ccfec316 | ||
| 
						 | 
					1ac9244e68 | ||
| 
						 | 
					8265e53128 | ||
| 
						 | 
					d316b05fa1 | ||
| 
						 | 
					3000f0208f | ||
| 
						 | 
					e49c95c220 | ||
| 
						 | 
					47c5abb8a5 | ||
| 
						 | 
					be9b349e51 | ||
| 
						 | 
					18defaae6d | ||
| 
						 | 
					7f33ae0f40 | ||
| 
						 | 
					13aa3265e3 | ||
| 
						 | 
					3b0687e557 | ||
| 
						 | 
					273941a9fe | ||
| 
						 | 
					718811be9c | ||
| 
						 | 
					8d9cb09261 | ||
| 
						 | 
					196d88559c | ||
| 
						 | 
					3809732e48 | ||
| 
						 | 
					eb4a6fd2ed | ||
| 
						 | 
					3357844a1f | ||
| 
						 | 
					0d8fe3b626 | ||
| 
						 | 
					5df988d2ac | ||
| 
						 | 
					e9ef277929 | ||
| 
						 | 
					2dcdcba227 | ||
| 
						 | 
					5b6c5dff0a | ||
| 
						 | 
					7fa887b644 | ||
| 
						 | 
					5c6b2cf490 | ||
| 
						 | 
					e0930b5cbb | ||
| 
						 | 
					2a3d03254d | ||
| 
						 | 
					e570863801 | ||
| 
						 | 
					866d9416b4 | ||
| 
						 | 
					e048085b5a | ||
| 
						 | 
					9ed2f4b2d3 | ||
| 
						 | 
					c2eb2184fc | ||
| 
						 | 
					bb0c45b090 | ||
| 
						 | 
					d0583f9947 | ||
| 
						 | 
					12bd301401 | ||
| 
						 | 
					a14637b416 | ||
| 
						 | 
					5d1ac22fd1 | ||
| 
						 | 
					3ccfea84b8 | ||
| 
						 | 
					38beca11fd | ||
| 
						 | 
					3555577581 | ||
| 
						 | 
					e852596862 | ||
| 
						 | 
					f15fde26f9 | ||
| 
						 | 
					73c426f8be | ||
| 
						 | 
					8f40c1a77f | ||
| 
						 | 
					0d00e88580 | ||
| 
						 | 
					8792e0a978 | ||
| 
						 | 
					e27e56f7bf | ||
| 
						 | 
					0051620840 | ||
| 
						 | 
					63f9d3e0b4 | ||
| 
						 | 
					90b1111382 | ||
| 
						 | 
					0aa526d707 | ||
| 
						 | 
					4daef2591d | ||
| 
						 | 
					2fd6de0af5 | ||
| 
						 | 
					799af4e550 | ||
| 
						 | 
					b8e0bcee5b | ||
| 
						 | 
					3567308a22 | ||
| 
						 | 
					4ee4555cbd | ||
| 
						 | 
					253adcb0eb | ||
| 
						 | 
					585609b907 | ||
| 
						 | 
					1d8332d61e | ||
| 
						 | 
					3f95c78428 | ||
| 
						 | 
					8e95c4db55 | ||
| 
						 | 
					f476a7566c | ||
| 
						 | 
					4304fba0f5 | ||
| 
						 | 
					07bd9825a1 | ||
| 
						 | 
					69c7cb9f6f | ||
| 
						 | 
					fd473af5b0 | ||
| 
						 | 
					d1f02f6bed | ||
| 
						 | 
					c5cc9dbffa | ||
| 
						 | 
					43e183b658 | ||
| 
						 | 
					153f319666 | ||
| 
						 | 
					3b8e6ecc42 | ||
| 
						 | 
					29ec8cbd0a | ||
| 
						 | 
					3072604070 | ||
| 
						 | 
					562d10809c | ||
| 
						 | 
					c00bf26c77 | ||
| 
						 | 
					a2f54f7da4 | ||
| 
						 | 
					12bf139708 | ||
| 
						 | 
					dbb69ad7cd | ||
| 
						 | 
					b78f16ef19 | ||
| 
						 | 
					223f339682 | ||
| 
						 | 
					3f556fa3fc | ||
| 
						 | 
					16db0c039f | ||
| 
						 | 
					94874ddbbe | ||
| 
						 | 
					ea86697973 | ||
| 
						 | 
					fa1605e7e7 | ||
| 
						 | 
					0edef7b3cb | ||
| 
						 | 
					64757670fc | ||
| 
						 | 
					edac77de74 | ||
| 
						 | 
					63e3b1af52 | ||
| 
						 | 
					f6fa88e5ff | ||
| 
						 | 
					78587e11c7 | ||
| 
						 | 
					784d06f0ae | ||
| 
						 | 
					6846c8f2ed | ||
| 
						 | 
					cfa4501793 | ||
| 
						 | 
					16f1dccd22 | ||
| 
						 | 
					3278899787 | ||
| 
						 | 
					cdbee64086 | ||
| 
						 | 
					90e134cb26 | ||
| 
						 | 
					725b618111 | ||
| 
						 | 
					f135a3a5e7 | ||
| 
						 | 
					8f8e4806a9 | ||
| 
						 | 
					100123b43e | ||
| 
						 | 
					45a5424ebf | ||
| 
						 | 
					be37f2c576 | ||
| 
						 | 
					26ed819664 | ||
| 
						 | 
					f907ac30c6 | ||
| 
						 | 
					60be7012aa | ||
| 
						 | 
					002d493035 | ||
| 
						 | 
					a41d6cfef1 | ||
| 
						 | 
					ecfa149efc | ||
| 
						 | 
					be1270d070 | ||
| 
						 | 
					75ee4b7709 | ||
| 
						 | 
					d5b1028732 | ||
| 
						 | 
					6c0be03e62 | ||
| 
						 | 
					7ddea1270f | ||
| 
						 | 
					97578c2d3d | ||
| 
						 | 
					64806ed169 | ||
| 
						 | 
					a14c3bcc89 | ||
| 
						 | 
					1699a23ff0 | ||
| 
						 | 
					268c3fdbd8 | ||
| 
						 | 
					7689e03739 | ||
| 
						 | 
					d875540b3a | ||
| 
						 | 
					16aa9a310c | ||
| 
						 | 
					d0a008566e | ||
| 
						 | 
					d6c1a59bd4 | ||
| 
						 | 
					07117b4c8a | ||
| 
						 | 
					b914f48a91 | ||
| 
						 | 
					de89355a49 | ||
| 
						 | 
					d370dd43b1 | ||
| 
						 | 
					c90d7b8395 | ||
| 
						 | 
					4feb2e639b | ||
| 
						 | 
					37ba7af6f6 | ||
| 
						 | 
					10fb85663f | ||
| 
						 | 
					d68b59a390 | ||
| 
						 | 
					007fb5deb9 | ||
| 
						 | 
					75a6fb1d91 | ||
| 
						 | 
					32c2aecc62 | ||
| 
						 | 
					b0ef0de032 | ||
| 
						 | 
					92692653a7 | ||
| 
						 | 
					77ba19cd04 | ||
| 
						 | 
					5b43460ea4 | ||
| 
						 | 
					579f1f9dc1 | ||
| 
						 | 
					de4ad764ce | ||
| 
						 | 
					33444466f3 | ||
| 
						 | 
					73888eafe1 | ||
| 
						 | 
					648f779e2c | ||
| 
						 | 
					b1915132d5 | ||
| 
						 | 
					05f59f6ed2 | ||
| 
						 | 
					233944bf24 | ||
| 
						 | 
					424d988f93 | ||
| 
						 | 
					5f84344c3c | ||
| 
						 | 
					01082f86b7 | ||
| 
						 | 
					9fa681f5a8 | ||
| 
						 | 
					36b6733c4f | ||
| 
						 | 
					2c195c73a9 | ||
| 
						 | 
					1dd05ffbb1 | ||
| 
						 | 
					4884b01b8a | ||
| 
						 | 
					46136b5632 | ||
| 
						 | 
					ae29dd124c | ||
| 
						 | 
					703460ea95 | ||
| 
						 | 
					b7c889bb70 | ||
| 
						 | 
					12bbbcaff0 | ||
| 
						 | 
					b156c1ab25 | ||
| 
						 | 
					358d855c88 | ||
| 
						 | 
					1059dd389f | ||
| 
						 | 
					f1bcf89723 | ||
| 
						 | 
					099a239207 | ||
| 
						 | 
					821076ba9c | ||
| 
						 | 
					60dd27671b | ||
| 
						 | 
					0b0d901b7f | ||
| 
						 | 
					7fec51f322 | ||
| 
						 | 
					1659ace65d | ||
| 
						 | 
					3340608689 | ||
| 
						 | 
					5ccdb6f213 | ||
| 
						 | 
					0981b66a5f | ||
| 
						 | 
					3ddcc2d4ea | ||
| 
						 | 
					6005479918 | ||
| 
						 | 
					19e049642b | ||
| 
						 | 
					b8e6672e60 | ||
| 
						 | 
					a43cd55c53 | ||
| 
						 | 
					b67dee1eed | ||
| 
						 | 
					be6b3176f4 | ||
| 
						 | 
					aef29affa3 | ||
| 
						 | 
					70d236244f | ||
| 
						 | 
					171a2019ec | ||
| 
						 | 
					70df6bbbca | ||
| 
						 | 
					5807d521b7 | ||
| 
						 | 
					67e482ff97 | ||
| 
						 | 
					2b2bbe35d0 | ||
| 
						 | 
					8862d63377 | ||
| 
						 | 
					fc7427536c | ||
| 
						 | 
					0cb365cf31 | ||
| 
						 | 
					49a0d0d9bf | ||
| 
						 | 
					3602191f69 | ||
| 
						 | 
					5935e277e6 | ||
| 
						 | 
					0ce33cb160 | ||
| 
						 | 
					d945030803 | ||
| 
						 | 
					60a484f1e4 | ||
| 
						 | 
					c8fc989237 | ||
| 
						 | 
					392ebd0af4 | ||
| 
						 | 
					cabcf1e270 | ||
| 
						 | 
					af7364bdf9 | ||
| 
						 | 
					14e1e6368a | ||
| 
						 | 
					f1aa6fff9c | ||
| 
						 | 
					d11bfaa6c4 | ||
| 
						 | 
					25cd86feec | ||
| 
						 | 
					062176d8d0 | ||
| 
						 | 
					a344d88020 | ||
| 
						 | 
					30b180d77b | ||
| 
						 | 
					00423ed152 | ||
| 
						 | 
					48ff3b2c11 | ||
| 
						 | 
					eee0d4bf31 | ||
| 
						 | 
					e047755a21 | ||
| 
						 | 
					b30d609d19 | ||
| 
						 | 
					8ad056b8a2 | ||
| 
						 | 
					c1cb171071 | ||
| 
						 | 
					17959f648a | ||
| 
						 | 
					c3d9aa791a | ||
| 
						 | 
					f846e7719e | ||
| 
						 | 
					f25c215f6a | ||
| 
						 | 
					2640120be8 | ||
| 
						 | 
					b55014617e | ||
| 
						 | 
					42589a0034 | ||
| 
						 | 
					82c405289d | ||
| 
						 | 
					191ea24e29 | ||
| 
						 | 
					72a6fad1db | ||
| 
						 | 
					a2a99485f9 | ||
| 
						 | 
					969e2c1ff1 | ||
| 
						 | 
					7d0faa3fed | ||
| 
						 | 
					4256177531 | ||
| 
						 | 
					327530fb9d | ||
| 
						 | 
					55be75c974 | ||
| 
						 | 
					47a6ce4342 | ||
| 
						 | 
					3ecb841c1a | ||
| 
						 | 
					1d2450245e | ||
| 
						 | 
					f6c4c9260f | ||
| 
						 | 
					f354d68350 | ||
| 
						 | 
					bea76aa682 | ||
| 
						 | 
					6d4b27aacb | ||
| 
						 | 
					e008b7dae7 | ||
| 
						 | 
					96a3991c56 | ||
| 
						 | 
					8d1d691bc3 | ||
| 
						 | 
					e07608209b | ||
| 
						 | 
					50cdb74d54 | ||
| 
						 | 
					edc091f4d4 | ||
| 
						 | 
					e0448a7b7b | ||
| 
						 | 
					0f02f5ff34 | ||
| 
						 | 
					b2111adef5 | ||
| 
						 | 
					442da6c4a2 | ||
| 
						 | 
					f715863540 | ||
| 
						 | 
					ed7dbb100d | ||
| 
						 | 
					52fdea0419 | ||
| 
						 | 
					b7c72cb38a | ||
| 
						 | 
					5cc20b5e44 | ||
| 
						 | 
					ce9a9db33a | ||
| 
						 | 
					31e19a0434 | ||
| 
						 | 
					16968eb38c | ||
| 
						 | 
					5c46b98eee | ||
| 
						 | 
					ba46747cb0 | ||
| 
						 | 
					140645b760 | ||
| 
						 | 
					0dcca35ec2 | ||
| 
						 | 
					c7eaee037e | ||
| 
						 | 
					fa201ad9ad | ||
| 
						 | 
					832e3f5d49 | ||
| 
						 | 
					6a1a38b395 | ||
| 
						 | 
					6261fce91f | ||
| 
						 | 
					e8f655439d | ||
| 
						 | 
					c11093fa71 | ||
| 
						 | 
					af7282511a | ||
| 
						 | 
					58b6cf0174 | ||
| 
						 | 
					7abcb61afb | ||
| 
						 | 
					ff5240c0bc | ||
| 
						 | 
					4e3d935acf | ||
| 
						 | 
					3fad11e104 | ||
| 
						 | 
					aab7631a9f | ||
| 
						 | 
					38ee1724a8 | ||
| 
						 | 
					0c7e2e2364 | ||
| 
						 | 
					f693084065 | ||
| 
						 | 
					a5ecc7a06d | ||
| 
						 | 
					565f1543c6 | ||
| 
						 | 
					0d8016d926 | ||
| 
						 | 
					a599e33ec2 | ||
| 
						 | 
					36c84b3fec | ||
| 
						 | 
					9cca389031 | ||
| 
						 | 
					e965507470 | ||
| 
						 | 
					65fd3a3193 | ||
| 
						 | 
					3bbd8fe4c9 | ||
| 
						 | 
					beb308c5b3 | ||
| 
						 | 
					526d2a61f8 | ||
| 
						 | 
					8ab00442ea | ||
| 
						 | 
					cba803abaf | ||
| 
						 | 
					54a09ead95 | ||
| 
						 | 
					c2ea23f01f | ||
| 
						 | 
					ff6188bd80 | ||
| 
						 | 
					dc1b2a6873 | ||
| 
						 | 
					d732a146c2 | ||
| 
						 | 
					b9bc518a0a | ||
| 
						 | 
					edf32911be | ||
| 
						 | 
					b8470a471b | ||
| 
						 | 
					45880395ea | ||
| 
						 | 
					6f3c9205cd | ||
| 
						 | 
					96c90b24d1 | ||
| 
						 | 
					aa4bfa0727 | ||
| 
						 | 
					8873ffca12 | ||
| 
						 | 
					0bda748ad9 | ||
| 
						 | 
					867686fe34 | ||
| 
						 | 
					60f92dcdbc | ||
| 
						 | 
					6871ad09e6 | ||
| 
						 | 
					479188bc40 | ||
| 
						 | 
					c3c7ccd78a | ||
| 
						 | 
					000b432bb2 | ||
| 
						 | 
					dacd2cbc30 | ||
| 
						 | 
					65a08efa00 | ||
| 
						 | 
					60266289e0 | ||
| 
						 | 
					3145758411 | ||
| 
						 | 
					d7948a845d | ||
| 
						 | 
					aff69e583e | ||
| 
						 | 
					e7f7b6ad68 | ||
| 
						 | 
					b5e58f4076 | ||
| 
						 | 
					fd0f51926e | ||
| 
						 | 
					733d6fe6eb | ||
| 
						 | 
					b2509c82b8 | ||
| 
						 | 
					bffbf87cb3 | ||
| 
						 | 
					63890cc2fd | ||
| 
						 | 
					9ade49b39c | ||
| 
						 | 
					6d49cd6859 | ||
| 
						 | 
					5eb116059b | ||
| 
						 | 
					bcdd1c56bf | ||
| 
						 | 
					cbcd2cce9b | ||
| 
						 | 
					94c3d7fb60 | ||
| 
						 | 
					a2db4a464a | ||
| 
						 | 
					fe7da97c5c | ||
| 
						 | 
					c294a0a9ac | ||
| 
						 | 
					30fe363b57 | ||
| 
						 | 
					4ec57836d8 | ||
| 
						 | 
					5b7ba838f1 | ||
| 
						 | 
					ac99eb59d2 | ||
| 
						 | 
					1be09df9d4 | ||
| 
						 | 
					38b3a2080b | ||
| 
						 | 
					0fec0ef624 | ||
| 
						 | 
					f0d6789722 | ||
| 
						 | 
					7ef61d58fd | ||
| 
						 | 
					96ae4a5967 | ||
| 
						 | 
					bca645f63d | ||
| 
						 | 
					a8105f084e | ||
| 
						 | 
					e86f09aaed | ||
| 
						 | 
					692a7471c1 | ||
| 
						 | 
					480645d22f | ||
| 
						 | 
					784a853ec7 | ||
| 
						 | 
					088fc392ab | ||
| 
						 | 
					0d7644c782 | ||
| 
						 | 
					f15d24b4e8 | ||
| 
						 | 
					510549f365 | ||
| 
						 | 
					99313fe162 | ||
| 
						 | 
					f9df193b7b | ||
| 
						 | 
					113a400952 | ||
| 
						 | 
					b6983e4b21 | ||
| 
						 | 
					fc400ea57b | ||
| 
						 | 
					068a74adeb | ||
| 
						 | 
					1a8743ec11 | ||
| 
						 | 
					9925b9b455 | ||
| 
						 | 
					4c43bae92d | ||
| 
						 | 
					659db9f04b | ||
| 
						 | 
					b88d1dfaa9 | ||
| 
						 | 
					7c79bbd6b0 | ||
| 
						 | 
					ce6bfcb7f5 | ||
| 
						 | 
					6ce543e118 | ||
| 
						 | 
					cd9bf03fb7 | ||
| 
						 | 
					1d88ac43cf | ||
| 
						 | 
					6102285577 | ||
| 
						 | 
					b83603488c | ||
| 
						 | 
					cf22e30237 | ||
| 
						 | 
					f01971b67c | ||
| 
						 | 
					c62be1bb45 | ||
| 
						 | 
					cf1880343b | ||
| 
						 | 
					0c57433567 | ||
| 
						 | 
					5ef0527ebc | ||
| 
						 | 
					53ef5c51cc | ||
| 
						 | 
					58c7934dd8 | ||
| 
						 | 
					0a626917f8 | ||
| 
						 | 
					922bb1452f | ||
| 
						 | 
					1cda37659e | ||
| 
						 | 
					fe2e46fe60 | ||
| 
						 | 
					7765afa7da | ||
| 
						 | 
					55d7e9ec61 | ||
| 
						 | 
					6a4ad8af06 | ||
| 
						 | 
					018440354f | ||
| 
						 | 
					6d2904cff1 | ||
| 
						 | 
					55fac29b3e | ||
| 
						 | 
					5e966d60b0 | ||
| 
						 | 
					c08f927d60 | ||
| 
						 | 
					49a197eaa8 | ||
| 
						 | 
					3abe7cfc45 | ||
| 
						 | 
					8c31db6352 | ||
| 
						 | 
					91eb824c21 | ||
| 
						 | 
					00e66c48b8 | ||
| 
						 | 
					589f90762a | ||
| 
						 | 
					f256a57f27 | ||
| 
						 | 
					1102bf271d | ||
| 
						 | 
					b561d5ad9a | ||
| 
						 | 
					a5cb58ca96 | ||
| 
						 | 
					0af77a3c2c | ||
| 
						 | 
					a75d14f5d0 | ||
| 
						 | 
					bca39e8081 | ||
| 
						 | 
					3e3519e8ec | ||
| 
						 | 
					566150977a | ||
| 
						 | 
					0ff3ba30b7 | ||
| 
						 | 
					43885e6d0b | ||
| 
						 | 
					577f0ca562 | ||
| 
						 | 
					56d339b8f0 | ||
| 
						 | 
					bd1e7a7c13 | ||
| 
						 | 
					5f41b65af1 | ||
| 
						 | 
					3c90894e38 | ||
| 
						 | 
					0dbebe953b | ||
| 
						 | 
					16c12a42c7 | ||
| 
						 | 
					136f1c50e7 | ||
| 
						 | 
					043729f557 | ||
| 
						 | 
					75f1f9228d | ||
| 
						 | 
					38d9c6d26b | ||
| 
						 | 
					afd7cf51cf | ||
| 
						 | 
					c41594d220 | ||
| 
						 | 
					fedbd48c0f | ||
| 
						 | 
					271b779995 | ||
| 
						 | 
					52b33f6f47 | ||
| 
						 | 
					5aee43d05b | ||
| 
						 | 
					7b29a380fc | ||
| 
						 | 
					997c23befa | ||
| 
						 | 
					24d43849a0 | ||
| 
						 | 
					4ce26296d6 | ||
| 
						 | 
					4342759da7 | ||
| 
						 | 
					25f2d224f1 | ||
| 
						 | 
					8b8b828cd1 | ||
| 
						 | 
					65dabeaf15 | ||
| 
						 | 
					0480339272 | ||
| 
						 | 
					b09cdc0a18 | ||
| 
						 | 
					c3b86b687c | ||
| 
						 | 
					0abb4f8c6f | ||
| 
						 | 
					697ac18872 | ||
| 
						 | 
					fc229cf274 | ||
| 
						 | 
					b48136d994 | ||
| 
						 | 
					77ba7c987a | ||
| 
						 | 
					84f3baf013 | ||
| 
						 | 
					795baedbb1 | ||
| 
						 | 
					5469a7eb71 | ||
| 
						 | 
					23fc7c2c96 | ||
| 
						 | 
					dff404a8c9 | ||
| 
						 | 
					146364aa67 | ||
| 
						 | 
					258dbf30e0 | ||
| 
						 | 
					44b93c039a | ||
| 
						 | 
					4d5313699e | ||
| 
						 | 
					cd198290d7 | ||
| 
						 | 
					60ed7d3273 | ||
| 
						 | 
					9bcfba6620 | ||
| 
						 | 
					7ea3c64268 | ||
| 
						 | 
					2b6a34e9e0 | ||
| 
						 | 
					458b90c78d | ||
| 
						 | 
					dd284c0986 | ||
| 
						 | 
					21539dfb6a | ||
| 
						 | 
					91785b8284 | ||
| 
						 | 
					f202770b70 | ||
| 
						 | 
					8186a54962 | ||
| 
						 | 
					866909b803 | ||
| 
						 | 
					408910e6e8 | ||
| 
						 | 
					24c8e575f4 | ||
| 
						 | 
					8d0ca2c876 | ||
| 
						 | 
					fc96ebefd4 | ||
| 
						 | 
					394330175f | ||
| 
						 | 
					f946c3da06 | ||
| 
						 | 
					156fbd1958 | ||
| 
						 | 
					7dd0d126e2 | ||
| 
						 | 
					205360c109 | ||
| 
						 | 
					984a0e6d06 | ||
| 
						 | 
					eb63568ceb | ||
| 
						 | 
					cc6f896b69 | ||
| 
						 | 
					83e47a7216 | ||
| 
						 | 
					1d64549cce | ||
| 
						 | 
					d0c36c0de3 | ||
| 
						 | 
					341db13279 | ||
| 
						 | 
					1c8e13b9c1 | ||
| 
						 | 
					49c5f3bb9c | ||
| 
						 | 
					4ae361bd1f | ||
| 
						 | 
					6502496a2c | ||
| 
						 | 
					8678ceeb3c | ||
| 
						 | 
					9cb62f4d2e | ||
| 
						 | 
					6c0ef54e18 | ||
| 
						 | 
					fd731c5ccd | ||
| 
						 | 
					cbe9490dc0 | ||
| 
						 | 
					82054bfabc | ||
| 
						 | 
					963dd75c39 | ||
| 
						 | 
					1c24617f98 | ||
| 
						 | 
					1559c2ca21 | ||
| 
						 | 
					6141722b1f | ||
| 
						 | 
					222d8eed4e | ||
| 
						 | 
					718d52a72c | ||
| 
						 | 
					fe1a06271a | ||
| 
						 | 
					bd2370555b | ||
| 
						 | 
					86c9ee4e90 | ||
| 
						 | 
					b26bcf1343 | ||
| 
						 | 
					5d5c6275f9 | ||
| 
						 | 
					9c1a47d1fc | ||
| 
						 | 
					13852b7f4e | ||
| 
						 | 
					4fd7a88a15 | ||
| 
						 | 
					5c2a6b5eb1 | ||
| 
						 | 
					9cbebbb8a0 | ||
| 
						 | 
					e26d987c4e | ||
| 
						 | 
					53669efaf8 | ||
| 
						 | 
					b68f45ef59 | ||
| 
						 | 
					8f44de651b | ||
| 
						 | 
					2ede244da0 | ||
| 
						 | 
					77a181978e | ||
| 
						 | 
					170bbce0d3 | ||
| 
						 | 
					fc99d9be41 | ||
| 
						 | 
					9fb9bed806 | ||
| 
						 | 
					01b2f80a95 | ||
| 
						 | 
					da7ff777d1 | ||
| 
						 | 
					8d48f8d8b0 | ||
| 
						 | 
					b4618f9ba1 | ||
| 
						 | 
					2c5d83fab3 | 
							
								
								
									
										30
									
								
								.build/common.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								.build/common.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Shared common options for both ESBuild and Vite
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export const packageOptions = {
 | 
				
			||||||
 | 
					  parser: {
 | 
				
			||||||
 | 
					    name: 'mermaid-parser',
 | 
				
			||||||
 | 
					    packageName: 'parser',
 | 
				
			||||||
 | 
					    file: 'index.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mermaid: {
 | 
				
			||||||
 | 
					    name: 'mermaid',
 | 
				
			||||||
 | 
					    packageName: 'mermaid',
 | 
				
			||||||
 | 
					    file: 'mermaid.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'mermaid-example-diagram': {
 | 
				
			||||||
 | 
					    name: 'mermaid-example-diagram',
 | 
				
			||||||
 | 
					    packageName: 'mermaid-example-diagram',
 | 
				
			||||||
 | 
					    file: 'detector.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'mermaid-zenuml': {
 | 
				
			||||||
 | 
					    name: 'mermaid-zenuml',
 | 
				
			||||||
 | 
					    packageName: 'mermaid-zenuml',
 | 
				
			||||||
 | 
					    file: 'detector.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'mermaid-flowchart-elk': {
 | 
				
			||||||
 | 
					    name: 'mermaid-flowchart-elk',
 | 
				
			||||||
 | 
					    packageName: 'mermaid-flowchart-elk',
 | 
				
			||||||
 | 
					    file: 'detector.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					} as const;
 | 
				
			||||||
							
								
								
									
										5
									
								
								.build/generateLangium.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.build/generateLangium.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					import { generate } from 'langium-cli';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export async function generateLangium() {
 | 
				
			||||||
 | 
					  await generate({ file: `./packages/parser/langium-config.json` });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										124
									
								
								.build/jsonSchema.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								.build/jsonSchema.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
				
			|||||||
 | 
					import { load, JSON_SCHEMA } from 'js-yaml';
 | 
				
			||||||
 | 
					import assert from 'node:assert';
 | 
				
			||||||
 | 
					import Ajv2019, { type JSONSchemaType } from 'ajv/dist/2019.js';
 | 
				
			||||||
 | 
					import type { MermaidConfig, BaseDiagramConfig } from '../packages/mermaid/src/config.type.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * All of the keys in the mermaid config that have a mermaid diagram config.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const MERMAID_CONFIG_DIAGRAM_KEYS = [
 | 
				
			||||||
 | 
					  'flowchart',
 | 
				
			||||||
 | 
					  'sequence',
 | 
				
			||||||
 | 
					  'gantt',
 | 
				
			||||||
 | 
					  'journey',
 | 
				
			||||||
 | 
					  'class',
 | 
				
			||||||
 | 
					  'state',
 | 
				
			||||||
 | 
					  'er',
 | 
				
			||||||
 | 
					  'pie',
 | 
				
			||||||
 | 
					  'quadrantChart',
 | 
				
			||||||
 | 
					  'xyChart',
 | 
				
			||||||
 | 
					  'requirement',
 | 
				
			||||||
 | 
					  'mindmap',
 | 
				
			||||||
 | 
					  'timeline',
 | 
				
			||||||
 | 
					  'gitGraph',
 | 
				
			||||||
 | 
					  'c4',
 | 
				
			||||||
 | 
					  'sankey',
 | 
				
			||||||
 | 
					  'block',
 | 
				
			||||||
 | 
					  'packet',
 | 
				
			||||||
 | 
					] as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Generate default values from the JSON Schema.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * AJV does not support nested default values yet (or default values with $ref),
 | 
				
			||||||
 | 
					 * so we need to manually find them (this may be fixed in ajv v9).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param mermaidConfigSchema - The Mermaid JSON Schema to use.
 | 
				
			||||||
 | 
					 * @returns The default mermaid config object.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function generateDefaults(mermaidConfigSchema: JSONSchemaType<MermaidConfig>) {
 | 
				
			||||||
 | 
					  const ajv = new Ajv2019({
 | 
				
			||||||
 | 
					    useDefaults: true,
 | 
				
			||||||
 | 
					    allowUnionTypes: true,
 | 
				
			||||||
 | 
					    strict: true,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ajv.addKeyword({
 | 
				
			||||||
 | 
					    keyword: 'meta:enum', // used by jsonschema2md
 | 
				
			||||||
 | 
					    errors: false,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  ajv.addKeyword({
 | 
				
			||||||
 | 
					    keyword: 'tsType', // used by json-schema-to-typescript
 | 
				
			||||||
 | 
					    errors: false,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ajv currently doesn't support nested default values, see https://github.com/ajv-validator/ajv/issues/1718
 | 
				
			||||||
 | 
					  // (may be fixed in v9) so we need to manually use sub-schemas
 | 
				
			||||||
 | 
					  const mermaidDefaultConfig = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  assert.ok(mermaidConfigSchema.$defs);
 | 
				
			||||||
 | 
					  const baseDiagramConfig = mermaidConfigSchema.$defs.BaseDiagramConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (const key of MERMAID_CONFIG_DIAGRAM_KEYS) {
 | 
				
			||||||
 | 
					    const subSchemaRef = mermaidConfigSchema.properties[key].$ref;
 | 
				
			||||||
 | 
					    const [root, defs, defName] = subSchemaRef.split('/');
 | 
				
			||||||
 | 
					    assert.strictEqual(root, '#');
 | 
				
			||||||
 | 
					    assert.strictEqual(defs, '$defs');
 | 
				
			||||||
 | 
					    const subSchema = {
 | 
				
			||||||
 | 
					      $schema: mermaidConfigSchema.$schema,
 | 
				
			||||||
 | 
					      $defs: mermaidConfigSchema.$defs,
 | 
				
			||||||
 | 
					      ...mermaidConfigSchema.$defs[defName],
 | 
				
			||||||
 | 
					    } as JSONSchemaType<BaseDiagramConfig>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const validate = ajv.compile(subSchema);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mermaidDefaultConfig[key] = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const required of subSchema.required ?? []) {
 | 
				
			||||||
 | 
					      if (subSchema.properties[required] === undefined && baseDiagramConfig.properties[required]) {
 | 
				
			||||||
 | 
					        mermaidDefaultConfig[key][required] = baseDiagramConfig.properties[required].default;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!validate(mermaidDefaultConfig[key])) {
 | 
				
			||||||
 | 
					      throw new Error(
 | 
				
			||||||
 | 
					        `schema for subconfig ${key} does not have valid defaults! Errors were ${JSON.stringify(
 | 
				
			||||||
 | 
					          validate.errors,
 | 
				
			||||||
 | 
					          undefined,
 | 
				
			||||||
 | 
					          2
 | 
				
			||||||
 | 
					        )}`
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const validate = ajv.compile(mermaidConfigSchema);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!validate(mermaidDefaultConfig)) {
 | 
				
			||||||
 | 
					    throw new Error(
 | 
				
			||||||
 | 
					      `Mermaid config JSON Schema does not have valid defaults! Errors were ${JSON.stringify(
 | 
				
			||||||
 | 
					        validate.errors,
 | 
				
			||||||
 | 
					        undefined,
 | 
				
			||||||
 | 
					        2
 | 
				
			||||||
 | 
					      )}`
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return mermaidDefaultConfig;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const loadSchema = (src: string, filename: string): JSONSchemaType<MermaidConfig> => {
 | 
				
			||||||
 | 
					  const jsonSchema = load(src, {
 | 
				
			||||||
 | 
					    filename,
 | 
				
			||||||
 | 
					    // only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
 | 
				
			||||||
 | 
					    // e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
 | 
				
			||||||
 | 
					    schema: JSON_SCHEMA,
 | 
				
			||||||
 | 
					  }) as JSONSchemaType<MermaidConfig>;
 | 
				
			||||||
 | 
					  return jsonSchema;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const getDefaults = (schema: JSONSchemaType<MermaidConfig>) => {
 | 
				
			||||||
 | 
					  return `export default ${JSON.stringify(generateDefaults(schema), undefined, 2)};`;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const getSchema = (schema: JSONSchemaType<MermaidConfig>) => {
 | 
				
			||||||
 | 
					  return `export default ${JSON.stringify(schema, undefined, 2)};`;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										18
									
								
								.build/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.build/types.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					import { packageOptions } from './common.js';
 | 
				
			||||||
 | 
					import { execSync } from 'child_process';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const buildType = (packageName: string) => {
 | 
				
			||||||
 | 
					  console.log(`Building types for ${packageName}`);
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    const out = execSync(`tsc -p ./packages/${packageName}/tsconfig.json --emitDeclarationOnly`);
 | 
				
			||||||
 | 
					    out.length > 0 && console.log(out.toString());
 | 
				
			||||||
 | 
					  } catch (e) {
 | 
				
			||||||
 | 
					    console.error(e);
 | 
				
			||||||
 | 
					    e.stdout.length > 0 && console.error(e.stdout.toString());
 | 
				
			||||||
 | 
					    e.stderr.length > 0 && console.error(e.stderr.toString());
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for (const { packageName } of Object.values(packageOptions)) {
 | 
				
			||||||
 | 
					  buildType(packageName);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "extends": ["@commitlint/config-conventional"]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -53,6 +53,7 @@ GENERICTYPE
 | 
				
			|||||||
getBoundarys
 | 
					getBoundarys
 | 
				
			||||||
grammr
 | 
					grammr
 | 
				
			||||||
graphtype
 | 
					graphtype
 | 
				
			||||||
 | 
					iife
 | 
				
			||||||
interp
 | 
					interp
 | 
				
			||||||
introdcued
 | 
					introdcued
 | 
				
			||||||
INVTRAPEND
 | 
					INVTRAPEND
 | 
				
			||||||
@@ -74,11 +75,13 @@ loglevel
 | 
				
			|||||||
LOGMSG
 | 
					LOGMSG
 | 
				
			||||||
lookaheads
 | 
					lookaheads
 | 
				
			||||||
mdast
 | 
					mdast
 | 
				
			||||||
 | 
					metafile
 | 
				
			||||||
minlen
 | 
					minlen
 | 
				
			||||||
Mstartx
 | 
					Mstartx
 | 
				
			||||||
MULT
 | 
					MULT
 | 
				
			||||||
NODIR
 | 
					NODIR
 | 
				
			||||||
NSTR
 | 
					NSTR
 | 
				
			||||||
 | 
					outdir
 | 
				
			||||||
Qcontrolx
 | 
					Qcontrolx
 | 
				
			||||||
reinit
 | 
					reinit
 | 
				
			||||||
rels
 | 
					rels
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										65
									
								
								.esbuild/build.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								.esbuild/build.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					import { build } from 'esbuild';
 | 
				
			||||||
 | 
					import { mkdir, writeFile } from 'node:fs/promises';
 | 
				
			||||||
 | 
					import { packageOptions } from '../.build/common.js';
 | 
				
			||||||
 | 
					import { generateLangium } from '../.build/generateLangium.js';
 | 
				
			||||||
 | 
					import { MermaidBuildOptions, defaultOptions, getBuildConfig } from './util.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const shouldVisualize = process.argv.includes('--visualize');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
				
			||||||
 | 
					  const commonOptions = { ...defaultOptions, entryName } as const;
 | 
				
			||||||
 | 
					  const buildConfigs = [
 | 
				
			||||||
 | 
					    // package.mjs
 | 
				
			||||||
 | 
					    { ...commonOptions },
 | 
				
			||||||
 | 
					    // package.min.mjs
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      ...commonOptions,
 | 
				
			||||||
 | 
					      minify: true,
 | 
				
			||||||
 | 
					      metafile: shouldVisualize,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // package.core.mjs
 | 
				
			||||||
 | 
					    { ...commonOptions, core: true },
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (entryName === 'mermaid') {
 | 
				
			||||||
 | 
					    const iifeOptions: MermaidBuildOptions = { ...commonOptions, format: 'iife' };
 | 
				
			||||||
 | 
					    buildConfigs.push(
 | 
				
			||||||
 | 
					      // mermaid.js
 | 
				
			||||||
 | 
					      { ...iifeOptions },
 | 
				
			||||||
 | 
					      // mermaid.min.js
 | 
				
			||||||
 | 
					      { ...iifeOptions, minify: true, metafile: shouldVisualize }
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const results = await Promise.all(buildConfigs.map((option) => build(getBuildConfig(option))));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (shouldVisualize) {
 | 
				
			||||||
 | 
					    for (const { metafile } of results) {
 | 
				
			||||||
 | 
					      if (!metafile) {
 | 
				
			||||||
 | 
					        continue;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      const fileName = Object.keys(metafile.outputs)
 | 
				
			||||||
 | 
					        .filter((file) => !file.includes('chunks') && file.endsWith('js'))[0]
 | 
				
			||||||
 | 
					        .replace('dist/', '');
 | 
				
			||||||
 | 
					      // Upload metafile into https://esbuild.github.io/analyze/
 | 
				
			||||||
 | 
					      await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const handler = (e) => {
 | 
				
			||||||
 | 
					  console.error(e);
 | 
				
			||||||
 | 
					  process.exit(1);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const main = async () => {
 | 
				
			||||||
 | 
					  await generateLangium();
 | 
				
			||||||
 | 
					  await mkdir('stats').catch(() => {});
 | 
				
			||||||
 | 
					  const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
 | 
				
			||||||
 | 
					  // it should build `parser` before `mermaid` because it's a dependency
 | 
				
			||||||
 | 
					  for (const pkg of packageNames) {
 | 
				
			||||||
 | 
					    await buildPackage(pkg).catch(handler);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main();
 | 
				
			||||||
							
								
								
									
										15
									
								
								.esbuild/jisonPlugin.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.esbuild/jisonPlugin.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					import { readFile } from 'node:fs/promises';
 | 
				
			||||||
 | 
					import { transformJison } from '../.build/jisonTransformer.js';
 | 
				
			||||||
 | 
					import { Plugin } from 'esbuild';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const jisonPlugin: Plugin = {
 | 
				
			||||||
 | 
					  name: 'jison',
 | 
				
			||||||
 | 
					  setup(build) {
 | 
				
			||||||
 | 
					    build.onLoad({ filter: /\.jison$/ }, async (args) => {
 | 
				
			||||||
 | 
					      // Load the file from the file system
 | 
				
			||||||
 | 
					      const source = await readFile(args.path, 'utf8');
 | 
				
			||||||
 | 
					      const contents = transformJison(source);
 | 
				
			||||||
 | 
					      return { contents, warnings: [] };
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										35
									
								
								.esbuild/jsonSchemaPlugin.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								.esbuild/jsonSchemaPlugin.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					import type { JSONSchemaType } from 'ajv/dist/2019.js';
 | 
				
			||||||
 | 
					import type { MermaidConfig } from '../packages/mermaid/src/config.type.js';
 | 
				
			||||||
 | 
					import { readFile } from 'node:fs/promises';
 | 
				
			||||||
 | 
					import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * ESBuild plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Use `my-example.schema.yaml?only-defaults=true` to only load the default values.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const jsonSchemaPlugin = {
 | 
				
			||||||
 | 
					  name: 'json-schema-plugin',
 | 
				
			||||||
 | 
					  setup(build) {
 | 
				
			||||||
 | 
					    let schema: JSONSchemaType<MermaidConfig> | undefined = undefined;
 | 
				
			||||||
 | 
					    let content = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    build.onLoad({ filter: /config\.schema\.yaml$/ }, async (args) => {
 | 
				
			||||||
 | 
					      // Load the file from the file system
 | 
				
			||||||
 | 
					      const source = await readFile(args.path, 'utf8');
 | 
				
			||||||
 | 
					      const resolvedSchema: JSONSchemaType<MermaidConfig> =
 | 
				
			||||||
 | 
					        content === source && schema ? schema : loadSchema(source, args.path);
 | 
				
			||||||
 | 
					      if (content !== source) {
 | 
				
			||||||
 | 
					        content = source;
 | 
				
			||||||
 | 
					        schema = resolvedSchema;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      const contents = args.suffix.includes('only-defaults')
 | 
				
			||||||
 | 
					        ? getDefaults(resolvedSchema)
 | 
				
			||||||
 | 
					        : getSchema(resolvedSchema);
 | 
				
			||||||
 | 
					      return { contents, warnings: [] };
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default jsonSchemaPlugin;
 | 
				
			||||||
							
								
								
									
										102
									
								
								.esbuild/server.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								.esbuild/server.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
				
			|||||||
 | 
					import express from 'express';
 | 
				
			||||||
 | 
					import type { NextFunction, Request, Response } from 'express';
 | 
				
			||||||
 | 
					import cors from 'cors';
 | 
				
			||||||
 | 
					import { getBuildConfig, defaultOptions } from './util.js';
 | 
				
			||||||
 | 
					import { context } from 'esbuild';
 | 
				
			||||||
 | 
					import chokidar from 'chokidar';
 | 
				
			||||||
 | 
					import { generateLangium } from '../.build/generateLangium.js';
 | 
				
			||||||
 | 
					import { packageOptions } from '../.build/common.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const configs = Object.values(packageOptions).map(({ packageName }) =>
 | 
				
			||||||
 | 
					  getBuildConfig({ ...defaultOptions, minify: false, core: false, entryName: packageName })
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					const mermaidIIFEConfig = getBuildConfig({
 | 
				
			||||||
 | 
					  ...defaultOptions,
 | 
				
			||||||
 | 
					  minify: false,
 | 
				
			||||||
 | 
					  core: false,
 | 
				
			||||||
 | 
					  entryName: 'mermaid',
 | 
				
			||||||
 | 
					  format: 'iife',
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					configs.push(mermaidIIFEConfig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const contexts = await Promise.all(configs.map((config) => context(config)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const rebuildAll = async () => {
 | 
				
			||||||
 | 
					  console.time('Rebuild time');
 | 
				
			||||||
 | 
					  await Promise.all(contexts.map((ctx) => ctx.rebuild())).catch((e) => console.error(e));
 | 
				
			||||||
 | 
					  console.timeEnd('Rebuild time');
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let clients: { id: number; response: Response }[] = [];
 | 
				
			||||||
 | 
					function eventsHandler(request: Request, response: Response, next: NextFunction) {
 | 
				
			||||||
 | 
					  const headers = {
 | 
				
			||||||
 | 
					    'Content-Type': 'text/event-stream',
 | 
				
			||||||
 | 
					    Connection: 'keep-alive',
 | 
				
			||||||
 | 
					    'Cache-Control': 'no-cache',
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  response.writeHead(200, headers);
 | 
				
			||||||
 | 
					  const clientId = Date.now();
 | 
				
			||||||
 | 
					  clients.push({
 | 
				
			||||||
 | 
					    id: clientId,
 | 
				
			||||||
 | 
					    response,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  request.on('close', () => {
 | 
				
			||||||
 | 
					    clients = clients.filter((client) => client.id !== clientId);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let timeoutId: NodeJS.Timeout | undefined = undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Debounce file change events to avoid rebuilding multiple times.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function handleFileChange() {
 | 
				
			||||||
 | 
					  if (timeoutId !== undefined) {
 | 
				
			||||||
 | 
					    clearTimeout(timeoutId);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  timeoutId = setTimeout(async () => {
 | 
				
			||||||
 | 
					    await rebuildAll();
 | 
				
			||||||
 | 
					    sendEventsToAll();
 | 
				
			||||||
 | 
					    timeoutId = undefined;
 | 
				
			||||||
 | 
					  }, 100);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function sendEventsToAll() {
 | 
				
			||||||
 | 
					  clients.forEach(({ response }) => response.write(`data: ${Date.now()}\n\n`));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function createServer() {
 | 
				
			||||||
 | 
					  await generateLangium();
 | 
				
			||||||
 | 
					  handleFileChange();
 | 
				
			||||||
 | 
					  const app = express();
 | 
				
			||||||
 | 
					  chokidar
 | 
				
			||||||
 | 
					    .watch('**/src/**/*.{js,ts,langium,yaml,json}', {
 | 
				
			||||||
 | 
					      ignoreInitial: true,
 | 
				
			||||||
 | 
					      ignored: [/node_modules/, /dist/, /docs/, /coverage/],
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    .on('all', async (event, path) => {
 | 
				
			||||||
 | 
					      // Ignore other events.
 | 
				
			||||||
 | 
					      if (!['add', 'change'].includes(event)) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (/\.langium$/.test(path)) {
 | 
				
			||||||
 | 
					        await generateLangium();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      console.log(`${path} changed. Rebuilding...`);
 | 
				
			||||||
 | 
					      handleFileChange();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  app.use(cors());
 | 
				
			||||||
 | 
					  app.get('/events', eventsHandler);
 | 
				
			||||||
 | 
					  for (const { packageName } of Object.values(packageOptions)) {
 | 
				
			||||||
 | 
					    app.use(express.static(`./packages/${packageName}/dist`));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  app.use(express.static('demos'));
 | 
				
			||||||
 | 
					  app.use(express.static('cypress/platform'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  app.listen(9000, () => {
 | 
				
			||||||
 | 
					    console.log(`Listening on http://localhost:9000`);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					createServer();
 | 
				
			||||||
							
								
								
									
										101
									
								
								.esbuild/util.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								.esbuild/util.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
				
			|||||||
 | 
					import { resolve } from 'path';
 | 
				
			||||||
 | 
					import { fileURLToPath } from 'url';
 | 
				
			||||||
 | 
					import type { BuildOptions } from 'esbuild';
 | 
				
			||||||
 | 
					import { readFileSync } from 'fs';
 | 
				
			||||||
 | 
					import jsonSchemaPlugin from './jsonSchemaPlugin.js';
 | 
				
			||||||
 | 
					import { packageOptions } from '../.build/common.js';
 | 
				
			||||||
 | 
					import { jisonPlugin } from './jisonPlugin.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const __dirname = fileURLToPath(new URL('.', import.meta.url));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface MermaidBuildOptions {
 | 
				
			||||||
 | 
					  minify: boolean;
 | 
				
			||||||
 | 
					  core: boolean;
 | 
				
			||||||
 | 
					  metafile: boolean;
 | 
				
			||||||
 | 
					  format: 'esm' | 'iife';
 | 
				
			||||||
 | 
					  entryName: keyof typeof packageOptions;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const defaultOptions: Omit<MermaidBuildOptions, 'entryName'> = {
 | 
				
			||||||
 | 
					  minify: false,
 | 
				
			||||||
 | 
					  metafile: false,
 | 
				
			||||||
 | 
					  core: false,
 | 
				
			||||||
 | 
					  format: 'esm',
 | 
				
			||||||
 | 
					} as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const buildOptions = (override: BuildOptions): BuildOptions => {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    bundle: true,
 | 
				
			||||||
 | 
					    minify: true,
 | 
				
			||||||
 | 
					    keepNames: true,
 | 
				
			||||||
 | 
					    platform: 'browser',
 | 
				
			||||||
 | 
					    tsconfig: 'tsconfig.json',
 | 
				
			||||||
 | 
					    resolveExtensions: ['.ts', '.js', '.json', '.jison', '.yaml'],
 | 
				
			||||||
 | 
					    external: ['require', 'fs', 'path'],
 | 
				
			||||||
 | 
					    outdir: 'dist',
 | 
				
			||||||
 | 
					    plugins: [jisonPlugin, jsonSchemaPlugin],
 | 
				
			||||||
 | 
					    sourcemap: 'external',
 | 
				
			||||||
 | 
					    ...override,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOptions) => {
 | 
				
			||||||
 | 
					  if (core) {
 | 
				
			||||||
 | 
					    fileName += '.core';
 | 
				
			||||||
 | 
					  } else if (format === 'esm') {
 | 
				
			||||||
 | 
					    fileName += '.esm';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (minify) {
 | 
				
			||||||
 | 
					    fileName += '.min';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return fileName;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
 | 
				
			||||||
 | 
					  const { core, entryName, metafile, format, minify } = options;
 | 
				
			||||||
 | 
					  const external: string[] = ['require', 'fs', 'path'];
 | 
				
			||||||
 | 
					  const { name, file, packageName } = packageOptions[entryName];
 | 
				
			||||||
 | 
					  const outFileName = getFileName(name, options);
 | 
				
			||||||
 | 
					  let output: BuildOptions = buildOptions({
 | 
				
			||||||
 | 
					    absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
 | 
				
			||||||
 | 
					    entryPoints: {
 | 
				
			||||||
 | 
					      [outFileName]: `src/${file}`,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    metafile,
 | 
				
			||||||
 | 
					    minify,
 | 
				
			||||||
 | 
					    logLevel: 'info',
 | 
				
			||||||
 | 
					    chunkNames: `chunks/${outFileName}/[name]-[hash]`,
 | 
				
			||||||
 | 
					    define: {
 | 
				
			||||||
 | 
					      'import.meta.vitest': 'undefined',
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (core) {
 | 
				
			||||||
 | 
					    const { dependencies } = JSON.parse(
 | 
				
			||||||
 | 
					      readFileSync(resolve(__dirname, `../packages/${packageName}/package.json`), 'utf-8')
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    // Core build is used to generate file without bundled dependencies.
 | 
				
			||||||
 | 
					    // This is used by downstream projects to bundle dependencies themselves.
 | 
				
			||||||
 | 
					    // Ignore dependencies and any dependencies of dependencies
 | 
				
			||||||
 | 
					    external.push(...Object.keys(dependencies));
 | 
				
			||||||
 | 
					    output.external = external;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (format === 'iife') {
 | 
				
			||||||
 | 
					    output.format = 'iife';
 | 
				
			||||||
 | 
					    output.splitting = false;
 | 
				
			||||||
 | 
					    output.globalName = '__esbuild_esm_mermaid';
 | 
				
			||||||
 | 
					    // Workaround for removing the .default access in esbuild IIFE.
 | 
				
			||||||
 | 
					    // https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396
 | 
				
			||||||
 | 
					    output.footer = {
 | 
				
			||||||
 | 
					      js: 'globalThis.mermaid = globalThis.__esbuild_esm_mermaid.default;',
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    output.outExtension = { '.js': '.js' };
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    output.format = 'esm';
 | 
				
			||||||
 | 
					    output.splitting = true;
 | 
				
			||||||
 | 
					    output.outExtension = { '.js': '.mjs' };
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return output;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
dist/**
 | 
					 | 
				
			||||||
.github/**
 | 
					 | 
				
			||||||
docs/Setup.md
 | 
					 | 
				
			||||||
cypress.config.js
 | 
					 | 
				
			||||||
cypress/plugins/index.js
 | 
					 | 
				
			||||||
coverage
 | 
					 | 
				
			||||||
*.json
 | 
					 | 
				
			||||||
node_modules
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								.eslintignore
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								.eslintignore
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					.gitignore
 | 
				
			||||||
@@ -14,7 +14,7 @@ module.exports = {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    tsconfigRootDir: __dirname,
 | 
					    tsconfigRootDir: __dirname,
 | 
				
			||||||
    sourceType: 'module',
 | 
					    sourceType: 'module',
 | 
				
			||||||
    ecmaVersion: 2020,
 | 
					    ecmaVersion: 2022,
 | 
				
			||||||
    allowAutomaticSingleRunInference: true,
 | 
					    allowAutomaticSingleRunInference: true,
 | 
				
			||||||
    project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
 | 
					    project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
 | 
				
			||||||
    parser: '@typescript-eslint/parser',
 | 
					    parser: '@typescript-eslint/parser',
 | 
				
			||||||
@@ -23,7 +23,7 @@ module.exports = {
 | 
				
			|||||||
    'eslint:recommended',
 | 
					    'eslint:recommended',
 | 
				
			||||||
    'plugin:@typescript-eslint/recommended',
 | 
					    'plugin:@typescript-eslint/recommended',
 | 
				
			||||||
    'plugin:json/recommended',
 | 
					    'plugin:json/recommended',
 | 
				
			||||||
    'plugin:markdown/recommended',
 | 
					    'plugin:markdown/recommended-legacy',
 | 
				
			||||||
    'plugin:@cspell/recommended',
 | 
					    'plugin:@cspell/recommended',
 | 
				
			||||||
    'prettier',
 | 
					    'prettier',
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
@@ -53,6 +53,7 @@ module.exports = {
 | 
				
			|||||||
    '@typescript-eslint/no-floating-promises': 'error',
 | 
					    '@typescript-eslint/no-floating-promises': 'error',
 | 
				
			||||||
    '@typescript-eslint/no-misused-promises': 'error',
 | 
					    '@typescript-eslint/no-misused-promises': 'error',
 | 
				
			||||||
    '@typescript-eslint/no-unused-vars': 'warn',
 | 
					    '@typescript-eslint/no-unused-vars': 'warn',
 | 
				
			||||||
 | 
					    '@typescript-eslint/consistent-type-definitions': 'error',
 | 
				
			||||||
    '@typescript-eslint/ban-ts-comment': [
 | 
					    '@typescript-eslint/ban-ts-comment': [
 | 
				
			||||||
      'error',
 | 
					      'error',
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								.github/codecov.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/codecov.yaml
									
									
									
									
										vendored
									
									
								
							@@ -15,3 +15,4 @@ coverage:
 | 
				
			|||||||
      # Turing off for now as code coverage isn't stable and causes unnecessary build failures.
 | 
					      # Turing off for now as code coverage isn't stable and causes unnecessary build failures.
 | 
				
			||||||
      # default:
 | 
					      # default:
 | 
				
			||||||
      #   threshold: 2%
 | 
					      #   threshold: 2%
 | 
				
			||||||
 | 
					    patch: off
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							@@ -18,7 +18,7 @@ jobs:
 | 
				
			|||||||
      - name: Checkout
 | 
					      - name: Checkout
 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							@@ -18,7 +18,7 @@ jobs:
 | 
				
			|||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							@@ -33,7 +33,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      # Initializes the CodeQL tools for scanning.
 | 
					      # Initializes the CodeQL tools for scanning.
 | 
				
			||||||
      - name: Initialize CodeQL
 | 
					      - name: Initialize CodeQL
 | 
				
			||||||
        uses: github/codeql-action/init@v2
 | 
					        uses: github/codeql-action/init@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          config-file: ./.github/codeql/codeql-config.yml
 | 
					          config-file: ./.github/codeql/codeql-config.yml
 | 
				
			||||||
          languages: ${{ matrix.language }}
 | 
					          languages: ${{ matrix.language }}
 | 
				
			||||||
@@ -45,7 +45,7 @@ jobs:
 | 
				
			|||||||
      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
 | 
					      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
 | 
				
			||||||
      # If this step fails, then you should remove it and run the build manually (see below)
 | 
					      # If this step fails, then you should remove it and run the build manually (see below)
 | 
				
			||||||
      - name: Autobuild
 | 
					      - name: Autobuild
 | 
				
			||||||
        uses: github/codeql-action/autobuild@v2
 | 
					        uses: github/codeql-action/autobuild@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # ℹ️ Command-line programs to run using the OS shell.
 | 
					      # ℹ️ Command-line programs to run using the OS shell.
 | 
				
			||||||
      # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
 | 
					      # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
 | 
				
			||||||
@@ -59,4 +59,4 @@ jobs:
 | 
				
			|||||||
      #   make release
 | 
					      #   make release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Perform CodeQL Analysis
 | 
					      - name: Perform CodeQL Analysis
 | 
				
			||||||
        uses: github/codeql-action/analyze@v2
 | 
					        uses: github/codeql-action/analyze@v3
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							@@ -17,4 +17,4 @@ jobs:
 | 
				
			|||||||
      - name: 'Checkout Repository'
 | 
					      - name: 'Checkout Repository'
 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
      - name: 'Dependency Review'
 | 
					      - name: 'Dependency Review'
 | 
				
			||||||
        uses: actions/dependency-review-action@v3
 | 
					        uses: actions/dependency-review-action@v4
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							@@ -32,7 +32,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										60
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							@@ -17,9 +17,19 @@ permissions:
 | 
				
			|||||||
  contents: read
 | 
					  contents: read
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					env:
 | 
				
			||||||
  # For PRs and MergeQueues, the target commit is used, and for push events, github.event.previous is used.
 | 
					  # For PRs and MergeQueues, the target commit is used, and for push events to non-develop branches, github.event.previous is used if available. Otherwise, 'develop' is used.
 | 
				
			||||||
  targetHash: ${{ github.event.pull_request.base.sha || github.event.merge_group.base_sha || (github.event.before == '0000000000000000000000000000000000000000' && 'develop' || github.event.before)  }}
 | 
					  targetHash: >-
 | 
				
			||||||
 | 
					    ${{ 
 | 
				
			||||||
 | 
					      github.event.pull_request.base.sha || 
 | 
				
			||||||
 | 
					      github.event.merge_group.base_sha || 
 | 
				
			||||||
 | 
					      (
 | 
				
			||||||
 | 
					        (
 | 
				
			||||||
 | 
					          (github.event_name == 'push' && github.ref == 'refs/heads/develop') || 
 | 
				
			||||||
 | 
					          github.event.before == '0000000000000000000000000000000000000000'
 | 
				
			||||||
 | 
					        ) && 'develop'
 | 
				
			||||||
 | 
					      ) || 
 | 
				
			||||||
 | 
					      github.event.before
 | 
				
			||||||
 | 
					    }}
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  cache:
 | 
					  cache:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
@@ -28,7 +38,7 @@ jobs:
 | 
				
			|||||||
      options: --user 1001
 | 
					      options: --user 1001
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
@@ -48,11 +58,26 @@ jobs:
 | 
				
			|||||||
        with:
 | 
					        with:
 | 
				
			||||||
          ref: ${{ env.targetHash }}
 | 
					          ref: ${{ env.targetHash }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Install dependencies
 | 
				
			||||||
 | 
					        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
 | 
				
			||||||
 | 
					        uses: cypress-io/github-action@v6
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          # just perform install
 | 
				
			||||||
 | 
					          runTests: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Calculate bundle size
 | 
				
			||||||
 | 
					        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true'}}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          pnpm run build:viz
 | 
				
			||||||
 | 
					          mkdir -p cypress/snapshots/stats/base
 | 
				
			||||||
 | 
					          mv stats cypress/snapshots/stats/base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Cypress run
 | 
					      - name: Cypress run
 | 
				
			||||||
        uses: cypress-io/github-action@v4
 | 
					        uses: cypress-io/github-action@v6
 | 
				
			||||||
        id: cypress-snapshot-gen
 | 
					        id: cypress-snapshot-gen
 | 
				
			||||||
        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
 | 
					        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
 | 
					          install: false
 | 
				
			||||||
          start: pnpm run dev
 | 
					          start: pnpm run dev
 | 
				
			||||||
          wait-on: 'http://localhost:9000'
 | 
					          wait-on: 'http://localhost:9000'
 | 
				
			||||||
          browser: chrome
 | 
					          browser: chrome
 | 
				
			||||||
@@ -70,7 +95,7 @@ jobs:
 | 
				
			|||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
@@ -81,20 +106,35 @@ jobs:
 | 
				
			|||||||
      # These cached snapshots are downloaded, providing the reference snapshots.
 | 
					      # These cached snapshots are downloaded, providing the reference snapshots.
 | 
				
			||||||
      - name: Cache snapshots
 | 
					      - name: Cache snapshots
 | 
				
			||||||
        id: cache-snapshot
 | 
					        id: cache-snapshot
 | 
				
			||||||
        uses: actions/cache/restore@v3
 | 
					        uses: actions/cache/restore@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          path: ./cypress/snapshots
 | 
					          path: ./cypress/snapshots
 | 
				
			||||||
          key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
 | 
					          key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Install dependencies
 | 
				
			||||||
 | 
					        uses: cypress-io/github-action@v6
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          runTests: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Output size diff
 | 
				
			||||||
 | 
					        if: ${{ matrix.containers == 1 }}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          pnpm run build:viz
 | 
				
			||||||
 | 
					          mv stats cypress/snapshots/stats/head
 | 
				
			||||||
 | 
					          echo '## Bundle size difference' >> "$GITHUB_STEP_SUMMARY"
 | 
				
			||||||
 | 
					          echo '' >> "$GITHUB_STEP_SUMMARY"
 | 
				
			||||||
 | 
					          npx tsx scripts/size.ts >> "$GITHUB_STEP_SUMMARY"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Install NPM dependencies, cache them correctly
 | 
					      # Install NPM dependencies, cache them correctly
 | 
				
			||||||
      # and run all Cypress tests
 | 
					      # and run all Cypress tests
 | 
				
			||||||
      - name: Cypress run
 | 
					      - name: Cypress run
 | 
				
			||||||
        uses: cypress-io/github-action@v4
 | 
					        uses: cypress-io/github-action@v6
 | 
				
			||||||
        id: cypress
 | 
					        id: cypress
 | 
				
			||||||
        # If CYPRESS_RECORD_KEY is set, run in parallel on all containers
 | 
					        # If CYPRESS_RECORD_KEY is set, run in parallel on all containers
 | 
				
			||||||
        # Otherwise (e.g. if running from fork), we run on a single container only
 | 
					        # Otherwise (e.g. if running from fork), we run on a single container only
 | 
				
			||||||
        if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
 | 
					        if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
 | 
					          install: false
 | 
				
			||||||
          start: pnpm run dev:coverage
 | 
					          start: pnpm run dev:coverage
 | 
				
			||||||
          wait-on: 'http://localhost:9000'
 | 
					          wait-on: 'http://localhost:9000'
 | 
				
			||||||
          browser: chrome
 | 
					          browser: chrome
 | 
				
			||||||
@@ -108,7 +148,7 @@ jobs:
 | 
				
			|||||||
          CYPRESS_COMMIT: ${{ github.sha }}
 | 
					          CYPRESS_COMMIT: ${{ github.sha }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Upload Coverage to Codecov
 | 
					      - name: Upload Coverage to Codecov
 | 
				
			||||||
        uses: codecov/codecov-action@v3
 | 
					        uses: codecov/codecov-action@v4
 | 
				
			||||||
        # Run step only pushes to develop and pull_requests
 | 
					        # Run step only pushes to develop and pull_requests
 | 
				
			||||||
        if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
 | 
					        if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
@@ -145,7 +185,7 @@ jobs:
 | 
				
			|||||||
      - name: Save snapshots cache
 | 
					      - name: Save snapshots cache
 | 
				
			||||||
        id: cache-upload
 | 
					        id: cache-upload
 | 
				
			||||||
        if: ${{ github.event_name == 'push' && needs.e2e.result != 'failure' }}
 | 
					        if: ${{ github.event_name == 'push' && needs.e2e.result != 'failure' }}
 | 
				
			||||||
        uses: actions/cache/save@v3
 | 
					        uses: actions/cache/save@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          path: ./snapshots
 | 
					          path: ./snapshots
 | 
				
			||||||
          key: ${{ runner.os }}-snapshots-${{ github.event.after }}
 | 
					          key: ${{ runner.os }}-snapshots-${{ github.event.after }}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							@@ -29,7 +29,7 @@ jobs:
 | 
				
			|||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Restore lychee cache
 | 
					      - name: Restore lychee cache
 | 
				
			||||||
        uses: actions/cache@v3
 | 
					        uses: actions/cache@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          path: .lycheecache
 | 
					          path: .lycheecache
 | 
				
			||||||
          key: cache-lychee-${{ github.sha }}
 | 
					          key: cache-lychee-${{ github.sha }}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							@@ -19,7 +19,7 @@ jobs:
 | 
				
			|||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							@@ -22,7 +22,7 @@ jobs:
 | 
				
			|||||||
      pull-requests: write # write permission is required to label PRs
 | 
					      pull-requests: write # write permission is required to label PRs
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Label PR
 | 
					      - name: Label PR
 | 
				
			||||||
        uses: release-drafter/release-drafter@v5
 | 
					        uses: release-drafter/release-drafter@v6
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          config-name: pr-labeler.yml
 | 
					          config-name: pr-labeler.yml
 | 
				
			||||||
          disable-autolabeler: false
 | 
					          disable-autolabeler: false
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							@@ -25,7 +25,7 @@ jobs:
 | 
				
			|||||||
      - name: Checkout
 | 
					      - name: Checkout
 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
@@ -37,13 +37,13 @@ jobs:
 | 
				
			|||||||
        run: pnpm install --frozen-lockfile
 | 
					        run: pnpm install --frozen-lockfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Pages
 | 
					      - name: Setup Pages
 | 
				
			||||||
        uses: actions/configure-pages@v3
 | 
					        uses: actions/configure-pages@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Run Build
 | 
					      - name: Run Build
 | 
				
			||||||
        run: pnpm --filter mermaid run docs:build:vitepress
 | 
					        run: pnpm --filter mermaid run docs:build:vitepress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Upload artifact
 | 
					      - name: Upload artifact
 | 
				
			||||||
        uses: actions/upload-pages-artifact@v1
 | 
					        uses: actions/upload-pages-artifact@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          path: packages/mermaid/src/vitepress/.vitepress/dist
 | 
					          path: packages/mermaid/src/vitepress/.vitepress/dist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,4 +56,4 @@ jobs:
 | 
				
			|||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Deploy to GitHub Pages
 | 
					      - name: Deploy to GitHub Pages
 | 
				
			||||||
        id: deployment
 | 
					        id: deployment
 | 
				
			||||||
        uses: actions/deploy-pages@v2
 | 
					        uses: actions/deploy-pages@v4
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
								
							@@ -16,7 +16,7 @@ jobs:
 | 
				
			|||||||
      pull-requests: read # required to read PR titles/labels
 | 
					      pull-requests: read # required to read PR titles/labels
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Draft Release
 | 
					      - name: Draft Release
 | 
				
			||||||
        uses: release-drafter/release-drafter@v5
 | 
					        uses: release-drafter/release-drafter@v6
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          disable-autolabeler: true
 | 
					          disable-autolabeler: true
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ jobs:
 | 
				
			|||||||
        with:
 | 
					        with:
 | 
				
			||||||
          fetch-depth: 0
 | 
					          fetch-depth: 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ jobs:
 | 
				
			|||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
      - uses: fregante/setup-git-user@v2
 | 
					      - uses: fregante/setup-git-user@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ jobs:
 | 
				
			|||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
@@ -39,7 +39,7 @@ jobs:
 | 
				
			|||||||
          pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage
 | 
					          pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Upload Coverage to Codecov
 | 
					      - name: Upload Coverage to Codecov
 | 
				
			||||||
        uses: codecov/codecov-action@v3
 | 
					        uses: codecov/codecov-action@v4
 | 
				
			||||||
        # Run step only pushes to develop and pull_requests
 | 
					        # Run step only pushes to develop and pull_requests
 | 
				
			||||||
        if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
 | 
					        if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							@@ -9,7 +9,7 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v4
 | 
					      - uses: actions/checkout@v4
 | 
				
			||||||
      - uses: pnpm/action-setup@v4
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
      - run: npx update-browserslist-db@latest
 | 
					      - run: npx update-browserslist-db@latest
 | 
				
			||||||
      - name: Commit changes
 | 
					      - name: Commit changes
 | 
				
			||||||
        uses: EndBug/add-and-commit@v9
 | 
					        uses: EndBug/add-and-commit@v9
 | 
				
			||||||
@@ -19,7 +19,7 @@ jobs:
 | 
				
			|||||||
          message: 'chore: update browsers list'
 | 
					          message: 'chore: update browsers list'
 | 
				
			||||||
          push: false
 | 
					          push: false
 | 
				
			||||||
      - name: Create Pull Request
 | 
					      - name: Create Pull Request
 | 
				
			||||||
        uses: peter-evans/create-pull-request@v5
 | 
					        uses: peter-evans/create-pull-request@v6
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          branch: update-browserslist
 | 
					          branch: update-browserslist
 | 
				
			||||||
          title: Update Browserslist
 | 
					          title: Update Browserslist
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -46,4 +46,8 @@ stats/
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
demos/dev/**
 | 
					demos/dev/**
 | 
				
			||||||
!/demos/dev/example.html
 | 
					!/demos/dev/example.html
 | 
				
			||||||
 | 
					!/demos/dev/reload.js
 | 
				
			||||||
tsx-0/**
 | 
					tsx-0/**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# autogenereated by langium-cli
 | 
				
			||||||
 | 
					generated/
 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
# . "$(dirname "$0")/_/husky.sh"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# npx --no-install commitlint --edit $1
 | 
					 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					#!/bin/sh
 | 
				
			||||||
. "$(dirname "$0")/_/husky.sh"
 | 
					. "$(dirname "$0")/_/husky.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pnpm run pre-commit
 | 
					NODE_OPTIONS="--max_old_space_size=8192" pnpm run pre-commit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1 @@
 | 
				
			|||||||
v20.11.1
 | 
					20.12.2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,8 @@ stats
 | 
				
			|||||||
.nyc_output
 | 
					.nyc_output
 | 
				
			||||||
# Autogenerated by `pnpm run --filter mermaid types:build-config`
 | 
					# Autogenerated by `pnpm run --filter mermaid types:build-config`
 | 
				
			||||||
packages/mermaid/src/config.type.ts
 | 
					packages/mermaid/src/config.type.ts
 | 
				
			||||||
 | 
					# autogenereated by langium-cli
 | 
				
			||||||
 | 
					generated/
 | 
				
			||||||
# Ignore the files creates in /demos/dev except for example.html
 | 
					# Ignore the files creates in /demos/dev except for example.html
 | 
				
			||||||
demos/dev/**
 | 
					demos/dev/**
 | 
				
			||||||
!/demos/dev/example.html
 | 
					!/demos/dev/example.html
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,5 +3,6 @@
 | 
				
			|||||||
  "printWidth": 100,
 | 
					  "printWidth": 100,
 | 
				
			||||||
  "singleQuote": true,
 | 
					  "singleQuote": true,
 | 
				
			||||||
  "useTabs": false,
 | 
					  "useTabs": false,
 | 
				
			||||||
  "tabWidth": 2
 | 
					  "tabWidth": 2,
 | 
				
			||||||
 | 
					  "trailingComma": "es5"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,11 +3,12 @@ import { resolve } from 'path';
 | 
				
			|||||||
import { fileURLToPath } from 'url';
 | 
					import { fileURLToPath } from 'url';
 | 
				
			||||||
import jisonPlugin from './jisonPlugin.js';
 | 
					import jisonPlugin from './jisonPlugin.js';
 | 
				
			||||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
 | 
					import jsonSchemaPlugin from './jsonSchemaPlugin.js';
 | 
				
			||||||
import { readFileSync } from 'fs';
 | 
					 | 
				
			||||||
import typescript from '@rollup/plugin-typescript';
 | 
					import typescript from '@rollup/plugin-typescript';
 | 
				
			||||||
import { visualizer } from 'rollup-plugin-visualizer';
 | 
					import { visualizer } from 'rollup-plugin-visualizer';
 | 
				
			||||||
import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js';
 | 
					import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js';
 | 
				
			||||||
import istanbul from 'vite-plugin-istanbul';
 | 
					import istanbul from 'vite-plugin-istanbul';
 | 
				
			||||||
 | 
					import { packageOptions } from '../.build/common.js';
 | 
				
			||||||
 | 
					import { generateLangium } from '../.build/generateLangium.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const visualize = process.argv.includes('--visualize');
 | 
					const visualize = process.argv.includes('--visualize');
 | 
				
			||||||
const watch = process.argv.includes('--watch');
 | 
					const watch = process.argv.includes('--watch');
 | 
				
			||||||
@@ -36,24 +37,6 @@ const visualizerOptions = (packageName: string, core = false): PluginOption[] =>
 | 
				
			|||||||
  );
 | 
					  );
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const packageOptions = {
 | 
					 | 
				
			||||||
  mermaid: {
 | 
					 | 
				
			||||||
    name: 'mermaid',
 | 
					 | 
				
			||||||
    packageName: 'mermaid',
 | 
					 | 
				
			||||||
    file: 'mermaid.ts',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'mermaid-example-diagram': {
 | 
					 | 
				
			||||||
    name: 'mermaid-example-diagram',
 | 
					 | 
				
			||||||
    packageName: 'mermaid-example-diagram',
 | 
					 | 
				
			||||||
    file: 'detector.ts',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  'mermaid-zenuml': {
 | 
					 | 
				
			||||||
    name: 'mermaid-zenuml',
 | 
					 | 
				
			||||||
    packageName: 'mermaid-zenuml',
 | 
					 | 
				
			||||||
    file: 'detector.ts',
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface BuildOptions {
 | 
					interface BuildOptions {
 | 
				
			||||||
  minify: boolean | 'esbuild';
 | 
					  minify: boolean | 'esbuild';
 | 
				
			||||||
  core?: boolean;
 | 
					  core?: boolean;
 | 
				
			||||||
@@ -72,34 +55,8 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
 | 
				
			|||||||
      sourcemap,
 | 
					      sourcemap,
 | 
				
			||||||
      entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`,
 | 
					      entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      name,
 | 
					 | 
				
			||||||
      format: 'umd',
 | 
					 | 
				
			||||||
      sourcemap,
 | 
					 | 
				
			||||||
      entryFileNames: `${name}${minify ? '.min' : ''}.js`,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (core) {
 | 
					 | 
				
			||||||
    const { dependencies } = JSON.parse(
 | 
					 | 
				
			||||||
      readFileSync(resolve(__dirname, `../packages/${packageName}/package.json`), 'utf-8')
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    // Core build is used to generate file without bundled dependencies.
 | 
					 | 
				
			||||||
    // This is used by downstream projects to bundle dependencies themselves.
 | 
					 | 
				
			||||||
    // Ignore dependencies and any dependencies of dependencies
 | 
					 | 
				
			||||||
    // Adapted from the RegEx used by `rollup-plugin-node`
 | 
					 | 
				
			||||||
    external.push(new RegExp('^(?:' + Object.keys(dependencies).join('|') + ')(?:/.+)?$'));
 | 
					 | 
				
			||||||
    // This needs to be an array. Otherwise vite will build esm & umd with same name and overwrite esm with umd.
 | 
					 | 
				
			||||||
    output = [
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        name,
 | 
					 | 
				
			||||||
        format: 'esm',
 | 
					 | 
				
			||||||
        sourcemap,
 | 
					 | 
				
			||||||
        entryFileNames: `${name}.core.mjs`,
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const config: InlineConfig = {
 | 
					  const config: InlineConfig = {
 | 
				
			||||||
    configFile: false,
 | 
					    configFile: false,
 | 
				
			||||||
    build: {
 | 
					    build: {
 | 
				
			||||||
@@ -129,7 +86,7 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
 | 
				
			|||||||
      // @ts-expect-error According to the type definitions, rollup plugins are incompatible with vite
 | 
					      // @ts-expect-error According to the type definitions, rollup plugins are incompatible with vite
 | 
				
			||||||
      typescript({ compilerOptions: { declaration: false } }),
 | 
					      typescript({ compilerOptions: { declaration: false } }),
 | 
				
			||||||
      istanbul({
 | 
					      istanbul({
 | 
				
			||||||
        exclude: ['node_modules', 'test/', '__mocks__'],
 | 
					        exclude: ['node_modules', 'test/', '__mocks__', 'generated'],
 | 
				
			||||||
        extension: ['.js', '.ts'],
 | 
					        extension: ['.js', '.ts'],
 | 
				
			||||||
        requireEnv: true,
 | 
					        requireEnv: true,
 | 
				
			||||||
        forceBuildInstrument: coverage,
 | 
					        forceBuildInstrument: coverage,
 | 
				
			||||||
@@ -149,24 +106,28 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
					const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
				
			||||||
  await build(getBuildConfig({ minify: false, entryName }));
 | 
					  await build(getBuildConfig({ minify: false, entryName }));
 | 
				
			||||||
  await build(getBuildConfig({ minify: 'esbuild', entryName }));
 | 
					 | 
				
			||||||
  await build(getBuildConfig({ minify: false, core: true, entryName }));
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const main = async () => {
 | 
					const main = async () => {
 | 
				
			||||||
  const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
 | 
					  const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
 | 
				
			||||||
  for (const pkg of packageNames.filter((pkg) => !mermaidOnly || pkg === 'mermaid')) {
 | 
					  for (const pkg of packageNames.filter(
 | 
				
			||||||
 | 
					    (pkg) => !mermaidOnly || pkg === 'mermaid' || pkg === 'parser'
 | 
				
			||||||
 | 
					  )) {
 | 
				
			||||||
    await buildPackage(pkg);
 | 
					    await buildPackage(pkg);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					await generateLangium();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (watch) {
 | 
					if (watch) {
 | 
				
			||||||
 | 
					  await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
 | 
				
			||||||
  build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
 | 
					  build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
 | 
				
			||||||
  if (!mermaidOnly) {
 | 
					  if (!mermaidOnly) {
 | 
				
			||||||
    build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
 | 
					    build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
 | 
				
			||||||
    build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
 | 
					    build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
} else if (visualize) {
 | 
					} else if (visualize) {
 | 
				
			||||||
 | 
					  await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
 | 
				
			||||||
  await build(getBuildConfig({ minify: false, core: true, entryName: 'mermaid' }));
 | 
					  await build(getBuildConfig({ minify: false, core: true, entryName: 'mermaid' }));
 | 
				
			||||||
  await build(getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }));
 | 
					  await build(getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }));
 | 
				
			||||||
} else {
 | 
					} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import { transformJison } from './jisonTransformer.js';
 | 
					import { transformJison } from '../.build/jisonTransformer.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const fileRegex = /\.(jison)$/;
 | 
					const fileRegex = /\.(jison)$/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function jison() {
 | 
					export default function jison() {
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    name: 'jison',
 | 
					    name: 'jison',
 | 
				
			||||||
 | 
					 | 
				
			||||||
    transform(src: string, id: string) {
 | 
					    transform(src: string, id: string) {
 | 
				
			||||||
      if (fileRegex.test(id)) {
 | 
					      if (fileRegex.test(id)) {
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,110 +1,5 @@
 | 
				
			|||||||
import { load, JSON_SCHEMA } from 'js-yaml';
 | 
					 | 
				
			||||||
import assert from 'node:assert';
 | 
					 | 
				
			||||||
import Ajv2019, { type JSONSchemaType } from 'ajv/dist/2019.js';
 | 
					 | 
				
			||||||
import { PluginOption } from 'vite';
 | 
					import { PluginOption } from 'vite';
 | 
				
			||||||
 | 
					import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
 | 
				
			||||||
import type { MermaidConfig, BaseDiagramConfig } from '../packages/mermaid/src/config.type.js';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * All of the keys in the mermaid config that have a mermaid diagram config.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
const MERMAID_CONFIG_DIAGRAM_KEYS = [
 | 
					 | 
				
			||||||
  'flowchart',
 | 
					 | 
				
			||||||
  'sequence',
 | 
					 | 
				
			||||||
  'gantt',
 | 
					 | 
				
			||||||
  'journey',
 | 
					 | 
				
			||||||
  'class',
 | 
					 | 
				
			||||||
  'state',
 | 
					 | 
				
			||||||
  'er',
 | 
					 | 
				
			||||||
  'pie',
 | 
					 | 
				
			||||||
  'quadrantChart',
 | 
					 | 
				
			||||||
  'xyChart',
 | 
					 | 
				
			||||||
  'requirement',
 | 
					 | 
				
			||||||
  'mindmap',
 | 
					 | 
				
			||||||
  'timeline',
 | 
					 | 
				
			||||||
  'gitGraph',
 | 
					 | 
				
			||||||
  'c4',
 | 
					 | 
				
			||||||
  'sankey',
 | 
					 | 
				
			||||||
  'block',
 | 
					 | 
				
			||||||
] as const;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Generate default values from the JSON Schema.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * AJV does not support nested default values yet (or default values with $ref),
 | 
					 | 
				
			||||||
 * so we need to manually find them (this may be fixed in ajv v9).
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @param mermaidConfigSchema - The Mermaid JSON Schema to use.
 | 
					 | 
				
			||||||
 * @returns The default mermaid config object.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
function generateDefaults(mermaidConfigSchema: JSONSchemaType<MermaidConfig>) {
 | 
					 | 
				
			||||||
  const ajv = new Ajv2019({
 | 
					 | 
				
			||||||
    useDefaults: true,
 | 
					 | 
				
			||||||
    allowUnionTypes: true,
 | 
					 | 
				
			||||||
    strict: true,
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ajv.addKeyword({
 | 
					 | 
				
			||||||
    keyword: 'meta:enum', // used by jsonschema2md
 | 
					 | 
				
			||||||
    errors: false,
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
  ajv.addKeyword({
 | 
					 | 
				
			||||||
    keyword: 'tsType', // used by json-schema-to-typescript
 | 
					 | 
				
			||||||
    errors: false,
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // ajv currently doesn't support nested default values, see https://github.com/ajv-validator/ajv/issues/1718
 | 
					 | 
				
			||||||
  // (may be fixed in v9) so we need to manually use sub-schemas
 | 
					 | 
				
			||||||
  const mermaidDefaultConfig = {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  assert.ok(mermaidConfigSchema.$defs);
 | 
					 | 
				
			||||||
  const baseDiagramConfig = mermaidConfigSchema.$defs.BaseDiagramConfig;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  for (const key of MERMAID_CONFIG_DIAGRAM_KEYS) {
 | 
					 | 
				
			||||||
    const subSchemaRef = mermaidConfigSchema.properties[key].$ref;
 | 
					 | 
				
			||||||
    const [root, defs, defName] = subSchemaRef.split('/');
 | 
					 | 
				
			||||||
    assert.strictEqual(root, '#');
 | 
					 | 
				
			||||||
    assert.strictEqual(defs, '$defs');
 | 
					 | 
				
			||||||
    const subSchema = {
 | 
					 | 
				
			||||||
      $schema: mermaidConfigSchema.$schema,
 | 
					 | 
				
			||||||
      $defs: mermaidConfigSchema.$defs,
 | 
					 | 
				
			||||||
      ...mermaidConfigSchema.$defs[defName],
 | 
					 | 
				
			||||||
    } as JSONSchemaType<BaseDiagramConfig>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const validate = ajv.compile(subSchema);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mermaidDefaultConfig[key] = {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for (const required of subSchema.required ?? []) {
 | 
					 | 
				
			||||||
      if (subSchema.properties[required] === undefined && baseDiagramConfig.properties[required]) {
 | 
					 | 
				
			||||||
        mermaidDefaultConfig[key][required] = baseDiagramConfig.properties[required].default;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (!validate(mermaidDefaultConfig[key])) {
 | 
					 | 
				
			||||||
      throw new Error(
 | 
					 | 
				
			||||||
        `schema for subconfig ${key} does not have valid defaults! Errors were ${JSON.stringify(
 | 
					 | 
				
			||||||
          validate.errors,
 | 
					 | 
				
			||||||
          undefined,
 | 
					 | 
				
			||||||
          2
 | 
					 | 
				
			||||||
        )}`
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const validate = ajv.compile(mermaidConfigSchema);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (!validate(mermaidDefaultConfig)) {
 | 
					 | 
				
			||||||
    throw new Error(
 | 
					 | 
				
			||||||
      `Mermaid config JSON Schema does not have valid defaults! Errors were ${JSON.stringify(
 | 
					 | 
				
			||||||
        validate.errors,
 | 
					 | 
				
			||||||
        undefined,
 | 
					 | 
				
			||||||
        2
 | 
					 | 
				
			||||||
      )}`
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return mermaidDefaultConfig;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Vite plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | 
					 * Vite plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | 
				
			||||||
@@ -121,32 +16,13 @@ export default function jsonSchemaPlugin(): PluginOption {
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (idAsUrl.searchParams.get('only-defaults')) {
 | 
					      const jsonSchema = loadSchema(src, idAsUrl.pathname);
 | 
				
			||||||
        const jsonSchema = load(src, {
 | 
					 | 
				
			||||||
          filename: idAsUrl.pathname,
 | 
					 | 
				
			||||||
          // only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
 | 
					 | 
				
			||||||
          // e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
 | 
					 | 
				
			||||||
          schema: JSON_SCHEMA,
 | 
					 | 
				
			||||||
        }) as JSONSchemaType<MermaidConfig>;
 | 
					 | 
				
			||||||
      return {
 | 
					      return {
 | 
				
			||||||
          code: `export default ${JSON.stringify(generateDefaults(jsonSchema), undefined, 2)};`,
 | 
					        code: idAsUrl.searchParams.get('only-defaults')
 | 
				
			||||||
 | 
					          ? getDefaults(jsonSchema)
 | 
				
			||||||
 | 
					          : getSchema(jsonSchema),
 | 
				
			||||||
        map: null, // no source map
 | 
					        map: null, // no source map
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
          code: `export default ${JSON.stringify(
 | 
					 | 
				
			||||||
            load(src, {
 | 
					 | 
				
			||||||
              filename: idAsUrl.pathname,
 | 
					 | 
				
			||||||
              // only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
 | 
					 | 
				
			||||||
              // e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
 | 
					 | 
				
			||||||
              schema: JSON_SCHEMA,
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
            undefined,
 | 
					 | 
				
			||||||
            2
 | 
					 | 
				
			||||||
          )};`,
 | 
					 | 
				
			||||||
          map: null, // provide source map if available
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import express from 'express';
 | 
					import express from 'express';
 | 
				
			||||||
import cors from 'cors';
 | 
					import cors from 'cors';
 | 
				
			||||||
import { createServer as createViteServer } from 'vite';
 | 
					import { createServer as createViteServer } from 'vite';
 | 
				
			||||||
 | 
					import { packageOptions } from '../.build/common.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function createServer() {
 | 
					async function createServer() {
 | 
				
			||||||
  const app = express();
 | 
					  const app = express();
 | 
				
			||||||
@@ -14,9 +15,9 @@ async function createServer() {
 | 
				
			|||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  app.use(cors());
 | 
					  app.use(cors());
 | 
				
			||||||
  app.use(express.static('./packages/mermaid/dist'));
 | 
					  for (const { packageName } of Object.values(packageOptions)) {
 | 
				
			||||||
  app.use(express.static('./packages/mermaid-zenuml/dist'));
 | 
					    app.use(express.static(`./packages/${packageName}/dist`));
 | 
				
			||||||
  app.use(express.static('./packages/mermaid-example-diagram/dist'));
 | 
					  }
 | 
				
			||||||
  app.use(vite.middlewares);
 | 
					  app.use(vite.middlewares);
 | 
				
			||||||
  app.use(express.static('demos'));
 | 
					  app.use(express.static('demos'));
 | 
				
			||||||
  app.use(express.static('cypress/platform'));
 | 
					  app.use(express.static('cypress/platform'));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +1,2 @@
 | 
				
			|||||||
FROM node:20.11.1-alpine3.19 AS base
 | 
					FROM node:20.12.2-alpine3.19 AS base
 | 
				
			||||||
RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh -
 | 
					RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh -
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,21 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked C4Context diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const drawPersonOrSystemArray = vi.fn();
 | 
					 | 
				
			||||||
export const drawBoundary = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  drawPersonOrSystemArray,
 | 
					 | 
				
			||||||
  drawBoundary,
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked class diagram v2 renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked class diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
// DO NOT delete this file. It is used by vitest to mock the dagre-d3 module.
 | 
					 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
module.exports = function (txt: string) {
 | 
					 | 
				
			||||||
  return txt;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked er diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,24 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked flow (flowchart) diagram v2 renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
export const addVertices = vi.fn();
 | 
					 | 
				
			||||||
export const addEdges = vi.fn();
 | 
					 | 
				
			||||||
export const getClasses = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return {};
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  addVertices,
 | 
					 | 
				
			||||||
  addEdges,
 | 
					 | 
				
			||||||
  getClasses,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked gantt diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked git (graph) diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,15 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked pie (picChart) diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked pie (picChart) diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const draw = vi.fn().mockImplementation(() => '');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const renderer = { draw };
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked requirement diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked Sankey diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked sequence diagram renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const bounds = vi.fn();
 | 
					 | 
				
			||||||
export const drawActors = vi.fn();
 | 
					 | 
				
			||||||
export const drawActorsPopup = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  bounds,
 | 
					 | 
				
			||||||
  drawActors,
 | 
					 | 
				
			||||||
  drawActorsPopup,
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
/**
 | 
					 | 
				
			||||||
 * Mocked state diagram v2 renderer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { vi } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const setConf = vi.fn();
 | 
					 | 
				
			||||||
export const getClasses = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return {};
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
export const stateDomId = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return 'mocked-stateDiagram-stateDomId';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
export const draw = vi.fn().mockImplementation(() => {
 | 
					 | 
				
			||||||
  return '';
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  setConf,
 | 
					 | 
				
			||||||
  getClasses,
 | 
					 | 
				
			||||||
  draw,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -118,11 +118,53 @@ describe('Configuration', () => {
 | 
				
			|||||||
    it('should not taint the initial configuration when using multiple directives', () => {
 | 
					    it('should not taint the initial configuration when using multiple directives', () => {
 | 
				
			||||||
      const url = 'http://localhost:9000/regression/issue-1874.html';
 | 
					      const url = 'http://localhost:9000/regression/issue-1874.html';
 | 
				
			||||||
      cy.visit(url);
 | 
					      cy.visit(url);
 | 
				
			||||||
 | 
					      cy.window().should('have.property', 'rendered', true);
 | 
				
			||||||
      cy.get('svg');
 | 
					      cy.get('svg').should('be.visible');
 | 
				
			||||||
      cy.matchImageSnapshot(
 | 
					      cy.matchImageSnapshot(
 | 
				
			||||||
        'configuration.spec-should-not-taint-initial-configuration-when-using-multiple-directives'
 | 
					        'configuration.spec-should-not-taint-initial-configuration-when-using-multiple-directives'
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe('suppressErrorRendering', () => {
 | 
				
			||||||
 | 
					    beforeEach(() => {
 | 
				
			||||||
 | 
					      cy.on('uncaught:exception', (err, runnable) => {
 | 
				
			||||||
 | 
					        return !err.message.includes('Parse error on line');
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('should not render error diagram if suppressErrorRendering is set', () => {
 | 
				
			||||||
 | 
					      const url = 'http://localhost:9000/suppressError.html?suppressErrorRendering=true';
 | 
				
			||||||
 | 
					      cy.visit(url);
 | 
				
			||||||
 | 
					      cy.window().should('have.property', 'rendered', true);
 | 
				
			||||||
 | 
					      cy.get('#test')
 | 
				
			||||||
 | 
					        .find('svg')
 | 
				
			||||||
 | 
					        .should(($svg) => {
 | 
				
			||||||
 | 
					          // all failing diagrams should not appear!
 | 
				
			||||||
 | 
					          expect($svg).to.have.length(2);
 | 
				
			||||||
 | 
					          // none of the diagrams should be error diagrams
 | 
				
			||||||
 | 
					          expect($svg).to.not.contain('Syntax error');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      cy.matchImageSnapshot(
 | 
				
			||||||
 | 
					        'configuration.spec-should-not-render-error-diagram-if-suppressErrorRendering-is-set'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('should render error diagram if suppressErrorRendering is not set', () => {
 | 
				
			||||||
 | 
					      const url = 'http://localhost:9000/suppressError.html';
 | 
				
			||||||
 | 
					      cy.visit(url);
 | 
				
			||||||
 | 
					      cy.window().should('have.property', 'rendered', true);
 | 
				
			||||||
 | 
					      cy.get('#test')
 | 
				
			||||||
 | 
					        .find('svg')
 | 
				
			||||||
 | 
					        .should(($svg) => {
 | 
				
			||||||
 | 
					          // all five diagrams should be rendered
 | 
				
			||||||
 | 
					          expect($svg).to.have.length(5);
 | 
				
			||||||
 | 
					          // some of the diagrams should be error diagrams
 | 
				
			||||||
 | 
					          expect($svg).to.contain('Syntax error');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      cy.matchImageSnapshot(
 | 
				
			||||||
 | 
					        'configuration.spec-should-render-error-diagram-if-suppressErrorRendering-is-not-set'
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								cypress/integration/other/flowchart-elk.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								cypress/integration/other/flowchart-elk.spec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					import { urlSnapshotTest, openURLAndVerifyRendering } from '../../helpers/util.ts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Flowchart elk', () => {
 | 
				
			||||||
 | 
					  it('should use dagre as fallback', () => {
 | 
				
			||||||
 | 
					    urlSnapshotTest('http://localhost:9000/flow-elk.html', {
 | 
				
			||||||
 | 
					      name: 'flow-elk fallback to dagre',
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  it('should allow overriding with external package', () => {
 | 
				
			||||||
 | 
					    urlSnapshotTest('http://localhost:9000/flow-elk.html?elk=true', {
 | 
				
			||||||
 | 
					      name: 'flow-elk overriding dagre with elk',
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										11
									
								
								cypress/integration/other/iife.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								cypress/integration/other/iife.spec.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					describe('IIFE', () => {
 | 
				
			||||||
 | 
					  beforeEach(() => {
 | 
				
			||||||
 | 
					    cy.visit('http://localhost:9000/iife.html');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('should render when using mermaid.min.js', () => {
 | 
				
			||||||
 | 
					    cy.window().should('have.property', 'rendered', true);
 | 
				
			||||||
 | 
					    cy.get('svg').should('be.visible');
 | 
				
			||||||
 | 
					    cy.get('#d2').should('contain', 'Hello');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@@ -1,16 +0,0 @@
 | 
				
			|||||||
describe('Sequencediagram', () => {
 | 
					 | 
				
			||||||
  it('should render a simple sequence diagrams', () => {
 | 
					 | 
				
			||||||
    const url = 'http://localhost:9000/webpackUsage.html';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cy.visit(url);
 | 
					 | 
				
			||||||
    cy.get('body').find('svg').should('have.length', 1);
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
  it('should handle html escapings properly', () => {
 | 
					 | 
				
			||||||
    const url = 'http://localhost:9000/webpackUsage.html?test-html-escaping=true';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cy.visit(url);
 | 
					 | 
				
			||||||
    cy.get('body').find('svg').should('have.length', 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cy.get('g.label > foreignobject > div').should('not.contain.text', '<b>');
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
@@ -137,9 +137,4 @@ describe('XSS', () => {
 | 
				
			|||||||
    cy.wait(1000);
 | 
					    cy.wait(1000);
 | 
				
			||||||
    cy.get('#the-malware').should('not.exist');
 | 
					    cy.get('#the-malware').should('not.exist');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  it('should sanitize backticks block diagram labels properly', () => {
 | 
					 | 
				
			||||||
    cy.visit('http://localhost:9000/xss25.html');
 | 
					 | 
				
			||||||
    cy.wait(1000);
 | 
					 | 
				
			||||||
    cy.get('#the-malware').should('not.exist');
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -844,3 +844,42 @@ end
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Title and arrow styling #4813', () => {
 | 
				
			||||||
 | 
					  it('should render a flowchart with title', () => {
 | 
				
			||||||
 | 
					    const titleString = 'Test Title';
 | 
				
			||||||
 | 
					    renderGraph(
 | 
				
			||||||
 | 
					      `---
 | 
				
			||||||
 | 
					      title: ${titleString}
 | 
				
			||||||
 | 
					      ---
 | 
				
			||||||
 | 
					      flowchart LR
 | 
				
			||||||
 | 
					      A-->B
 | 
				
			||||||
 | 
					      A-->C`,
 | 
				
			||||||
 | 
					      { flowchart: { defaultRenderer: 'elk' } }
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    cy.get('svg').should((svg) => {
 | 
				
			||||||
 | 
					      const title = svg[0].querySelector('text');
 | 
				
			||||||
 | 
					      expect(title.textContent).to.contain(titleString);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('Render with stylized arrows', () => {
 | 
				
			||||||
 | 
					    renderGraph(
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					      flowchart LR
 | 
				
			||||||
 | 
					      A-->B
 | 
				
			||||||
 | 
					      B-.-oC
 | 
				
			||||||
 | 
					      C==xD
 | 
				
			||||||
 | 
					      D ~~~ A`,
 | 
				
			||||||
 | 
					      { flowchart: { defaultRenderer: 'elk' } }
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    cy.get('svg').should((svg) => {
 | 
				
			||||||
 | 
					      const edges = svg[0].querySelectorAll('.edges path');
 | 
				
			||||||
 | 
					      console.log(edges);
 | 
				
			||||||
 | 
					      expect(edges[0]).to.have.attr('pattern', 'solid');
 | 
				
			||||||
 | 
					      expect(edges[1]).to.have.attr('pattern', 'dotted');
 | 
				
			||||||
 | 
					      expect(edges[2]).to.have.css('stroke-width', '3.5px');
 | 
				
			||||||
 | 
					      expect(edges[3]).to.have.css('stroke-width', '1.5px');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -760,6 +760,51 @@ A ~~~ B
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('3258: Should render subgraphs with main graph nodeSpacing and rankSpacing', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `---
 | 
				
			||||||
 | 
					      title: Subgraph nodeSpacing and rankSpacing example
 | 
				
			||||||
 | 
					      ---
 | 
				
			||||||
 | 
					      flowchart LR
 | 
				
			||||||
 | 
					        X --> Y
 | 
				
			||||||
 | 
					        subgraph X
 | 
				
			||||||
 | 
					          direction LR
 | 
				
			||||||
 | 
					          A
 | 
				
			||||||
 | 
					          C
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        subgraph Y
 | 
				
			||||||
 | 
					          B
 | 
				
			||||||
 | 
					          D
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      `,
 | 
				
			||||||
 | 
					      { flowchart: { nodeSpacing: 1, rankSpacing: 1 } }
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('3258: Should render subgraphs with large nodeSpacing and rankSpacing', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `---
 | 
				
			||||||
 | 
					      title: Subgraph nodeSpacing and rankSpacing example
 | 
				
			||||||
 | 
					      config:
 | 
				
			||||||
 | 
					        flowchart: 
 | 
				
			||||||
 | 
					          nodeSpacing: 250
 | 
				
			||||||
 | 
					          rankSpacing: 250
 | 
				
			||||||
 | 
					      ---
 | 
				
			||||||
 | 
					      flowchart LR
 | 
				
			||||||
 | 
					        X --> Y
 | 
				
			||||||
 | 
					        subgraph X
 | 
				
			||||||
 | 
					          direction LR
 | 
				
			||||||
 | 
					          A
 | 
				
			||||||
 | 
					          C
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					        subgraph Y
 | 
				
			||||||
 | 
					          B
 | 
				
			||||||
 | 
					          D
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('Markdown strings flowchart (#4220)', () => {
 | 
					  describe('Markdown strings flowchart (#4220)', () => {
 | 
				
			||||||
    describe('html labels', () => {
 | 
					    describe('html labels', () => {
 | 
				
			||||||
      it('With styling and classes', () => {
 | 
					      it('With styling and classes', () => {
 | 
				
			||||||
@@ -904,6 +949,18 @@ end
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('should not auto wrap when markdownAutoWrap is false', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `flowchart TD
 | 
				
			||||||
 | 
					    angular_velocity["\`**angular_velocity**
 | 
				
			||||||
 | 
					      *angular_displacement / duration*
 | 
				
			||||||
 | 
					      [rad/s, 1/s]
 | 
				
			||||||
 | 
					      {vector}\`"]
 | 
				
			||||||
 | 
					    frequency["frequency\n(1 / period_duration)\n[Hz, 1/s]"]`,
 | 
				
			||||||
 | 
					        { markdownAutoWrap: false }
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  describe('Subgraph title margins', () => {
 | 
					  describe('Subgraph title margins', () => {
 | 
				
			||||||
    it('Should render subgraphs with title margins set (LR)', () => {
 | 
					    it('Should render subgraphs with title margins set (LR)', () => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -573,7 +573,28 @@ describe('Gantt diagram', () => {
 | 
				
			|||||||
      `
 | 
					      `
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					  it('should render a gantt diagram exculding friday and saturday', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `gantt
 | 
				
			||||||
 | 
					      title A Gantt Diagram
 | 
				
			||||||
 | 
					      dateFormat  YYYY-MM-DD
 | 
				
			||||||
 | 
					      excludes weekends
 | 
				
			||||||
 | 
					      weekend friday
 | 
				
			||||||
 | 
					      section Section1
 | 
				
			||||||
 | 
					      A task :a1, 2024-02-28, 10d`
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  it('should render a gantt diagram exculding saturday and sunday', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `gantt
 | 
				
			||||||
 | 
					      title A Gantt Diagram
 | 
				
			||||||
 | 
					      dateFormat  YYYY-MM-DD
 | 
				
			||||||
 | 
					      excludes weekends
 | 
				
			||||||
 | 
					      weekend saturday
 | 
				
			||||||
 | 
					      section Section1
 | 
				
			||||||
 | 
					      A task :a1, 2024-02-28, 10d`
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
  it('should render when compact is true', () => {
 | 
					  it('should render when compact is true', () => {
 | 
				
			||||||
    imgSnapshotTest(
 | 
					    imgSnapshotTest(
 | 
				
			||||||
      `
 | 
					      `
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1013,4 +1013,524 @@ gitGraph TB:
 | 
				
			|||||||
      { gitGraph: { parallelCommits: true } }
 | 
					      { gitGraph: { parallelCommits: true } }
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					  describe('Git-Graph Bottom-to-Top Orientation Tests', () => {
 | 
				
			||||||
 | 
					    it('50: should render a simple gitgraph with commit on main branch | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "1"
 | 
				
			||||||
 | 
					         commit id: "2"
 | 
				
			||||||
 | 
					         commit id: "3"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('51: should render a simple gitgraph with commit on main branch with Id | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "One"
 | 
				
			||||||
 | 
					         commit id: "Two"
 | 
				
			||||||
 | 
					         commit id: "Three"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('52: should render a simple gitgraph with different commitTypes on main branch | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "Normal Commit"
 | 
				
			||||||
 | 
					         commit id: "Reverse Commit" type: REVERSE
 | 
				
			||||||
 | 
					         commit id: "Highlight Commit" type: HIGHLIGHT
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('53: should render a simple gitgraph with tags commitTypes on main branch | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "Normal Commit with tag" tag: "v1.0.0"
 | 
				
			||||||
 | 
					         commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1"
 | 
				
			||||||
 | 
					         commit id: "Highlight Commit" type: HIGHLIGHT  tag: "8.8.4"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('54: should render a simple gitgraph with two branches | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "1"
 | 
				
			||||||
 | 
					         commit id: "2"
 | 
				
			||||||
 | 
					         branch develop
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id: "3"
 | 
				
			||||||
 | 
					         commit id: "4"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id: "5"
 | 
				
			||||||
 | 
					         commit id: "6"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('55: should render a simple gitgraph with two branches and merge commit | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "1"
 | 
				
			||||||
 | 
					         commit id: "2"
 | 
				
			||||||
 | 
					         branch develop
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id: "3"
 | 
				
			||||||
 | 
					         commit id: "4"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         merge develop
 | 
				
			||||||
 | 
					         commit id: "5"
 | 
				
			||||||
 | 
					         commit id: "6"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('56: should render a simple gitgraph with three branches and tagged merge commit | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "1"
 | 
				
			||||||
 | 
					         commit id: "2"
 | 
				
			||||||
 | 
					         branch nice_feature
 | 
				
			||||||
 | 
					         checkout nice_feature
 | 
				
			||||||
 | 
					         commit id: "3"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id: "4"
 | 
				
			||||||
 | 
					         checkout nice_feature
 | 
				
			||||||
 | 
					         branch very_nice_feature
 | 
				
			||||||
 | 
					         checkout very_nice_feature
 | 
				
			||||||
 | 
					         commit id: "5"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id: "6"
 | 
				
			||||||
 | 
					         checkout nice_feature
 | 
				
			||||||
 | 
					         commit id: "7"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         merge nice_feature id: "12345" tag: "my merge commit"
 | 
				
			||||||
 | 
					         checkout very_nice_feature
 | 
				
			||||||
 | 
					         commit id: "8"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id: "9"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('57: should render a simple gitgraph with more than 8 branches &  overriding variables | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
 | 
				
			||||||
 | 
					          'gitBranchLabel0': '#ffffff',
 | 
				
			||||||
 | 
					          'gitBranchLabel1': '#ffffff',
 | 
				
			||||||
 | 
					          'gitBranchLabel2': '#ffffff',
 | 
				
			||||||
 | 
					          'gitBranchLabel3': '#ffffff',
 | 
				
			||||||
 | 
					          'gitBranchLabel4': '#ffffff',
 | 
				
			||||||
 | 
					          'gitBranchLabel5': '#ffffff',
 | 
				
			||||||
 | 
					          'gitBranchLabel6': '#ffffff',
 | 
				
			||||||
 | 
					          'gitBranchLabel7': '#ffffff',
 | 
				
			||||||
 | 
					    } } }%%
 | 
				
			||||||
 | 
					    gitGraph BT:
 | 
				
			||||||
 | 
					      checkout main
 | 
				
			||||||
 | 
					      branch branch1
 | 
				
			||||||
 | 
					      branch branch2
 | 
				
			||||||
 | 
					      branch branch3
 | 
				
			||||||
 | 
					      branch branch4
 | 
				
			||||||
 | 
					      branch branch5
 | 
				
			||||||
 | 
					      branch branch6
 | 
				
			||||||
 | 
					      branch branch7
 | 
				
			||||||
 | 
					      branch branch8
 | 
				
			||||||
 | 
					      branch branch9
 | 
				
			||||||
 | 
					      checkout branch1
 | 
				
			||||||
 | 
					      commit id: "1"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('58: should render a simple gitgraph with rotated labels | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': {
 | 
				
			||||||
 | 
					          'rotateCommitLabel': true
 | 
				
			||||||
 | 
					    } } }%%
 | 
				
			||||||
 | 
					          gitGraph BT:
 | 
				
			||||||
 | 
					          commit id: "75f7219e83b321cd3fdde7dcf83bc7c1000a6828"
 | 
				
			||||||
 | 
					          commit id: "0db4784daf82736dec4569e0dc92980d328c1f2e"
 | 
				
			||||||
 | 
					          commit id: "7067e9973f9eaa6cd4a4b723c506d1eab598e83e"
 | 
				
			||||||
 | 
					          commit id: "66972321ad6c199013b5b31f03b3a86fa3f9817d"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('59: should render a simple gitgraph with horizontal labels | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': {
 | 
				
			||||||
 | 
					          'rotateCommitLabel': false
 | 
				
			||||||
 | 
					    } } }%%
 | 
				
			||||||
 | 
					          gitGraph BT:
 | 
				
			||||||
 | 
					          commit id: "Alpha"
 | 
				
			||||||
 | 
					          commit id: "Beta"
 | 
				
			||||||
 | 
					          commit id: "Gamma"
 | 
				
			||||||
 | 
					          commit id: "Delta"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('60: should render a simple gitgraph with cherry pick commit | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
 | 
					      gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "ZERO"
 | 
				
			||||||
 | 
					         branch develop
 | 
				
			||||||
 | 
					         commit id:"A"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"ONE"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"B"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"TWO"
 | 
				
			||||||
 | 
					         cherry-pick id:"A"
 | 
				
			||||||
 | 
					         commit id:"THREE"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"C"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('61: should render a gitgraph with cherry pick commit with custom tag | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
 | 
					      gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "ZERO"
 | 
				
			||||||
 | 
					         branch develop
 | 
				
			||||||
 | 
					         commit id:"A"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"ONE"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"B"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"TWO"
 | 
				
			||||||
 | 
					         cherry-pick id:"A" tag: "snapshot"
 | 
				
			||||||
 | 
					         commit id:"THREE"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"C"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('62: should render a gitgraph with cherry pick commit with no tag | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
 | 
					      gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "ZERO"
 | 
				
			||||||
 | 
					         branch develop
 | 
				
			||||||
 | 
					         commit id:"A"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"ONE"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"B"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"TWO"
 | 
				
			||||||
 | 
					         cherry-pick id:"A" tag: ""
 | 
				
			||||||
 | 
					         commit id:"THREE"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"C"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('63: should render a simple gitgraph with two cherry pick commit | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
 | 
					      gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "ZERO"
 | 
				
			||||||
 | 
					         branch develop
 | 
				
			||||||
 | 
					         commit id:"A"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"ONE"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"B"
 | 
				
			||||||
 | 
					         branch featureA
 | 
				
			||||||
 | 
					         commit id:"FIX"
 | 
				
			||||||
 | 
					         commit id: "FIX-2"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"TWO"
 | 
				
			||||||
 | 
					         cherry-pick id:"A"
 | 
				
			||||||
 | 
					         commit id:"THREE"
 | 
				
			||||||
 | 
					         cherry-pick id:"FIX"
 | 
				
			||||||
 | 
					         checkout develop
 | 
				
			||||||
 | 
					         commit id:"C"
 | 
				
			||||||
 | 
					         merge featureA
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('64: should render commits for more than 8 branches | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
 | 
					        gitGraph BT:
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        %% Make sure to manually set the ID of all commits, for consistent visual tests
 | 
				
			||||||
 | 
					        commit id: "1-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        branch branch1
 | 
				
			||||||
 | 
					        commit id: "2-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch1
 | 
				
			||||||
 | 
					        branch branch2
 | 
				
			||||||
 | 
					        commit id: "3-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch2
 | 
				
			||||||
 | 
					        branch branch3
 | 
				
			||||||
 | 
					        commit id: "4-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch3
 | 
				
			||||||
 | 
					        branch branch4
 | 
				
			||||||
 | 
					        commit id: "5-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch4
 | 
				
			||||||
 | 
					        branch branch5
 | 
				
			||||||
 | 
					        commit id: "6-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch5
 | 
				
			||||||
 | 
					        branch branch6
 | 
				
			||||||
 | 
					        commit id: "7-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch6
 | 
				
			||||||
 | 
					        branch branch7
 | 
				
			||||||
 | 
					        commit id: "8-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch7
 | 
				
			||||||
 | 
					        branch branch8
 | 
				
			||||||
 | 
					        commit id: "9-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge branch8
 | 
				
			||||||
 | 
					        branch branch9
 | 
				
			||||||
 | 
					        commit id: "10-abcdefg"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('65: should render a simple gitgraph with three branches,custom merge commit id,tag,type | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id: "1"
 | 
				
			||||||
 | 
					         commit id: "2"
 | 
				
			||||||
 | 
					         branch nice_feature
 | 
				
			||||||
 | 
					         checkout nice_feature
 | 
				
			||||||
 | 
					         commit id: "3"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id: "4"
 | 
				
			||||||
 | 
					         checkout nice_feature
 | 
				
			||||||
 | 
					         branch very_nice_feature
 | 
				
			||||||
 | 
					         checkout very_nice_feature
 | 
				
			||||||
 | 
					         commit id: "5"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id: "6"
 | 
				
			||||||
 | 
					         checkout nice_feature
 | 
				
			||||||
 | 
					         commit id: "7"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         merge nice_feature id: "customID" tag: "customTag" type: REVERSE
 | 
				
			||||||
 | 
					         checkout very_nice_feature
 | 
				
			||||||
 | 
					         commit id: "8"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id: "9"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('66: should render a simple gitgraph with a title | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `---
 | 
				
			||||||
 | 
					  title: simple gitGraph
 | 
				
			||||||
 | 
					  ---
 | 
				
			||||||
 | 
					  gitGraph BT:
 | 
				
			||||||
 | 
					    commit id: "1-abcdefg"
 | 
				
			||||||
 | 
					  `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('67: should render a simple gitgraph overlapping commits | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					         commit id:"s1"
 | 
				
			||||||
 | 
					         commit id:"s2"
 | 
				
			||||||
 | 
					         branch branch1
 | 
				
			||||||
 | 
					         commit id:"s3"
 | 
				
			||||||
 | 
					         commit id:"s4"
 | 
				
			||||||
 | 
					         checkout main
 | 
				
			||||||
 | 
					         commit id:"s5"
 | 
				
			||||||
 | 
					         checkout branch1
 | 
				
			||||||
 | 
					         commit id:"s6"
 | 
				
			||||||
 | 
					         commit id:"s7"
 | 
				
			||||||
 | 
					         merge main
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('68: should render a simple gitgraph with two branches from same commit | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					        commit id:"1-abcdefg"
 | 
				
			||||||
 | 
					        commit id:"2-abcdefg"
 | 
				
			||||||
 | 
					        branch feature-001
 | 
				
			||||||
 | 
					        commit id:"3-abcdefg"
 | 
				
			||||||
 | 
					        commit id:"4-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        branch feature-002
 | 
				
			||||||
 | 
					        commit id:"5-abcdefg"
 | 
				
			||||||
 | 
					        checkout feature-001
 | 
				
			||||||
 | 
					        merge feature-002
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('69: should render GitGraph with branch that is not used immediately | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					        commit id:"1-abcdefg"
 | 
				
			||||||
 | 
					        branch x
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        commit id:"2-abcdefg"
 | 
				
			||||||
 | 
					        checkout x
 | 
				
			||||||
 | 
					        commit id:"3-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge x
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('70: should render GitGraph with branch and sub-branch neither of which used immediately | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					        commit id:"1-abcdefg"
 | 
				
			||||||
 | 
					        branch x
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        commit id:"2-abcdefg"
 | 
				
			||||||
 | 
					        checkout x
 | 
				
			||||||
 | 
					        commit id:"3-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        merge x
 | 
				
			||||||
 | 
					        checkout x
 | 
				
			||||||
 | 
					        branch y
 | 
				
			||||||
 | 
					        checkout x
 | 
				
			||||||
 | 
					        commit id:"4-abcdefg"
 | 
				
			||||||
 | 
					        checkout y
 | 
				
			||||||
 | 
					        commit id:"5-abcdefg"
 | 
				
			||||||
 | 
					        checkout x
 | 
				
			||||||
 | 
					        merge y
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('71: should render GitGraph with parallel commits | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					        commit id:"1-abcdefg"
 | 
				
			||||||
 | 
					        commit id:"2-abcdefg"
 | 
				
			||||||
 | 
					        branch develop
 | 
				
			||||||
 | 
					        commit id:"3-abcdefg"
 | 
				
			||||||
 | 
					        commit id:"4-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        branch feature
 | 
				
			||||||
 | 
					        commit id:"5-abcdefg"
 | 
				
			||||||
 | 
					        commit id:"6-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        commit id:"7-abcdefg"
 | 
				
			||||||
 | 
					        commit id:"8-abcdefg"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        { gitGraph: { parallelCommits: true } }
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('72: should render GitGraph with unconnected branches and parallel commits | Vertical Branch - Bottom-to-top', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph BT:
 | 
				
			||||||
 | 
					        branch dev
 | 
				
			||||||
 | 
					        branch v2
 | 
				
			||||||
 | 
					        branch feat
 | 
				
			||||||
 | 
					        commit id:"1-abcdefg"
 | 
				
			||||||
 | 
					        commit id:"2-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        commit id:"3-abcdefg"
 | 
				
			||||||
 | 
					        checkout dev
 | 
				
			||||||
 | 
					        commit id:"4-abcdefg"
 | 
				
			||||||
 | 
					        checkout v2
 | 
				
			||||||
 | 
					        commit id:"5-abcdefg"
 | 
				
			||||||
 | 
					        checkout main
 | 
				
			||||||
 | 
					        commit id:"6-abcdefg"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        { gitGraph: { parallelCommits: true } }
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('73: should render a simple gitgraph with three branches and tagged merge commit using switch instead of checkout', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `gitGraph
 | 
				
			||||||
 | 
					         commit id: "1"
 | 
				
			||||||
 | 
					         commit id: "2"
 | 
				
			||||||
 | 
					         branch nice_feature
 | 
				
			||||||
 | 
					         switch nice_feature
 | 
				
			||||||
 | 
					         commit id: "3"
 | 
				
			||||||
 | 
					         switch main
 | 
				
			||||||
 | 
					         commit id: "4"
 | 
				
			||||||
 | 
					         switch nice_feature
 | 
				
			||||||
 | 
					         branch very_nice_feature
 | 
				
			||||||
 | 
					         switch very_nice_feature
 | 
				
			||||||
 | 
					         commit id: "5"
 | 
				
			||||||
 | 
					         switch main
 | 
				
			||||||
 | 
					         commit id: "6"
 | 
				
			||||||
 | 
					         switch nice_feature
 | 
				
			||||||
 | 
					         commit id: "7"
 | 
				
			||||||
 | 
					         switch main
 | 
				
			||||||
 | 
					         merge nice_feature id: "12345" tag: "my merge commit"
 | 
				
			||||||
 | 
					         switch very_nice_feature
 | 
				
			||||||
 | 
					         commit id: "8"
 | 
				
			||||||
 | 
					         switch main
 | 
				
			||||||
 | 
					         commit id: "9"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    it('74: should render commits for more than 8 branches using switch instead of checkout', () => {
 | 
				
			||||||
 | 
					      imgSnapshotTest(
 | 
				
			||||||
 | 
					        `
 | 
				
			||||||
 | 
					        gitGraph
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        %% Make sure to manually set the ID of all commits, for consistent visual tests
 | 
				
			||||||
 | 
					        commit id: "1-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        branch branch1
 | 
				
			||||||
 | 
					        commit id: "2-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch1
 | 
				
			||||||
 | 
					        branch branch2
 | 
				
			||||||
 | 
					        commit id: "3-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch2
 | 
				
			||||||
 | 
					        branch branch3
 | 
				
			||||||
 | 
					        commit id: "4-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch3
 | 
				
			||||||
 | 
					        branch branch4
 | 
				
			||||||
 | 
					        commit id: "5-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch4
 | 
				
			||||||
 | 
					        branch branch5
 | 
				
			||||||
 | 
					        commit id: "6-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch5
 | 
				
			||||||
 | 
					        branch branch6
 | 
				
			||||||
 | 
					        commit id: "7-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch6
 | 
				
			||||||
 | 
					        branch branch7
 | 
				
			||||||
 | 
					        commit id: "8-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch7
 | 
				
			||||||
 | 
					        branch branch8
 | 
				
			||||||
 | 
					        commit id: "9-abcdefg"
 | 
				
			||||||
 | 
					        switch main
 | 
				
			||||||
 | 
					        merge branch8
 | 
				
			||||||
 | 
					        branch branch9
 | 
				
			||||||
 | 
					        commit id: "10-abcdefg"
 | 
				
			||||||
 | 
					        `,
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										67
									
								
								cypress/integration/rendering/packet.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								cypress/integration/rendering/packet.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					import { imgSnapshotTest } from '../../helpers/util';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('packet structure', () => {
 | 
				
			||||||
 | 
					  it('should render a simple packet diagram', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `packet-beta
 | 
				
			||||||
 | 
					  title Hello world
 | 
				
			||||||
 | 
					  0-10: "hello"
 | 
				
			||||||
 | 
					`
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('should render a complex packet diagram', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `packet-beta
 | 
				
			||||||
 | 
					        0-15: "Source Port"
 | 
				
			||||||
 | 
					        16-31: "Destination Port"
 | 
				
			||||||
 | 
					        32-63: "Sequence Number"
 | 
				
			||||||
 | 
					        64-95: "Acknowledgment Number"
 | 
				
			||||||
 | 
					        96-99: "Data Offset"
 | 
				
			||||||
 | 
					        100-105: "Reserved"
 | 
				
			||||||
 | 
					        106: "URG"
 | 
				
			||||||
 | 
					        107: "ACK"
 | 
				
			||||||
 | 
					        108: "PSH"
 | 
				
			||||||
 | 
					        109: "RST"
 | 
				
			||||||
 | 
					        110: "SYN"
 | 
				
			||||||
 | 
					        111: "FIN"
 | 
				
			||||||
 | 
					        112-127: "Window"
 | 
				
			||||||
 | 
					        128-143: "Checksum"
 | 
				
			||||||
 | 
					        144-159: "Urgent Pointer"
 | 
				
			||||||
 | 
					        160-191: "(Options and Padding)"
 | 
				
			||||||
 | 
					        192-223: "data"
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('should render a complex packet diagram with showBits false', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					      ---
 | 
				
			||||||
 | 
					      title: "Packet Diagram"
 | 
				
			||||||
 | 
					      config:
 | 
				
			||||||
 | 
					        packet:
 | 
				
			||||||
 | 
					          showBits: false
 | 
				
			||||||
 | 
					      ---
 | 
				
			||||||
 | 
					      packet-beta
 | 
				
			||||||
 | 
					        0-15: "Source Port"
 | 
				
			||||||
 | 
					        16-31: "Destination Port"
 | 
				
			||||||
 | 
					        32-63: "Sequence Number"
 | 
				
			||||||
 | 
					        64-95: "Acknowledgment Number"
 | 
				
			||||||
 | 
					        96-99: "Data Offset"
 | 
				
			||||||
 | 
					        100-105: "Reserved"
 | 
				
			||||||
 | 
					        106: "URG"
 | 
				
			||||||
 | 
					        107: "ACK"
 | 
				
			||||||
 | 
					        108: "PSH"
 | 
				
			||||||
 | 
					        109: "RST"
 | 
				
			||||||
 | 
					        110: "SYN"
 | 
				
			||||||
 | 
					        111: "FIN"
 | 
				
			||||||
 | 
					        112-127: "Window"
 | 
				
			||||||
 | 
					        128-143: "Checksum"
 | 
				
			||||||
 | 
					        144-159: "Urgent Pointer"
 | 
				
			||||||
 | 
					        160-191: "(Options and Padding)"
 | 
				
			||||||
 | 
					        192-223: "data"
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
 | 
					import { imgSnapshotTest } from '../../helpers/util.ts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('Quadrant Chart', () => {
 | 
					describe('Quadrant Chart', () => {
 | 
				
			||||||
  it('should render if only chart type is provided', () => {
 | 
					  it('should render if only chart type is provided', () => {
 | 
				
			||||||
@@ -226,4 +226,52 @@ describe('Quadrant Chart', () => {
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
    cy.get('svg');
 | 
					    cy.get('svg');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('it should render data points with styles', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					  quadrantChart
 | 
				
			||||||
 | 
					    title Reach and engagement of campaigns
 | 
				
			||||||
 | 
					    x-axis Reach -->
 | 
				
			||||||
 | 
					    y-axis Engagement -->
 | 
				
			||||||
 | 
					    quadrant-1 We should expand
 | 
				
			||||||
 | 
					    quadrant-2 Need to promote
 | 
				
			||||||
 | 
					    quadrant-3 Re-evaluate
 | 
				
			||||||
 | 
					    quadrant-4 May be improved
 | 
				
			||||||
 | 
					    Campaign A: [0.3, 0.6] radius: 20
 | 
				
			||||||
 | 
					    Campaign B: [0.45, 0.23]     color: #ff0000  
 | 
				
			||||||
 | 
					    Campaign C: [0.57, 0.69]  stroke-color: #ff00ff  
 | 
				
			||||||
 | 
					    Campaign D: [0.78, 0.34]        stroke-width: 3px    
 | 
				
			||||||
 | 
					    Campaign E: [0.40, 0.34] radius: 20,   color: #ff0000  , stroke-color  : #ff00ff,     stroke-width    :   3px   
 | 
				
			||||||
 | 
					    Campaign F: [0.35, 0.78] stroke-width: 3px , color: #ff0000, radius: 20, stroke-color:     #ff00ff
 | 
				
			||||||
 | 
					    Campaign G: [0.22, 0.22] stroke-width: 3px  , color: #309708  ,  radius  : 20  ,  stroke-color:    #5060ff
 | 
				
			||||||
 | 
					    Campaign H: [0.22, 0.44]
 | 
				
			||||||
 | 
					      `,
 | 
				
			||||||
 | 
					      {}
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    cy.get('svg');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('it should render data points with styles + classes', () => {
 | 
				
			||||||
 | 
					    imgSnapshotTest(
 | 
				
			||||||
 | 
					      `
 | 
				
			||||||
 | 
					  quadrantChart
 | 
				
			||||||
 | 
					    title Reach and engagement of campaigns
 | 
				
			||||||
 | 
					    x-axis Reach -->
 | 
				
			||||||
 | 
					    y-axis Engagement -->
 | 
				
			||||||
 | 
					    quadrant-1 We should expand
 | 
				
			||||||
 | 
					    quadrant-2 Need to promote
 | 
				
			||||||
 | 
					    quadrant-3 Re-evaluate
 | 
				
			||||||
 | 
					    quadrant-4 May be improved
 | 
				
			||||||
 | 
					    Campaign A:::class1: [0.3, 0.6] radius: 20
 | 
				
			||||||
 | 
					    Campaign B: [0.45, 0.23] color: #ff0000
 | 
				
			||||||
 | 
					    Campaign C: [0.57, 0.69] stroke-color: #ff00ff
 | 
				
			||||||
 | 
					    Campaign D:::class2: [0.78, 0.34] stroke-width: 3px
 | 
				
			||||||
 | 
					    Campaign E:::class2: [0.40, 0.34] radius: 20, color: #ff0000, stroke-color: #ff00ff, stroke-width: 3px
 | 
				
			||||||
 | 
					    Campaign F:::class1: [0.35, 0.78]
 | 
				
			||||||
 | 
					    classDef class1 color: #908342, radius : 10, stroke-color: #310085, stroke-width: 10px
 | 
				
			||||||
 | 
					    classDef class2 color: #f00fff, radius : 10
 | 
				
			||||||
 | 
					    `
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -375,7 +375,7 @@ context('Sequence diagram', () => {
 | 
				
			|||||||
        {}
 | 
					        {}
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it('should have actor-top and actor-bottom classes on top and bottom actor box and symbol', () => {
 | 
					    it('should have actor-top and actor-bottom classes on top and bottom actor box and symbol and actor-box and actor-man classes for text tags', () => {
 | 
				
			||||||
      imgSnapshotTest(
 | 
					      imgSnapshotTest(
 | 
				
			||||||
        `
 | 
					        `
 | 
				
			||||||
        sequenceDiagram
 | 
					        sequenceDiagram
 | 
				
			||||||
@@ -394,6 +394,9 @@ context('Sequence diagram', () => {
 | 
				
			|||||||
      cy.get('.actor-man').should('have.class', 'actor-bottom');
 | 
					      cy.get('.actor-man').should('have.class', 'actor-bottom');
 | 
				
			||||||
      cy.get('.actor.actor-bottom').should('not.have.class', 'actor-top');
 | 
					      cy.get('.actor.actor-bottom').should('not.have.class', 'actor-top');
 | 
				
			||||||
      cy.get('.actor-man.actor-bottom').should('not.have.class', 'actor-top');
 | 
					      cy.get('.actor-man.actor-bottom').should('not.have.class', 'actor-top');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      cy.get('text.actor-box').should('include.text', 'Alice');
 | 
				
			||||||
 | 
					      cy.get('text.actor-man').should('include.text', 'Bob');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it('should render long notes left of actor', () => {
 | 
					    it('should render long notes left of actor', () => {
 | 
				
			||||||
      imgSnapshotTest(
 | 
					      imgSnapshotTest(
 | 
				
			||||||
@@ -807,7 +810,10 @@ context('Sequence diagram', () => {
 | 
				
			|||||||
        note left of Alice: config: mirrorActors=true<br/>directive: mirrorActors=false
 | 
					        note left of Alice: config: mirrorActors=true<br/>directive: mirrorActors=false
 | 
				
			||||||
        Bob->>Alice: Short as well
 | 
					        Bob->>Alice: Short as well
 | 
				
			||||||
      `,
 | 
					      `,
 | 
				
			||||||
        { logLevel: 0, sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } }
 | 
					        {
 | 
				
			||||||
 | 
					          logLevel: 0,
 | 
				
			||||||
 | 
					          sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' },
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
@@ -858,7 +864,10 @@ context('Sequence diagram', () => {
 | 
				
			|||||||
        a->>j: Hello John, how are you?
 | 
					        a->>j: Hello John, how are you?
 | 
				
			||||||
        j-->>a: Great!
 | 
					        j-->>a: Great!
 | 
				
			||||||
      `,
 | 
					      `,
 | 
				
			||||||
        { logLevel: 0, sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' } }
 | 
					        {
 | 
				
			||||||
 | 
					          logLevel: 0,
 | 
				
			||||||
 | 
					          sequence: { mirrorActors: true, noteFontSize: 18, noteFontFamily: 'Arial' },
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it('should support actor links and properties when not mirrored EXPERIMENTAL: USE WITH CAUTION', () => {
 | 
					    it('should support actor links and properties when not mirrored EXPERIMENTAL: USE WITH CAUTION', () => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
					      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
				
			||||||
@@ -33,7 +33,9 @@
 | 
				
			|||||||
        background-image: radial-gradient(#fff 1%, transparent 11%),
 | 
					        background-image: radial-gradient(#fff 1%, transparent 11%),
 | 
				
			||||||
          radial-gradient(#fff 1%, transparent 11%);
 | 
					          radial-gradient(#fff 1%, transparent 11%);
 | 
				
			||||||
        background-size: 20px 20px;
 | 
					        background-size: 20px 20px;
 | 
				
			||||||
        background-position: 0 0, 10px 10px;
 | 
					        background-position:
 | 
				
			||||||
 | 
					          0 0,
 | 
				
			||||||
 | 
					          10px 10px;
 | 
				
			||||||
        background-repeat: repeat;
 | 
					        background-repeat: repeat;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      .malware {
 | 
					      .malware {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
					    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <script src="./viewer.js" type="module"></script>
 | 
					    <script type="module" src="./viewer.js"></script>
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html lang="en">
 | 
					<html lang="en">
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="UTF-8" />
 | 
					    <meta charset="UTF-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,7 @@ example-diagram
 | 
				
			|||||||
    <!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
 | 
					    <!-- <script src="//cdn.jsdelivr.net/npm/mermaid@9.1.7/dist/mermaid.min.js"></script> -->
 | 
				
			||||||
    <!-- <script type="module" src="./external-diagrams-mindmap.mjs" /> -->
 | 
					    <!-- <script type="module" src="./external-diagrams-mindmap.mjs" /> -->
 | 
				
			||||||
    <script type="module">
 | 
					    <script type="module">
 | 
				
			||||||
      import exampleDiagram from '../../packages/mermaid-example-diagram/dist/mermaid-example-diagram.core.mjs';
 | 
					      import exampleDiagram from './mermaid-example-diagram.esm.mjs';
 | 
				
			||||||
      // import example from '../../packages/mermaid-example-diagram/src/detector';
 | 
					 | 
				
			||||||
      import mermaid from './mermaid.esm.mjs';
 | 
					      import mermaid from './mermaid.esm.mjs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      await mermaid.registerExternalDiagrams([exampleDiagram]);
 | 
					      await mermaid.registerExternalDiagrams([exampleDiagram]);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								cypress/platform/flow-elk.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								cypress/platform/flow-elk.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					<html>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <pre class="mermaid">
 | 
				
			||||||
 | 
					      flowchart-elk
 | 
				
			||||||
 | 
					      a[hello] --> b[world]
 | 
				
			||||||
 | 
					      b --> c{test}
 | 
				
			||||||
 | 
					      c --> one
 | 
				
			||||||
 | 
					      c --> two
 | 
				
			||||||
 | 
					      c --> three
 | 
				
			||||||
 | 
					    </pre>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					      import mermaid from './mermaid.esm.mjs';
 | 
				
			||||||
 | 
					      import elk from './mermaid-flowchart-elk.esm.min.mjs';
 | 
				
			||||||
 | 
					      if (window.location.search.includes('elk')) {
 | 
				
			||||||
 | 
					        await mermaid.registerExternalDiagrams([elk]);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      mermaid.initialize({
 | 
				
			||||||
 | 
					        logLevel: 3,
 | 
				
			||||||
 | 
					        startOnLoad: false,
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      await mermaid.run();
 | 
				
			||||||
 | 
					      if (window.Cypress) {
 | 
				
			||||||
 | 
					        window.rendered = true;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
					    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
					    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
					    <link href="https://fonts.googleapis.com/css?family=Montserrat&display=swap" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								cypress/platform/iife.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								cypress/platform/iife.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					<html>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <pre id="diagram" class="mermaid">
 | 
				
			||||||
 | 
					graph TB
 | 
				
			||||||
 | 
					      a --> b
 | 
				
			||||||
 | 
					      a --> c
 | 
				
			||||||
 | 
					      b --> d
 | 
				
			||||||
 | 
					      c --> d
 | 
				
			||||||
 | 
					    </pre>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div id="d2"></div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="/mermaid.min.js"></script>
 | 
				
			||||||
 | 
					    <script>
 | 
				
			||||||
 | 
					      mermaid.initialize({
 | 
				
			||||||
 | 
					        startOnLoad: true,
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      const value = `graph TD\nHello --> World`;
 | 
				
			||||||
 | 
					      const el = document.getElementById('d2');
 | 
				
			||||||
 | 
					      mermaid.render('did', value).then(({ svg }) => {
 | 
				
			||||||
 | 
					        console.log(svg);
 | 
				
			||||||
 | 
					        el.innerHTML = svg;
 | 
				
			||||||
 | 
					        if (window.Cypress) {
 | 
				
			||||||
 | 
					          window.rendered = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
@@ -17,20 +17,20 @@
 | 
				
			|||||||
    graph TB
 | 
					    graph TB
 | 
				
			||||||
      Function-->URL
 | 
					      Function-->URL
 | 
				
			||||||
      click Function clickByFlow "Add a div"
 | 
					      click Function clickByFlow "Add a div"
 | 
				
			||||||
      click URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>"
 | 
					      click URL "http://localhost:9000/info.html" "Visit <strong>mermaid docs</strong>"
 | 
				
			||||||
      </pre>
 | 
					      </pre>
 | 
				
			||||||
      <pre id="FirstLine" class="mermaid2">
 | 
					      <pre id="FirstLine" class="mermaid2">
 | 
				
			||||||
  graph TB
 | 
					  graph TB
 | 
				
			||||||
    1Function-->2URL
 | 
					    1Function-->2URL
 | 
				
			||||||
    click 1Function clickByFlow "Add a div"
 | 
					    click 1Function clickByFlow "Add a div"
 | 
				
			||||||
    click 2URL "http://localhost:9000/webpackUsage.html" "Visit <strong>mermaid docs</strong>"
 | 
					    click 2URL "http://localhost:9000/info.html" "Visit <strong>mermaid docs</strong>"
 | 
				
			||||||
      </pre>
 | 
					      </pre>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <pre id="FirstLine" class="mermaid2">
 | 
					      <pre id="FirstLine" class="mermaid2">
 | 
				
			||||||
  classDiagram
 | 
					  classDiagram
 | 
				
			||||||
    class Test
 | 
					    class Test
 | 
				
			||||||
    class ShapeLink
 | 
					    class ShapeLink
 | 
				
			||||||
    link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link"
 | 
					    link ShapeLink "http://localhost:9000/info.html" "This is a tooltip for a link"
 | 
				
			||||||
    class ShapeCallback
 | 
					    class ShapeCallback
 | 
				
			||||||
    callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
 | 
					    callback ShapeCallback "clickByClass" "This is a tooltip for a callback"
 | 
				
			||||||
      </pre>
 | 
					      </pre>
 | 
				
			||||||
@@ -42,7 +42,7 @@
 | 
				
			|||||||
      <pre id="FirstLine" class="mermaid">
 | 
					      <pre id="FirstLine" class="mermaid">
 | 
				
			||||||
  classDiagram-v2
 | 
					  classDiagram-v2
 | 
				
			||||||
    class ShapeLink
 | 
					    class ShapeLink
 | 
				
			||||||
    link ShapeLink "http://localhost:9000/webpackUsage.html" "This is a tooltip for a link"
 | 
					    link ShapeLink "http://localhost:9000/info.html" "This is a tooltip for a link"
 | 
				
			||||||
      </pre>
 | 
					      </pre>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -77,7 +77,7 @@
 | 
				
			|||||||
    Calling a Callback (look at the console log) :cl2, after cl1, 3d
 | 
					    Calling a Callback (look at the console log) :cl2, after cl1, 3d
 | 
				
			||||||
    Calling a Callback with args :cl3, after cl1, 3d
 | 
					    Calling a Callback with args :cl3, after cl1, 3d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    click cl1 href "http://localhost:9000/webpackUsage.html"
 | 
					    click cl1 href "http://localhost:9000/info.html"
 | 
				
			||||||
    click cl2 call clickByGantt()
 | 
					    click cl2 call clickByGantt()
 | 
				
			||||||
    click cl3 call clickByGantt("test1", test2, test3)
 | 
					    click cl3 call clickByGantt("test1", test2, test3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,9 +102,15 @@
 | 
				
			|||||||
        div.className = 'created-by-gant-click';
 | 
					        div.className = 'created-by-gant-click';
 | 
				
			||||||
        div.style = 'padding: 20px; background: green; color: white;';
 | 
					        div.style = 'padding: 20px; background: green; color: white;';
 | 
				
			||||||
        div.innerText = 'Clicked By Gant';
 | 
					        div.innerText = 'Clicked By Gant';
 | 
				
			||||||
        if (arg1) div.innerText += ' ' + arg1;
 | 
					        if (arg1) {
 | 
				
			||||||
        if (arg2) div.innerText += ' ' + arg2;
 | 
					          div.innerText += ' ' + arg1;
 | 
				
			||||||
        if (arg3) div.innerText += ' ' + arg3;
 | 
					        }
 | 
				
			||||||
 | 
					        if (arg2) {
 | 
				
			||||||
 | 
					          div.innerText += ' ' + arg2;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (arg3) {
 | 
				
			||||||
 | 
					          div.innerText += ' ' + arg3;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        document.getElementsByTagName('body')[0].appendChild(div);
 | 
					        document.getElementsByTagName('body')[0].appendChild(div);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
					      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
					      href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,11 @@ sequenceDiagram
 | 
				
			|||||||
    mermaid.initialize({
 | 
					    mermaid.initialize({
 | 
				
			||||||
      theme: 'base',
 | 
					      theme: 'base',
 | 
				
			||||||
      themeVariables: {},
 | 
					      themeVariables: {},
 | 
				
			||||||
      startOnLoad: true,
 | 
					      startOnLoad: false,
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					    await mermaid.run();
 | 
				
			||||||
 | 
					    if (window.Cypress) {
 | 
				
			||||||
 | 
					      window.rendered = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  </script>
 | 
					  </script>
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!doctype html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
					    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      rel="stylesheet"
 | 
					      rel="stylesheet"
 | 
				
			||||||
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
 | 
					      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/font-awesome.min.css"
 | 
				
			||||||
    />
 | 
					    />
 | 
				
			||||||
    <link
 | 
					    <link
 | 
				
			||||||
      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
					      href="https://fonts.googleapis.com/css?family=Noto+Sans+SC&display=swap"
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user