mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-31 19:04:16 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			mermaid@11
			...
			sidv/updat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 8a09377eca | 
| @@ -1,36 +0,0 @@ | |||||||
| export interface PackageOptions { |  | ||||||
|   name: string; |  | ||||||
|   packageName: string; |  | ||||||
|   file: string; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * 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-layout-elk': { |  | ||||||
|     name: 'mermaid-layout-elk', |  | ||||||
|     packageName: 'mermaid-layout-elk', |  | ||||||
|     file: 'layouts.ts', |  | ||||||
|   }, |  | ||||||
| } as const satisfies Record<string, PackageOptions>; |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| import { generate } from 'langium-cli'; |  | ||||||
|  |  | ||||||
| export async function generateLangium() { |  | ||||||
|   await generate({ file: `./packages/parser/langium-config.json` }); |  | ||||||
| } |  | ||||||
| @@ -1,127 +0,0 @@ | |||||||
| 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', |  | ||||||
|   'kanban', |  | ||||||
|   'timeline', |  | ||||||
|   'gitGraph', |  | ||||||
|   'c4', |  | ||||||
|   'sankey', |  | ||||||
|   'block', |  | ||||||
|   'packet', |  | ||||||
|   'architecture', |  | ||||||
|   'radar', |  | ||||||
| ] 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)};`; |  | ||||||
| }; |  | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| /* eslint-disable no-console */ |  | ||||||
| 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`); |  | ||||||
|     if (out.length > 0) { |  | ||||||
|       console.log(out.toString()); |  | ||||||
|     } |  | ||||||
|   } catch (e) { |  | ||||||
|     console.error(e); |  | ||||||
|     if (e.stdout.length > 0) { |  | ||||||
|       console.error(e.stdout.toString()); |  | ||||||
|     } |  | ||||||
|     if (e.stderr.length > 0) { |  | ||||||
|       console.error(e.stderr.toString()); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| for (const { packageName } of Object.values(packageOptions)) { |  | ||||||
|   buildType(packageName); |  | ||||||
| } |  | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| # Changesets |  | ||||||
|  |  | ||||||
| Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works |  | ||||||
| with multi-package repos, or single-package repos to help you version and publish your code. You can |  | ||||||
| find the full documentation for it [in our repository](https://github.com/changesets/changesets) |  | ||||||
|  |  | ||||||
| We have a quick list of common questions to get you started engaging with this project in |  | ||||||
| [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| { |  | ||||||
|   "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", |  | ||||||
|   "changelog": ["@changesets/changelog-github", { "repo": "mermaid-js/mermaid" }], |  | ||||||
|   "commit": false, |  | ||||||
|   "fixed": [], |  | ||||||
|   "linked": [], |  | ||||||
|   "access": "public", |  | ||||||
|   "baseBranch": "master", |  | ||||||
|   "updateInternalDependencies": "patch", |  | ||||||
|   "bumpVersionsWithWorkspaceProtocolOnly": true, |  | ||||||
|   "ignore": ["@mermaid-js/docs", "@mermaid-js/webpack-test", "@mermaid-js/mermaid-example-diagram"] |  | ||||||
| } |  | ||||||
							
								
								
									
										3
									
								
								.commitlintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.commitlintrc.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | { | ||||||
|  |   "extends": ["@commitlint/config-conventional"] | ||||||
|  | } | ||||||
| @@ -1,153 +0,0 @@ | |||||||
| # This file contains coding related terms |  | ||||||
| ALPHANUM |  | ||||||
| antiscript |  | ||||||
| APPLYCLASS |  | ||||||
| ARROWHEADSTYLE |  | ||||||
| ARROWTYPE |  | ||||||
| autonumber |  | ||||||
| axisl-line |  | ||||||
| Bigdecimal |  | ||||||
| birel |  | ||||||
| BIREL |  | ||||||
| bqstring |  | ||||||
| BQUOTE |  | ||||||
| bramp |  | ||||||
| BRKT |  | ||||||
| brotli |  | ||||||
| callbackargs |  | ||||||
| callbackname |  | ||||||
| classdef |  | ||||||
| classdefid |  | ||||||
| classentity |  | ||||||
| classname |  | ||||||
| COLONSEP |  | ||||||
| COMPOSIT_STATE |  | ||||||
| concat |  | ||||||
| controlx |  | ||||||
| controly |  | ||||||
| CSSCLASS |  | ||||||
| curv |  | ||||||
| CYLINDEREND |  | ||||||
| CYLINDERSTART |  | ||||||
| DAGA |  | ||||||
| datakey |  | ||||||
| DEND |  | ||||||
| descr |  | ||||||
| distp |  | ||||||
| distq |  | ||||||
| divs |  | ||||||
| docref |  | ||||||
| DOMID |  | ||||||
| doublecircle |  | ||||||
| DOUBLECIRCLEEND |  | ||||||
| DOUBLECIRCLESTART |  | ||||||
| DQUOTE |  | ||||||
| DSTART |  | ||||||
| edgesep |  | ||||||
| EMPTYSTR |  | ||||||
| enddate |  | ||||||
| ERDIAGRAM |  | ||||||
| eslint |  | ||||||
| flatmap |  | ||||||
| forwardable |  | ||||||
| frontmatter |  | ||||||
| funs |  | ||||||
| gantt |  | ||||||
| GENERICTYPE |  | ||||||
| grammr |  | ||||||
| graphtype |  | ||||||
| halign |  | ||||||
| iife |  | ||||||
| interp |  | ||||||
| introdcued |  | ||||||
| INVTRAPEND |  | ||||||
| INVTRAPSTART |  | ||||||
| JDBC |  | ||||||
| jison |  | ||||||
| Kaufmann |  | ||||||
| keyify |  | ||||||
| LABELPOS |  | ||||||
| LABELTYPE |  | ||||||
| layoutstop |  | ||||||
| lcov |  | ||||||
| LEFTOF |  | ||||||
| Lexa |  | ||||||
| linebreak |  | ||||||
| LINETYPE |  | ||||||
| LINKSTYLE |  | ||||||
| LLABEL |  | ||||||
| loglevel |  | ||||||
| LOGMSG |  | ||||||
| lookaheads |  | ||||||
| mdast |  | ||||||
| metafile |  | ||||||
| minlen |  | ||||||
| Mstartx |  | ||||||
| MULT |  | ||||||
| NODIR |  | ||||||
| NSTR |  | ||||||
| outdir |  | ||||||
| Qcontrolx |  | ||||||
| QSTR |  | ||||||
| reinit |  | ||||||
| rels |  | ||||||
| reqs |  | ||||||
| rewritelinks |  | ||||||
| rgba |  | ||||||
| RIGHTOF |  | ||||||
| roughjs |  | ||||||
| sankey |  | ||||||
| sequencenumber |  | ||||||
| shrc |  | ||||||
| signaltype |  | ||||||
| someclass |  | ||||||
| SPACELINE |  | ||||||
| SPACELIST |  | ||||||
| STADIUMEND |  | ||||||
| STADIUMSTART |  | ||||||
| startdate |  | ||||||
| startx |  | ||||||
| starty |  | ||||||
| STMNT |  | ||||||
| stopx |  | ||||||
| stopy |  | ||||||
| strikethrough |  | ||||||
| stringifying |  | ||||||
| struct |  | ||||||
| STYLECLASS |  | ||||||
| STYLEDEF |  | ||||||
| STYLEOPTS |  | ||||||
| subcomponent |  | ||||||
| subcomponents |  | ||||||
| subconfig |  | ||||||
| SUBROUTINEEND |  | ||||||
| SUBROUTINESTART |  | ||||||
| Subschemas |  | ||||||
| substr |  | ||||||
| SVGG |  | ||||||
| SVGSVG |  | ||||||
| TAGEND |  | ||||||
| TAGSTART |  | ||||||
| techn |  | ||||||
| TESTSTR |  | ||||||
| TEXTDATA |  | ||||||
| TEXTLENGTH |  | ||||||
| titlevalue |  | ||||||
| topbar |  | ||||||
| TRAPEND |  | ||||||
| TRAPSTART |  | ||||||
| treemap |  | ||||||
| ts-nocheck |  | ||||||
| tsdoc |  | ||||||
| typeof |  | ||||||
| typestr |  | ||||||
| unshift |  | ||||||
| urlsafe |  | ||||||
| verifymethod |  | ||||||
| VERIFYMTHD |  | ||||||
| WARN_DOCSDIR_DOESNT_MATCH |  | ||||||
| xhost |  | ||||||
| yaxis |  | ||||||
| yfunc |  | ||||||
| yytext |  | ||||||
| zenuml |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| # Contributors to mermaidjs, one per line |  | ||||||
| Ashish Jain |  | ||||||
| cpettitt |  | ||||||
| Dong Cai |  | ||||||
| knsv |  | ||||||
| Knut Sveidqvist |  | ||||||
| Nikolay Rozhkov |  | ||||||
| Peng Xiao |  | ||||||
| Per Brolin |  | ||||||
| Sidharth Vinod |  | ||||||
| subhash-halder |  | ||||||
| @@ -1,55 +0,0 @@ | |||||||
| # yaml-language-server: $schema=https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json |  | ||||||
|  |  | ||||||
| $schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json |  | ||||||
|  |  | ||||||
| dictionaryDefinitions: |  | ||||||
|   - name: code-terms |  | ||||||
|     path: ./code-terms.txt |  | ||||||
|     description: A list of coding related terms. |  | ||||||
|     addWords: true |  | ||||||
|   - name: mermaid-terms |  | ||||||
|     path: ./mermaid-terms.txt |  | ||||||
|     description: A list of terms related to the mermaid project. |  | ||||||
|     addWords: true |  | ||||||
|   - name: misc-terms |  | ||||||
|     path: ./misc-terms.txt |  | ||||||
|     description: A list of miscellaneous terms. |  | ||||||
|   - name: 3rd-party-terms |  | ||||||
|     path: ./libraries.txt |  | ||||||
|     description: A list of 3rd party terms from dependencies. |  | ||||||
|     addWords: true |  | ||||||
|   - name: contributors |  | ||||||
|     path: ./contributors.txt |  | ||||||
|     description: A list of contributors to the mermaid project. |  | ||||||
|     type: 'W' |  | ||||||
|     addWords: true |  | ||||||
|  |  | ||||||
|   # cspell:disable |  | ||||||
|   - name: suggestions |  | ||||||
|     words: |  | ||||||
|       - none |  | ||||||
|       - disp |  | ||||||
|       - subproc |  | ||||||
|       - tria |  | ||||||
|     suggestWords: |  | ||||||
|       - seperator:separator |  | ||||||
|       - vertice:vertex |  | ||||||
|   # cspell:enable |  | ||||||
|  |  | ||||||
| patterns: |  | ||||||
|   - name: character-set-cyrillic |  | ||||||
|     pattern: '/\p{Script_Extensions=Cyrillic}+/gu' |  | ||||||
|   - name: svg-block |  | ||||||
|     pattern: '<svg[\S\s]+?</svg>' |  | ||||||
|   - name: json-property |  | ||||||
|     pattern: '/"[\w/@-]+":/g' |  | ||||||
|  |  | ||||||
| dictionaries: |  | ||||||
|   - mermaid-terms |  | ||||||
|   - suggestions |  | ||||||
|   - contributors |  | ||||||
|  |  | ||||||
| ignorePaths: |  | ||||||
|   - '*.txt' # do not spell check local dictionaries |  | ||||||
|  |  | ||||||
| # cspell:dictionary misc-terms |  | ||||||
| @@ -1,80 +0,0 @@ | |||||||
| # Add third party library terms below |  | ||||||
| acyclicer |  | ||||||
| Antlr |  | ||||||
| Appli |  | ||||||
| applitools |  | ||||||
| Asciidoctor |  | ||||||
| Astah |  | ||||||
| automerge |  | ||||||
| bilkent |  | ||||||
| bisheng |  | ||||||
| Blazor |  | ||||||
| codedoc |  | ||||||
| Codemia |  | ||||||
| codepaths |  | ||||||
| csstree |  | ||||||
| cytoscape |  | ||||||
| cytoscape-cose-bilkent |  | ||||||
| dagre |  | ||||||
| dagre-d3 |  | ||||||
| Deepdwn |  | ||||||
| Docsify |  | ||||||
| Docsy |  | ||||||
| Doctave |  | ||||||
| DokuWiki |  | ||||||
| dompurify |  | ||||||
| elkjs |  | ||||||
| fcose |  | ||||||
| fontawesome |  | ||||||
| Fonticons |  | ||||||
| Forgejo |  | ||||||
| Foswiki |  | ||||||
| Gitea |  | ||||||
| graphlib |  | ||||||
| Grav |  | ||||||
| icones |  | ||||||
| iconify |  | ||||||
| Inkdrop |  | ||||||
| jiti |  | ||||||
| jsdocs |  | ||||||
| jsfiddle |  | ||||||
| jsonschema |  | ||||||
| katex |  | ||||||
| khroma |  | ||||||
| langium |  | ||||||
| mathml |  | ||||||
| matplotlib |  | ||||||
| mdbook |  | ||||||
| Mermerd |  | ||||||
| mkdocs |  | ||||||
| Nextra |  | ||||||
| nodenext |  | ||||||
| npmjs |  | ||||||
| pageview |  | ||||||
| pathe |  | ||||||
| phpbb |  | ||||||
| pixelmatch |  | ||||||
| Podlite |  | ||||||
| presetAttributify |  | ||||||
| pyplot |  | ||||||
| redmine |  | ||||||
| rehype |  | ||||||
| roughjs |  | ||||||
| rscratch |  | ||||||
| shiki |  | ||||||
| Slidev |  | ||||||
| sparkline |  | ||||||
| sphinxcontrib |  | ||||||
| ssim |  | ||||||
| stylis |  | ||||||
| Swimm |  | ||||||
| tsbuildinfo |  | ||||||
| tseslint |  | ||||||
| Tuleap |  | ||||||
| Typora |  | ||||||
| unocss |  | ||||||
| unplugin |  | ||||||
| unstub |  | ||||||
| vite |  | ||||||
| vitest |  | ||||||
| Zune |  | ||||||
| @@ -1,43 +0,0 @@ | |||||||
| Adamiecki |  | ||||||
| arrowend |  | ||||||
| Bendpoints |  | ||||||
| bmatrix |  | ||||||
| braintree |  | ||||||
| catmull |  | ||||||
| compositTitleSize |  | ||||||
| curv |  | ||||||
| doublecircle |  | ||||||
| elems |  | ||||||
| gantt |  | ||||||
| gitgraph |  | ||||||
| gzipped |  | ||||||
| handDrawn |  | ||||||
| kanban |  | ||||||
| marginx |  | ||||||
| marginy |  | ||||||
| Markdownish |  | ||||||
| mermaidchart |  | ||||||
| mermaidjs |  | ||||||
| mindmap |  | ||||||
| mindmaps |  | ||||||
| mrtree |  | ||||||
| multigraph |  | ||||||
| nodesep |  | ||||||
| NOTEGROUP |  | ||||||
| Pinterest |  | ||||||
| procs |  | ||||||
| rankdir |  | ||||||
| ranksep |  | ||||||
| rect |  | ||||||
| rects |  | ||||||
| sandboxed |  | ||||||
| siebling |  | ||||||
| statediagram |  | ||||||
| substate |  | ||||||
| unfixable |  | ||||||
| Viewbox |  | ||||||
| viewports |  | ||||||
| visio |  | ||||||
| vitepress |  | ||||||
| xlink |  | ||||||
| xychart |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| BRANDES |  | ||||||
| circo |  | ||||||
| handDrawn |  | ||||||
| KOEPF |  | ||||||
| neato |  | ||||||
| newbranch |  | ||||||
| validify |  | ||||||
| @@ -1,107 +0,0 @@ | |||||||
| import { build } from 'esbuild'; |  | ||||||
| import { cp, mkdir, readFile, rename, writeFile } from 'node:fs/promises'; |  | ||||||
| import { packageOptions } from '../.build/common.js'; |  | ||||||
| import { generateLangium } from '../.build/generateLangium.js'; |  | ||||||
| import type { MermaidBuildOptions } from './util.js'; |  | ||||||
| import { defaultOptions, getBuildConfig } from './util.js'; |  | ||||||
|  |  | ||||||
| const shouldVisualize = process.argv.includes('--visualize'); |  | ||||||
|  |  | ||||||
| const buildPackage = async (entryName: keyof typeof packageOptions) => { |  | ||||||
|   const commonOptions: MermaidBuildOptions = { |  | ||||||
|     ...defaultOptions, |  | ||||||
|     options: packageOptions[entryName], |  | ||||||
|   } as const; |  | ||||||
|   const buildConfigs: MermaidBuildOptions[] = [ |  | ||||||
|     // 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 }, |  | ||||||
|       // mermaid.tiny.min.js |  | ||||||
|       { |  | ||||||
|         ...iifeOptions, |  | ||||||
|         minify: true, |  | ||||||
|         includeLargeFeatures: false, |  | ||||||
|         metafile: shouldVisualize, |  | ||||||
|         sourcemap: false, |  | ||||||
|       } |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
|   if (entryName === 'mermaid-zenuml') { |  | ||||||
|     const iifeOptions: MermaidBuildOptions = { |  | ||||||
|       ...commonOptions, |  | ||||||
|       format: 'iife', |  | ||||||
|       globalName: 'mermaid-zenuml', |  | ||||||
|     }; |  | ||||||
|     buildConfigs.push( |  | ||||||
|       // mermaid-zenuml.js |  | ||||||
|       { ...iifeOptions }, |  | ||||||
|       // mermaid-zenuml.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?.outputs) { |  | ||||||
|         continue; |  | ||||||
|       } |  | ||||||
|       const fileName = Object.keys(metafile.outputs) |  | ||||||
|         .find((file) => !file.includes('chunks') && file.endsWith('js'))! |  | ||||||
|         .replace('dist/', ''); |  | ||||||
|       // Upload metafile into https://esbuild.github.io/analyze/ |  | ||||||
|       await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile)); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| const handler = (e) => { |  | ||||||
|   // eslint-disable-next-line no-console |  | ||||||
|   console.error(e); |  | ||||||
|   process.exit(1); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| const buildTinyMermaid = async () => { |  | ||||||
|   await mkdir('./packages/tiny/dist', { recursive: true }); |  | ||||||
|   await rename( |  | ||||||
|     './packages/mermaid/dist/mermaid.tiny.min.js', |  | ||||||
|     './packages/tiny/dist/mermaid.tiny.js' |  | ||||||
|   ); |  | ||||||
|   // Copy version from mermaid's package.json to tiny's package.json |  | ||||||
|   const mermaidPkg = JSON.parse(await readFile('./packages/mermaid/package.json', 'utf8')); |  | ||||||
|   const tinyPkg = JSON.parse(await readFile('./packages/tiny/package.json', 'utf8')); |  | ||||||
|   tinyPkg.version = mermaidPkg.version; |  | ||||||
|  |  | ||||||
|   await writeFile('./packages/tiny/package.json', JSON.stringify(tinyPkg, null, 2) + '\n'); |  | ||||||
|   await cp('./packages/mermaid/CHANGELOG.md', './packages/tiny/CHANGELOG.md'); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| const main = async () => { |  | ||||||
|   await generateLangium(); |  | ||||||
|   await mkdir('stats', { recursive: true }); |  | ||||||
|   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); |  | ||||||
|   } |  | ||||||
|   await buildTinyMermaid(); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| void main(); |  | ||||||
| @@ -1,15 +0,0 @@ | |||||||
| import { readFile } from 'node:fs/promises'; |  | ||||||
| import { transformJison } from '../.build/jisonTransformer.js'; |  | ||||||
| import type { 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: [] }; |  | ||||||
|     }); |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| 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; |  | ||||||
| @@ -1,122 +0,0 @@ | |||||||
| /* eslint-disable no-console */ |  | ||||||
| import chokidar from 'chokidar'; |  | ||||||
| import cors from 'cors'; |  | ||||||
| import { context } from 'esbuild'; |  | ||||||
| import type { Request, Response } from 'express'; |  | ||||||
| import express from 'express'; |  | ||||||
| import { packageOptions } from '../.build/common.js'; |  | ||||||
| import { generateLangium } from '../.build/generateLangium.js'; |  | ||||||
| import { defaultOptions, getBuildConfig } from './util.js'; |  | ||||||
|  |  | ||||||
| const configs = Object.values(packageOptions).map(({ packageName }) => |  | ||||||
|   getBuildConfig({ |  | ||||||
|     ...defaultOptions, |  | ||||||
|     minify: false, |  | ||||||
|     core: false, |  | ||||||
|     options: packageOptions[packageName], |  | ||||||
|   }) |  | ||||||
| ); |  | ||||||
| const mermaidIIFEConfig = getBuildConfig({ |  | ||||||
|   ...defaultOptions, |  | ||||||
|   minify: false, |  | ||||||
|   core: false, |  | ||||||
|   options: packageOptions.mermaid, |  | ||||||
|   format: 'iife', |  | ||||||
| }); |  | ||||||
| configs.push(mermaidIIFEConfig); |  | ||||||
|  |  | ||||||
| const contexts = await Promise.all( |  | ||||||
|   configs.map(async (config) => ({ config, context: await context(config) })) |  | ||||||
| ); |  | ||||||
|  |  | ||||||
| let rebuildCounter = 1; |  | ||||||
| const rebuildAll = async () => { |  | ||||||
|   const buildNumber = rebuildCounter++; |  | ||||||
|   const timeLabel = `Rebuild ${buildNumber} Time (total)`; |  | ||||||
|   console.time(timeLabel); |  | ||||||
|   await Promise.all( |  | ||||||
|     contexts.map(async ({ config, context }) => { |  | ||||||
|       const buildVariant = `Rebuild ${buildNumber} Time (${Object.keys(config.entryPoints!)[0]} ${config.format})`; |  | ||||||
|       console.time(buildVariant); |  | ||||||
|       await context.rebuild(); |  | ||||||
|       console.timeEnd(buildVariant); |  | ||||||
|     }) |  | ||||||
|   ).catch((e) => console.error(e)); |  | ||||||
|   console.timeEnd(timeLabel); |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| let clients: { id: number; response: Response }[] = []; |  | ||||||
| function eventsHandler(request: Request, response: Response) { |  | ||||||
|   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); |  | ||||||
|   } |  | ||||||
|   // eslint-disable-next-line @typescript-eslint/no-misused-promises |  | ||||||
|   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/], |  | ||||||
|     }) |  | ||||||
|     // eslint-disable-next-line @typescript-eslint/no-misused-promises |  | ||||||
|     .on('all', async (event, path) => { |  | ||||||
|       // Ignore other events. |  | ||||||
|       if (!['add', 'change'].includes(event)) { |  | ||||||
|         return; |  | ||||||
|       } |  | ||||||
|       console.log(`${path} changed. Rebuilding...`); |  | ||||||
|       if (path.endsWith('.langium')) { |  | ||||||
|         await generateLangium(); |  | ||||||
|       } |  | ||||||
|       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`); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void createServer(); |  | ||||||
							
								
								
									
										119
									
								
								.esbuild/util.ts
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								.esbuild/util.ts
									
									
									
									
									
								
							| @@ -1,119 +0,0 @@ | |||||||
| import { resolve } from 'path'; |  | ||||||
| import { fileURLToPath } from 'url'; |  | ||||||
| import type { BuildOptions } from 'esbuild'; |  | ||||||
| import { readFileSync } from 'fs'; |  | ||||||
| import jsonSchemaPlugin from './jsonSchemaPlugin.js'; |  | ||||||
| import type { PackageOptions } from '../.build/common.js'; |  | ||||||
| import { jisonPlugin } from './jisonPlugin.js'; |  | ||||||
|  |  | ||||||
| const __dirname = fileURLToPath(new URL('.', import.meta.url)); |  | ||||||
|  |  | ||||||
| export interface MermaidBuildOptions extends BuildOptions { |  | ||||||
|   minify: boolean; |  | ||||||
|   core: boolean; |  | ||||||
|   metafile: boolean; |  | ||||||
|   format: 'esm' | 'iife'; |  | ||||||
|   options: PackageOptions; |  | ||||||
|   includeLargeFeatures: boolean; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = { |  | ||||||
|   minify: false, |  | ||||||
|   metafile: false, |  | ||||||
|   core: false, |  | ||||||
|   format: 'esm', |  | ||||||
|   includeLargeFeatures: true, |  | ||||||
| } 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, includeLargeFeatures }: MermaidBuildOptions |  | ||||||
| ) => { |  | ||||||
|   if (core) { |  | ||||||
|     fileName += '.core'; |  | ||||||
|   } else if (format === 'esm') { |  | ||||||
|     fileName += '.esm'; |  | ||||||
|   } |  | ||||||
|   if (!includeLargeFeatures) { |  | ||||||
|     fileName += '.tiny'; |  | ||||||
|   } |  | ||||||
|   if (minify) { |  | ||||||
|     fileName += '.min'; |  | ||||||
|   } |  | ||||||
|   return fileName; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => { |  | ||||||
|   const { |  | ||||||
|     core, |  | ||||||
|     format, |  | ||||||
|     options: { name, file, packageName }, |  | ||||||
|     globalName = 'mermaid', |  | ||||||
|     includeLargeFeatures, |  | ||||||
|     ...rest |  | ||||||
|   } = options; |  | ||||||
|  |  | ||||||
|   const external: string[] = ['require', 'fs', 'path']; |  | ||||||
|   const outFileName = getFileName(name, options); |  | ||||||
|   const output: BuildOptions = buildOptions({ |  | ||||||
|     ...rest, |  | ||||||
|     absWorkingDir: resolve(__dirname, `../packages/${packageName}`), |  | ||||||
|     entryPoints: { |  | ||||||
|       [outFileName]: `src/${file}`, |  | ||||||
|     }, |  | ||||||
|     globalName, |  | ||||||
|     logLevel: 'info', |  | ||||||
|     chunkNames: `chunks/${outFileName}/[name]-[hash]`, |  | ||||||
|     define: { |  | ||||||
|       // This needs to be stringified for esbuild |  | ||||||
|       includeLargeFeatures: `${includeLargeFeatures}`, |  | ||||||
|       '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; |  | ||||||
|     const originalGlobalName = output.globalName ?? 'mermaid'; |  | ||||||
|     output.globalName = `__esbuild_esm_mermaid_nm[${JSON.stringify(originalGlobalName)}]`; |  | ||||||
|     // Workaround for removing the .default access in esbuild IIFE. |  | ||||||
|     // https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396 |  | ||||||
|     output.footer = { |  | ||||||
|       js: `globalThis[${JSON.stringify(originalGlobalName)}] = globalThis.${output.globalName}.default;`, |  | ||||||
|     }; |  | ||||||
|     output.outExtension = { '.js': '.js' }; |  | ||||||
|   } else { |  | ||||||
|     output.format = 'esm'; |  | ||||||
|     output.splitting = true; |  | ||||||
|     output.outExtension = { '.js': '.mjs' }; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   return output; |  | ||||||
| }; |  | ||||||
							
								
								
									
										8
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | dist/** | ||||||
|  | .github/** | ||||||
|  | docs/Setup.md | ||||||
|  | cypress.config.js | ||||||
|  | cypress/plugins/index.js | ||||||
|  | coverage | ||||||
|  | *.json | ||||||
|  | node_modules | ||||||
							
								
								
									
										150
									
								
								.eslintrc.cjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								.eslintrc.cjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,150 @@ | |||||||
|  | module.exports = { | ||||||
|  |   env: { | ||||||
|  |     browser: true, | ||||||
|  |     es6: true, | ||||||
|  |     'jest/globals': true, | ||||||
|  |     node: true, | ||||||
|  |   }, | ||||||
|  |   root: true, | ||||||
|  |   parser: '@typescript-eslint/parser', | ||||||
|  |   parserOptions: { | ||||||
|  |     ecmaFeatures: { | ||||||
|  |       experimentalObjectRestSpread: true, | ||||||
|  |       jsx: true, | ||||||
|  |     }, | ||||||
|  |     tsconfigRootDir: __dirname, | ||||||
|  |     sourceType: 'module', | ||||||
|  |     ecmaVersion: 2020, | ||||||
|  |     allowAutomaticSingleRunInference: true, | ||||||
|  |     project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'], | ||||||
|  |     parser: '@typescript-eslint/parser', | ||||||
|  |   }, | ||||||
|  |   extends: [ | ||||||
|  |     'eslint:recommended', | ||||||
|  |     'plugin:@typescript-eslint/recommended', | ||||||
|  |     'plugin:json/recommended', | ||||||
|  |     'plugin:markdown/recommended', | ||||||
|  |     'plugin:@cspell/recommended', | ||||||
|  |     'prettier', | ||||||
|  |   ], | ||||||
|  |   plugins: [ | ||||||
|  |     '@typescript-eslint', | ||||||
|  |     'no-only-tests', | ||||||
|  |     'html', | ||||||
|  |     'jest', | ||||||
|  |     'jsdoc', | ||||||
|  |     'json', | ||||||
|  |     '@cspell', | ||||||
|  |     'lodash', | ||||||
|  |     'unicorn', | ||||||
|  |   ], | ||||||
|  |   rules: { | ||||||
|  |     curly: 'error', | ||||||
|  |     'no-console': 'error', | ||||||
|  |     'no-prototype-builtins': 'off', | ||||||
|  |     'no-unused-vars': 'off', | ||||||
|  |     'cypress/no-async-tests': 'off', | ||||||
|  |     '@typescript-eslint/no-floating-promises': 'error', | ||||||
|  |     '@typescript-eslint/no-misused-promises': 'error', | ||||||
|  |     '@typescript-eslint/ban-ts-comment': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'ts-expect-error': 'allow-with-description', | ||||||
|  |         'ts-ignore': 'allow-with-description', | ||||||
|  |         'ts-nocheck': 'allow-with-description', | ||||||
|  |         'ts-check': 'allow-with-description', | ||||||
|  |         minimumDescriptionLength: 10, | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|  |     'json/*': ['error', 'allowComments'], | ||||||
|  |     '@cspell/spellchecker': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         checkIdentifiers: false, | ||||||
|  |         checkStrings: false, | ||||||
|  |         checkStringTemplates: false, | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|  |     'no-empty': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         allowEmptyCatch: true, | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|  |     'no-only-tests/no-only-tests': 'error', | ||||||
|  |     'lodash/import-scope': ['error', 'method'], | ||||||
|  |     'unicorn/better-regex': 'error', | ||||||
|  |     'unicorn/no-abusive-eslint-disable': 'error', | ||||||
|  |     'unicorn/no-array-push-push': 'error', | ||||||
|  |     'unicorn/no-for-loop': 'error', | ||||||
|  |     'unicorn/no-instanceof-array': 'error', | ||||||
|  |     'unicorn/no-typeof-undefined': 'error', | ||||||
|  |     'unicorn/no-unnecessary-await': 'error', | ||||||
|  |     'unicorn/no-unsafe-regex': 'warn', | ||||||
|  |     'unicorn/no-useless-promise-resolve-reject': 'error', | ||||||
|  |     'unicorn/prefer-array-find': 'error', | ||||||
|  |     'unicorn/prefer-array-flat-map': 'error', | ||||||
|  |     'unicorn/prefer-array-index-of': 'error', | ||||||
|  |     'unicorn/prefer-array-some': 'error', | ||||||
|  |     'unicorn/prefer-default-parameters': 'error', | ||||||
|  |     'unicorn/prefer-includes': 'error', | ||||||
|  |     'unicorn/prefer-negative-index': 'error', | ||||||
|  |     'unicorn/prefer-object-from-entries': 'error', | ||||||
|  |     'unicorn/prefer-string-starts-ends-with': 'error', | ||||||
|  |     'unicorn/prefer-string-trim-start-end': 'error', | ||||||
|  |     'unicorn/string-content': 'error', | ||||||
|  |     'unicorn/prefer-spread': 'error', | ||||||
|  |     'unicorn/no-lonely-if': 'error', | ||||||
|  |   }, | ||||||
|  |   overrides: [ | ||||||
|  |     { | ||||||
|  |       files: ['cypress/**', 'demos/**'], | ||||||
|  |       rules: { | ||||||
|  |         'no-console': 'off', | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       files: ['*.{js,jsx,mjs,cjs}'], | ||||||
|  |       extends: ['plugin:jsdoc/recommended'], | ||||||
|  |       rules: { | ||||||
|  |         'jsdoc/check-indentation': 'off', | ||||||
|  |         'jsdoc/check-alignment': 'off', | ||||||
|  |         'jsdoc/check-line-alignment': 'off', | ||||||
|  |         'jsdoc/multiline-blocks': 'off', | ||||||
|  |         'jsdoc/newline-after-description': 'off', | ||||||
|  |         'jsdoc/tag-lines': 'off', | ||||||
|  |         'jsdoc/require-param-description': 'off', | ||||||
|  |         'jsdoc/require-param-type': 'off', | ||||||
|  |         'jsdoc/require-returns': 'off', | ||||||
|  |         'jsdoc/require-returns-description': 'off', | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       files: ['*.{ts,tsx}'], | ||||||
|  |       plugins: ['tsdoc'], | ||||||
|  |       rules: { | ||||||
|  |         'tsdoc/syntax': 'error', | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       files: ['*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'], | ||||||
|  |       rules: { | ||||||
|  |         'jsdoc/require-jsdoc': 'off', | ||||||
|  |         '@typescript-eslint/no-unused-vars': 'off', | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       files: ['*.html', '*.md', '**/*.md/*'], | ||||||
|  |       rules: { | ||||||
|  |         'no-var': 'error', | ||||||
|  |         'no-undef': 'off', | ||||||
|  |         '@typescript-eslint/no-unused-vars': 'off', | ||||||
|  |         '@typescript-eslint/no-floating-promises': 'off', | ||||||
|  |         '@typescript-eslint/no-misused-promises': 'off', | ||||||
|  |       }, | ||||||
|  |       parserOptions: { | ||||||
|  |         project: null, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  | }; | ||||||
							
								
								
									
										5
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							| @@ -17,9 +17,6 @@ body: | |||||||
|         - Use a clear and concise title |         - Use a clear and concise title | ||||||
|         - Fill out the text fields with as much detail as possible. |         - Fill out the text fields with as much detail as possible. | ||||||
|         - Never be shy to give us screenshots and/or code samples. It will help! |         - Never be shy to give us screenshots and/or code samples. It will help! | ||||||
|  |  | ||||||
|         There is a chance that the bug is already fixed in the git `develop` branch, but is not released yet.  |  | ||||||
|         So please check in [Live Editor - Develop](https://develop.git.mermaid.live) before raising an issue. |  | ||||||
|   - type: textarea |   - type: textarea | ||||||
|     attributes: |     attributes: | ||||||
|       label: Description |       label: Description | ||||||
| @@ -46,7 +43,7 @@ body: | |||||||
|     attributes: |     attributes: | ||||||
|       label: Code Sample |       label: Code Sample | ||||||
|       description: |- |       description: |- | ||||||
|         If applicable, add the code sample or a link to the [Live Editor - Develop](https://develop.git.mermaid.live). |         If applicable, add the code sample or a link to the [Live Editor](https://mermaid.live). | ||||||
|         Any text pasted here will be rendered as a Code block. |         Any text pasted here will be rendered as a Code block. | ||||||
|       render: text |       render: text | ||||||
|   - type: textarea |   - type: textarea | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							| @@ -3,18 +3,12 @@ contact_links: | |||||||
|   - name: GitHub Discussions |   - name: GitHub Discussions | ||||||
|     url: https://github.com/mermaid-js/mermaid/discussions |     url: https://github.com/mermaid-js/mermaid/discussions | ||||||
|     about: Ask the Community questions or share your own graphs in our discussions. |     about: Ask the Community questions or share your own graphs in our discussions. | ||||||
|   - name: Discord |   - name: Slack | ||||||
|     url: https://discord.gg/sKeNQX4Wtj |     url: https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE | ||||||
|     about: Join our Community on Discord for Help and a casual chat. |     about: Join our Community on Slack for Help and a casual chat. | ||||||
|   - name: Documentation |   - name: Documentation | ||||||
|     url: https://mermaid.js.org |     url: https://mermaid-js.github.io | ||||||
|     about: Read our documentation for all that Mermaid.js can offer. |     about: Read our documentation for all that Mermaid.js can offer. | ||||||
|   - name: Live Editor |   - name: Live Editor | ||||||
|     url: https://mermaid.live |     url: https://mermaid.live | ||||||
|     about: Try the live editor to preview graphs in no time. |     about: Try the live editor to preview graphs in no time. | ||||||
|   - name: Live Editor - Develop |  | ||||||
|     url: https://develop.git.mermaid.live |  | ||||||
|     about: Try unreleased changes in the develop branch. |  | ||||||
|   - name: Live Editor - Next |  | ||||||
|     url: https://next.git.mermaid.live |  | ||||||
|     about: Try unreleased changes in the next branch. |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							| @@ -29,7 +29,7 @@ body: | |||||||
|       label: Colors |       label: Colors | ||||||
|       description: |- |       description: |- | ||||||
|         A detailed list of the different colour values to use. |         A detailed list of the different colour values to use. | ||||||
|         See the [list of currently used variable names](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table) |         A list of currently used variable names can be found [here](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table) | ||||||
|       placeholder: |- |       placeholder: |- | ||||||
|         - background: #f4f4f4 |         - background: #f4f4f4 | ||||||
|         - primaryColor: #fff4dd |         - primaryColor: #fff4dd | ||||||
|   | |||||||
							
								
								
									
										65
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										65
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							| @@ -1,65 +0,0 @@ | |||||||
| #############################  Display  ############################# |  | ||||||
|  |  | ||||||
| # Verbose program output |  | ||||||
| # Accepts log level: "error", "warn", "info", "debug", "trace" |  | ||||||
| verbose = "debug" |  | ||||||
|  |  | ||||||
| # Don't show interactive progress bar while checking links. |  | ||||||
| no_progress = true |  | ||||||
|  |  | ||||||
| #############################  Cache  ############################### |  | ||||||
|  |  | ||||||
| # Enable link caching. This can be helpful to avoid checking the same links on |  | ||||||
| # multiple runs. |  | ||||||
| cache = true |  | ||||||
|  |  | ||||||
| # Discard all cached requests older than this duration. |  | ||||||
| max_cache_age = "1d" |  | ||||||
|  |  | ||||||
| #############################  Requests  ############################ |  | ||||||
|  |  | ||||||
| # Comma-separated list of accepted status codes for valid links. |  | ||||||
| accept = [200, 429] |  | ||||||
|  |  | ||||||
| #############################  Exclusions  ########################## |  | ||||||
|  |  | ||||||
| # Exclude URLs and mail addresses from checking (supports regex). |  | ||||||
| exclude = [ |  | ||||||
| # Network error: Forbidden |  | ||||||
| "https://codepen.io", |  | ||||||
|  |  | ||||||
| # Timeout error, maybe Twitter has anti-bot defenses against GitHub's CI servers? |  | ||||||
| "https://twitter.com/mermaidjs_", |  | ||||||
|  |  | ||||||
| # Don't check files that are generated during the build via `pnpm docs:code` |  | ||||||
| 'packages/mermaid/src/docs/config/setup/*', |  | ||||||
|  |  | ||||||
| # Ignore Discord invite |  | ||||||
| "https://discord.gg", |  | ||||||
|  |  | ||||||
| # BundlePhobia has frequent downtime |  | ||||||
| "https://bundlephobia.com", |  | ||||||
|  |  | ||||||
| # Chrome webstore migration issue. Temporary |  | ||||||
| "https://chromewebstore.google.com", |  | ||||||
|  |  | ||||||
| # Drupal 403 |  | ||||||
| "https://(www.)?drupal.org", |  | ||||||
|  |  | ||||||
| # Phbpp 403 |  | ||||||
| "https://(www.)?phpbb.com", |  | ||||||
|  |  | ||||||
| # Swimm returns 404, even though the link is valid |  | ||||||
| "https://docs.swimm.io", |  | ||||||
|  |  | ||||||
| # Timeout |  | ||||||
| "https://huehive.co", |  | ||||||
| "https://foswiki.org", |  | ||||||
| "https://www.gnu.org", |  | ||||||
| "https://mermaid-preview.com" |  | ||||||
| ] |  | ||||||
|  |  | ||||||
| # Exclude all private IPs from checking. |  | ||||||
| # Equivalent to setting `exclude_private`, `exclude_link_local`, and |  | ||||||
| # `exclude_loopback` to true. |  | ||||||
| exclude_all_private = true |  | ||||||
							
								
								
									
										25
									
								
								.github/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								.github/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,22 +1,3 @@ | |||||||
| # yaml-language-server: $schema=https://raw.githubusercontent.com/release-drafter/release-drafter/master/schema.json | 'Type: Bug / Error': 'bug/*' | ||||||
| autolabeler: | 'Type: Enhancement': 'feature/*' | ||||||
|   - label: 'Type: Bug / Error' | 'Type: Other': 'other/*' | ||||||
|     branch: |  | ||||||
|       - '/bug\/.+/' |  | ||||||
|       - '/fix\/.+/' |  | ||||||
|   - label: 'Type: Enhancement' |  | ||||||
|     branch: |  | ||||||
|       - '/feature\/.+/' |  | ||||||
|       - '/feat\/.+/' |  | ||||||
|   - label: 'Type: Other' |  | ||||||
|     branch: |  | ||||||
|       - '/other\/.+/' |  | ||||||
|       - '/chore\/.+/' |  | ||||||
|       - '/test\/.+/' |  | ||||||
|       - '/refactor\/.+/' |  | ||||||
|   - label: 'Area: Documentation' |  | ||||||
|     branch: |  | ||||||
|       - '/docs\/.+/' |  | ||||||
|  |  | ||||||
| template: | |  | ||||||
|   This field is unused, as we only use this config file for labeling PRs. |  | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							| @@ -12,7 +12,7 @@ Describe the way your implementation works or what design decisions you made if | |||||||
|  |  | ||||||
| Make sure you | Make sure you | ||||||
|  |  | ||||||
| - [ ] :book: have read the [contribution guidelines](https://mermaid.js.org/community/contributing.html) | - [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md) | ||||||
| - [ ] :computer: have added necessary unit/e2e tests. | - [ ] :computer: have added unit/e2e tests (if appropriate) | ||||||
| - [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://mermaid.js.org/community/contributing.html#update-documentation) is used for all new features. | - [ ] :notebook: have added documentation (if appropriate) | ||||||
| - [ ] :butterfly: If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. | - [ ] :bookmark: targeted `develop` branch | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								.github/release-drafter.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.github/release-drafter.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | name-template: '$NEXT_PATCH_VERSION' | ||||||
|  | tag-template: '$NEXT_PATCH_VERSION' | ||||||
|  | categories: | ||||||
|  |   - title: '🚀 Features' | ||||||
|  |     labels: | ||||||
|  |       - 'Type: Enhancement' | ||||||
|  |   - title: '🐛 Bug Fixes' | ||||||
|  |     labels: | ||||||
|  |       - 'Type: Bug / Error' | ||||||
|  |   - title: '🧰 Maintenance' | ||||||
|  |     label: 'Type: Other' | ||||||
|  | change-template: '- $TITLE (#$NUMBER) @$AUTHOR' | ||||||
|  | sort-by: title | ||||||
|  | sort-direction: ascending | ||||||
|  | branches: | ||||||
|  |   - develop | ||||||
|  | exclude-labels: | ||||||
|  |   - 'Skip changelog' | ||||||
|  | no-changes-template: 'This release contains minor changes and bugfixes.' | ||||||
|  | template: | | ||||||
|  |   # Release Notes | ||||||
|  |  | ||||||
|  |   $CHANGES | ||||||
|  |  | ||||||
|  |   🎉 **Thanks to all contributors helping with this release!** 🎉 | ||||||
							
								
								
									
										2
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							| @@ -15,5 +15,5 @@ markComment: > | |||||||
|   If you are still interested in this issue and it is still relevant you can comment to revive it. |   If you are still interested in this issue and it is still relevant you can comment to revive it. | ||||||
| # Comment to post when closing a stale issue. Set to `false` to disable | # Comment to post when closing a stale issue. Set to `false` to disable | ||||||
| closeComment: > | closeComment: > | ||||||
|   This issue has been automatically closed due to a lack of activity.  |   This issue has been been automatically closed due to a lack of activity.  | ||||||
|   This is done to maintain a clean list of issues that the community is interested in developing. |   This is done to maintain a clean list of issues that the community is interested in developing. | ||||||
|   | |||||||
							
								
								
									
										45
									
								
								.github/workflows/autofix.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								.github/workflows/autofix.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,45 +0,0 @@ | |||||||
| name: autofix.ci # needed to securely identify the workflow |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|     branches-ignore: |  | ||||||
|       - 'renovate/**' |  | ||||||
| permissions: |  | ||||||
|   contents: read |  | ||||||
|  |  | ||||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   autofix: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |  | ||||||
|         # uses version from "packageManager" field in package.json |  | ||||||
|  |  | ||||||
|       - name: Setup Node.js |  | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |  | ||||||
|         with: |  | ||||||
|           cache: pnpm |  | ||||||
|           node-version-file: '.node-version' |  | ||||||
|  |  | ||||||
|       - name: Install Packages |  | ||||||
|         run: | |  | ||||||
|           pnpm install --frozen-lockfile |  | ||||||
|         env: |  | ||||||
|           CYPRESS_CACHE_FOLDER: .cache/Cypress |  | ||||||
|  |  | ||||||
|       - name: Fix Linting |  | ||||||
|         shell: bash |  | ||||||
|         run: pnpm -w run lint:fix |  | ||||||
|  |  | ||||||
|       - name: Sync `./src/config.type.ts` with `./src/schemas/config.schema.yaml` |  | ||||||
|         shell: bash |  | ||||||
|         run: pnpm run --filter mermaid types:build-config |  | ||||||
|  |  | ||||||
|       - name: Build Docs |  | ||||||
|         working-directory: ./packages/mermaid |  | ||||||
|         run: pnpm run docs:build |  | ||||||
|  |  | ||||||
|       - uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main |  | ||||||
							
								
								
									
										22
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,39 +1,29 @@ | |||||||
| name: Build Vitepress docs | name: Build Vitepress docs | ||||||
|  |  | ||||||
| on: | on: | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - master |  | ||||||
|       - release/* |  | ||||||
|   pull_request: |   pull_request: | ||||||
|   merge_group: |  | ||||||
|  |  | ||||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} |  | ||||||
|  |  | ||||||
| permissions: | permissions: | ||||||
|   contents: read |   contents: read | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   build-docs: |   # Build job | ||||||
|  |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |         uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - uses: pnpm/action-setup@v2 | ||||||
|  |  | ||||||
|       - name: Setup Node.js |       - name: Setup Node.js | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           cache: pnpm |           cache: pnpm | ||||||
|           node-version-file: '.node-version' |           node-version: 18 | ||||||
|  |  | ||||||
|       - name: Install Packages |       - name: Install Packages | ||||||
|         run: pnpm install --frozen-lockfile |         run: pnpm install --frozen-lockfile | ||||||
|  |  | ||||||
|       - name: Verify release version |  | ||||||
|         if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release')) }} |  | ||||||
|         run: pnpm --filter mermaid run docs:verify-version |  | ||||||
|  |  | ||||||
|       - name: Run Build |       - name: Run Build | ||||||
|         run: pnpm --filter mermaid run docs:build:vitepress |         run: pnpm --filter mermaid run docs:build:vitepress | ||||||
|   | |||||||
							
								
								
									
										51
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | name: Build | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   push: {} | ||||||
|  |   pull_request: | ||||||
|  |     types: | ||||||
|  |       - opened | ||||||
|  |       - synchronize | ||||||
|  |       - ready_for_review | ||||||
|  |  | ||||||
|  | permissions: | ||||||
|  |   contents: read | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   build: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     strategy: | ||||||
|  |       matrix: | ||||||
|  |         node-version: [18.x] | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|  |       - uses: pnpm/action-setup@v2 | ||||||
|  |         # uses version from "packageManager" field in package.json | ||||||
|  |  | ||||||
|  |       - name: Setup Node.js ${{ matrix.node-version }} | ||||||
|  |         uses: actions/setup-node@v3 | ||||||
|  |         with: | ||||||
|  |           cache: pnpm | ||||||
|  |           node-version: ${{ matrix.node-version }} | ||||||
|  |  | ||||||
|  |       - name: Install Packages | ||||||
|  |         run: | | ||||||
|  |           pnpm install --frozen-lockfile | ||||||
|  |         env: | ||||||
|  |           CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||||
|  |  | ||||||
|  |       - name: Run Build | ||||||
|  |         run: pnpm run build | ||||||
|  |  | ||||||
|  |       - name: Upload Mermaid Build as Artifact | ||||||
|  |         uses: actions/upload-artifact@v3 | ||||||
|  |         with: | ||||||
|  |           name: mermaid-build | ||||||
|  |           path: packages/mermaid/dist | ||||||
|  |  | ||||||
|  |       - name: Upload Mermaid Mindmap Build as Artifact | ||||||
|  |         uses: actions/upload-artifact@v3 | ||||||
|  |         with: | ||||||
|  |           name: mermaid-mindmap-build | ||||||
|  |           path: packages/mermaid-mindmap/dist | ||||||
							
								
								
									
										4
									
								
								.github/workflows/check-readme-in-sync.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/check-readme-in-sync.yml
									
									
									
									
										vendored
									
									
								
							| @@ -14,11 +14,11 @@ permissions: | |||||||
|   contents: read |   contents: read | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   check-readme: |   check: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout repository |       - name: Checkout repository | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |         uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - name: Check for difference in README.md and docs/README.md |       - name: Check for difference in README.md and docs/README.md | ||||||
|         run: | |         run: | | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								.github/workflows/checks.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.github/workflows/checks.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | on: | ||||||
|  |   push: {} | ||||||
|  |   pull_request: | ||||||
|  |     types: | ||||||
|  |       - opened | ||||||
|  |       - synchronize | ||||||
|  |       - ready_for_review | ||||||
|  |  | ||||||
|  | name: Static analysis | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   test: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     name: check tests | ||||||
|  |     if: github.repository_owner == 'mermaid-js' | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |         with: | ||||||
|  |           fetch-depth: 0 | ||||||
|  |       - uses: testomatio/check-tests@stable | ||||||
|  |         with: | ||||||
|  |           framework: cypress | ||||||
|  |           tests: './cypress/e2e/**/**.spec.js' | ||||||
|  |           token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |           has-tests-label: true | ||||||
							
								
								
									
										11
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,9 +11,6 @@ on: | |||||||
|       - synchronize |       - synchronize | ||||||
|       - ready_for_review |       - ready_for_review | ||||||
|  |  | ||||||
| permissions: # added using https://github.com/step-security/secure-repo |  | ||||||
|   contents: read |  | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   analyze: |   analyze: | ||||||
|     name: Analyze |     name: Analyze | ||||||
| @@ -32,11 +29,11 @@ jobs: | |||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout repository |       - name: Checkout repository | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |         uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       # Initializes the CodeQL tools for scanning. |       # Initializes the CodeQL tools for scanning. | ||||||
|       - name: Initialize CodeQL |       - name: Initialize CodeQL | ||||||
|         uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 |         uses: github/codeql-action/init@v2 | ||||||
|         with: |         with: | ||||||
|           config-file: ./.github/codeql/codeql-config.yml |           config-file: ./.github/codeql/codeql-config.yml | ||||||
|           languages: ${{ matrix.language }} |           languages: ${{ matrix.language }} | ||||||
| @@ -48,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@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 |         uses: github/codeql-action/autobuild@v2 | ||||||
|  |  | ||||||
|       # ℹ️ 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 | ||||||
| @@ -62,4 +59,4 @@ jobs: | |||||||
|       #   make release |       #   make release | ||||||
|  |  | ||||||
|       - name: Perform CodeQL Analysis |       - name: Perform CodeQL Analysis | ||||||
|         uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 |         uses: github/codeql-action/analyze@v2 | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| # Dependency Review Action | # Dependency Review Action | ||||||
| # | # | ||||||
| # This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. | # This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. | ||||||
| # | # | ||||||
| # Source repository: https://github.com/actions/dependency-review-action | # Source repository: https://github.com/actions/dependency-review-action | ||||||
| # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement | # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement | ||||||
| @@ -15,6 +15,6 @@ jobs: | |||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: 'Checkout Repository' |       - name: 'Checkout Repository' | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |         uses: actions/checkout@v3 | ||||||
|       - name: 'Dependency Review' |       - name: 'Dependency Review' | ||||||
|         uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0 |         uses: actions/dependency-review-action@v3 | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,8 +11,6 @@ on: | |||||||
|         default: master |         default: master | ||||||
|         description: 'Parent branch to use for PRs' |         description: 'Parent branch to use for PRs' | ||||||
|  |  | ||||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} |  | ||||||
|  |  | ||||||
| permissions: | permissions: | ||||||
|   contents: read |   contents: read | ||||||
|  |  | ||||||
| @@ -21,42 +19,40 @@ env: | |||||||
|   USE_APPLI: ${{ secrets.APPLITOOLS_API_KEY && 'true' || '' }} |   USE_APPLI: ${{ secrets.APPLITOOLS_API_KEY && 'true' || '' }} | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   e2e-applitools: |   test: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     container: |     strategy: | ||||||
|       image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1 |       matrix: | ||||||
|       options: --user 1001 |         node-version: [18.x] | ||||||
|     steps: |     steps: | ||||||
|       - if: ${{ ! env.USE_APPLI }} |       - if: ${{ ! env.USE_APPLI }} | ||||||
|         name: Warn if not using Applitools |         name: Warn if not using Applitools | ||||||
|         run: | |         run: | | ||||||
|           echo "::error,title=Not using Applitools::APPLITOOLS_API_KEY is empty, disabling Applitools for this run." |           echo "::error,title=Not using Applitols::APPLITOOLS_API_KEY is empty, disabling Applitools for this run." | ||||||
|  |  | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - 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 ${{ matrix.node-version }} | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           node-version-file: '.node-version' |           node-version: ${{ matrix.node-version }} | ||||||
|  |  | ||||||
|       - if: ${{ env.USE_APPLI }} |       - if: ${{ env.USE_APPLI }} | ||||||
|         name: Notify applitools of new batch |         name: Notify applitools of new batch | ||||||
|         # Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html |         # Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html | ||||||
|  |         run: curl -L -d '' -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH" | ||||||
|         env: |         env: | ||||||
|           # e.g. mermaid-js/mermaid/my-branch |           # e.g. mermaid-js/mermaid/my-branch | ||||||
|           APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }} |           APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }} | ||||||
|           APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }} |           APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }} | ||||||
|           APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }} |           APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }} | ||||||
|           APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com' |           APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com' | ||||||
|         uses: wei/curl@012398a392d02480afa2720780031f8621d5f94c |  | ||||||
|         with: |  | ||||||
|           args: -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH" |  | ||||||
|  |  | ||||||
|       - name: Cypress run |       - name: Cypress run | ||||||
|         uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12 |         uses: cypress-io/github-action@v4 | ||||||
|         id: cypress |         id: cypress | ||||||
|         with: |         with: | ||||||
|           start: pnpm run dev |           start: pnpm run dev | ||||||
|   | |||||||
							
								
								
									
										70
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										70
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,70 +0,0 @@ | |||||||
| name: E2E - Generate Timings |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   # run this workflow every night at 3am |  | ||||||
|   schedule: |  | ||||||
|     - cron: '28 3 * * *' |  | ||||||
|   # or when the user triggers it from GitHub Actions page |  | ||||||
|   workflow_dispatch: |  | ||||||
|  |  | ||||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} |  | ||||||
|  |  | ||||||
| permissions: |  | ||||||
|   contents: write |  | ||||||
|   pull-requests: write |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   timings: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     container: |  | ||||||
|       image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1 |  | ||||||
|       options: --user 1001 |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |  | ||||||
|       - name: Setup Node.js |  | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |  | ||||||
|         with: |  | ||||||
|           node-version-file: '.node-version' |  | ||||||
|       - name: Install dependencies |  | ||||||
|         uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12 |  | ||||||
|         with: |  | ||||||
|           runTests: false |  | ||||||
|  |  | ||||||
|       - name: Cypress run |  | ||||||
|         uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12 |  | ||||||
|         id: cypress |  | ||||||
|         with: |  | ||||||
|           install: false |  | ||||||
|           start: pnpm run dev:coverage |  | ||||||
|           wait-on: 'http://localhost:9000' |  | ||||||
|           browser: chrome |  | ||||||
|           publish-summary: false |  | ||||||
|         env: |  | ||||||
|           VITEST_COVERAGE: true |  | ||||||
|           CYPRESS_COMMIT: ${{ github.sha }} |  | ||||||
|           SPLIT: 1 |  | ||||||
|           SPLIT_INDEX: 0 |  | ||||||
|           SPLIT_FILE: 'cypress/timings.json' |  | ||||||
|  |  | ||||||
|       - name: Compare timings |  | ||||||
|         id: compare |  | ||||||
|         run: | |  | ||||||
|           OUTPUT=$(pnpm tsx scripts/compare-timings.ts) |  | ||||||
|           echo "$OUTPUT" >> $GITHUB_STEP_SUMMARY |  | ||||||
|  |  | ||||||
|           echo "output<<EOF" >> $GITHUB_OUTPUT |  | ||||||
|           echo "$OUTPUT" >> $GITHUB_OUTPUT |  | ||||||
|           echo "EOF" >> $GITHUB_OUTPUT |  | ||||||
|  |  | ||||||
|       - name: Commit and create pull request |  | ||||||
|         uses: peter-evans/create-pull-request@889dce9eaba7900ce30494f5e1ac7220b27e5c81 |  | ||||||
|         with: |  | ||||||
|           add-paths: | |  | ||||||
|             cypress/timings.json |  | ||||||
|           commit-message: 'chore: update E2E timings' |  | ||||||
|           branch: update-timings |  | ||||||
|           title: Update E2E Timings |  | ||||||
|           body: ${{ steps.compare.outputs.output }} |  | ||||||
|           delete-branch: true |  | ||||||
|           sign-commits: true |  | ||||||
							
								
								
									
										142
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										142
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,151 +1,59 @@ | |||||||
| name: E2E | name: E2E | ||||||
|  |  | ||||||
| on: | on: [push, pull_request] | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - develop |  | ||||||
|       - master |  | ||||||
|       - release/** |  | ||||||
|   pull_request: |  | ||||||
|   merge_group: |  | ||||||
|  |  | ||||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} |  | ||||||
|  |  | ||||||
| permissions: | permissions: | ||||||
|   contents: read |   contents: read | ||||||
|  |  | ||||||
| env: |  | ||||||
|   # 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_name == 'push' && github.ref == 'refs/heads/develop') ||  |  | ||||||
|           github.event.before == '0000000000000000000000000000000000000000' |  | ||||||
|         ) && 'develop' |  | ||||||
|       ) ||  |  | ||||||
|       github.event.before |  | ||||||
|     }} |  | ||||||
|   RUN_VISUAL_TEST: >- |  | ||||||
|     ${{ github.repository == 'mermaid-js/mermaid' && (github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/')) }} |  | ||||||
| jobs: | jobs: | ||||||
|   cache: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     container: |  | ||||||
|       image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1 |  | ||||||
|       options: --user 1001 |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |  | ||||||
|       - name: Setup Node.js |  | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |  | ||||||
|         with: |  | ||||||
|           node-version-file: '.node-version' |  | ||||||
|       - name: Cache snapshots |  | ||||||
|         id: cache-snapshot |  | ||||||
|         uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 |  | ||||||
|         with: |  | ||||||
|           path: ./cypress/snapshots |  | ||||||
|           key: ${{ runner.os }}-snapshots-${{ env.targetHash }} |  | ||||||
|  |  | ||||||
|       # If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots. |  | ||||||
|       - name: Switch to base branch |  | ||||||
|         if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }} |  | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|         with: |  | ||||||
|           ref: ${{ env.targetHash }} |  | ||||||
|  |  | ||||||
|       - name: Install dependencies |  | ||||||
|         if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }} |  | ||||||
|         uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12 |  | ||||||
|         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 |  | ||||||
|  |  | ||||||
|   e2e: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     container: |  | ||||||
|       image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1 |  | ||||||
|       options: --user 1001 |  | ||||||
|     needs: cache |  | ||||||
|     strategy: |     strategy: | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|       matrix: |       matrix: | ||||||
|         containers: [1, 2, 3, 4, 5] |         node-version: [18.x] | ||||||
|  |         containers: [1, 2, 3, 4] | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - 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 ${{ matrix.node-version }} | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           node-version-file: '.node-version' |           node-version: ${{ matrix.node-version }} | ||||||
|  |  | ||||||
|       # These cached snapshots are downloaded, providing the reference snapshots. |  | ||||||
|       - name: Cache snapshots |  | ||||||
|         id: cache-snapshot |  | ||||||
|         uses: actions/cache/restore@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 |  | ||||||
|         with: |  | ||||||
|           path: ./cypress/snapshots |  | ||||||
|           key: ${{ runner.os }}-snapshots-${{ env.targetHash }} |  | ||||||
|  |  | ||||||
|       - name: Install dependencies |  | ||||||
|         uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12 |  | ||||||
|         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@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12 |         uses: cypress-io/github-action@v4 | ||||||
|         id: cypress |         id: cypress | ||||||
|  |         # 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 | ||||||
|  |         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 |  | ||||||
|           # Disable recording if we don't have an API key |           # Disable recording if we don't have an API key | ||||||
|           # e.g. if this action was run from a fork |           # e.g. if this action was run from a fork | ||||||
|           record: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY != '' }} |           record: ${{ secrets.CYPRESS_RECORD_KEY != '' }} | ||||||
|  |           parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }} | ||||||
|         env: |         env: | ||||||
|           ARGOS_PARALLEL: ${{ env.RUN_VISUAL_TEST == 'true' }} |           CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} | ||||||
|           ARGOS_PARALLEL_TOTAL: ${{ env.RUN_VISUAL_TEST == 'true' && strategy.job-total || 1 }} |  | ||||||
|           ARGOS_PARALLEL_INDEX: ${{ env.RUN_VISUAL_TEST == 'true' && matrix.containers || 1 }} |  | ||||||
|           CYPRESS_COMMIT: ${{ github.sha }} |  | ||||||
|           CYPRESS_RECORD_KEY: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY || ''}} |  | ||||||
|           SPLIT: ${{ strategy.job-total }} |  | ||||||
|           SPLIT_INDEX: ${{ strategy.job-index }} |  | ||||||
|           SPLIT_FILE: 'cypress/timings.json' |  | ||||||
|           VITEST_COVERAGE: true |           VITEST_COVERAGE: true | ||||||
|  |  | ||||||
|       - name: Upload Coverage to Codecov |       - name: Upload Coverage to Codecov | ||||||
|         uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1 |         uses: codecov/codecov-action@v3 | ||||||
|         # Run step only pushes to develop and pull_requests |         if: steps.cypress.conclusion == 'success' | ||||||
|         if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}} |  | ||||||
|         with: |         with: | ||||||
|           files: coverage/cypress/lcov.info |           files: coverage/cypress/lcov.info | ||||||
|           flags: e2e |           flags: e2e | ||||||
|           name: mermaid-codecov |           name: mermaid-codecov | ||||||
|           fail_ci_if_error: false |           fail_ci_if_error: true | ||||||
|           verbose: true |           verbose: true | ||||||
|           token: 6845cc80-77ee-4e17-85a1-026cd95e0766 |       - name: Upload Artifacts | ||||||
|  |         uses: actions/upload-artifact@v3 | ||||||
|  |         if: ${{ failure() && steps.cypress.conclusion == 'failure' }} | ||||||
|  |         with: | ||||||
|  |           name: error-snapshots | ||||||
|  |           path: cypress/snapshots/**/__diff_output__/* | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								.github/workflows/issue-triage.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/issue-triage.yml
									
									
									
									
										vendored
									
									
								
							| @@ -4,17 +4,11 @@ on: | |||||||
|   issues: |   issues: | ||||||
|     types: [opened] |     types: [opened] | ||||||
|  |  | ||||||
| permissions: # added using https://github.com/step-security/secure-repo |  | ||||||
|   contents: read |  | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   triage: |   triage: | ||||||
|     permissions: |  | ||||||
|       issues: write # for andymckay/labeler to label issues |  | ||||||
|       pull-requests: write # for andymckay/labeler to label PRs |  | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # 1.0.4 |       - uses: andymckay/labeler@1.0.4 | ||||||
|         with: |         with: | ||||||
|           repo-token: '${{ secrets.GITHUB_TOKEN }}' |           repo-token: '${{ secrets.GITHUB_TOKEN }}' | ||||||
|           add-labels: 'Status: Triage' |           add-labels: 'Status: Triage' | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							| @@ -19,30 +19,30 @@ on: | |||||||
|     # * is a special character in YAML so you have to quote this string |     # * is a special character in YAML so you have to quote this string | ||||||
|     - cron: '30 8 * * *' |     - cron: '30 8 * * *' | ||||||
|  |  | ||||||
| permissions: # added using https://github.com/step-security/secure-repo |  | ||||||
|   contents: read |  | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   link-checker: |   linkChecker: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     permissions: |     permissions: | ||||||
|       # lychee only uses the GITHUB_TOKEN to avoid rate-limiting |       # lychee only uses the GITHUB_TOKEN to avoid rate-limiting | ||||||
|       contents: read |       contents: read | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - name: Restore lychee cache |       - name: Restore lychee cache | ||||||
|         uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 |         uses: actions/cache@v3 | ||||||
|         with: |         with: | ||||||
|           path: .lycheecache |           path: .lycheecache | ||||||
|           key: cache-lychee-${{ github.sha }} |           key: cache-lychee-${{ github.sha }} | ||||||
|           restore-keys: cache-lychee- |           restore-keys: cache-lychee- | ||||||
|  |  | ||||||
|       - name: Link Checker |       - name: Link Checker | ||||||
|         uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0 |         uses: lycheeverse/lychee-action@v1.8.0 | ||||||
|         with: |         with: | ||||||
|           args: >- |           args: >- | ||||||
|             --config .github/lychee.toml |             --verbose | ||||||
|  |             --no-progress | ||||||
|  |             --cache | ||||||
|  |             --max-cache-age 1d | ||||||
|             packages/mermaid/src/docs/**/*.md |             packages/mermaid/src/docs/**/*.md | ||||||
|             README.md |             README.md | ||||||
|             README.zh-CN.md |             README.zh-CN.md | ||||||
|   | |||||||
							
								
								
									
										72
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,38 +1,34 @@ | |||||||
| name: Lint | name: Lint | ||||||
|  |  | ||||||
| on: | on: | ||||||
|   push: |   push: {} | ||||||
|   merge_group: |  | ||||||
|   pull_request: |   pull_request: | ||||||
|  |     types: | ||||||
|  |       - opened | ||||||
|  |       - synchronize | ||||||
|  |       - ready_for_review | ||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
|  |  | ||||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} |  | ||||||
|  |  | ||||||
| permissions: | permissions: | ||||||
|   contents: write |   contents: write | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   docker-lint: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|  |  | ||||||
|       - uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf # v3.1.0 |  | ||||||
|         with: |  | ||||||
|           verbose: true |  | ||||||
|   lint: |   lint: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|  |     strategy: | ||||||
|  |       matrix: | ||||||
|  |         node-version: [18.x] | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - 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 ${{ matrix.node-version }} | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           cache: pnpm |           cache: pnpm | ||||||
|           node-version-file: '.node-version' |           node-version: ${{ matrix.node-version }} | ||||||
|  |  | ||||||
|       - name: Install Packages |       - name: Install Packages | ||||||
|         run: | |         run: | | ||||||
| @@ -56,42 +52,20 @@ jobs: | |||||||
|               exit 1 |               exit 1 | ||||||
|           fi |           fi | ||||||
|  |  | ||||||
|       - name: Verify `./src/config.type.ts` is in sync with `./src/schemas/config.schema.yaml` |  | ||||||
|         shell: bash |  | ||||||
|         run: | |  | ||||||
|           if ! pnpm run --filter mermaid types:verify-config; then |  | ||||||
|             ERROR_MESSAGE='Running `pnpm run --filter mermaid types:verify-config` failed.' |  | ||||||
|             ERROR_MESSAGE+=' This should be fixed by running' |  | ||||||
|             ERROR_MESSAGE+=' `pnpm run --filter mermaid types:build-config`' |  | ||||||
|             ERROR_MESSAGE+=' on your local machine.' |  | ||||||
|             echo "::error title=Lint failure::${ERROR_MESSAGE}" |  | ||||||
|             # make sure to return an error exitcode so that GitHub actions shows a red-cross |  | ||||||
|             exit 1 |  | ||||||
|           fi |  | ||||||
|  |  | ||||||
|       - name: Verify no circular dependencies |  | ||||||
|         working-directory: ./packages/mermaid |  | ||||||
|         shell: bash |  | ||||||
|         run: | |  | ||||||
|           if ! pnpm run --filter mermaid checkCircle; then |  | ||||||
|             ERROR_MESSAGE='Circular dependency detected.' |  | ||||||
|             ERROR_MESSAGE+=' This should be fixed by removing the circular dependency.' |  | ||||||
|             ERROR_MESSAGE+=' Run `pnpm run --filter mermaid checkCircle` on your local machine' |  | ||||||
|             ERROR_MESSAGE+=' to see the circular dependency.' |  | ||||||
|             echo "::error title=Lint failure::${ERROR_MESSAGE}" |  | ||||||
|             # make sure to return an error exitcode so that GitHub actions shows a red-cross |  | ||||||
|             exit 1 |  | ||||||
|           fi |  | ||||||
|  |  | ||||||
|       - name: Verify Docs |       - name: Verify Docs | ||||||
|         id: verifyDocs |         id: verifyDocs | ||||||
|         working-directory: ./packages/mermaid |         working-directory: ./packages/mermaid | ||||||
|         continue-on-error: ${{ github.event_name == 'push' }} |         continue-on-error: ${{ github.event_name == 'push' }} | ||||||
|         run: pnpm run docs:verify |         run: pnpm run docs:verify | ||||||
|  |  | ||||||
|       - uses: testomatio/check-tests@0ea638fcec1820cf2e7b9854fdbdd04128a55bd4 # stable |       - name: Rebuild Docs | ||||||
|  |         if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }} | ||||||
|  |         working-directory: ./packages/mermaid | ||||||
|  |         run: pnpm run docs:build | ||||||
|  |  | ||||||
|  |       - name: Commit changes | ||||||
|  |         uses: EndBug/add-and-commit@v9 | ||||||
|  |         if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }} | ||||||
|         with: |         with: | ||||||
|           framework: cypress |           message: 'Update docs' | ||||||
|           tests: './cypress/e2e/**/**.spec.js' |           add: 'docs/*' | ||||||
|           token: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|           has-tests-label: true |  | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								.github/workflows/pr-labeler-config-validator.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/pr-labeler-config-validator.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | name: Validate PR Labeler Configuration | ||||||
|  | on: | ||||||
|  |   push: {} | ||||||
|  |   pull_request: | ||||||
|  |     types: | ||||||
|  |       - opened | ||||||
|  |       - synchronize | ||||||
|  |       - ready_for_review | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   pr-labeler: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout Repository | ||||||
|  |         uses: actions/checkout@v3 | ||||||
|  |       - name: Validate Configuration | ||||||
|  |         uses: Yash-Singh1/pr-labeler-config-validator@releases/v0.0.3 | ||||||
|  |         with: | ||||||
|  |           configuration-path: .github/pr-labeler.yml | ||||||
							
								
								
									
										22
									
								
								.github/workflows/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								.github/workflows/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,31 +1,13 @@ | |||||||
| name: Apply labels to PR | name: Apply labels to PR | ||||||
| on: | on: | ||||||
|   pull_request_target: |   pull_request_target: | ||||||
|     # required for pr-labeler to support PRs from forks |     types: [opened] | ||||||
|     # ===================== ⛔ ☢️ 🚫 ⚠️ Warning ⚠️ 🚫 ☢️ ⛔ ======================= |  | ||||||
|     # Be very careful what you put in this GitHub Action workflow file to avoid |  | ||||||
|     # malicious PRs from getting access to the Mermaid-js repo. |  | ||||||
|     # |  | ||||||
|     # Please read the following first before reviewing/merging: |  | ||||||
|     # - https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target |  | ||||||
|     # - https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ |  | ||||||
|     types: [opened, reopened, synchronize] |  | ||||||
|  |  | ||||||
| permissions: |  | ||||||
|   contents: read |  | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   pr-labeler: |   pr-labeler: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     permissions: |  | ||||||
|       contents: read # read permission is required to read config file |  | ||||||
|       pull-requests: write # write permission is required to label PRs |  | ||||||
|     steps: |     steps: | ||||||
|       - name: Label PR |       - name: Label PR | ||||||
|         uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0 |         uses: TimonVS/pr-labeler-action@v4 | ||||||
|         with: |  | ||||||
|           config-name: pr-labeler.yml |  | ||||||
|           disable-autolabeler: false |  | ||||||
|           disable-releaser: true |  | ||||||
|         env: |         env: | ||||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							| @@ -19,41 +19,41 @@ concurrency: | |||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   # Build job |   # Build job | ||||||
|   build-docs: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |         uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - uses: pnpm/action-setup@v2 | ||||||
|  |  | ||||||
|       - name: Setup Node.js |       - name: Setup Node.js | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           cache: pnpm |           cache: pnpm | ||||||
|           node-version-file: '.node-version' |           node-version: 18 | ||||||
|  |  | ||||||
|       - name: Install Packages |       - name: Install Packages | ||||||
|         run: pnpm install --frozen-lockfile |         run: pnpm install --frozen-lockfile | ||||||
|  |  | ||||||
|       - name: Setup Pages |       - name: Setup Pages | ||||||
|         uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0 |         uses: actions/configure-pages@v3 | ||||||
|  |  | ||||||
|       - 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@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 |         uses: actions/upload-pages-artifact@v1 | ||||||
|         with: |         with: | ||||||
|           path: packages/mermaid/src/vitepress/.vitepress/dist |           path: packages/mermaid/src/vitepress/.vitepress/dist | ||||||
|  |  | ||||||
|   # Deployment job |   # Deployment job | ||||||
|   deploy-docs: |   deploy: | ||||||
|     environment: |     environment: | ||||||
|       name: github-pages |       name: github-pages | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     needs: build-docs |     needs: build | ||||||
|     steps: |     steps: | ||||||
|       - name: Deploy to GitHub Pages |       - name: Deploy to GitHub Pages | ||||||
|         id: deployment |         id: deployment | ||||||
|         uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 |         uses: actions/deploy-pages@v2 | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | name: Draft Release | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - develop | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   draft-release: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: Draft Release | ||||||
|  |         uses: toolmantim/release-drafter@v5 | ||||||
|  |         env: | ||||||
|  |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
							
								
								
									
										12
									
								
								.github/workflows/release-preview-publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/release-preview-publish.yml
									
									
									
									
										vendored
									
									
								
							| @@ -6,20 +6,20 @@ on: | |||||||
|       - 'release/**' |       - 'release/**' | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   publish-preview: |   publish: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - uses: pnpm/action-setup@v2 | ||||||
|  |  | ||||||
|       - name: Setup Node.js |       - name: Setup Node.js | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           cache: pnpm |           cache: pnpm | ||||||
|           node-version-file: '.node-version' |           node-version: 18.x | ||||||
|  |  | ||||||
|       - name: Install Packages |       - name: Install Packages | ||||||
|         run: | |         run: | | ||||||
| @@ -28,7 +28,7 @@ jobs: | |||||||
|           CYPRESS_CACHE_FOLDER: .cache/Cypress |           CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||||
|  |  | ||||||
|       - name: Install Json |       - name: Install Json | ||||||
|         run: npm i json@11.0.0 --global |         run: npm i json --global | ||||||
|  |  | ||||||
|       - name: Publish |       - name: Publish | ||||||
|         working-directory: ./packages/mermaid |         working-directory: ./packages/mermaid | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,43 +0,0 @@ | |||||||
| name: Preview release |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|     branches: [develop] |  | ||||||
|     types: [opened, synchronize, labeled, ready_for_review] |  | ||||||
|  |  | ||||||
| concurrency: |  | ||||||
|   group: ${{ github.workflow }}-${{ github.event.number }} |  | ||||||
|   cancel-in-progress: true |  | ||||||
|  |  | ||||||
| permissions: |  | ||||||
|   contents: read |  | ||||||
|   actions: write |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   preview: |  | ||||||
|     if: ${{ github.repository_owner == 'mermaid-js' }} |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     permissions: |  | ||||||
|       contents: read |  | ||||||
|       id-token: write |  | ||||||
|       issues: write |  | ||||||
|       pull-requests: write |  | ||||||
|     name: Publish preview release |  | ||||||
|     timeout-minutes: 5 |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout Repo |  | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |  | ||||||
|  |  | ||||||
|       - name: Setup Node.js |  | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |  | ||||||
|         with: |  | ||||||
|           cache: pnpm |  | ||||||
|           node-version-file: '.node-version' |  | ||||||
|  |  | ||||||
|       - name: Install Packages |  | ||||||
|         run: pnpm install --frozen-lockfile |  | ||||||
|  |  | ||||||
|       - name: Publish packages |  | ||||||
|         run: pnpx pkg-pr-new publish --pnpm './packages/*' |  | ||||||
							
								
								
									
										47
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | name: Publish release | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   release: | ||||||
|  |     types: [published] | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   publish: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |       - uses: fregante/setup-git-user@v2 | ||||||
|  |  | ||||||
|  |       - uses: pnpm/action-setup@v2 | ||||||
|  |         # uses version from "packageManager" field in package.json | ||||||
|  |  | ||||||
|  |       - name: Setup Node.js v18 | ||||||
|  |         uses: actions/setup-node@v3 | ||||||
|  |         with: | ||||||
|  |           cache: pnpm | ||||||
|  |           node-version: 18.x | ||||||
|  |  | ||||||
|  |       - name: Install Packages | ||||||
|  |         run: | | ||||||
|  |           pnpm install --frozen-lockfile | ||||||
|  |           npm i json --global | ||||||
|  |         env: | ||||||
|  |           CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||||
|  |  | ||||||
|  |       - name: Prepare release | ||||||
|  |         run: | | ||||||
|  |           VERSION=${GITHUB_REF:10} | ||||||
|  |           echo "Preparing release $VERSION" | ||||||
|  |           git checkout -t origin/release/$VERSION | ||||||
|  |           npm version --no-git-tag-version --allow-same-version $VERSION | ||||||
|  |           git add package.json | ||||||
|  |           git commit -nm "Bump version $VERSION" | ||||||
|  |           git checkout -t origin/master | ||||||
|  |           git merge -m "Release $VERSION" --no-ff release/$VERSION | ||||||
|  |           git push --no-verify | ||||||
|  |  | ||||||
|  |       - name: Publish | ||||||
|  |         run: | | ||||||
|  |           npm set //registry.npmjs.org/:_authToken $NPM_TOKEN | ||||||
|  |           npm publish | ||||||
|  |         env: | ||||||
|  |           NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | ||||||
							
								
								
									
										46
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,46 +0,0 @@ | |||||||
| name: Release |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - master |  | ||||||
|  |  | ||||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} |  | ||||||
|  |  | ||||||
| permissions: # added using https://github.com/step-security/secure-repo |  | ||||||
|   contents: read |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   release: |  | ||||||
|     if: github.repository == 'mermaid-js/mermaid' |  | ||||||
|     permissions: |  | ||||||
|       contents: write # to create release (changesets/action) |  | ||||||
|       id-token: write # OpenID Connect token needed for provenance |  | ||||||
|       pull-requests: write # to create pull request (changesets/action) |  | ||||||
|     name: Release |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout Repo |  | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |  | ||||||
|  |  | ||||||
|       - name: Setup Node.js |  | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |  | ||||||
|         with: |  | ||||||
|           cache: pnpm |  | ||||||
|           node-version-file: '.node-version' |  | ||||||
|  |  | ||||||
|       - name: Install Packages |  | ||||||
|         run: pnpm install --frozen-lockfile |  | ||||||
|  |  | ||||||
|       - name: Create Release Pull Request or Publish to npm |  | ||||||
|         id: changesets |  | ||||||
|         uses: changesets/action@c8bada60c408975afd1a20b3db81d6eee6789308 # v1.4.9 |  | ||||||
|         with: |  | ||||||
|           version: pnpm changeset:version |  | ||||||
|           publish: pnpm changeset:publish |  | ||||||
|         env: |  | ||||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|           NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |  | ||||||
|           NPM_CONFIG_PROVENANCE: true |  | ||||||
							
								
								
									
										37
									
								
								.github/workflows/scorecard.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								.github/workflows/scorecard.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,37 +0,0 @@ | |||||||
| name: Scorecard supply-chain security |  | ||||||
| on: |  | ||||||
|   branch_protection_rule: |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - develop |  | ||||||
|   schedule: |  | ||||||
|     - cron: 29 15 * * 0 |  | ||||||
| permissions: read-all |  | ||||||
| jobs: |  | ||||||
|   analysis: |  | ||||||
|     name: Scorecard analysis |  | ||||||
|     permissions: |  | ||||||
|       id-token: write |  | ||||||
|       security-events: write |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout code |  | ||||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |  | ||||||
|         with: |  | ||||||
|           persist-credentials: false |  | ||||||
|       - name: Run analysis |  | ||||||
|         uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 |  | ||||||
|         with: |  | ||||||
|           results_file: results.sarif |  | ||||||
|           results_format: sarif |  | ||||||
|           publish_results: true |  | ||||||
|       - name: Upload artifact |  | ||||||
|         uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1 |  | ||||||
|         with: |  | ||||||
|           name: SARIF file |  | ||||||
|           path: results.sarif |  | ||||||
|           retention-days: 5 |  | ||||||
|       - name: Upload to code-scanning |  | ||||||
|         uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 |  | ||||||
|         with: |  | ||||||
|           sarif_file: results.sarif |  | ||||||
							
								
								
									
										34
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,24 +1,27 @@ | |||||||
| name: Unit Tests | name: Unit Tests | ||||||
|  |  | ||||||
| on: [push, pull_request, merge_group] | on: [push, pull_request] | ||||||
|  |  | ||||||
| permissions: | permissions: | ||||||
|   contents: read |   contents: read | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   unit-test: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|  |     strategy: | ||||||
|  |       matrix: | ||||||
|  |         node-version: [18.x] | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - 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 ${{ matrix.node-version }} | ||||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           cache: pnpm |           cache: pnpm | ||||||
|           node-version-file: '.node-version' |           node-version: ${{ matrix.node-version }} | ||||||
|  |  | ||||||
|       - name: Install Packages |       - name: Install Packages | ||||||
|         run: | |         run: | | ||||||
| @@ -38,18 +41,17 @@ jobs: | |||||||
|         run: | |         run: | | ||||||
|           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: Verify out-of-tree build with TypeScript |  | ||||||
|         run: | |  | ||||||
|           pnpm test:check:tsc |  | ||||||
|  |  | ||||||
|       - name: Upload Coverage to Codecov |       - name: Upload Coverage to Codecov | ||||||
|         uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1 |         uses: codecov/codecov-action@v3 | ||||||
|         # Run step only pushes to develop and pull_requests |  | ||||||
|         if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }} |  | ||||||
|         with: |         with: | ||||||
|           files: ./coverage/vitest/lcov.info |           files: ./coverage/vitest/lcov.info | ||||||
|           flags: unit |           flags: unit | ||||||
|           name: mermaid-codecov |           name: mermaid-codecov | ||||||
|           fail_ci_if_error: false |           fail_ci_if_error: true | ||||||
|           verbose: true |           verbose: true | ||||||
|           token: 6845cc80-77ee-4e17-85a1-026cd95e0766 |       # Coveralls is throwing 500. Disabled for now. | ||||||
|  |       # - name: Upload Coverage to Coveralls | ||||||
|  |       #   uses: coverallsapp/github-action@v2 | ||||||
|  |       #   with: | ||||||
|  |       #     github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |       #     flag-name: unit | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.github/workflows/unlock-reopened-issues.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/unlock-reopened-issues.yml
									
									
									
									
										vendored
									
									
								
							| @@ -8,6 +8,6 @@ jobs: | |||||||
|   triage: |   triage: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: Dunning-Kruger/unlock-issues@b06b7f7e5c3f2eaa1c6d5d89f40930e4d6d9699e # v1 |       - uses: Dunning-Kruger/unlock-issues@v1 | ||||||
|         with: |         with: | ||||||
|           repo-token: '${{ secrets.GITHUB_TOKEN }}' |           repo-token: '${{ secrets.GITHUB_TOKEN }}' | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							| @@ -5,21 +5,14 @@ on: | |||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   update-browser-list: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |       - uses: actions/checkout@v3 | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |       - run: npx browserslist@latest --update-db | ||||||
|       - run: npx update-browserslist-db@latest |  | ||||||
|       - name: Commit changes |       - name: Commit changes | ||||||
|         uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4 |         uses: EndBug/add-and-commit@v9 | ||||||
|         with: |         with: | ||||||
|           author_name: ${{ github.actor }} |           author_name: ${{ github.actor }} | ||||||
|           author_email: ${{ github.actor }}@users.noreply.github.com |           author_email: ${{ github.actor }}@users.noreply.github.com | ||||||
|           message: 'chore: update browsers list' |           message: 'chore: update browsers list' | ||||||
|           push: false |  | ||||||
|       - name: Create Pull Request |  | ||||||
|         uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 |  | ||||||
|         with: |  | ||||||
|           branch: update-browserslist |  | ||||||
|           title: Update Browserslist |  | ||||||
|   | |||||||
							
								
								
									
										70
									
								
								.github/workflows/validate-lockfile.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										70
									
								
								.github/workflows/validate-lockfile.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,70 +0,0 @@ | |||||||
| name: Validate pnpm-lock.yaml |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|     paths: |  | ||||||
|       - 'pnpm-lock.yaml' |  | ||||||
|       - '**/package.json' |  | ||||||
|       - '.github/workflows/validate-lockfile.yml' |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   validate-lockfile: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout code |  | ||||||
|         uses: actions/checkout@v4 |  | ||||||
|         with: |  | ||||||
|           fetch-depth: 0 |  | ||||||
|  |  | ||||||
|       - name: Set up Node.js |  | ||||||
|         uses: actions/setup-node@v4 |  | ||||||
|         with: |  | ||||||
|           node-version: 20 |  | ||||||
|  |  | ||||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 |  | ||||||
|  |  | ||||||
|       - name: Validate pnpm-lock.yaml entries |  | ||||||
|         id: validate # give this step an ID so we can reference its outputs |  | ||||||
|         run: | |  | ||||||
|           issues=() |  | ||||||
|  |  | ||||||
|           # 1) No tarball references |  | ||||||
|           if grep -qF 'tarball:' pnpm-lock.yaml; then |  | ||||||
|             issues+=("• Tarball references found (forbidden)") |  | ||||||
|           fi |  | ||||||
|  |  | ||||||
|           # 2) No unwanted vitepress paths |  | ||||||
|           if grep -qF 'packages/mermaid/src/vitepress' pnpm-lock.yaml; then |  | ||||||
|             issues+=("• Disallowed path 'packages/mermaid/src/vitepress' present. Run `rm -rf packages/mermaid/src/vitepress && pnpm install` to regenerate.") |  | ||||||
|           fi |  | ||||||
|  |  | ||||||
|           # 3) Lockfile only changes when package.json changes |  | ||||||
|           git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} > changed.txt |  | ||||||
|           if grep -q '^pnpm-lock.yaml$' changed.txt && ! grep -q 'package.json' changed.txt; then |  | ||||||
|             issues+=("• pnpm-lock.yaml changed without any package.json modification") |  | ||||||
|           fi |  | ||||||
|  |  | ||||||
|           # If any issues, output them and fail |  | ||||||
|           if [ ${#issues[@]} -gt 0 ]; then |  | ||||||
|             # Use the new GITHUB_OUTPUT approach to set a multiline output |  | ||||||
|             { |  | ||||||
|               echo "errors<<EOF" |  | ||||||
|               printf '%s\n' "${issues[@]}" |  | ||||||
|               echo "EOF" |  | ||||||
|             } >> $GITHUB_OUTPUT |  | ||||||
|             exit 1 |  | ||||||
|           fi |  | ||||||
|  |  | ||||||
|       - name: Comment on PR if validation failed |  | ||||||
|         if: failure() |  | ||||||
|         uses: peter-evans/create-or-update-comment@v4 |  | ||||||
|         with: |  | ||||||
|           token: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|           issue-number: ${{ github.event.pull_request.number }} |  | ||||||
|           body: | |  | ||||||
|             The following issue(s) were detected: |  | ||||||
|             ${{ steps.validate.outputs.errors }} |  | ||||||
|  |  | ||||||
|             Please address these and push an update. |  | ||||||
|  |  | ||||||
|             _Posted automatically by GitHub Actions_ |  | ||||||
							
								
								
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -35,7 +35,7 @@ cypress/snapshots/ | |||||||
| .tsbuildinfo | .tsbuildinfo | ||||||
| tsconfig.tsbuildinfo | tsconfig.tsbuildinfo | ||||||
|  |  | ||||||
| #knsv*.html | knsv*.html | ||||||
| local*.html | local*.html | ||||||
| stats/ | stats/ | ||||||
|  |  | ||||||
| @@ -43,12 +43,3 @@ stats/ | |||||||
| **/contributor-names.json | **/contributor-names.json | ||||||
| .pnpm-store | .pnpm-store | ||||||
| .nyc_output | .nyc_output | ||||||
|  |  | ||||||
| demos/dev/** |  | ||||||
| !/demos/dev/example.html |  | ||||||
| !/demos/dev/reload.js |  | ||||||
| tsx-0/** |  | ||||||
| vite.config.ts.timestamp-* |  | ||||||
|  |  | ||||||
| # autogenereated by langium-cli |  | ||||||
| generated/ |  | ||||||
|   | |||||||
| @@ -1,2 +0,0 @@ | |||||||
| ignored: |  | ||||||
|   - DL3002 # TODO: Last USER should not be root |  | ||||||
							
								
								
									
										4
									
								
								.husky/commit-msg
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.husky/commit-msg
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | # . "$(dirname "$0")/_/husky.sh" | ||||||
|  |  | ||||||
|  | # npx --no-install commitlint --edit $1 | ||||||
| @@ -1,2 +1,4 @@ | |||||||
| #!/usr/bin/env sh | #!/bin/sh | ||||||
| NODE_OPTIONS="--max_old_space_size=8192" pnpm run pre-commit | . "$(dirname "$0")/_/husky.sh" | ||||||
|  |  | ||||||
|  | pnpm run pre-commit | ||||||
|   | |||||||
| @@ -6,6 +6,6 @@ export default { | |||||||
|     // https://prettier.io/docs/en/cli.html#--cache |     // https://prettier.io/docs/en/cli.html#--cache | ||||||
|     'prettier --write', |     'prettier --write', | ||||||
|   ], |   ], | ||||||
|   '.cspell/*.txt': ['tsx scripts/fixCSpell.ts'], |   'cSpell.json': ['ts-node-esm scripts/fixCSpell.ts'], | ||||||
|   '**/*.jison': ['pnpm -w run lint:jison'], |   '**/*.jison': ['pnpm -w run lint:jison'], | ||||||
| }; | }; | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								.lycheeignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.lycheeignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | # These links are ignored by our link checker https://github.com/lycheeverse/lychee | ||||||
|  | # The file allows you to list multiple regular expressions for exclusion (one pattern per line). | ||||||
|  |  | ||||||
|  | # Network error: Forbidden | ||||||
|  | https://codepen.io | ||||||
|  |  | ||||||
|  | # Timeout error, maybe Twitter has anti-bot defenses against GitHub's CI servers? | ||||||
|  | https://twitter.com/mermaidjs_ | ||||||
|  |  | ||||||
|  | # Don't check files that are generated during the build via `pnpm docs:code` | ||||||
|  | packages/mermaid/src/docs/config/setup/* | ||||||
|  |  | ||||||
|  | # Ignore localhost | ||||||
|  | http://localhost:3333/ | ||||||
|  |  | ||||||
|  | # Ignore slack invite | ||||||
|  | https://join.slack.com/ | ||||||
| @@ -1 +0,0 @@ | |||||||
| 22.14.0 |  | ||||||
							
								
								
									
										2
									
								
								.npmrc
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.npmrc
									
									
									
									
									
								
							| @@ -1,4 +1,2 @@ | |||||||
| registry=https://registry.npmjs.org |  | ||||||
| auto-install-peers=true | auto-install-peers=true | ||||||
| strict-peer-dependencies=false | strict-peer-dependencies=false | ||||||
| package-import-method=clone-or-copy |  | ||||||
|   | |||||||
| @@ -1,20 +1,9 @@ | |||||||
| dist | dist | ||||||
| cypress/platform/xss3.html | cypress/platform/xss3.html | ||||||
| .cache | .cache | ||||||
| .pnpm-store |  | ||||||
| coverage | coverage | ||||||
| # Autogenerated by PNPM | # Autogenerated by PNPM | ||||||
| pnpm-lock.yaml | pnpm-lock.yaml | ||||||
| stats | stats | ||||||
| **/.vitepress/components.d.ts | packages/mermaid/src/docs/.vitepress/components.d.ts | ||||||
| **/.vitepress/cache |  | ||||||
| .nyc_output | .nyc_output | ||||||
| # Autogenerated by `pnpm run --filter mermaid types:build-config` |  | ||||||
| packages/mermaid/src/config.type.ts |  | ||||||
| # autogenereated by langium-cli |  | ||||||
| generated/ |  | ||||||
| # Ignore the files creates in /demos/dev except for example.html |  | ||||||
| demos/dev/** |  | ||||||
| !/demos/dev/example.html |  | ||||||
| # TODO: Lots of errors to fix |  | ||||||
| cypress/platform/state-refactor.html |  | ||||||
|   | |||||||
| @@ -3,6 +3,5 @@ | |||||||
|   "printWidth": 100, |   "printWidth": 100, | ||||||
|   "singleQuote": true, |   "singleQuote": true, | ||||||
|   "useTabs": false, |   "useTabs": false, | ||||||
|   "tabWidth": 2, |   "tabWidth": 2 | ||||||
|   "trailingComma": "es5" |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,15 +1,12 @@ | |||||||
| import type { InlineConfig } from 'vite'; | import { build, InlineConfig, type PluginOption } from 'vite'; | ||||||
| import { build, type PluginOption } from 'vite'; |  | ||||||
| import { resolve } from 'path'; | 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 { 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'); | ||||||
| @@ -38,6 +35,24 @@ 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; | ||||||
| @@ -47,18 +62,43 @@ interface BuildOptions { | |||||||
|  |  | ||||||
| export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => { | export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => { | ||||||
|   const external: (string | RegExp)[] = ['require', 'fs', 'path']; |   const external: (string | RegExp)[] = ['require', 'fs', 'path']; | ||||||
|   // eslint-disable-next-line no-console |  | ||||||
|   console.log(entryName, packageOptions[entryName]); |   console.log(entryName, packageOptions[entryName]); | ||||||
|   const { name, file, packageName } = packageOptions[entryName]; |   const { name, file, packageName } = packageOptions[entryName]; | ||||||
|   const output: OutputOptions = [ |   let output: OutputOptions = [ | ||||||
|     { |     { | ||||||
|       name, |       name, | ||||||
|       format: 'esm', |       format: 'esm', | ||||||
|       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: { | ||||||
| @@ -76,28 +116,21 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions) | |||||||
|         output, |         output, | ||||||
|       }, |       }, | ||||||
|     }, |     }, | ||||||
|     define: { |  | ||||||
|       'import.meta.vitest': 'undefined', |  | ||||||
|     }, |  | ||||||
|     resolve: { |     resolve: { | ||||||
|       extensions: [], |       extensions: [], | ||||||
|     }, |     }, | ||||||
|     plugins: [ |     plugins: [ | ||||||
|       jisonPlugin(), |       jisonPlugin(), | ||||||
|       jsonSchemaPlugin(), // handles `.schema.yaml` files |       // @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__', 'generated'], |         exclude: ['node_modules', 'test/', '__mocks__'], | ||||||
|         extension: ['.js', '.ts'], |         extension: ['.js', '.ts'], | ||||||
|         requireEnv: true, |         requireEnv: true, | ||||||
|         forceBuildInstrument: coverage, |         forceBuildInstrument: coverage, | ||||||
|       }), |       }), | ||||||
|       ...visualizerOptions(packageName, core), |       ...visualizerOptions(packageName, core), | ||||||
|     ], |     ], | ||||||
|     define: { |  | ||||||
|       // Needs to be string |  | ||||||
|       includeLargeFeatures: 'true', |  | ||||||
|     }, |  | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   if (watch && config.build) { |   if (watch && config.build) { | ||||||
| @@ -111,28 +144,24 @@ 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( |   for (const pkg of packageNames.filter((pkg) => !mermaidOnly || pkg === 'mermaid')) { | ||||||
|     (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' })); | ||||||
|   void build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' })); |  | ||||||
|   if (!mermaidOnly) { |   if (!mermaidOnly) { | ||||||
|     void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' })); |     build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' })); | ||||||
|     void 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 '../.build/jisonTransformer.js'; | import { transformJison } from './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,7 +1,6 @@ | |||||||
| import jison from 'jison'; | import jison from 'jison'; | ||||||
| 
 | 
 | ||||||
| export const transformJison = (src: string): string => { | export const transformJison = (src: string): string => { | ||||||
|   // @ts-ignore - Jison is not typed properly
 |  | ||||||
|   const parser = new jison.Generator(src, { |   const parser = new jison.Generator(src, { | ||||||
|     moduleType: 'js', |     moduleType: 'js', | ||||||
|     'token-stack': true, |     'token-stack': true, | ||||||
| @@ -1,28 +0,0 @@ | |||||||
| import type { PluginOption } from 'vite'; |  | ||||||
| import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js'; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Vite 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 default function jsonSchemaPlugin(): PluginOption { |  | ||||||
|   return { |  | ||||||
|     name: 'json-schema-plugin', |  | ||||||
|     transform(src: string, id: string) { |  | ||||||
|       const idAsUrl = new URL(id, 'file:///'); |  | ||||||
|  |  | ||||||
|       if (!idAsUrl.pathname.endsWith('schema.yaml')) { |  | ||||||
|         return; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       const jsonSchema = loadSchema(src, idAsUrl.pathname); |  | ||||||
|       return { |  | ||||||
|         code: idAsUrl.searchParams.get('only-defaults') |  | ||||||
|           ? getDefaults(jsonSchema) |  | ||||||
|           : getSchema(jsonSchema), |  | ||||||
|         map: null, // no source map |  | ||||||
|       }; |  | ||||||
|     }, |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
| @@ -1,7 +1,6 @@ | |||||||
| 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(); | ||||||
| @@ -15,17 +14,16 @@ async function createServer() { | |||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   app.use(cors()); |   app.use(cors()); | ||||||
|   for (const { packageName } of Object.values(packageOptions)) { |   app.use(express.static('./packages/mermaid/dist')); | ||||||
|     app.use(express.static(`./packages/${packageName}/dist`)); |   app.use(express.static('./packages/mermaid-zenuml/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')); | ||||||
|  |  | ||||||
|   app.listen(9000, () => { |   app.listen(9000, () => { | ||||||
|     // eslint-disable-next-line no-console |  | ||||||
|     console.log(`Listening on http://localhost:9000`); |     console.log(`Listening on http://localhost:9000`); | ||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  |  | ||||||
| void createServer(); | createServer(); | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							| @@ -2,7 +2,7 @@ | |||||||
|   "recommendations": [ |   "recommendations": [ | ||||||
|     "dbaeumer.vscode-eslint", |     "dbaeumer.vscode-eslint", | ||||||
|     "esbenp.prettier-vscode", |     "esbenp.prettier-vscode", | ||||||
|     "vitest.explorer", |     "zixuanchen.vitest-explorer", | ||||||
|     "luniclynx.bison" |     "luniclynx.bison" | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @@ -17,9 +17,8 @@ | |||||||
|       "name": "Docs generation", |       "name": "Docs generation", | ||||||
|       "type": "node", |       "type": "node", | ||||||
|       "request": "launch", |       "request": "launch", | ||||||
|       "args": ["scripts/docs.cli.mts"], |       "args": ["src/docs.mts"], | ||||||
|       // we'll need to change this to --import in Node.JS v20.6.0 and up |       "runtimeArgs": ["--loader", "ts-node/esm"], | ||||||
|       "runtimeArgs": ["--loader", "tsx/esm"], |  | ||||||
|       "cwd": "${workspaceRoot}/packages/mermaid", |       "cwd": "${workspaceRoot}/packages/mermaid", | ||||||
|       "skipFiles": ["<node_internals>/**", "**/node_modules/**"], |       "skipFiles": ["<node_internals>/**", "**/node_modules/**"], | ||||||
|       "smartStep": true, |       "smartStep": true, | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -68,7 +68,7 @@ try { | |||||||
|  |  | ||||||
| ### Init deprecated and InitThrowsErrors removed | ### Init deprecated and InitThrowsErrors removed | ||||||
|  |  | ||||||
| The config passed to `init` was not being used earlier. | The config passed to `init` was not being used eariler. | ||||||
| It will now be used. | It will now be used. | ||||||
| The `init` function is deprecated and will be removed in the next major release. | The `init` function is deprecated and will be removed in the next major release. | ||||||
| init currently works as a wrapper to `initialize` and `run`. | init currently works as a wrapper to `initialize` and `run`. | ||||||
| @@ -195,7 +195,7 @@ mermaid.run({ | |||||||
| - "Cannot activate" in sequenceDiagram [\#647](https://github.com/knsv/mermaid/issues/647) | - "Cannot activate" in sequenceDiagram [\#647](https://github.com/knsv/mermaid/issues/647) | ||||||
| - Link \("click" statement\) in flowchart does not work in exported SVG [\#646](https://github.com/knsv/mermaid/issues/646) | - Link \("click" statement\) in flowchart does not work in exported SVG [\#646](https://github.com/knsv/mermaid/issues/646) | ||||||
| - How to pass styling [\#639](https://github.com/knsv/mermaid/issues/639) | - How to pass styling [\#639](https://github.com/knsv/mermaid/issues/639) | ||||||
| - The live editor can't show seq diagram with notes for 8.0.0-alpha.3 [\#638](https://github.com/knsv/mermaid/issues/638) | - The live editor cant show seq diagram with notes for 8.0.0-alpha.3 [\#638](https://github.com/knsv/mermaid/issues/638) | ||||||
| - import mermaid.css with ES6 + NPM [\#634](https://github.com/knsv/mermaid/issues/634) | - import mermaid.css with ES6 + NPM [\#634](https://github.com/knsv/mermaid/issues/634) | ||||||
| - Actor line cuts through other elements [\#633](https://github.com/knsv/mermaid/issues/633) | - Actor line cuts through other elements [\#633](https://github.com/knsv/mermaid/issues/633) | ||||||
| - Graph TD line out of the picture \(left side\) [\#630](https://github.com/knsv/mermaid/issues/630) | - Graph TD line out of the picture \(left side\) [\#630](https://github.com/knsv/mermaid/issues/630) | ||||||
| @@ -256,7 +256,7 @@ mermaid.run({ | |||||||
| - Problem showing graph with php on localhost [\#502](https://github.com/knsv/mermaid/issues/502) | - Problem showing graph with php on localhost [\#502](https://github.com/knsv/mermaid/issues/502) | ||||||
| - logLevel's option doesnt work at 7.0.0 [\#501](https://github.com/knsv/mermaid/issues/501) | - logLevel's option doesnt work at 7.0.0 [\#501](https://github.com/knsv/mermaid/issues/501) | ||||||
| - How do I get the log for a render or parse attempt? [\#500](https://github.com/knsv/mermaid/issues/500) | - How do I get the log for a render or parse attempt? [\#500](https://github.com/knsv/mermaid/issues/500) | ||||||
| - Mermaid neutral style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499) | - Mermaid neutral style style to built in latest release [\#499](https://github.com/knsv/mermaid/issues/499) | ||||||
| - Any plans for adding a typescript definition file? [\#495](https://github.com/knsv/mermaid/issues/495) | - Any plans for adding a typescript definition file? [\#495](https://github.com/knsv/mermaid/issues/495) | ||||||
| - Gantt diagrams too narrow [\#493](https://github.com/knsv/mermaid/issues/493) | - Gantt diagrams too narrow [\#493](https://github.com/knsv/mermaid/issues/493) | ||||||
| - Flowchart edge labels placement [\#490](https://github.com/knsv/mermaid/issues/490) | - Flowchart edge labels placement [\#490](https://github.com/knsv/mermaid/issues/490) | ||||||
| @@ -504,7 +504,7 @@ mermaid.run({ | |||||||
|  |  | ||||||
| - Docs css: code hard to read [\#324](https://github.com/knsv/mermaid/issues/324) | - Docs css: code hard to read [\#324](https://github.com/knsv/mermaid/issues/324) | ||||||
| - About Markpad integration [\#323](https://github.com/knsv/mermaid/issues/323) | - About Markpad integration [\#323](https://github.com/knsv/mermaid/issues/323) | ||||||
| - How to link backwards in flowchat? [\#321](https://github.com/knsv/mermaid/issues/321) | - How to link backwords in flowchat? [\#321](https://github.com/knsv/mermaid/issues/321) | ||||||
| - Help with editor [\#310](https://github.com/knsv/mermaid/issues/310) | - Help with editor [\#310](https://github.com/knsv/mermaid/issues/310) | ||||||
| - +1 [\#293](https://github.com/knsv/mermaid/issues/293) | - +1 [\#293](https://github.com/knsv/mermaid/issues/293) | ||||||
| - Basic chart does not render on Chome, but does in Firefox [\#290](https://github.com/knsv/mermaid/issues/290) | - Basic chart does not render on Chome, but does in Firefox [\#290](https://github.com/knsv/mermaid/issues/290) | ||||||
| @@ -619,7 +619,7 @@ mermaid.run({ | |||||||
| - render to png from the cli does not display the marker-end arrow heads [\#181](https://github.com/knsv/mermaid/issues/181) | - render to png from the cli does not display the marker-end arrow heads [\#181](https://github.com/knsv/mermaid/issues/181) | ||||||
| - Links in sequence diagrams [\#159](https://github.com/knsv/mermaid/issues/159) | - Links in sequence diagrams [\#159](https://github.com/knsv/mermaid/issues/159) | ||||||
| - comment characters `%%` cause parse error [\#141](https://github.com/knsv/mermaid/issues/141) | - comment characters `%%` cause parse error [\#141](https://github.com/knsv/mermaid/issues/141) | ||||||
| - Add a reversed asymmetric shape [\#124](https://github.com/knsv/mermaid/issues/124) | - Add a reversed assymetric shape [\#124](https://github.com/knsv/mermaid/issues/124) | ||||||
| - Add syntax for double headed arrows [\#123](https://github.com/knsv/mermaid/issues/123) | - Add syntax for double headed arrows [\#123](https://github.com/knsv/mermaid/issues/123) | ||||||
| - Support for font-awesome [\#49](https://github.com/knsv/mermaid/issues/49) | - Support for font-awesome [\#49](https://github.com/knsv/mermaid/issues/49) | ||||||
|  |  | ||||||
| @@ -659,7 +659,7 @@ mermaid.run({ | |||||||
| - Auto linewrap for notes in sequence diagrams [\#178](https://github.com/knsv/mermaid/issues/178) | - Auto linewrap for notes in sequence diagrams [\#178](https://github.com/knsv/mermaid/issues/178) | ||||||
| - Execute code after initialize [\#176](https://github.com/knsv/mermaid/issues/176) | - Execute code after initialize [\#176](https://github.com/knsv/mermaid/issues/176) | ||||||
| - Autoscaling for all diagram types [\#175](https://github.com/knsv/mermaid/issues/175) | - Autoscaling for all diagram types [\#175](https://github.com/knsv/mermaid/issues/175) | ||||||
| - Problem with click event callback [\#174](https://github.com/knsv/mermaid/issues/174) | - Problem wit click event callback [\#174](https://github.com/knsv/mermaid/issues/174) | ||||||
| - How to escape characters? [\#170](https://github.com/knsv/mermaid/issues/170) | - How to escape characters? [\#170](https://github.com/knsv/mermaid/issues/170) | ||||||
| - it can not work [\#167](https://github.com/knsv/mermaid/issues/167) | - it can not work [\#167](https://github.com/knsv/mermaid/issues/167) | ||||||
| - UML Class diagram [\#154](https://github.com/knsv/mermaid/issues/154) | - UML Class diagram [\#154](https://github.com/knsv/mermaid/issues/154) | ||||||
| @@ -762,7 +762,7 @@ mermaid.run({ | |||||||
| - subgraph background is black in rendered flowchart PNG via CLI [\#121](https://github.com/knsv/mermaid/issues/121) | - subgraph background is black in rendered flowchart PNG via CLI [\#121](https://github.com/knsv/mermaid/issues/121) | ||||||
| - Integrate editor at https://github.com/naseer/mermaid-webapp [\#110](https://github.com/knsv/mermaid/issues/110) | - Integrate editor at https://github.com/naseer/mermaid-webapp [\#110](https://github.com/knsv/mermaid/issues/110) | ||||||
| - Internet Explorer Support [\#99](https://github.com/knsv/mermaid/issues/99) | - Internet Explorer Support [\#99](https://github.com/knsv/mermaid/issues/99) | ||||||
| - Asymmetric shapes not documented [\#82](https://github.com/knsv/mermaid/issues/82) | - Assymetric shapes not documented [\#82](https://github.com/knsv/mermaid/issues/82) | ||||||
| - NoModificationAllowedError [\#23](https://github.com/knsv/mermaid/issues/23) | - NoModificationAllowedError [\#23](https://github.com/knsv/mermaid/issues/23) | ||||||
| - Improve arrows [\#3](https://github.com/knsv/mermaid/issues/3) | - Improve arrows [\#3](https://github.com/knsv/mermaid/issues/3) | ||||||
|  |  | ||||||
| @@ -833,7 +833,7 @@ mermaid.run({ | |||||||
| - Merge pull request \#1 from knsv/master [\#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic)) | - Merge pull request \#1 from knsv/master [\#96](https://github.com/knsv/mermaid/pull/96) ([gkchic](https://github.com/gkchic)) | ||||||
| - Removed duplicated section in flowchart docs [\#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime)) | - Removed duplicated section in flowchart docs [\#94](https://github.com/knsv/mermaid/pull/94) ([kaime](https://github.com/kaime)) | ||||||
| - Grammar changes to sequence page [\#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic)) | - Grammar changes to sequence page [\#93](https://github.com/knsv/mermaid/pull/93) ([gkchic](https://github.com/gkchic)) | ||||||
| - GitHub buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic)) | - Github buttons [\#89](https://github.com/knsv/mermaid/pull/89) ([gkchic](https://github.com/gkchic)) | ||||||
| - Template change [\#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic)) | - Template change [\#88](https://github.com/knsv/mermaid/pull/88) ([gkchic](https://github.com/gkchic)) | ||||||
|  |  | ||||||
| ## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05) | ## [0.3.1](https://github.com/knsv/mermaid/tree/0.3.1) (2015-01-05) | ||||||
| @@ -908,7 +908,7 @@ mermaid.run({ | |||||||
|  |  | ||||||
| - Question marks don't render properly with /dist/mermaid.full.min.js [\#30](https://github.com/knsv/mermaid/issues/30) | - Question marks don't render properly with /dist/mermaid.full.min.js [\#30](https://github.com/knsv/mermaid/issues/30) | ||||||
| - Error with some characters [\#25](https://github.com/knsv/mermaid/issues/25) | - Error with some characters [\#25](https://github.com/knsv/mermaid/issues/25) | ||||||
| - Provide parse function in browser without `require`? [\#21](https://github.com/knsv/mermaid/issues/21) | - Provide parse function in browser widthout `require`? [\#21](https://github.com/knsv/mermaid/issues/21) | ||||||
| - Better label text support [\#18](https://github.com/knsv/mermaid/issues/18) | - Better label text support [\#18](https://github.com/knsv/mermaid/issues/18) | ||||||
| - Cap-cased words break parser [\#8](https://github.com/knsv/mermaid/issues/8) | - Cap-cased words break parser [\#8](https://github.com/knsv/mermaid/issues/8) | ||||||
|  |  | ||||||
| @@ -1002,4 +1002,4 @@ mermaid.run({ | |||||||
|  |  | ||||||
| ## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16) | ## [0.1.0](https://github.com/knsv/mermaid/tree/0.1.0) (2014-11-16) | ||||||
|  |  | ||||||
| \* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/GitHub-Changelog-Generator)_ | \* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)_ | ||||||
|   | |||||||
| @@ -59,8 +59,8 @@ representative at an online or offline event. | |||||||
| ## Enforcement | ## Enforcement | ||||||
|  |  | ||||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be | Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||||
| reported to the community leaders responsible for enforcement at <security@mermaid.live>. | reported to the community leaders responsible for enforcement at security@mermaid.live | ||||||
|  | . | ||||||
| All complaints will be reviewed and investigated promptly and fairly. | All complaints will be reviewed and investigated promptly and fairly. | ||||||
|  |  | ||||||
| All community leaders are obligated to respect the privacy and security of the | All community leaders are obligated to respect the privacy and security of the | ||||||
|   | |||||||
| @@ -1 +0,0 @@ | |||||||
| ./packages/mermaid/src/docs/community/contributing.md |  | ||||||
							
								
								
									
										71
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | |||||||
|  | # Contributing | ||||||
|  |  | ||||||
|  | Please read in detail about how to contribute documentation and code on the [Mermaid documentation site.](https://mermaid-js.github.io/mermaid/#/development) | ||||||
|  |  | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | # Mermaid contribution cheat-sheet | ||||||
|  |  | ||||||
|  | ## Requirements | ||||||
|  |  | ||||||
|  | - [volta](https://volta.sh/) to manage node versions. | ||||||
|  | - [Node.js](https://nodejs.org/en/). `volta install node` | ||||||
|  | - [pnpm](https://pnpm.io/) package manager. `volta install pnpm` | ||||||
|  |  | ||||||
|  | ## Development Installation | ||||||
|  |  | ||||||
|  | If you don't have direct access to push to mermaid repositories, make a fork first. Then clone. Or clone directly from mermaid-js: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | git clone git@github.com:mermaid-js/mermaid.git | ||||||
|  | cd mermaid | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Install required packages: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | # npx is required for first install as volta support for pnpm is not added yet. | ||||||
|  | npx pnpm install | ||||||
|  | pnpm test | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ### Docker | ||||||
|  |  | ||||||
|  | If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | ./run install # npx pnpm install | ||||||
|  | ./run test # pnpm test | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Testing | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | # Run unit test | ||||||
|  | pnpm test | ||||||
|  | # Run unit test in watch mode | ||||||
|  | pnpm test:watch | ||||||
|  | # Run E2E test | ||||||
|  | pnpm e2e | ||||||
|  | # Debug E2E tests | ||||||
|  | pnpm dev | ||||||
|  | pnpm cypress:open # in another terminal | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Branch name format: | ||||||
|  |  | ||||||
|  | ```text | ||||||
|  |    [feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces] | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | eg: `feature/2945_state-diagram-new-arrow-florbs`, `bug/1123_fix_random_ugly_red_text` | ||||||
|  |  | ||||||
|  | ## Documentation | ||||||
|  |  | ||||||
|  | Documentation is necessary for all non bugfix/refactoring changes. | ||||||
|  |  | ||||||
|  | Only make changes to files are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs) | ||||||
|  |  | ||||||
|  | **_DO NOT CHANGE FILES IN `/docs`_** | ||||||
|  |  | ||||||
|  | [Join our slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) | ||||||
							
								
								
									
										13
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -1,13 +0,0 @@ | |||||||
| FROM node:22.12.0-alpine3.19@sha256:40dc4b415c17b85bea9be05314b4a753f45a4e1716bb31c01182e6c53d51a654 |  | ||||||
|  |  | ||||||
| USER 0:0 |  | ||||||
|  |  | ||||||
| RUN corepack enable \ |  | ||||||
|     && corepack enable pnpm |  | ||||||
|  |  | ||||||
| RUN apk add --no-cache git~=2.43.4 \ |  | ||||||
|     && git config --add --system safe.directory /mermaid |  | ||||||
|  |  | ||||||
| ENV NODE_OPTIONS="--max_old_space_size=8192" |  | ||||||
|  |  | ||||||
| EXPOSE 9000 3333 |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| { |  | ||||||
|   "drips": { |  | ||||||
|     "ethereum": { |  | ||||||
|       "ownedBy": "0x0831DDFe60d009d9448CC976157b539089aB821E" |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
							
								
								
									
										115
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								README.md
									
									
									
									
									
								
							| @@ -15,14 +15,11 @@ Generate diagrams from markdown-like text. | |||||||
| <a href="https://mermaid.live/"><b>Live Editor!</b></a> | <a href="https://mermaid.live/"><b>Live Editor!</b></a> | ||||||
| </p> | </p> | ||||||
| <p align="center"> | <p align="center"> | ||||||
|  <a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/sKeNQX4Wtj" title="Discord invite">🙌 Join Us</a> |  <a href="https://mermaid.js.org">📖 Documentation</a> | <a href="https://mermaid.js.org/intro/">🚀 Getting Started</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE" title="Slack invite">🙌 Join Us</a> | ||||||
| </p> | </p> | ||||||
| <p align="center"> | <p align="center"> | ||||||
| <a href="./README.zh-CN.md">简体中文</a> | <a href="./README.zh-CN.md">简体中文</a> | ||||||
| </p> | </p> | ||||||
| <p align="center"> |  | ||||||
| Try Live Editor previews of future releases: <a href="https://develop.git.mermaid.live/" title="Try the mermaid version from the develop branch.">Develop</a> | <a href="https://next.git.mermaid.live/" title="Try the mermaid version from the next branch.">Next</a> |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <br> | <br> | ||||||
| <br> | <br> | ||||||
| @@ -33,10 +30,8 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai | |||||||
| [](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop) | [](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop) | ||||||
| [](https://www.jsdelivr.com/package/npm/mermaid) | [](https://www.jsdelivr.com/package/npm/mermaid) | ||||||
| [](https://www.npmjs.com/package/mermaid) | [](https://www.npmjs.com/package/mermaid) | ||||||
| [](https://discord.gg/sKeNQX4Wtj) | [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) | ||||||
| [](https://twitter.com/mermaidjs_) | [](https://twitter.com/mermaidjs_) | ||||||
| [](https://argos-ci.com?utm_source=mermaid&utm_campaign=oss) |  | ||||||
| [](https://securityscorecards.dev/viewer/?uri=github.com/mermaid-js/mermaid) |  | ||||||
|  |  | ||||||
| <img src="./img/header.png" alt="" /> | <img src="./img/header.png" alt="" /> | ||||||
|  |  | ||||||
| @@ -44,23 +39,7 @@ Try Live Editor previews of future releases: <a href="https://develop.git.mermai | |||||||
|  |  | ||||||
| **Thanks to all involved, people committing pull requests, people answering questions! 🙏** | **Thanks to all involved, people committing pull requests, people answering questions! 🙏** | ||||||
|  |  | ||||||
| <a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt='Banner for "The Official Guide to Mermaid.js" book'></a> | <a href="https://mermaid-js.github.io/mermaid/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a> | ||||||
|  |  | ||||||
| ## Table of content |  | ||||||
|  |  | ||||||
| <details> |  | ||||||
| <summary>Expand contents</summary> |  | ||||||
|  |  | ||||||
| - [About](#about) |  | ||||||
| - [Examples](#examples) |  | ||||||
| - [Release](#release) |  | ||||||
| - [Related projects](#related-projects) |  | ||||||
| - [Contributors](#contributors---) |  | ||||||
| - [Security and safe diagrams](#security-and-safe-diagrams) |  | ||||||
| - [Reporting vulnerabilities](#reporting-vulnerabilities) |  | ||||||
| - [Appreciation](#appreciation) |  | ||||||
|  |  | ||||||
| </details> |  | ||||||
|  |  | ||||||
| ## About | ## About | ||||||
|  |  | ||||||
| @@ -76,16 +55,12 @@ Mermaid addresses this problem by enabling users to create easily modifiable dia | |||||||
| <br/> | <br/> | ||||||
|  |  | ||||||
| Mermaid allows even non-programmers to easily create detailed diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/> | Mermaid allows even non-programmers to easily create detailed diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/> | ||||||
| For video tutorials, visit our [Tutorials](https://mermaid.js.org/ecosystem/tutorials.html) page. | [Tutorials](./docs/config/Tutorials.md) has video tutorials. | ||||||
| Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](https://mermaid.js.org/ecosystem/integrations-community.html). | Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations.md). | ||||||
|  |  | ||||||
| You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](https://mermaid.js.org/ecosystem/integrations-community.html). | You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations.md). | ||||||
|  |  | ||||||
| For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](https://mermaid.js.org/intro/getting-started.html), [Usage](https://mermaid.js.org/config/usage.html) and [Tutorials](https://mermaid.js.org/ecosystem/tutorials.html). | For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/community/n00b-overview.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/config/Tutorials.md). | ||||||
|  |  | ||||||
| Our PR Visual Regression Testing is powered by [Argos](https://argos-ci.com/?utm_source=mermaid&utm_campaign=oss) with their generous Open Source plan. It makes the process of reviewing PRs with visual changes a breeze. |  | ||||||
|  |  | ||||||
| [](https://argos-ci.com?utm_source=mermaid&utm_campaign=oss) |  | ||||||
|  |  | ||||||
| In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests. | In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests. | ||||||
|  |  | ||||||
| @@ -97,11 +72,11 @@ In our release process we rely heavily on visual regression tests using [applito | |||||||
|  |  | ||||||
| ## Examples | ## Examples | ||||||
|  |  | ||||||
| **The following are some examples of the diagrams, charts and graphs that can be made using Mermaid. Click here to jump into the [text syntax](https://mermaid.js.org/intro/syntax-reference.html).** | **The following are some examples of the diagrams, charts and graphs that can be made using Mermaid. Click here to jump into the [text syntax](https://mermaid-js.github.io/mermaid/#/n00b-syntaxReference).** | ||||||
|  |  | ||||||
| <!-- <Flowchart> --> | <!-- <Flowchart> --> | ||||||
|  |  | ||||||
| ### Flowchart [<a href="https://mermaid.js.org/syntax/flowchart.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNpNkMtqwzAQRX9FzKqFJK7t1km8KDQP6KJQSLOLvZhIY1tgS0GWmgbb_165IaFaiXvOFTPqgGtBkEJR6zOv0Fj2scsU8-ft8I5G5Gw6fe339GN7tnrYaafE45WvRsLW3Ya4bKVWwzVe_xU-FfVsc9hR62rLwvw_2591z7Y3FuUwgYZMg1L4ObrRzMBW1FAGqb8KKtCLGWRq8Ko7CbS0FdJqA2mBdUsTQGf110VxSK1xdJM2EkuDzd2qNQrypQ7s5TQuXcrW-ie5VoUsx9yZ2seVtac2DYIRz0ppK3eccd0ErRTjD1XfyyRIomSBUUzJPMaXOBb8GC4XRfQcFmL-FEYIwzD8AggvcHE">live editor</a>] | ### Flowchart [<a href="https://mermaid-js.github.io/mermaid/#/flowchart">docs</a> - <a href="https://mermaid.live/edit#pako:eNpNkMtqwzAQRX9FzKqFJK7t1km8KDQP6KJQSLOLvZhIY1tgS0GWmgbb_165IaFaiXvOFTPqgGtBkEJR6zOv0Fj2scsU8-ft8I5G5Gw6fe339GN7tnrYaafE45WvRsLW3Ya4bKVWwzVe_xU-FfVsc9hR62rLwvw_2591z7Y3FuUwgYZMg1L4ObrRzMBW1FAGqb8KKtCLGWRq8Ko7CbS0FdJqA2mBdUsTQGf110VxSK1xdJM2EkuDzd2qNQrypQ7s5TQuXcrW-ie5VoUsx9yZ2seVtac2DYIRz0ppK3eccd0ErRTjD1XfyyRIomSBUUzJPMaXOBb8GC4XRfQcFmL-FEYIwzD8AggvcHE">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| flowchart LR | flowchart LR | ||||||
| @@ -121,12 +96,12 @@ C -->|One| D[Result 1] | |||||||
| C -->|Two| E[Result 2] | C -->|Two| E[Result 2] | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Sequence diagram [<a href="https://mermaid.js.org/syntax/sequenceDiagram.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNo9kMluwjAQhl_F-AykQMuSA1WrbuLQQ3v1ZbAnsVXHkzrjVhHi3etQwKfRv4w-z0FqMihL2eF3wqDxyUEdoVHhwTuNk-12RzaU4g29JzHMY2HpV0BE0VO6V8ETtdkGz1Zb1F8qiPyG5LX84mrLAmpwoWNh-5a0pWCiAxUwGBXeiVHEU4oq8V_6AHYUwAu2lLLTjVQ4bc1rT2yleI0IfJG320faZ9ABbk-Jz3hZnFxBduR9L2oiM5Jj2WBswJn8-cMArSRbbFDJMo8GK0ielVThmKOpNcD4bBxTlGUFvsOxhMT02QctS44JL6HzAS-iJzCYOwfJfTscunYd542aQuXqQU_RZ9kyt11ZFIM9rR3btJ9qaorOGQuR7c9mWSznyzXMF7hcLeBusTB6P9usq_ntrDKrm9kc5PF4_AMJE56Z">live editor</a>] | ### Sequence diagram [<a href="https://mermaid-js.github.io/mermaid/#/sequenceDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNo9kMluwjAQhl_F-AykQMuSA1WrbuLQQ3v1ZbAnsVXHkzrjVhHi3etQwKfRv4w-z0FqMihL2eF3wqDxyUEdoVHhwTuNk-12RzaU4g29JzHMY2HpV0BE0VO6V8ETtdkGz1Zb1F8qiPyG5LX84mrLAmpwoWNh-5a0pWCiAxUwGBXeiVHEU4oq8V_6AHYUwAu2lLLTjVQ4bc1rT2yleI0IfJG320faZ9ABbk-Jz3hZnFxBduR9L2oiM5Jj2WBswJn8-cMArSRbbFDJMo8GK0ielVThmKOpNcD4bBxTlGUFvsOxhMT02QctS44JL6HzAS-iJzCYOwfJfTscunYd542aQuXqQU_RZ9kyt11ZFIM9rR3btJ9qaorOGQuR7c9mWSznyzXMF7hcLeBusTB6P9usq_ntrDKrm9kc5PF4_AMJE56Z">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| sequenceDiagram | sequenceDiagram | ||||||
| Alice->>John: Hello John, how are you? | Alice->>John: Hello John, how are you? | ||||||
| loop HealthCheck | loop Healthcheck | ||||||
|     John->>John: Fight against hypochondria |     John->>John: Fight against hypochondria | ||||||
| end | end | ||||||
| Note right of John: Rational thoughts! | Note right of John: Rational thoughts! | ||||||
| @@ -138,7 +113,7 @@ Bob-->>John: Jolly good! | |||||||
| ```mermaid | ```mermaid | ||||||
| sequenceDiagram | sequenceDiagram | ||||||
| Alice->>John: Hello John, how are you? | Alice->>John: Hello John, how are you? | ||||||
| loop HealthCheck | loop Healthcheck | ||||||
|     John->>John: Fight against hypochondria |     John->>John: Fight against hypochondria | ||||||
| end | end | ||||||
| Note right of John: Rational thoughts! | Note right of John: Rational thoughts! | ||||||
| @@ -147,7 +122,7 @@ John->>Bob: How about you? | |||||||
| Bob-->>John: Jolly good! | Bob-->>John: Jolly good! | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Gantt chart [<a href="https://mermaid.js.org/syntax/gantt.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNp90cGOgyAQBuBXIZxtFbG29bbZ3fsmvXKZylhJEAyOTZrGd1_sto3xsHMBhu-HBO689hp5xS_giJQbsCbjHTv9jcp9-q63SKhZpb3DhMXSOIiE5ZkoNpnYZGXynh6U-4jBK7JnVfBYJo9QvgjtEya1cj8QwFq0TMz4lZqxTBg0hOF5m1jifI2Lf7Bc490CyxUu1rhc4GLGPOEdhg6Mjq92V44xxanFDhWv4lRjA6MlxZWbIh17DYTf2pAPvGrADphwGMmfbq7mFYURX-jLwCVA91bWg8YYunO69Y8vMgPFI2vvGnOZ-2Owsd0S9UOVpvP29mKoHc_b2nfpYHQLgdrrsUzLvDxALrHcS9hJqeuzOB6avBCN3mciBz5N0y_wxZ0J">live editor</a>] | ### Gantt chart [<a href="https://mermaid-js.github.io/mermaid/#/gantt">docs</a> - <a href="https://mermaid.live/edit#pako:eNp90cGOgyAQBuBXIZxtFbG29bbZ3fsmvXKZylhJEAyOTZrGd1_sto3xsHMBhu-HBO689hp5xS_giJQbsCbjHTv9jcp9-q63SKhZpb3DhMXSOIiE5ZkoNpnYZGXynh6U-4jBK7JnVfBYJo9QvgjtEya1cj8QwFq0TMz4lZqxTBg0hOF5m1jifI2Lf7Bc490CyxUu1rhc4GLGPOEdhg6Mjq92V44xxanFDhWv4lRjA6MlxZWbIh17DYTf2pAPvGrADphwGMmfbq7mFYURX-jLwCVA91bWg8YYunO69Y8vMgPFI2vvGnOZ-2Owsd0S9UOVpvP29mKoHc_b2nfpYHQLgdrrsUzLvDxALrHcS9hJqeuzOB6avBCN3mciBz5N0y_wxZ0J">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| gantt | gantt | ||||||
| @@ -171,7 +146,7 @@ gantt | |||||||
|     Parallel 4   :         des6, after des4, 1d |     Parallel 4   :         des6, after des4, 1d | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Class diagram [<a href="https://mermaid.js.org/syntax/classDiagram.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkTFPwzAQhf-K5QlQ2zQJJG1UBaGWDYmBgYEwXO1LYuTEwXYqlZL_jt02asXm--690zvfgTLFkWaUSTBmI6DS0BTt2lfzkKx-p1PytEO9f1FtdaQkI2ulZNGuVqK1qEtgmOfk7BitSzKdOhg59XuNGgk0RDxed-_IOr6uf8cZ6UhTZ8bvHqS5ub1mr9svZPbjk6DEBlu7AQuXyBkx4gcvDk9cUMJq0XT_YaW0kNK5j-ufAoRzcihaQvLcoN4Jv50vvVxw_xrnD3RCG9QNCO4-8OgpqK1dpoJm7smxhF7agp6kfcfB4jMXVmmalW4tnFDorXrbt4xmVvc4is53GKFUwNF5DtTuO3-sShjrJjLVlqLyvNfS4drazmRB4NuzSti6386YagIjeA3a1rtlEiRRsoAoxiSN4SGOOduGy0UZ3YclT-dhBHQYhj8dc6_I">live editor</a>] | ### Class diagram [<a href="https://mermaid-js.github.io/mermaid/#/classDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkTFPwzAQhf-K5QlQ2zQJJG1UBaGWDYmBgYEwXO1LYuTEwXYqlZL_jt02asXm--690zvfgTLFkWaUSTBmI6DS0BTt2lfzkKx-p1PytEO9f1FtdaQkI2ulZNGuVqK1qEtgmOfk7BitSzKdOhg59XuNGgk0RDxed-_IOr6uf8cZ6UhTZ8bvHqS5ub1mr9svZPbjk6DEBlu7AQuXyBkx4gcvDk9cUMJq0XT_YaW0kNK5j-ufAoRzcihaQvLcoN4Jv50vvVxw_xrnD3RCG9QNCO4-8OgpqK1dpoJm7smxhF7agp6kfcfB4jMXVmmalW4tnFDorXrbt4xmVvc4is53GKFUwNF5DtTuO3-sShjrJjLVlqLyvNfS4drazmRB4NuzSti6386YagIjeA3a1rtlEiRRsoAoxiSN4SGOOduGy0UZ3YclT-dhBHQYhj8dc6_I">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| classDiagram | classDiagram | ||||||
| @@ -190,7 +165,13 @@ class Class10 { | |||||||
|   int id |   int id | ||||||
|   size() |   size() | ||||||
| } | } | ||||||
|  | namespace Namespace01 { | ||||||
|  |   class Class11 | ||||||
|  |   class Class12 { | ||||||
|  |     int id | ||||||
|  |     size() | ||||||
|  |   } | ||||||
|  | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ```mermaid | ```mermaid | ||||||
| @@ -210,10 +191,16 @@ class Class10 { | |||||||
|   int id |   int id | ||||||
|   size() |   size() | ||||||
| } | } | ||||||
|  | namespace Namespace01 { | ||||||
|  |   class Class11 | ||||||
|  |   class Class12 { | ||||||
|  |     int id | ||||||
|  |     size() | ||||||
|  |   } | ||||||
|  | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### State diagram [<a href="https://mermaid.js.org/syntax/stateDiagram.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkEFvgzAMhf8K8nEqpYSNthx22Xbcqcexg0sCiZQQlDhIFeK_L8A6TfXp6fOz9ewJGssFVOAJSbwr7ByadGR1n8T6evpO0vQ1uZDSekOrXGFsPqJPO6q-2-imH8f_0TeHXm50lfelsAMjnEHFY6xpMdRAUhhRQxUlFy0GTTXU_RytYeAx-AdXZB1ULWovdoCB7OXWN1CRC-Ju-r3uz6UtchGHJqDbsPygU57iysb2reoWHpyOWBINvsqypb3vFMlw3TfWZF5xiY7keC6zkpUnZIUojwW-FAVvrvn51LLnvOXHQ84Q5nn-AVtLcwk">live editor</a>] | ### State diagram [<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkEFvgzAMhf8K8nEqpYSNthx22Xbcqcexg0sCiZQQlDhIFeK_L8A6TfXp6fOz9ewJGssFVOAJSbwr7ByadGR1n8T6evpO0vQ1uZDSekOrXGFsPqJPO6q-2-imH8f_0TeHXm50lfelsAMjnEHFY6xpMdRAUhhRQxUlFy0GTTXU_RytYeAx-AdXZB1ULWovdoCB7OXWN1CRC-Ju-r3uz6UtchGHJqDbsPygU57iysb2reoWHpyOWBINvsqypb3vFMlw3TfWZF5xiY7keC6zkpUnZIUojwW-FAVvrvn51LLnvOXHQ84Q5nn-AVtLcwk">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| stateDiagram-v2 | stateDiagram-v2 | ||||||
| @@ -235,7 +222,7 @@ Moving --> Crash | |||||||
| Crash --> [*] | Crash --> [*] | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Pie chart [<a href="https://mermaid.js.org/syntax/pie.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNo9jsFugzAMhl8F-VzBgEEh13Uv0F1zcYkTIpEEBadShXj3BU3dzf_n77e8wxQUgYDVkvQSbsFsEgpRtEN_5i_kvzx05XiC-xvUHVzAUXRoVe7v0heFBJ7JkQSRR0Ua08ISpD-ymlaFTN_KcoggNC4bXQATh5-Xn0BwTPSWbhZNRPdvLQEV5dIO_FrPZ43dOJ-cgtfWnDzFJeOZed1EVZ3r0lie06Ocgqs2q2aMPD_HvuqbfsCmpf7aYte2anrU46Cbz1qr60fdIBzH8QvW9lkl">live editor</a>] | ### Pie chart [<a href="https://mermaid-js.github.io/mermaid/#/pie">docs</a> - <a href="https://mermaid.live/edit#pako:eNo9jsFugzAMhl8F-VzBgEEh13Uv0F1zcYkTIpEEBadShXj3BU3dzf_n77e8wxQUgYDVkvQSbsFsEgpRtEN_5i_kvzx05XiC-xvUHVzAUXRoVe7v0heFBJ7JkQSRR0Ua08ISpD-ymlaFTN_KcoggNC4bXQATh5-Xn0BwTPSWbhZNRPdvLQEV5dIO_FrPZ43dOJ-cgtfWnDzFJeOZed1EVZ3r0lie06Ocgqs2q2aMPD_HvuqbfsCmpf7aYte2anrU46Cbz1qr60fdIBzH8QvW9lkl">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| pie | pie | ||||||
| @@ -253,35 +240,7 @@ pie | |||||||
|  |  | ||||||
| ### Git graph [experimental - <a href="https://mermaid.live/edit#pako:eNqNkMFugzAMhl8F-VyVAR1tOW_aA-zKxSSGRCMJCk6lCvHuNZPKZdM0n-zf3_8r8QIqaIIGMqnB8kfEybQ--y4VnLP8-9RF9Mpkmm40hmlnDKmvkPiH_kfS7nFo_VN0FAf6XwocQGgxa_nGsm1bYEOOWmik1dRjGrmF1q-Cpkkj07u2HCI0PY4zHQATh8-7V9BwTPSE3iwOEd1OjQE1iWkBvk_bzQY7s0Sq4Hs7bHqKo8iGeZqbPN_WR7mpSd1RHpvPVhuMbG7XOq_L-oJlRfW5wteq0qorrpe-PBW9Pr8UJcK6rg-BLYPQ">live editor</a>] | ### Git graph [experimental - <a href="https://mermaid.live/edit#pako:eNqNkMFugzAMhl8F-VyVAR1tOW_aA-zKxSSGRCMJCk6lCvHuNZPKZdM0n-zf3_8r8QIqaIIGMqnB8kfEybQ--y4VnLP8-9RF9Mpkmm40hmlnDKmvkPiH_kfS7nFo_VN0FAf6XwocQGgxa_nGsm1bYEOOWmik1dRjGrmF1q-Cpkkj07u2HCI0PY4zHQATh8-7V9BwTPSE3iwOEd1OjQE1iWkBvk_bzQY7s0Sq4Hs7bHqKo8iGeZqbPN_WR7mpSd1RHpvPVhuMbG7XOq_L-oJlRfW5wteq0qorrpe-PBW9Pr8UJcK6rg-BLYPQ">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ### Bar chart (using gantt chart) [<a href="https://mermaid-js.github.io/mermaid/#/gantt">docs</a> - <a href="https://mermaid.live/edit#pako:eNptkU1vhCAQhv8KIenNugiI4rkf6bmXpvEyFVxJFDYyNt1u9r8X63Z7WQ9m5pknLzieaBeMpQ3dg0dsPUkPOhwteXZIXmJcbCT3xMAxkuh8Z8kIEclyMIB209fqKcwTICFvG4IvFy_oLrZ-g9F26ILfQgvNFN94VaRXQ1iWqpumZBcu1J8p1E1TXDx59eQNr5LyEqjJn6hv5QnGNlxevZJmdLLpy5xJSzut45biYCfb0iaVxvawjNjS1p-TCguG16PvaIPzYjO67e3BwX6GiTY9jPFKH43DMF_hGMDY1J4oHg-_f8hFTJFd8L3br3yZx4QHxENsdrt1nO8dDstH3oVpF50ZYMbhU6ud4qoGLqyqBJRCmO6j0HXPZdGbihUc6Pmc0QP49xD-b5X69ZQv2gjO81IwzWqhC1lKrjJ6pA3nVS7SMiVjrKirWlYp5fs3osgrWeo00lorLWvOzz8JVbXm">live editor</a>] | ||||||
| gitGraph |  | ||||||
|   commit |  | ||||||
|   commit |  | ||||||
|   branch develop |  | ||||||
|   checkout develop |  | ||||||
|   commit |  | ||||||
|   commit |  | ||||||
|   checkout main |  | ||||||
|   merge develop |  | ||||||
|   commit |  | ||||||
|   commit |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ```mermaid |  | ||||||
| gitGraph |  | ||||||
|   commit |  | ||||||
|   commit |  | ||||||
|   branch develop |  | ||||||
|   checkout develop |  | ||||||
|   commit |  | ||||||
|   commit |  | ||||||
|   checkout main |  | ||||||
|   merge develop |  | ||||||
|   commit |  | ||||||
|   commit |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Bar chart (using gantt chart) [<a href="https://mermaid.js.org/syntax/gantt.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNptkU1vhCAQhv8KIenNugiI4rkf6bmXpvEyFVxJFDYyNt1u9r8X63Z7WQ9m5pknLzieaBeMpQ3dg0dsPUkPOhwteXZIXmJcbCT3xMAxkuh8Z8kIEclyMIB209fqKcwTICFvG4IvFy_oLrZ-g9F26ILfQgvNFN94VaRXQ1iWqpumZBcu1J8p1E1TXDx59eQNr5LyEqjJn6hv5QnGNlxevZJmdLLpy5xJSzut45biYCfb0iaVxvawjNjS1p-TCguG16PvaIPzYjO67e3BwX6GiTY9jPFKH43DMF_hGMDY1J4oHg-_f8hFTJFd8L3br3yZx4QHxENsdrt1nO8dDstH3oVpF50ZYMbhU6ud4qoGLqyqBJRCmO6j0HXPZdGbihUc6Pmc0QP49xD-b5X69ZQv2gjO81IwzWqhC1lKrjJ6pA3nVS7SMiVjrKirWlYp5fs3osgrWeo00lorLWvOzz8JVbXm">live editor</a>] |  | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| gantt | gantt | ||||||
| @@ -319,7 +278,7 @@ gantt | |||||||
|     5    : 0, 5 |     5    : 0, 5 | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### User Journey diagram [<a href="https://mermaid.js.org/syntax/userJourney.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNplkMFuwjAQRH9l5TMiTVIC-FqqnjhxzWWJN4khsSN7XRSh_HsdKBVt97R6Mzsj-yoqq0hIAXCywRkaSwNxWHNHsB_hYt1ZmwYUfiueKtbWwIcFtjf5zgH2eCZgQgkrCXt64GgMg2fUzkvIn5Xd_V5COtMFvCH_62ht_5yk7MU8sn61HDTfxD8VYiF6cj1qFd94nWkpuKWYKWRcFdUYOi5FaaZoDYNCpnel2Toha-w8LQQGtofRVEKyC_Qw7TQ2DvsfV2dRUTy6Ch6H-UMb7TlGVtbUupl5cF3ELfPgZZLM8rLR3IbjsrJ94rVq0XH7uS2SIis2mOVUrHNc5bmqjul2U2evaa3WL2mGYpqmL2BGiho">live editor</a>] | ### User Journey diagram [<a href="https://mermaid-js.github.io/mermaid/#/user-journey">docs</a> - <a href="https://mermaid.live/edit#pako:eNplkMFuwjAQRH9l5TMiTVIC-FqqnjhxzWWJN4khsSN7XRSh_HsdKBVt97R6Mzsj-yoqq0hIAXCywRkaSwNxWHNHsB_hYt1ZmwYUfiueKtbWwIcFtjf5zgH2eCZgQgkrCXt64GgMg2fUzkvIn5Xd_V5COtMFvCH_62ht_5yk7MU8sn61HDTfxD8VYiF6cj1qFd94nWkpuKWYKWRcFdUYOi5FaaZoDYNCpnel2Toha-w8LQQGtofRVEKyC_Qw7TQ2DvsfV2dRUTy6Ch6H-UMb7TlGVtbUupl5cF3ELfPgZZLM8rLR3IbjsrJ94rVq0XH7uS2SIis2mOVUrHNc5bmqjul2U2evaa3WL2mGYpqmL2BGiho">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
|   journey |   journey | ||||||
| @@ -345,7 +304,7 @@ gantt | |||||||
|       Sit down: 3: Me |       Sit down: 3: Me | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### C4 diagram [<a href="https://mermaid.js.org/syntax/c4.html">docs</a>] | ### C4 diagram [<a href="https://mermaid-js.github.io/mermaid/#/c4c">docs</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| C4Context | C4Context | ||||||
| @@ -439,7 +398,7 @@ The above command generates files into the `dist` folder and publishes them to < | |||||||
|  |  | ||||||
| Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. | Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out. | ||||||
|  |  | ||||||
| Detailed information about how to contribute can be found in the [contribution guide](https://mermaid.js.org/community/contributing.html) | Detailed information about how to contribute can be found in the [contribution guide](CONTRIBUTING.md) | ||||||
|  |  | ||||||
| ## Security and safe diagrams | ## Security and safe diagrams | ||||||
|  |  | ||||||
| @@ -447,7 +406,7 @@ For public sites, it can be precarious to retrieve text from users on the intern | |||||||
|  |  | ||||||
| As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security. | As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security. | ||||||
|  |  | ||||||
| _Unfortunately you cannot have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._ | _Unfortunately you can not have a cake and eat it at the same time which in this case means that some of the interactive functionality gets blocked along with the possible malicious code._ | ||||||
|  |  | ||||||
| ## Reporting vulnerabilities | ## Reporting vulnerabilities | ||||||
|  |  | ||||||
| @@ -463,7 +422,7 @@ A quick note from Knut Sveidqvist: | |||||||
| > | > | ||||||
| > _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ | > _Thank you to [Tyler Long](https://github.com/tylerlong) who has been a collaborator since April 2017._ | ||||||
| > | > | ||||||
| > _Thank you to the ever-growing list of [contributors](https://github.com/mermaid-js/mermaid/graphs/contributors) that brought the project this far!_ | > _Thank you to the ever-growing list of [contributors](https://github.com/knsv/mermaid/graphs/contributors) that brought the project this far!_ | ||||||
|  |  | ||||||
| --- | --- | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,19 +12,15 @@ Mermaid | |||||||
| <p> | <p> | ||||||
|  |  | ||||||
| <p align="center"> | <p align="center"> | ||||||
| <a href="https://mermaid.live/"><b>实时编辑器!</b></a> | <a href="https://mermaid.live/"><b>Live Editor!</b></a> | ||||||
| </p> | </p> | ||||||
| <p align="center"> | <p align="center"> | ||||||
|  <a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://discord.gg/sKeNQX4Wtj" title="Discord invite">🙌 加入我们</a> |  <a href="https://mermaid.js.org">📖 文档</a> | <a href="https://mermaid.js.org/intro/">🚀 入门</a> | <a href="https://www.jsdelivr.com/package/npm/mermaid">🌐 CDN</a> | <a href="https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE" title="Slack invite">🙌 加入我们</a> | ||||||
| </p> | </p> | ||||||
| <p align="center"> | <p align="center"> | ||||||
| <a href="./README.md">English</a> | <a href="./README.md">English</a> | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| <p align="center"> |  | ||||||
| 尝试未来版本的实时编辑器预览: <a href="https://develop.git.mermaid.live/" title="尝试来自develop分支的mermaid版本。">Develop</a> | <a href="https://next.git.mermaid.live/" title="尝试来自next分支的mermaid版本。">Next</a> |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| <br> | <br> | ||||||
| <br> | <br> | ||||||
|  |  | ||||||
| @@ -34,8 +30,8 @@ Mermaid | |||||||
| [](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop) | [](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop) | ||||||
| [](https://www.jsdelivr.com/package/npm/mermaid) | [](https://www.jsdelivr.com/package/npm/mermaid) | ||||||
| [](https://www.npmjs.com/package/mermaid) | [](https://www.npmjs.com/package/mermaid) | ||||||
| [](https://discord.gg/sKeNQX4Wtj) | [](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) | ||||||
| [](https://twitter.com/mermaidjs_) | [](https://twitter.com/mermaidjs_) | ||||||
|  |  | ||||||
| <img src="./img/header.png" alt="" /> | <img src="./img/header.png" alt="" /> | ||||||
|  |  | ||||||
| @@ -43,13 +39,13 @@ Mermaid | |||||||
|  |  | ||||||
| **感谢所有参与进来提交 PR,解答疑问的人们! 🙏** | **感谢所有参与进来提交 PR,解答疑问的人们! 🙏** | ||||||
|  |  | ||||||
| <a href="https://mermaid.js.org/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt='Banner for "The Official Guide to Mermaid.js" book'></a> | <a href="https://mermaid-js.github.io/mermaid/landing/"><img src="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg" alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a> | ||||||
|  |  | ||||||
| ## 关于 Mermaid | ## 关于 Mermaid | ||||||
|  |  | ||||||
| <!-- <Main description>   --> | <!-- <Main description>   --> | ||||||
|  |  | ||||||
| Mermaid 是一个基于 JavaScript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。 | Mermaid 是一个基于 Javascript 的图表绘制工具,通过解析类 Markdown 的文本语法来实现图表的创建和动态修改。Mermaid 诞生的主要目的是让文档的更新能够及时跟上开发进度。 | ||||||
|  |  | ||||||
| > Doc-Rot 是 Mermaid 致力于解决的一个难题。 | > Doc-Rot 是 Mermaid 致力于解决的一个难题。 | ||||||
|  |  | ||||||
| @@ -57,20 +53,20 @@ Mermaid 是一个基于 JavaScript 的图表绘制工具,通过解析类 Markd | |||||||
| Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它也可以作为生产脚本(或其他代码)的一部分。<br/> | Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它也可以作为生产脚本(或其他代码)的一部分。<br/> | ||||||
| <br/> | <br/> | ||||||
| Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。<br/> | Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。<br/> | ||||||
| 你可以访问 [教程](https://mermaid.js.org/ecosystem/tutorials.html) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](https://mermaid.js.org/ecosystem/integrations-community.html) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。 | 你可以访问 [教程](./docs/config/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/ecosystem/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。 | ||||||
|  |  | ||||||
| 如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](https://mermaid.js.org/intro/getting-started.html), [用法](https://mermaid.js.org/config/usage.html) 和 [教程](https://mermaid.js.org/ecosystem/tutorials.html). | 如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/community/n00b-overview.md), [用法](./docs/config/usage.md) 和 [教程](./docs/config/Tutorials.md). | ||||||
|  |  | ||||||
| <!-- </Main description> --> | <!-- </Main description> --> | ||||||
|  |  | ||||||
| ## 示例 | ## 示例 | ||||||
|  |  | ||||||
| **下面是一些可以使用 Mermaid 创建的图表示例。点击 [语法](https://mermaid.js.org/intro/syntax-reference.html) 查看详情。** | **下面是一些可以使用 Mermaid 创建的图表示例。点击 [语法](https://mermaid-js.github.io/mermaid/#/n00b-syntaxReference) 查看详情。** | ||||||
|  |  | ||||||
| <table> | <table> | ||||||
| <!-- <Flowchart> --> | <!-- <Flowchart> --> | ||||||
|  |  | ||||||
| ### 流程图 [<a href="https://mermaid.js.org/syntax/flowchart.html">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ3JhcGggVERcbiAgICBBW0hhcmRdIC0tPnxUZXh0fCBCKFJvdW5kKVxuICAgIEIgLS0-IEN7RGVjaXNpb259XG4gICAgQyAtLT58T25lfCBEW1Jlc3VsdCAxXVxuICAgIEMgLS0-fFR3b3wgRVtSZXN1bHQgMl0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>] | ### 流程图 [<a href="https://mermaid-js.github.io/mermaid/#/flowchart">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ3JhcGggVERcbiAgICBBW0hhcmRdIC0tPnxUZXh0fCBCKFJvdW5kKVxuICAgIEIgLS0-IEN7RGVjaXNpb259XG4gICAgQyAtLT58T25lfCBEW1Jlc3VsdCAxXVxuICAgIEMgLS0-fFR3b3wgRVtSZXN1bHQgMl0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| flowchart LR | flowchart LR | ||||||
| @@ -88,12 +84,12 @@ C -->|One| D[Result 1] | |||||||
| C -->|Two| E[Result 2] | C -->|Two| E[Result 2] | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 时序图 [<a href="https://mermaid.js.org/syntax/sequenceDiagram.html">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG5BbGljZS0-PkpvaG46IEhlbGxvIEpvaG4sIGhvdyBhcmUgeW91P1xubG9vcCBIZWFsdGhjaGVja1xuICAgIEpvaG4tPj5Kb2huOiBGaWdodCBhZ2FpbnN0IGh5cG9jaG9uZHJpYVxuZW5kXG5Ob3RlIHJpZ2h0IG9mIEpvaG46IFJhdGlvbmFsIHRob3VnaHRzIVxuSm9obi0tPj5BbGljZTogR3JlYXQhXG5Kb2huLT4-Qm9iOiBIb3cgYWJvdXQgeW91P1xuQm9iLS0-PkpvaG46IEpvbGx5IGdvb2QhIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>] | ### 时序图 [<a href="https://mermaid-js.github.io/mermaid/#/sequenceDiagram">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG5BbGljZS0-PkpvaG46IEhlbGxvIEpvaG4sIGhvdyBhcmUgeW91P1xubG9vcCBIZWFsdGhjaGVja1xuICAgIEpvaG4tPj5Kb2huOiBGaWdodCBhZ2FpbnN0IGh5cG9jaG9uZHJpYVxuZW5kXG5Ob3RlIHJpZ2h0IG9mIEpvaG46IFJhdGlvbmFsIHRob3VnaHRzIVxuSm9obi0tPj5BbGljZTogR3JlYXQhXG5Kb2huLT4-Qm9iOiBIb3cgYWJvdXQgeW91P1xuQm9iLS0-PkpvaG46IEpvbGx5IGdvb2QhIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| sequenceDiagram | sequenceDiagram | ||||||
| Alice->>John: Hello John, how are you? | Alice->>John: Hello John, how are you? | ||||||
| loop HealthCheck | loop Healthcheck | ||||||
|     John->>John: Fight against hypochondria |     John->>John: Fight against hypochondria | ||||||
| end | end | ||||||
| Note right of John: Rational thoughts! | Note right of John: Rational thoughts! | ||||||
| @@ -105,7 +101,7 @@ Bob-->>John: Jolly good! | |||||||
| ```mermaid | ```mermaid | ||||||
| sequenceDiagram | sequenceDiagram | ||||||
| Alice->>John: Hello John, how are you? | Alice->>John: Hello John, how are you? | ||||||
| loop HealthCheck | loop Healthcheck | ||||||
|     John->>John: Fight against hypochondria |     John->>John: Fight against hypochondria | ||||||
| end | end | ||||||
| Note right of John: Rational thoughts! | Note right of John: Rational thoughts! | ||||||
| @@ -114,7 +110,7 @@ John->>Bob: How about you? | |||||||
| Bob-->>John: Jolly good! | Bob-->>John: Jolly good! | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 甘特图 [<a href="https://mermaid.js.org/syntax/gantt.html">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ2FudHRcbnNlY3Rpb24gU2VjdGlvblxuQ29tcGxldGVkIDpkb25lLCAgICBkZXMxLCAyMDE0LTAxLTA2LDIwMTQtMDEtMDhcbkFjdGl2ZSAgICAgICAgOmFjdGl2ZSwgIGRlczIsIDIwMTQtMDEtMDcsIDNkXG5QYXJhbGxlbCAxICAgOiAgICAgICAgIGRlczMsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAyICAgOiAgICAgICAgIGRlczQsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAzICAgOiAgICAgICAgIGRlczUsIGFmdGVyIGRlczMsIDFkXG5QYXJhbGxlbCA0ICAgOiAgICAgICAgIGRlczYsIGFmdGVyIGRlczQsIDFkIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>] | ### 甘特图 [<a href="https://mermaid-js.github.io/mermaid/#/gantt">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ2FudHRcbnNlY3Rpb24gU2VjdGlvblxuQ29tcGxldGVkIDpkb25lLCAgICBkZXMxLCAyMDE0LTAxLTA2LDIwMTQtMDEtMDhcbkFjdGl2ZSAgICAgICAgOmFjdGl2ZSwgIGRlczIsIDIwMTQtMDEtMDcsIDNkXG5QYXJhbGxlbCAxICAgOiAgICAgICAgIGRlczMsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAyICAgOiAgICAgICAgIGRlczQsIGFmdGVyIGRlczEsIDFkXG5QYXJhbGxlbCAzICAgOiAgICAgICAgIGRlczUsIGFmdGVyIGRlczMsIDFkXG5QYXJhbGxlbCA0ICAgOiAgICAgICAgIGRlczYsIGFmdGVyIGRlczQsIDFkIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| gantt | gantt | ||||||
| @@ -138,7 +134,7 @@ gantt | |||||||
|     Parallel 4   :         des6, after des4, 1d |     Parallel 4   :         des6, after des4, 1d | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 类图 [<a href="https://mermaid.js.org/syntax/classDiagram.html">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiY2xhc3NEaWFncmFtXG5DbGFzczAxIDx8LS0gQXZlcnlMb25nQ2xhc3MgOiBDb29sXG48PGludGVyZmFjZT4-IENsYXNzMDFcbkNsYXNzMDkgLS0-IEMyIDogV2hlcmUgYW0gaT9cbkNsYXNzMDkgLS0qIEMzXG5DbGFzczA5IC0tfD4gQ2xhc3MwN1xuQ2xhc3MwNyA6IGVxdWFscygpXG5DbGFzczA3IDogT2JqZWN0W10gZWxlbWVudERhdGFcbkNsYXNzMDEgOiBzaXplKClcbkNsYXNzMDEgOiBpbnQgY2hpbXBcbkNsYXNzMDEgOiBpbnQgZ29yaWxsYVxuY2xhc3MgQ2xhc3MxMCB7XG4gID4-c2VydmljZT4-XG4gIGludCBpZFxuICBzaXplKClcbn0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>] | ### 类图 [<a href="https://mermaid-js.github.io/mermaid/#/classDiagram">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiY2xhc3NEaWFncmFtXG5DbGFzczAxIDx8LS0gQXZlcnlMb25nQ2xhc3MgOiBDb29sXG48PGludGVyZmFjZT4-IENsYXNzMDFcbkNsYXNzMDkgLS0-IEMyIDogV2hlcmUgYW0gaT9cbkNsYXNzMDkgLS0qIEMzXG5DbGFzczA5IC0tfD4gQ2xhc3MwN1xuQ2xhc3MwNyA6IGVxdWFscygpXG5DbGFzczA3IDogT2JqZWN0W10gZWxlbWVudERhdGFcbkNsYXNzMDEgOiBzaXplKClcbkNsYXNzMDEgOiBpbnQgY2hpbXBcbkNsYXNzMDEgOiBpbnQgZ29yaWxsYVxuY2xhc3MgQ2xhc3MxMCB7XG4gID4-c2VydmljZT4-XG4gIGludCBpZFxuICBzaXplKClcbn0iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| classDiagram | classDiagram | ||||||
| @@ -178,7 +174,7 @@ class Class10 { | |||||||
| } | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 状态图 [<a href="https://mermaid.js.org/syntax/stateDiagram.html">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkLsOwjAMRX-l8ojahTEDCzB26kgYrMYtkfJAqVMJVf13QiIKqqfr44d8vUDvFYGAiZHponEMaJv5KF2V4na4V01zqjrWxhSUZYapuEetn7UbCy16P_5HzwGnR6FZfpdCDZaCRa3SWcunQQI_yJIEkaSiAaNhCdKtqRUj--7lehAcItUQn-pnBMSAZtroVWn2YYOU07b4z29Y37gJVYk">live editor</a>] | ### 状态图 [[<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkLsOwjAMRX-l8ojahTEDCzB26kgYrMYtkfJAqVMJVf13QiIKqqfr44d8vUDvFYGAiZHponEMaJv5KF2V4na4V01zqjrWxhSUZYapuEetn7UbCy16P_5HzwGnR6FZfpdCDZaCRa3SWcunQQI_yJIEkaSiAaNhCdKtqRUj--7lehAcItUQn-pnBMSAZtroVWn2YYOU07b4z29Y37gJVYk">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| stateDiagram-v2 | stateDiagram-v2 | ||||||
| @@ -200,7 +196,7 @@ Moving --> Crash | |||||||
| Crash --> [*] | Crash --> [*] | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### 饼图 [<a href="https://mermaid.js.org/syntax/pie.html">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoicGllXG5cIkRvZ3NcIiA6IDQyLjk2XG5cIkNhdHNcIiA6IDUwLjA1XG5cIlJhdHNcIiA6IDEwLjAxIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>] | ### 饼图 [<a href="https://mermaid-js.github.io/mermaid/#/pie">文档</a> - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoicGllXG5cIkRvZ3NcIiA6IDQyLjk2XG5cIkNhdHNcIiA6IDUwLjA1XG5cIlJhdHNcIiA6IDEwLjAxIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifX0">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| pie | pie | ||||||
| @@ -218,7 +214,7 @@ pie | |||||||
|  |  | ||||||
| ### Git 图 [实验特性 - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ2l0R3JhcGg6XG5vcHRpb25zXG57XG4gICAgXCJub2RlU3BhY2luZ1wiOiAxNTAsXG4gICAgXCJub2RlUmFkaXVzXCI6IDEwXG59XG5lbmRcbmNvbW1pdFxuYnJhbmNoIG5ld2JyYW5jaFxuY2hlY2tvdXQgbmV3YnJhbmNoXG5jb21taXRcbmNvbW1pdFxuY2hlY2tvdXQgbWFzdGVyXG5jb21taXRcbmNvbW1pdFxubWVyZ2UgbmV3YnJhbmNoXG4iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>] | ### Git 图 [实验特性 - <a href="https://mermaid.live/edit#base64:eyJjb2RlIjoiZ2l0R3JhcGg6XG5vcHRpb25zXG57XG4gICAgXCJub2RlU3BhY2luZ1wiOiAxNTAsXG4gICAgXCJub2RlUmFkaXVzXCI6IDEwXG59XG5lbmRcbmNvbW1pdFxuYnJhbmNoIG5ld2JyYW5jaFxuY2hlY2tvdXQgbmV3YnJhbmNoXG5jb21taXRcbmNvbW1pdFxuY2hlY2tvdXQgbWFzdGVyXG5jb21taXRcbmNvbW1pdFxubWVyZ2UgbmV3YnJhbmNoXG4iLCJtZXJtYWlkIjp7InRoZW1lIjoiZGVmYXVsdCJ9fQ">live editor</a>] | ||||||
|  |  | ||||||
| ### 用户体验旅程图 [<a href="https://mermaid.js.org/syntax/userJourney.html">文档</a> - <a href="https://mermaid.live/edit#pako:eNpljzEPgkAMhf9K05nFGJdbJXFiYmVpuKIncDVHL4QQ_ruHaILaqXnf63vpjLVYRoMAd4nB81R5SKNOO4ZiglFC6_wVLL3JwLU68XARUHnhTQcoqGVQJgMnAwV_5GSMj0HJhcHAcU_y7d7AYVUzOJP-ddyk3ydZGf0n66uldPqCPxWYYc-hJ2fTj_OqVqg3Tplo0mq5odhphZVfkpWiSjn5Go2GyBnGhyXl3NE1UI-moW7g5QkSoF5m">live editor</a>] | ### 用户体验旅程图 [<a href="https://mermaid-js.github.io/mermaid/#/user-journey">文档</a> - <a href="https://mermaid.live/edit#pako:eNpljzEPgkAMhf9K05nFGJdbJXFiYmVpuKIncDVHL4QQ_ruHaILaqXnf63vpjLVYRoMAd4nB81R5SKNOO4ZiglFC6_wVLL3JwLU68XARUHnhTQcoqGVQJgMnAwV_5GSMj0HJhcHAcU_y7d7AYVUzOJP-ddyk3ydZGf0n66uldPqCPxWYYc-hJ2fTj_OqVqg3Tplo0mq5odhphZVfkpWiSjn5Go2GyBnGhyXl3NE1UI-moW7g5QkSoF5m">live editor</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
|   journey |   journey | ||||||
| @@ -244,7 +240,7 @@ pie | |||||||
|       Sit down: 3: Me |       Sit down: 3: Me | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### C4 图 [<a href="https://mermaid.js.org/syntax/c4.html">文档</a>] | ### C4 图 [<a href="https://mermaid-js.github.io/mermaid/#/c4c">文档</a>] | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| C4Context | C4Context | ||||||
| @@ -338,7 +334,7 @@ npm publish | |||||||
|  |  | ||||||
| Mermaid 是一个不断发展中的社区,并且还在接收新的贡献者。有很多不同的方式可以参与进来,而且我们还在寻找额外的帮助。如果你想知道如何开始贡献,请查看 [这个 issue](https://github.com/mermaid-js/mermaid/issues/866)。 | Mermaid 是一个不断发展中的社区,并且还在接收新的贡献者。有很多不同的方式可以参与进来,而且我们还在寻找额外的帮助。如果你想知道如何开始贡献,请查看 [这个 issue](https://github.com/mermaid-js/mermaid/issues/866)。 | ||||||
|  |  | ||||||
| 关于如何贡献的详细信息可以在 [贡献指南](https://mermaid.js.org/community/contributing.html) 中找到。 | 关于如何贡献的详细信息可以在 [贡献指南](CONTRIBUTING.md) 中找到。 | ||||||
|  |  | ||||||
| ## 安全 | ## 安全 | ||||||
|  |  | ||||||
| @@ -358,7 +354,7 @@ _很不幸的是,鱼与熊掌不可兼得,在这个场景下它意味着在 | |||||||
|  |  | ||||||
| > _特别感谢 [d3](https://d3js.org/) 和 [dagre-d3](https://github.com/cpettitt/dagre-d3) 这两个优秀的项目,它们提供了图形布局和绘图工具库!_ > _同样感谢 [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) 提供了时序图语法的使用。 感谢 Jessica Peter 提供了甘特图渲染的灵感。_ > _感谢 [Tyler Long](https://github.com/tylerlong) 从 2017 年四月开始成为了项目的合作者。_ | > _特别感谢 [d3](https://d3js.org/) 和 [dagre-d3](https://github.com/cpettitt/dagre-d3) 这两个优秀的项目,它们提供了图形布局和绘图工具库!_ > _同样感谢 [js-sequence-diagram](https://bramp.github.io/js-sequence-diagrams) 提供了时序图语法的使用。 感谢 Jessica Peter 提供了甘特图渲染的灵感。_ > _感谢 [Tyler Long](https://github.com/tylerlong) 从 2017 年四月开始成为了项目的合作者。_ | ||||||
| > | > | ||||||
| > _感谢越来越多的 [贡献者们](https://github.com/mermaid-js/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_ | > _感谢越来越多的 [贡献者们](https://github.com/knsv/mermaid/graphs/contributors),没有你们,就没有这个项目的今天!_ | ||||||
|  |  | ||||||
| --- | --- | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										21
									
								
								__mocks__/c4Renderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								__mocks__/c4Renderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | /** | ||||||
|  |  * 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, | ||||||
|  | }; | ||||||
							
								
								
									
										16
									
								
								__mocks__/classRenderer-v2.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								__mocks__/classRenderer-v2.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | /** | ||||||
|  |  * 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, | ||||||
|  | }; | ||||||
							
								
								
									
										13
									
								
								__mocks__/classRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								__mocks__/classRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | /** | ||||||
|  |  * Mocked class diagram renderer | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import { vi } from 'vitest'; | ||||||
|  |  | ||||||
|  | export const draw = vi.fn().mockImplementation(() => { | ||||||
|  |   return ''; | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   draw, | ||||||
|  | }; | ||||||
							
								
								
									
										1
									
								
								__mocks__/dagre-d3.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								__mocks__/dagre-d3.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | // DO NOT delete this file. It is used by vitest to mock the dagre-d3 module. | ||||||
							
								
								
									
										3
									
								
								__mocks__/entity-decode/browser.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								__mocks__/entity-decode/browser.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | module.exports = function (txt: string) { | ||||||
|  |   return txt; | ||||||
|  | }; | ||||||
							
								
								
									
										16
									
								
								__mocks__/erRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								__mocks__/erRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | /** | ||||||
|  |  * Mocked er diagram renderer | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import { vi } from 'vitest'; | ||||||
|  |  | ||||||
|  | export const setConf = vi.fn(); | ||||||
|  |  | ||||||
|  | export const draw = vi.fn().mockImplementation(() => { | ||||||
|  |   return ''; | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   setConf, | ||||||
|  |   draw, | ||||||
|  | }; | ||||||
							
								
								
									
										24
									
								
								__mocks__/flowRenderer-v2.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								__mocks__/flowRenderer-v2.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | /** | ||||||
|  |  * 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, | ||||||
|  | }; | ||||||
							
								
								
									
										16
									
								
								__mocks__/ganttRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								__mocks__/ganttRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | /** | ||||||
|  |  * Mocked gantt diagram renderer | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import { vi } from 'vitest'; | ||||||
|  |  | ||||||
|  | export const setConf = vi.fn(); | ||||||
|  |  | ||||||
|  | export const draw = vi.fn().mockImplementation(() => { | ||||||
|  |   return ''; | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   setConf, | ||||||
|  |   draw, | ||||||
|  | }; | ||||||
							
								
								
									
										13
									
								
								__mocks__/gitGraphRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								__mocks__/gitGraphRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | /** | ||||||
|  |  * Mocked git (graph) diagram renderer | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import { vi } from 'vitest'; | ||||||
|  |  | ||||||
|  | export const draw = vi.fn().mockImplementation(() => { | ||||||
|  |   return ''; | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   draw, | ||||||
|  | }; | ||||||
							
								
								
									
										15
									
								
								__mocks__/journeyRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								__mocks__/journeyRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | /** | ||||||
|  |  * 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, | ||||||
|  | }; | ||||||
							
								
								
									
										13
									
								
								__mocks__/pieRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								__mocks__/pieRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | /** | ||||||
|  |  * Mocked pie (picChart) diagram renderer | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import { vi } from 'vitest'; | ||||||
|  |  | ||||||
|  | export const draw = vi.fn().mockImplementation(() => { | ||||||
|  |   return ''; | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   draw, | ||||||
|  | }; | ||||||
							
								
								
									
										13
									
								
								__mocks__/requirementRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								__mocks__/requirementRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | /** | ||||||
|  |  * Mocked requirement diagram renderer | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | import { vi } from 'vitest'; | ||||||
|  |  | ||||||
|  | export const draw = vi.fn().mockImplementation(() => { | ||||||
|  |   return ''; | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   draw, | ||||||
|  | }; | ||||||
							
								
								
									
										23
									
								
								__mocks__/sequenceRenderer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								__mocks__/sequenceRenderer.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | /** | ||||||
|  |  * 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, | ||||||
|  | }; | ||||||
							
								
								
									
										22
									
								
								__mocks__/stateRenderer-v2.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								__mocks__/stateRenderer-v2.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | /** | ||||||
|  |  * 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, | ||||||
|  | }; | ||||||
							
								
								
									
										19
									
								
								applitools.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								applitools.config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | // eslint-disable-next-line @typescript-eslint/no-var-requires | ||||||
|  | const { defineConfig } = require('cypress'); | ||||||
|  |  | ||||||
|  | module.exports = defineConfig({ | ||||||
|  |   testConcurrency: 1, | ||||||
|  |   browser: [ | ||||||
|  |     // Add browsers with different viewports | ||||||
|  |     //   { width: 800, height: 600, name: 'chrome' }, | ||||||
|  |     //   { width: 700, height: 500, name: 'firefox' }, | ||||||
|  |     //   { width: 1600, height: 1200, name: 'ie11' }, | ||||||
|  |     //   { width: 1024, height: 768, name: 'edgechromium' }, | ||||||
|  |     //   { width: 800, height: 600, name: 'safari' }, | ||||||
|  |     //   // Add mobile emulation devices in Portrait mode | ||||||
|  |     //   { deviceName: 'iPhone X', screenOrientation: 'portrait' }, | ||||||
|  |     //   { deviceName: 'Pixel 2', screenOrientation: 'portrait' }, | ||||||
|  |   ], | ||||||
|  |   // set batch name to the configuration | ||||||
|  |   // batchName: `Mermaid ${process.env.APPLI_BRANCH ?? "'no APPLI_BRANCH set'"}`, | ||||||
|  | }); | ||||||
							
								
								
									
										189
									
								
								cSpell.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								cSpell.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,189 @@ | |||||||
|  | { | ||||||
|  |   "version": "0.2", | ||||||
|  |   "language": "en", | ||||||
|  |   "words": [ | ||||||
|  |     "acyclicer", | ||||||
|  |     "adamiecki", | ||||||
|  |     "alois", | ||||||
|  |     "aloisklink", | ||||||
|  |     "antiscript", | ||||||
|  |     "antlr", | ||||||
|  |     "appli", | ||||||
|  |     "applitools", | ||||||
|  |     "asciidoctor", | ||||||
|  |     "ashish", | ||||||
|  |     "ashishjain", | ||||||
|  |     "astah", | ||||||
|  |     "bbox", | ||||||
|  |     "bilkent", | ||||||
|  |     "bisheng", | ||||||
|  |     "blrs", | ||||||
|  |     "braintree", | ||||||
|  |     "brkt", | ||||||
|  |     "brolin", | ||||||
|  |     "brotli", | ||||||
|  |     "città", | ||||||
|  |     "classdef", | ||||||
|  |     "codedoc", | ||||||
|  |     "colour", | ||||||
|  |     "commitlint", | ||||||
|  |     "cpettitt", | ||||||
|  |     "customizability", | ||||||
|  |     "cuzon", | ||||||
|  |     "cytoscape", | ||||||
|  |     "dagre", | ||||||
|  |     "deepdwn", | ||||||
|  |     "descr", | ||||||
|  |     "docsify", | ||||||
|  |     "docsy", | ||||||
|  |     "doku", | ||||||
|  |     "dompurify", | ||||||
|  |     "edgechromium", | ||||||
|  |     "elkjs", | ||||||
|  |     "elle", | ||||||
|  |     "faber", | ||||||
|  |     "flatmap", | ||||||
|  |     "foswiki", | ||||||
|  |     "ftplugin", | ||||||
|  |     "gantt", | ||||||
|  |     "gitea", | ||||||
|  |     "gitgraph", | ||||||
|  |     "globby", | ||||||
|  |     "graphlib", | ||||||
|  |     "graphviz", | ||||||
|  |     "grav", | ||||||
|  |     "greywolf", | ||||||
|  |     "gzipped", | ||||||
|  |     "huynh", | ||||||
|  |     "huynhicode", | ||||||
|  |     "inkdrop", | ||||||
|  |     "jaoude", | ||||||
|  |     "jgreywolf", | ||||||
|  |     "jison", | ||||||
|  |     "jiti", | ||||||
|  |     "kaufmann", | ||||||
|  |     "khroma", | ||||||
|  |     "klemm", | ||||||
|  |     "klink", | ||||||
|  |     "knsv", | ||||||
|  |     "knut", | ||||||
|  |     "knutsveidqvist", | ||||||
|  |     "laganeckas", | ||||||
|  |     "linetype", | ||||||
|  |     "lintstagedrc", | ||||||
|  |     "logmsg", | ||||||
|  |     "lucida", | ||||||
|  |     "markdownish", | ||||||
|  |     "matthieu", | ||||||
|  |     "matthieumorel", | ||||||
|  |     "mdast", | ||||||
|  |     "mdbook", | ||||||
|  |     "mermaidjs", | ||||||
|  |     "mermerd", | ||||||
|  |     "mindaugas", | ||||||
|  |     "mindmap", | ||||||
|  |     "mindmaps", | ||||||
|  |     "mitigations", | ||||||
|  |     "mkdocs", | ||||||
|  |     "mmorel", | ||||||
|  |     "mult", | ||||||
|  |     "neurodiverse", | ||||||
|  |     "nextra", | ||||||
|  |     "orlandoni", | ||||||
|  |     "pathe", | ||||||
|  |     "pbrolin", | ||||||
|  |     "phpbb", | ||||||
|  |     "plantuml", | ||||||
|  |     "playfair", | ||||||
|  |     "pnpm", | ||||||
|  |     "podlite", | ||||||
|  |     "quence", | ||||||
|  |     "radious", | ||||||
|  |     "ranksep", | ||||||
|  |     "rect", | ||||||
|  |     "rects", | ||||||
|  |     "redmine", | ||||||
|  |     "rehype", | ||||||
|  |     "roledescription", | ||||||
|  |     "sandboxed", | ||||||
|  |     "setupgraphviewbox", | ||||||
|  |     "shiki", | ||||||
|  |     "sidharth", | ||||||
|  |     "sidharthv", | ||||||
|  |     "sphinxcontrib", | ||||||
|  |     "startx", | ||||||
|  |     "starty", | ||||||
|  |     "statediagram", | ||||||
|  |     "steph", | ||||||
|  |     "stopx", | ||||||
|  |     "stopy", | ||||||
|  |     "stylis", | ||||||
|  |     "subhash-halder", | ||||||
|  |     "substate", | ||||||
|  |     "sveidqvist", | ||||||
|  |     "swimm", | ||||||
|  |     "techn", | ||||||
|  |     "teststr", | ||||||
|  |     "textlength", | ||||||
|  |     "treemap", | ||||||
|  |     "ts-nocheck", | ||||||
|  |     "tsdoc", | ||||||
|  |     "tuleap", | ||||||
|  |     "tylerlong", | ||||||
|  |     "ugge", | ||||||
|  |     "unist", | ||||||
|  |     "unocss", | ||||||
|  |     "upvoting", | ||||||
|  |     "valign", | ||||||
|  |     "verdana", | ||||||
|  |     "viewports", | ||||||
|  |     "vinod", | ||||||
|  |     "visio", | ||||||
|  |     "vitepress", | ||||||
|  |     "vueuse", | ||||||
|  |     "xlink", | ||||||
|  |     "yash", | ||||||
|  |     "zenuml" | ||||||
|  |   ], | ||||||
|  |   "patterns": [ | ||||||
|  |     { "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" }, | ||||||
|  |     { | ||||||
|  |       "name": "Markdown code blocks", | ||||||
|  |       "pattern": "/^(\\s*`{3,}).*[\\s\\S]*?^\\1/gmx", | ||||||
|  |       "description": "Taken from the cSpell example at https://cspell.org/configuration/patterns/#verbose-regular-expressions" | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "name": "Inline code blocks", | ||||||
|  |       "pattern": "\\`([^\\`\\r\\n]+?)\\`", | ||||||
|  |       "description": "https://stackoverflow.com/questions/41274241/how-to-capture-inline-markdown-code-but-not-a-markdown-code-fence-with-regex" | ||||||
|  |     }, | ||||||
|  |     { "name": "Link contents", "pattern": "\\<a(.*)\\>", "description": "" }, | ||||||
|  |     { "name": "Snippet references", "pattern": "-- snippet:(.*)", "description": "" }, | ||||||
|  |     { | ||||||
|  |       "name": "Snippet references 2", | ||||||
|  |       "pattern": "\\<\\[sample:(.*)", | ||||||
|  |       "description": "another kind of snippet reference" | ||||||
|  |     }, | ||||||
|  |     { "name": "Multi-line code blocks", "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm" }, | ||||||
|  |     { | ||||||
|  |       "name": "HTML Tags", | ||||||
|  |       "pattern": "<[^>]*>", | ||||||
|  |       "description": "Reference: https://stackoverflow.com/questions/11229831/regular-expression-to-remove-html-tags-from-a-string" | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "ignoreRegExpList": [ | ||||||
|  |     "Markdown links", | ||||||
|  |     "Markdown code blocks", | ||||||
|  |     "Inline code blocks", | ||||||
|  |     "Link contents", | ||||||
|  |     "Snippet references", | ||||||
|  |     "Snippet references 2", | ||||||
|  |     "Multi-line code blocks", | ||||||
|  |     "HTML Tags" | ||||||
|  |   ], | ||||||
|  |   "ignorePaths": [ | ||||||
|  |     "packages/mermaid/src/docs/CHANGELOG.md", | ||||||
|  |     "packages/mermaid/src/docs/.vitepress/redirect.ts", | ||||||
|  |     "packages/mermaid/src/docs/.vitepress/contributor-names.json" | ||||||
|  |   ] | ||||||
|  | } | ||||||
| @@ -1,18 +1,6 @@ | |||||||
| codecov: |  | ||||||
|   branch: develop |  | ||||||
| 
 |  | ||||||
| comment: | comment: | ||||||
|   layout: 'reach, diff, flags, files' |   layout: 'reach, diff, flags, files' | ||||||
|   behavior: default |   behavior: default | ||||||
|   require_changes: false # if true: only post the comment if coverage changes |   require_changes: false # if true: only post the comment if coverage changes | ||||||
|   require_base: no # [yes :: must have a base report to post] |   require_base: no # [yes :: must have a base report to post] | ||||||
|   require_head: yes # [yes :: must have a head report to post] |   require_head: yes # [yes :: must have a head report to post] | ||||||
| 
 |  | ||||||
| coverage: |  | ||||||
|   status: |  | ||||||
|     project: |  | ||||||
|       off |  | ||||||
|       # Turing off for now as code coverage isn't stable and causes unnecessary build failures. |  | ||||||
|       # default: |  | ||||||
|       #   threshold: 2% |  | ||||||
|     patch: off |  | ||||||
| @@ -1,45 +0,0 @@ | |||||||
| # yaml-language-server: $schema=https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json |  | ||||||
|  |  | ||||||
| $schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json |  | ||||||
| version: '0.2' |  | ||||||
| language: en-US,en-GB |  | ||||||
|  |  | ||||||
| import: |  | ||||||
|   - ./.cspell/cspell.config.yaml |  | ||||||
|  |  | ||||||
| ignoreRegExpList: |  | ||||||
|   - character-set-cyrillic |  | ||||||
|   - svg-block |  | ||||||
| ignorePaths: |  | ||||||
|   - '*lock.{yaml,json}' |  | ||||||
|   - dist |  | ||||||
|   - CHANGELOG.md |  | ||||||
|   - packages/mermaid/src/docs/.vitepress/redirect.ts |  | ||||||
|   - packages/mermaid/src/docs/.vitepress/contributor-names.json |  | ||||||
|   - backup |  | ||||||
|   - '**/*.spec.{js,ts}' # checked by eslint |  | ||||||
|   - 'tests/webpack/src/index.js' # checked by eslint |  | ||||||
|   - 'cypress/**/*.js' # checked by eslint |  | ||||||
|   - '*.csv' |  | ||||||
|   - '*.patch' |  | ||||||
|   - 'docs/**/*.html' |  | ||||||
|   - 'cypress/platform/**' |  | ||||||
| dictionaries: |  | ||||||
|   - misc-terms |  | ||||||
| overrides: |  | ||||||
|   - filename: |  | ||||||
|       - '**/*.{jison,ts,mts,cjs,mjs,js,json,yaml,yml,md,html}' |  | ||||||
|       - 'run' |  | ||||||
|       - Dockerfile |  | ||||||
|     ignoreRegExpList: |  | ||||||
|       - js-unicode-escape |  | ||||||
|     dictionaries: |  | ||||||
|       - code-terms |  | ||||||
|       - 3rd-party-terms |  | ||||||
|       - fonts |  | ||||||
|       - html |  | ||||||
|       - lorem-ipsum |  | ||||||
|   - filename: '**/package.json' |  | ||||||
|     ignoreRegExpList: |  | ||||||
|       - json-property |  | ||||||
| # cspell:dictionaries code-terms |  | ||||||
							
								
								
									
										24
									
								
								cypress.config.cjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								cypress.config.cjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | /* eslint-disable @typescript-eslint/no-var-requires */ | ||||||
|  |  | ||||||
|  | const { defineConfig } = require('cypress'); | ||||||
|  | const { addMatchImageSnapshotPlugin } = require('cypress-image-snapshot/plugin'); | ||||||
|  | const coverage = require('@cypress/code-coverage/task'); | ||||||
|  |  | ||||||
|  | module.exports = defineConfig({ | ||||||
|  |   projectId: 'n2sma2', | ||||||
|  |   e2e: { | ||||||
|  |     specPattern: 'cypress/integration/**/*.{js,jsx,ts,tsx}', | ||||||
|  |     setupNodeEvents(on, config) { | ||||||
|  |       coverage(on, config); | ||||||
|  |       addMatchImageSnapshotPlugin(on, config); | ||||||
|  |       // copy any needed variables from process.env to config.env | ||||||
|  |       config.env.useAppli = process.env.USE_APPLI ? true : false; | ||||||
|  |  | ||||||
|  |       // do not forget to return the changed config object! | ||||||
|  |       return config; | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   video: false, | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | require('@applitools/eyes-cypress')(module); | ||||||
| @@ -1,39 +0,0 @@ | |||||||
| import eyesPlugin from '@applitools/eyes-cypress'; |  | ||||||
| import { registerArgosTask } from '@argos-ci/cypress/task'; |  | ||||||
| import coverage from '@cypress/code-coverage/task.js'; |  | ||||||
| import { defineConfig } from 'cypress'; |  | ||||||
| import { addMatchImageSnapshotPlugin } from 'cypress-image-snapshot/plugin.js'; |  | ||||||
| import cypressSplit from 'cypress-split'; |  | ||||||
|  |  | ||||||
| export default eyesPlugin( |  | ||||||
|   defineConfig({ |  | ||||||
|     projectId: 'n2sma2', |  | ||||||
|     viewportWidth: 1440, |  | ||||||
|     viewportHeight: 1024, |  | ||||||
|     e2e: { |  | ||||||
|       specPattern: 'cypress/integration/**/*.{js,ts}', |  | ||||||
|       setupNodeEvents(on, config) { |  | ||||||
|         coverage(on, config); |  | ||||||
|         cypressSplit(on, config); |  | ||||||
|         on('before:browser:launch', (browser, launchOptions) => { |  | ||||||
|           if (browser.name === 'chrome' && browser.isHeadless) { |  | ||||||
|             launchOptions.args.push('--window-size=1440,1024', '--force-device-scale-factor=1'); |  | ||||||
|           } |  | ||||||
|           return launchOptions; |  | ||||||
|         }); |  | ||||||
|         // copy any needed variables from process.env to config.env |  | ||||||
|         config.env.useAppli = process.env.USE_APPLI ? true : false; |  | ||||||
|         config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true'; |  | ||||||
|  |  | ||||||
|         if (config.env.useArgos) { |  | ||||||
|           registerArgosTask(on, config); |  | ||||||
|         } else { |  | ||||||
|           addMatchImageSnapshotPlugin(on, config); |  | ||||||
|         } |  | ||||||
|         // do not forget to return the changed config object! |  | ||||||
|         return config; |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|     video: false, |  | ||||||
|   }) |  | ||||||
| ); |  | ||||||
							
								
								
									
										93
									
								
								cypress/helpers/util.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								cypress/helpers/util.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | |||||||
|  | const utf8ToB64 = (str) => { | ||||||
|  |   return window.btoa(unescape(encodeURIComponent(str))); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | const batchId = 'mermaid-batch' + new Date().getTime(); | ||||||
|  |  | ||||||
|  | export const mermaidUrl = (graphStr, options, api) => { | ||||||
|  |   const obj = { | ||||||
|  |     code: graphStr, | ||||||
|  |     mermaid: options, | ||||||
|  |   }; | ||||||
|  |   const objStr = JSON.stringify(obj); | ||||||
|  |   let url = 'http://localhost:9000/e2e.html?graph=' + utf8ToB64(objStr); | ||||||
|  |   if (api) { | ||||||
|  |     url = 'http://localhost:9000/xss.html?graph=' + graphStr; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   if (options.listUrl) { | ||||||
|  |     cy.log(options.listId, ' ', url); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return url; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const imgSnapshotTest = (graphStr, _options = {}, api = false, validation = undefined) => { | ||||||
|  |   cy.log(_options); | ||||||
|  |   const options = Object.assign(_options); | ||||||
|  |   if (!options.fontFamily) { | ||||||
|  |     options.fontFamily = 'courier'; | ||||||
|  |   } | ||||||
|  |   if (!options.sequence) { | ||||||
|  |     options.sequence = {}; | ||||||
|  |   } | ||||||
|  |   if (!options.sequence || (options.sequence && !options.sequence.actorFontFamily)) { | ||||||
|  |     options.sequence.actorFontFamily = 'courier'; | ||||||
|  |   } | ||||||
|  |   if (options.sequence && !options.sequence.noteFontFamily) { | ||||||
|  |     options.sequence.noteFontFamily = 'courier'; | ||||||
|  |   } | ||||||
|  |   options.sequence.actorFontFamily = 'courier'; | ||||||
|  |   options.sequence.noteFontFamily = 'courier'; | ||||||
|  |   options.sequence.messageFontFamily = 'courier'; | ||||||
|  |   if (options.sequence && !options.sequence.actorFontFamily) { | ||||||
|  |     options.sequence.actorFontFamily = 'courier'; | ||||||
|  |   } | ||||||
|  |   if (!options.fontSize) { | ||||||
|  |     options.fontSize = '16px'; | ||||||
|  |   } | ||||||
|  |   const url = mermaidUrl(graphStr, options, api); | ||||||
|  |   openURLAndVerifyRendering(url, options, validation); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const urlSnapshotTest = (url, _options, api = false, validation) => { | ||||||
|  |   const options = Object.assign(_options); | ||||||
|  |   openURLAndVerifyRendering(url, options, validation); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const renderGraph = (graphStr, options, api) => { | ||||||
|  |   const url = mermaidUrl(graphStr, options, api); | ||||||
|  |   openURLAndVerifyRendering(url, options); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export const openURLAndVerifyRendering = (url, options, validation = undefined) => { | ||||||
|  |   const useAppli = Cypress.env('useAppli'); | ||||||
|  |   const name = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-'); | ||||||
|  |  | ||||||
|  |   if (useAppli) { | ||||||
|  |     cy.log('Opening eyes ' + Cypress.spec.name + ' --- ' + name); | ||||||
|  |     cy.eyesOpen({ | ||||||
|  |       appName: 'Mermaid', | ||||||
|  |       testName: name, | ||||||
|  |       batchName: Cypress.spec.name, | ||||||
|  |       batchId: batchId + Cypress.spec.name, | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   cy.visit(url); | ||||||
|  |   cy.window().should('have.property', 'rendered', true); | ||||||
|  |   cy.get('svg').should('be.visible'); | ||||||
|  |  | ||||||
|  |   if (validation) { | ||||||
|  |     cy.get('svg').should(validation); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   if (useAppli) { | ||||||
|  |     cy.log('Check eyes' + Cypress.spec.name); | ||||||
|  |     cy.eyesCheckWindow('Click!'); | ||||||
|  |     cy.log('Closing eyes' + Cypress.spec.name); | ||||||
|  |     cy.eyesClose(); | ||||||
|  |   } else { | ||||||
|  |     cy.matchImageSnapshot(name); | ||||||
|  |   } | ||||||
|  | }; | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user