mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-25 17:04:19 +02:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			fix/mindma
			...
			changeLink
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 68ddb09089 | ||
|   | 03446ce35c | ||
|   | 06595cc4d4 | ||
|   | e819f66a07 | ||
|   | a41a8028ed | 
| @@ -1,46 +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', | ||||
|   }, | ||||
|   'mermaid-layout-tidy-tree': { | ||||
|     name: 'mermaid-layout-tidy-tree', | ||||
|     packageName: 'mermaid-layout-tidy-tree', | ||||
|     file: 'index.ts', | ||||
|   }, | ||||
|   examples: { | ||||
|     name: 'mermaid-examples', | ||||
|     packageName: 'examples', | ||||
|     file: 'index.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,16 +0,0 @@ | ||||
| import jison from 'jison'; | ||||
|  | ||||
| export const transformJison = (src: string): string => { | ||||
|   // @ts-ignore - Jison is not typed properly | ||||
|   const parser = new jison.Generator(src, { | ||||
|     moduleType: 'js', | ||||
|     'token-stack': true, | ||||
|   }); | ||||
|   const source = parser.generate({ moduleMain: '() => {}' }); | ||||
|   const exporter = ` | ||||
| 	parser.parser = parser; | ||||
| 	export { parser }; | ||||
| 	export default parser; | ||||
| 	`; | ||||
|   return `${source} ${exporter}`; | ||||
| }; | ||||
| @@ -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,28 +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) { | ||||
|     if (e.stdout.length > 0) { | ||||
|       console.error(e.stdout.toString()); | ||||
|     } | ||||
|     if (e.stderr.length > 0) { | ||||
|       console.error(e.stderr.toString()); | ||||
|     } | ||||
|     // Exit the build process if we are in CI | ||||
|     if (process.env.CI) { | ||||
|       throw new Error(`Failed to build types for ${packageName}`); | ||||
|     } | ||||
|   } | ||||
| }; | ||||
|  | ||||
| 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,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Support edge animation in hand drawn look | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Resolved parsing error where direction TD was not recognized within subgraphs | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Correct viewBox casing and make SVGs responsive | ||||
| @@ -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"] | ||||
| } | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Improve participant parsing and prevent recursive loops on invalid syntax | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| chore: Fix mindmap rendering in docs and apply tidytree layout | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Ensure edge label color is applied when using classDef with edge IDs | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': minor | ||||
| --- | ||||
|  | ||||
| feat: Add half-arrowheads (solid & stick) and central connection support | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Resolve gantt chart crash due to invalid array length | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': minor | ||||
| --- | ||||
|  | ||||
| feat: Add IDs in architecture diagrams | ||||
| @@ -1,9 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| chore: revert marked dependency from ^15.0.7 to ^16.0.0 | ||||
|  | ||||
| - Reverted marked package version to ^16.0.0 for better compatibility | ||||
| - This is a dependency update that maintains API compatibility | ||||
| - All tests pass with the updated version | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| '@mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Mindmap breaking in ELK layout | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix(er-diagram): prevent syntax error when using 'u', numbers, and decimals in node names | ||||
| @@ -1,5 +0,0 @@ | ||||
| --- | ||||
| 'mermaid': patch | ||||
| --- | ||||
|  | ||||
| fix: Mindmap rendering issue when the number of Level 2 nodes exceeds 11 | ||||
							
								
								
									
										5
									
								
								.commitlintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.commitlintrc.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| { | ||||
|     "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,12 +0,0 @@ | ||||
| # Contributors to mermaidjs, one per line | ||||
| Ashish Jain | ||||
| cpettitt | ||||
| Dong Cai | ||||
| fourcube | ||||
| 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,45 +0,0 @@ | ||||
| Adamiecki | ||||
| arrowend | ||||
| Bendpoints | ||||
| bmatrix | ||||
| braintree | ||||
| catmull | ||||
| compositTitleSize | ||||
| cose | ||||
| curv | ||||
| doublecircle | ||||
| elem | ||||
| 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,8 +0,0 @@ | ||||
| BRANDES | ||||
| Buzan | ||||
| 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; | ||||
| }; | ||||
							
								
								
									
										3
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| dist/** | ||||
| .github/** | ||||
| docs/Setup.md | ||||
							
								
								
									
										52
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| { | ||||
|   "env": { | ||||
|     "browser": true, | ||||
|     "es6": true, | ||||
|     "jest/globals": true, | ||||
|     "node": true | ||||
|   }, | ||||
|   "parser": "@babel/eslint-parser", | ||||
|   "parserOptions": { | ||||
|     "ecmaFeatures": { | ||||
|       "experimentalObjectRestSpread": true, | ||||
|       "jsx": true | ||||
|     }, | ||||
|     "sourceType": "module" | ||||
|   }, | ||||
|   "extends": [ | ||||
|     "eslint:recommended", | ||||
|     "plugin:jsdoc/recommended", | ||||
|     "plugin:json/recommended", | ||||
|     "plugin:markdown/recommended", | ||||
|     "plugin:prettier/recommended" | ||||
|   ], | ||||
|   "plugins": ["html", "jest", "jsdoc", "json", "prettier"], | ||||
|   "rules": { | ||||
|     "no-prototype-builtins": "off", | ||||
|     "no-unused-vars": "off", | ||||
|     "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", | ||||
|     "cypress/no-async-tests": "off", | ||||
|     "json/*": ["error", "allowComments"], | ||||
|     "no-empty": ["error", { "allowEmptyCatch": true }] | ||||
|   }, | ||||
|   "overrides": [ | ||||
|     { | ||||
|       "files": "./**/*.html", | ||||
|       "rules": { | ||||
|         "no-undef": "off", | ||||
|         "jsdoc/require-jsdoc": "off" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "files": "./**/*.md/*.html", | ||||
|       "rules": { | ||||
|         "prettier/prettier": "off" | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										4
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,6 @@ | ||||
| # These are supported funding model platforms | ||||
|  | ||||
| github: | ||||
|   - knsv | ||||
|   - sidharthv96 | ||||
| github: [knsv] | ||||
| #patreon: # Replace with a single Patreon username | ||||
| #open_collective: # Replace with a single Open Collective username | ||||
| #ko_fi: # Replace with a single Ko-fi username | ||||
|   | ||||
							
								
								
									
										41
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| --- | ||||
| name: Bug report | ||||
| about: Create a report to help us improve | ||||
| title: '' | ||||
| labels: 'Status: Triage, Type: Bug / Error' | ||||
| assignees: '' | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Describe the bug** | ||||
| A clear and concise description of what the bug is. | ||||
|  | ||||
| **To Reproduce** | ||||
| Steps to reproduce the behavior: | ||||
| 1. Go to '...' | ||||
| 2. Click on '....' | ||||
| 3. Scroll down to '....' | ||||
| 4. See error | ||||
|  | ||||
| **Expected behavior** | ||||
| A clear and concise description of what you expected to happen. | ||||
|  | ||||
| **Screenshots** | ||||
| If applicable, add screenshots to help explain your problem. | ||||
|  | ||||
| **Code Sample** | ||||
| If applicable, add the code sample or a link to the [live editor](https://mermaid.live). | ||||
|  | ||||
| **Desktop (please complete the following information):** | ||||
|  - OS: [e.g. iOS] | ||||
|  - Browser [e.g. chrome, safari] | ||||
|  - Version [e.g. 22] | ||||
|  | ||||
| **Smartphone (please complete the following information):** | ||||
|  - Device: [e.g. iPhone6] | ||||
|  - OS: [e.g. iOS8.1] | ||||
|  - Browser [e.g. stock browser, safari] | ||||
|  - Version [e.g. 22] | ||||
|  | ||||
| **Additional context** | ||||
| Add any other context about the problem here. | ||||
							
								
								
									
										73
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										73
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,73 +0,0 @@ | ||||
| name: Bug Report | ||||
| description: Create a report to help us improve | ||||
| labels: | ||||
|   - 'Status: Triage' | ||||
|   - 'Type: Bug / Error' | ||||
|  | ||||
| body: | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: |- | ||||
|         ## Security vulnerabilities | ||||
|         Please refer our [Security Policy](https://github.com/mermaid-js/.github/blob/main/SECURITY.md) and report to keep vulnerabilities confidential so we can release fixes first. | ||||
|  | ||||
|         ## Before you submit... | ||||
|         We like to help you, but in order to do that should you make a few things first: | ||||
|  | ||||
|         - Use a clear and concise title | ||||
|         - 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! | ||||
|  | ||||
|         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 | ||||
|     attributes: | ||||
|       label: Description | ||||
|       description: Give a clear and concise description of what the bug is. | ||||
|       placeholder: When I do ... does ... happen. | ||||
|     validations: | ||||
|       required: true | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Steps to reproduce | ||||
|       description: Give a step-by-step example on how to reproduce the bug. | ||||
|       placeholder: |- | ||||
|         1. Do this | ||||
|         2. Do that | ||||
|         3. ... | ||||
|         4. Bug! | ||||
|     validations: | ||||
|       required: true | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Screenshots | ||||
|       description: If applicable, add screenshots to help explain your issue. | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Code Sample | ||||
|       description: |- | ||||
|         If applicable, add the code sample or a link to the [Live Editor - Develop](https://develop.git.mermaid.live). | ||||
|         Any text pasted here will be rendered as a Code block. | ||||
|       render: text | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Setup | ||||
|       description: |- | ||||
|         Please fill out the info below. | ||||
|         Note that you only need to fill out the relevant section | ||||
|       value: |- | ||||
|         - Mermaid version: | ||||
|         - Browser and Version: [Chrome, Edge, Firefox] | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Suggested Solutions | ||||
|       description: > | ||||
|         If applicable, suggest solutions that could resolve the bug. | ||||
|         It would help maintainers/contributors to not waste time looking for the solution. Even pointing the line causing the bug would be great! | ||||
|       placeholder: |- | ||||
|         - Variable `parser` in file <filepath> is not initialised ... | ||||
|         - Add a new type for ... | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Additional Context | ||||
|       description: Anything else to add? | ||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | ||||
| blank_issues_enabled: true | ||||
| contact_links: | ||||
|   - name: GitHub Discussions | ||||
|     url: https://github.com/mermaid-js/mermaid/discussions | ||||
|     about: Ask the Community questions or share your own graphs in our discussions. | ||||
|   - name: Discord | ||||
|     url: https://discord.gg/sKeNQX4Wtj | ||||
|     about: Join our Community on Discord for Help and a casual chat. | ||||
|   - name: Documentation | ||||
|     url: https://mermaid.js.org | ||||
|     about: Read our documentation for all that Mermaid.js can offer. | ||||
|   - name: Live Editor | ||||
|     url: https://mermaid.live | ||||
|     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. | ||||
							
								
								
									
										60
									
								
								.github/ISSUE_TEMPLATE/diagram_proposal.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								.github/ISSUE_TEMPLATE/diagram_proposal.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,60 +0,0 @@ | ||||
| name: Diagram Proposal | ||||
| description: Suggest a new Diagram Type to add to Mermaid. | ||||
| labels: | ||||
|   - 'Status: Triage' | ||||
|   - 'Type: Enhancement' | ||||
|   - 'Type: New Diagram' | ||||
|  | ||||
| body: | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: |- | ||||
|         ## Before you submit... | ||||
|         First of all, thank you for proposing a new Diagram to us. | ||||
|         We are always happy about new ideas to improve Mermaid.js wherever possible. | ||||
|  | ||||
|         To get the fastest and best response possible, make sure you do the following: | ||||
|  | ||||
|         - Use a clear and concise title | ||||
|         - 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! | ||||
|  | ||||
|         ## Example issues | ||||
|  | ||||
|         Refer to the discussions here to get an idea of how the diagram syntax is created. | ||||
|  | ||||
|         - https://github.com/mermaid-js/mermaid/issues/4269 | ||||
|         - https://github.com/mermaid-js/mermaid/issues/4282 | ||||
|  | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Proposal | ||||
|       description: A clear and concise description of what should be added to Mermaid.js. | ||||
|       placeholder: Mermaid.js should add ... because ... | ||||
|     validations: | ||||
|       required: true | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Use Cases | ||||
|       description: If applicable, give some use cases for where this diagram would be useful. | ||||
|       placeholder: The Diagram could be used for ... | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Screenshots | ||||
|       description: If applicable, add screenshots to show possible examples of how the diagram may look like. | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Syntax | ||||
|       description: |- | ||||
|         If possible, include a syntax which could be used to write the diagram. | ||||
|         Try to add one or two examples of valid use-cases here. | ||||
|   - type: dropdown | ||||
|     id: implementation | ||||
|     attributes: | ||||
|       label: Implementation | ||||
|       description: |- | ||||
|         Would you like to implement this yourself, or is it a proposal for the community? | ||||
|         If there is no corresponding PR from your side after 30 days, the diagram will be open for everyone to implement. | ||||
|       options: | ||||
|         - I will try and implement it myself. | ||||
|         - This is a proposal which I'd love to see built into mermaid by the wonderful community. | ||||
							
								
								
									
										20
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| --- | ||||
| name: Feature request | ||||
| about: Suggest an idea for this project | ||||
| title: '' | ||||
| labels: 'Status: Triage, Type: Enhancement' | ||||
| assignees: '' | ||||
|  | ||||
| --- | ||||
|  | ||||
| **Is your feature request related to a problem? Please describe.** | ||||
| A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] | ||||
|  | ||||
| **Describe the solution you'd like** | ||||
| A clear and concise description of what you want to happen. | ||||
|  | ||||
| **Describe alternatives you've considered** | ||||
| A clear and concise description of any alternative solutions or features you've considered. | ||||
|  | ||||
| **Additional context** | ||||
| Add any other context or screenshots about the feature request here. | ||||
							
								
								
									
										15
									
								
								.github/ISSUE_TEMPLATE/question.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.github/ISSUE_TEMPLATE/question.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| --- | ||||
| name: Question | ||||
| about: Get some help from the community. | ||||
| title: '' | ||||
| labels: 'Help wanted!, Type: Other' | ||||
| assignees: '' | ||||
|  | ||||
| --- | ||||
|  | ||||
| ## Help us help you! | ||||
| You want an answer. Here are some ways to get it quicker: | ||||
| * Use a clear and concise title. | ||||
| * Try to pose a clear and concise question. | ||||
| * Include as much, or as little, code as necessary. | ||||
| * Don't be shy to give us some screenshots, if it helps! | ||||
							
								
								
									
										34
									
								
								.github/ISSUE_TEMPLATE/syntax_proposal.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/ISSUE_TEMPLATE/syntax_proposal.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,34 +0,0 @@ | ||||
| name: Syntax Proposal | ||||
| description: Suggest a new Syntax to add to Mermaid.js. | ||||
| labels: | ||||
|   - 'Status: Triage' | ||||
|   - 'Type: Enhancement' | ||||
|  | ||||
| body: | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: |- | ||||
|         ## Before you submit... | ||||
|         First of all, thank you for proposing a new Syntax to us. | ||||
|         We are always happy about new ideas to improve Mermaid.js wherever possible. | ||||
|  | ||||
|         To get the fastest and best response possible, make sure you do the following: | ||||
|  | ||||
|         - Use a clear and concise title | ||||
|         - Fill out the text fields with as much detail as possible. Examples are always welcome. | ||||
|         - Never be shy to give us screenshots and/or code samples. It will help! | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Proposal | ||||
|       description: A clear and concise description of what Syntax should be added to Mermaid.js. | ||||
|       placeholder: Mermaid.js should add ... because ... | ||||
|     validations: | ||||
|       required: true | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Example | ||||
|       description: If applicable, provide an example of the new Syntax. | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Screenshots | ||||
|       description: If applicable, add screenshots to show possible examples of how the theme may look like. | ||||
							
								
								
									
										42
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,42 +0,0 @@ | ||||
| name: Theme Proposal | ||||
| description: Suggest a new theme to add to Mermaid.js. | ||||
| labels: | ||||
|   - 'Status: Triage' | ||||
|   - 'Type: Enhancement' | ||||
|  | ||||
| body: | ||||
|   - type: markdown | ||||
|     attributes: | ||||
|       value: |- | ||||
|         ## Before you submit... | ||||
|         First of all, thank you for proposing a new Theme to us. | ||||
|         We are always happy about new ideas to improve Mermaid.js wherever possible. | ||||
|  | ||||
|         To get the fastest and best response possible, make sure you do the following: | ||||
|  | ||||
|         - Use a clear and concise title | ||||
|         - Fill out the text fields with as much detail as possible. Examples are always welcome! | ||||
|         - Never be shy to give us screenshots and/or code samples. It will help! | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Proposal | ||||
|       description: A clear and concise description of what theme should be added to Mermaid.js. | ||||
|       placeholder: Mermaid.js should add ... because ... | ||||
|     validations: | ||||
|       required: true | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Colors | ||||
|       description: |- | ||||
|         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) | ||||
|       placeholder: |- | ||||
|         - background: #f4f4f4 | ||||
|         - primaryColor: #fff4dd | ||||
|         - ... | ||||
|     validations: | ||||
|       required: true | ||||
|   - type: textarea | ||||
|     attributes: | ||||
|       label: Screenshots | ||||
|       description: If applicable, add screenshots to show possible examples of how the theme may look like. | ||||
							
								
								
									
										18
									
								
								.github/codecov.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/codecov.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +0,0 @@ | ||||
| codecov: | ||||
|   branch: develop | ||||
|  | ||||
| comment: | ||||
|   layout: 'reach, diff, flags, files' | ||||
|   behavior: default | ||||
|   require_changes: false # if true: only post the comment if coverage changes | ||||
|   require_base: no # [yes :: must have a base 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 | ||||
							
								
								
									
										2
									
								
								.github/codeql/codeql-config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/codeql/codeql-config.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| name: 'CodeQL config' | ||||
| name: "CodeQL config" | ||||
| paths-ignore: | ||||
|   - dist | ||||
|   - cypress | ||||
|   | ||||
							
								
								
									
										17
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| version: 2 | ||||
| updates: | ||||
| - package-ecosystem: npm | ||||
|   open-pull-requests-limit: 10 | ||||
|   directory: / | ||||
|   target-branch: develop | ||||
|   schedule: | ||||
|     interval: weekly | ||||
|     day: monday | ||||
|     time: "07:00" | ||||
| - package-ecosystem: github-actions | ||||
|   directory: / | ||||
|   target-branch: develop | ||||
|   schedule: | ||||
|     interval: weekly | ||||
|     day: monday | ||||
|     time: "07:00" | ||||
							
								
								
									
										69
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							| @@ -1,69 +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", | ||||
|  | ||||
| # Certificate Error | ||||
| "https://noteshub.app", | ||||
|  | ||||
| # Timeout | ||||
| "https://huehive.co", | ||||
| "https://foswiki.org", | ||||
| "https://www.gnu.org", | ||||
| "https://redmine.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 | ||||
| autolabeler: | ||||
|   - label: 'Type: Bug / Error' | ||||
|     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. | ||||
| 'Type: Bug / Error': 'bug/*' | ||||
| 'Type: Enhancement': 'feature/*' | ||||
| 'Type: Other': 'other/*' | ||||
|   | ||||
							
								
								
									
										11
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +1,13 @@ | ||||
| ## :bookmark_tabs: Summary | ||||
|  | ||||
| Brief description about the content of your PR. | ||||
|  | ||||
| Resolves #<your issue id here> | ||||
|  | ||||
| ## :straight_ruler: Design Decisions | ||||
|  | ||||
| Describe the way your implementation works or what design decisions you made if applicable. | ||||
|  | ||||
| ### :clipboard: Tasks | ||||
|  | ||||
| Make sure you | ||||
|  | ||||
| - [ ] :book: have read the [contribution guidelines](https://mermaid.js.org/community/contributing.html) | ||||
| - [ ] :computer: have added necessary unit/e2e tests. | ||||
| - [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://mermaid.js.org/community/contributing.html#update-documentation) is used for all new features. | ||||
| - [ ] :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:`. | ||||
| - [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)  | ||||
| - [ ] :computer: have added unit/e2e tests (if appropriate)  | ||||
| - [ ] :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!** 🎉 | ||||
							
								
								
									
										4
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.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. | ||||
| # Comment to post when closing a stale issue. Set to `false` to disable | ||||
| closeComment: > | ||||
|   This issue has 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 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.  | ||||
|   | ||||
							
								
								
									
										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@635ffb0c9798bd160680f18fd73371e355b85f27 # main | ||||
							
								
								
									
										39
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,39 +0,0 @@ | ||||
| name: Build Vitepress docs | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - master | ||||
|       - release/* | ||||
|   pull_request: | ||||
|   merge_group: | ||||
|  | ||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} | ||||
|  | ||||
| permissions: | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   build-docs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         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: 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 | ||||
|         run: pnpm --filter mermaid run docs:build:vitepress | ||||
							
								
								
									
										45
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| 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: [16.x] | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Setup Node.js ${{ matrix.node-version }} | ||||
|       uses: actions/setup-node@v3 | ||||
|       with: | ||||
|         cache: yarn | ||||
|         node-version: ${{ matrix.node-version }} | ||||
|  | ||||
|     - name: Install Yarn | ||||
|       run: npm i yarn --global | ||||
|  | ||||
|     - name: Install Packages | ||||
|       run: | | ||||
|         yarn install --frozen-lockfile | ||||
|       env: | ||||
|         CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
|  | ||||
|     - name: Run Build | ||||
|       run: yarn build | ||||
|  | ||||
|     - name: Upload Build as Artifact | ||||
|       uses: actions/upload-artifact@v3 | ||||
|       with: | ||||
|         name: dist | ||||
|         path: 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 | ||||
|  | ||||
| jobs: | ||||
|   check-readme: | ||||
|   check: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - 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 | ||||
|         run: | | ||||
|   | ||||
							
								
								
									
										24
									
								
								.github/workflows/checks.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								.github/workflows/checks.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| on: | ||||
|   push: {} | ||||
|   pull_request: | ||||
|     types: | ||||
|       - opened | ||||
|       - synchronize | ||||
|       - ready_for_review | ||||
|  | ||||
| name: Static analysis | ||||
|  | ||||
| jobs: | ||||
|   test: | ||||
|     runs-on: ubuntu-latest | ||||
|     name: check tests | ||||
|     steps: | ||||
|     - uses: actions/checkout@v2 | ||||
|       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 | ||||
							
								
								
									
										66
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										66
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,19 +1,17 @@ | ||||
| name: 'CodeQL' | ||||
|  | ||||
| name: "CodeQL" | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: [develop] | ||||
|     branches: [ develop ] | ||||
|   pull_request: | ||||
|     # The branches below must be a subset of the branches above | ||||
|     branches: [develop] | ||||
|     branches: [ develop ] | ||||
|     types: | ||||
|       - opened | ||||
|       - synchronize | ||||
|       - ready_for_review | ||||
|  | ||||
| permissions: # added using https://github.com/step-security/secure-repo | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   analyze: | ||||
|     name: Analyze | ||||
| @@ -26,40 +24,40 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         language: ['javascript', 'actions'] | ||||
|         # CodeQL supports [ 'actions', 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] | ||||
|         language: [ 'javascript' ] | ||||
|         # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] | ||||
|         # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|     - name: Checkout repository | ||||
|       uses: actions/checkout@v3 | ||||
|  | ||||
|       # Initializes the CodeQL tools for scanning. | ||||
|       - name: Initialize CodeQL | ||||
|         uses: github/codeql-action/init@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21 | ||||
|         with: | ||||
|           config-file: ./.github/codeql/codeql-config.yml | ||||
|           languages: ${{ matrix.language }} | ||||
|           # If you wish to specify custom queries, you can do so here or in a config file. | ||||
|           # By default, queries listed here will override any specified in a config file. | ||||
|           # Prefix the list here with "+" to use these queries and those in the config file. | ||||
|           # queries: ./path/to/local/query, your-org/your-repo/queries@main | ||||
|     # Initializes the CodeQL tools for scanning. | ||||
|     - name: Initialize CodeQL | ||||
|       uses: github/codeql-action/init@v2 | ||||
|       with: | ||||
|         config-file: ./.github/codeql/codeql-config.yml | ||||
|         languages: ${{ matrix.language }} | ||||
|         # If you wish to specify custom queries, you can do so here or in a config file. | ||||
|         # By default, queries listed here will override any specified in a config file. | ||||
|         # Prefix the list here with "+" to use these queries and those in the config file. | ||||
|         # queries: ./path/to/local/query, your-org/your-repo/queries@main | ||||
|  | ||||
|       # 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) | ||||
|       - name: Autobuild | ||||
|         uses: github/codeql-action/autobuild@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21 | ||||
|     # 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) | ||||
|     - name: Autobuild | ||||
|       uses: github/codeql-action/autobuild@v2 | ||||
|  | ||||
|       # ℹ️ 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 | ||||
|     # ℹ️ 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 | ||||
|  | ||||
|       # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines | ||||
|       #    and modify them (or add more) to build your code if your project | ||||
|       #    uses a compiled language | ||||
|     # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines | ||||
|     #    and modify them (or add more) to build your code if your project | ||||
|     #    uses a compiled language | ||||
|  | ||||
|       #- run: | | ||||
|       #   make bootstrap | ||||
|       #   make release | ||||
|     #- run: | | ||||
|     #   make bootstrap | ||||
|     #   make release | ||||
|  | ||||
|       - name: Perform CodeQL Analysis | ||||
|         uses: github/codeql-action/analyze@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21 | ||||
|     - name: Perform CodeQL Analysis | ||||
|       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 | ||||
| # | ||||
| # 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 | ||||
| # 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 | ||||
|     steps: | ||||
|       - name: 'Checkout Repository' | ||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|         uses: actions/checkout@v3 | ||||
|       - name: 'Dependency Review' | ||||
|         uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0 | ||||
|         uses: actions/dependency-review-action@v1 | ||||
|   | ||||
							
								
								
									
										38
									
								
								.github/workflows/e2e
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								.github/workflows/e2e
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| name: E2E | ||||
|  | ||||
| on: [push, pull_request] | ||||
|  | ||||
| permissions: | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       matrix: | ||||
|         node-version: [16.x] | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|  | ||||
|     - name: Setup Node.js ${{ matrix.node-version }} | ||||
|       uses: actions/setup-node@v3 | ||||
|       with: | ||||
|         cache: yarn | ||||
|         node-version: ${{ matrix.node-version }} | ||||
|  | ||||
|     - name: Install Yarn | ||||
|       run: npm i yarn --global | ||||
|  | ||||
|     - name: Install Packages | ||||
|       run: | | ||||
|         yarn install --frozen-lockfile | ||||
|       env: | ||||
|         CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
|  | ||||
|     - name: Run Build | ||||
|       run: yarn build | ||||
|  | ||||
|     - name: Run E2E Tests | ||||
|       run: yarn e2e | ||||
|       env: | ||||
|         CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
							
								
								
									
										69
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										69
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,69 +0,0 @@ | ||||
| name: E2E (Applitools) | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|     # Because we want to limit Applitools usage, so we only want to start this | ||||
|     # workflow on rare occasions/manually. | ||||
|     inputs: | ||||
|       parent_branch: | ||||
|         required: true | ||||
|         type: string | ||||
|         default: master | ||||
|         description: 'Parent branch to use for PRs' | ||||
|  | ||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} | ||||
|  | ||||
| permissions: | ||||
|   contents: read | ||||
|  | ||||
| env: | ||||
|   # on PRs from forks, this secret will always be empty, for security reasons | ||||
|   USE_APPLI: ${{ secrets.APPLITOOLS_API_KEY && 'true' || '' }} | ||||
|  | ||||
| jobs: | ||||
|   e2e-applitools: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - if: ${{ ! env.USE_APPLI }} | ||||
|         name: Warn if not using Applitools | ||||
|         run: | | ||||
|           echo "::error,title=Not using Applitools::APPLITOOLS_API_KEY is empty, disabling Applitools for this run." | ||||
|  | ||||
|       - 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: | ||||
|           node-version-file: '.node-version' | ||||
|  | ||||
|       - if: ${{ env.USE_APPLI }} | ||||
|         name: Notify applitools of new batch | ||||
|         # Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html | ||||
|         env: | ||||
|           # e.g. mermaid-js/mermaid/my-branch | ||||
|           APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }} | ||||
|           APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }} | ||||
|           APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }} | ||||
|           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 | ||||
|         uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16 | ||||
|         id: cypress | ||||
|         with: | ||||
|           start: pnpm run dev | ||||
|           wait-on: 'http://localhost:9000' | ||||
|         env: | ||||
|           # Mermaid applitools.config.js uses this to pick batch name. | ||||
|           APPLI_BRANCH: ${{ github.ref_name }} | ||||
|           APPLITOOLS_BATCH_ID: ${{ github.sha }} | ||||
|           # e.g. mermaid-js/mermaid/my-branch | ||||
|           APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }} | ||||
|           APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }} | ||||
|           APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }} | ||||
|           APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com' | ||||
							
								
								
									
										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@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16 | ||||
|         with: | ||||
|           runTests: false | ||||
|  | ||||
|       - name: Cypress run | ||||
|         uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16 | ||||
|         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@915d841dae6a4f191bb78faf61a257411d7be4d2 | ||||
|         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 | ||||
							
								
								
									
										151
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										151
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,151 +0,0 @@ | ||||
| name: E2E | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - develop | ||||
|       - master | ||||
|       - release/** | ||||
|   pull_request: | ||||
|   merge_group: | ||||
|  | ||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} | ||||
|  | ||||
| permissions: | ||||
|   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: | ||||
|   cache: | ||||
|     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@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 | ||||
|         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@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16 | ||||
|         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: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         containers: [1, 2, 3, 4, 5] | ||||
|     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: | ||||
|           node-version-file: '.node-version' | ||||
|  | ||||
|       # These cached snapshots are downloaded, providing the reference snapshots. | ||||
|       - name: Cache snapshots | ||||
|         id: cache-snapshot | ||||
|         uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 | ||||
|         with: | ||||
|           path: ./cypress/snapshots | ||||
|           key: ${{ runner.os }}-snapshots-${{ env.targetHash }} | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16 | ||||
|         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 | ||||
|       # and run all Cypress tests | ||||
|       - name: Cypress run | ||||
|         uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16 | ||||
|         id: cypress | ||||
|         with: | ||||
|           install: false | ||||
|           start: pnpm run dev:coverage | ||||
|           wait-on: 'http://localhost:9000' | ||||
|           browser: chrome | ||||
|           # Disable recording if we don't have an API key | ||||
|           # e.g. if this action was run from a fork | ||||
|           record: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY != '' }} | ||||
|         env: | ||||
|           ARGOS_PARALLEL: ${{ env.RUN_VISUAL_TEST == 'true' }} | ||||
|           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 | ||||
|  | ||||
|       - name: Upload Coverage to Codecov | ||||
|         uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1 | ||||
|         # Run step only pushes to develop and pull_requests | ||||
|         if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}} | ||||
|         with: | ||||
|           files: coverage/cypress/lcov.info | ||||
|           flags: e2e | ||||
|           name: mermaid-codecov | ||||
|           fail_ci_if_error: false | ||||
|           verbose: true | ||||
|           token: 6845cc80-77ee-4e17-85a1-026cd95e0766 | ||||
							
								
								
									
										16
									
								
								.github/workflows/issue-triage.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/issue-triage.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +1,14 @@ | ||||
| name: Apply triage label to new issue | ||||
|  | ||||
| on: | ||||
| on:  | ||||
|   issues: | ||||
|     types: [opened] | ||||
|  | ||||
| permissions: # added using https://github.com/step-security/secure-repo | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   triage: | ||||
|     permissions: | ||||
|       issues: write # for andymckay/labeler to label issues | ||||
|       pull-requests: write # for andymckay/labeler to label PRs | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # 1.0.4 | ||||
|         with: | ||||
|           repo-token: '${{ secrets.GITHUB_TOKEN }}' | ||||
|           add-labels: 'Status: Triage' | ||||
|     - uses: andymckay/labeler@1.0.4 | ||||
|       with: | ||||
|         repo-token: "${{ secrets.GITHUB_TOKEN }}" | ||||
|         add-labels: "Status: Triage" | ||||
|   | ||||
							
								
								
									
										52
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,52 +0,0 @@ | ||||
| # This Link Checker is run on all documentation files once per week. | ||||
|  | ||||
| # references: | ||||
| # - https://github.com/lycheeverse/lychee-action | ||||
| # - https://github.com/lycheeverse/lychee | ||||
|  | ||||
| name: Link Checker | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - develop | ||||
|       - master | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - master | ||||
|   workflow_dispatch: | ||||
|   schedule: | ||||
|     # * is a special character in YAML so you have to quote this string | ||||
|     - cron: '30 8 * * *' | ||||
|  | ||||
| permissions: # added using https://github.com/step-security/secure-repo | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   link-checker: | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       # lychee only uses the GITHUB_TOKEN to avoid rate-limiting | ||||
|       contents: read | ||||
|     steps: | ||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|  | ||||
|       - name: Restore lychee cache | ||||
|         uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 | ||||
|         with: | ||||
|           path: .lycheecache | ||||
|           key: cache-lychee-${{ github.sha }} | ||||
|           restore-keys: cache-lychee- | ||||
|  | ||||
|       - name: Link Checker | ||||
|         uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0 | ||||
|         with: | ||||
|           args: >- | ||||
|             --config .github/lychee.toml | ||||
|             packages/mermaid/src/docs/**/*.md | ||||
|             README.md | ||||
|             README.zh-CN.md | ||||
|           fail: true | ||||
|           jobSummary: true | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | ||||
							
								
								
									
										106
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										106
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,97 +1,39 @@ | ||||
| name: Lint | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|   merge_group: | ||||
|   push: {} | ||||
|   pull_request: | ||||
|   workflow_dispatch: | ||||
|  | ||||
| concurrency: ${{ github.workflow }}-${{ github.ref }} | ||||
|     types: | ||||
|       - opened | ||||
|       - synchronize | ||||
|       - ready_for_review | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
|   contents: read | ||||
|  | ||||
| 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: | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       matrix: | ||||
|         node-version: [16.x] | ||||
|     steps: | ||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|     - uses: actions/checkout@v3 | ||||
|  | ||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 | ||||
|         # uses version from "packageManager" field in package.json | ||||
|     - name: Setup Node.js ${{ matrix.node-version }} | ||||
|       uses: actions/setup-node@v3 | ||||
|       with: | ||||
|         cache: yarn | ||||
|         node-version: ${{ matrix.node-version }} | ||||
|  | ||||
|       - name: Setup Node.js | ||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 | ||||
|         with: | ||||
|           cache: pnpm | ||||
|           node-version-file: '.node-version' | ||||
|     - name: Install Yarn | ||||
|       run: npm i yarn --global | ||||
|  | ||||
|       - name: Install Packages | ||||
|         run: | | ||||
|           pnpm install --frozen-lockfile | ||||
|         env: | ||||
|           CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
|     - name: Install Packages | ||||
|       run: | | ||||
|         yarn install --frozen-lockfile | ||||
|       env: | ||||
|         CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
|  | ||||
|       - name: Run Linting | ||||
|         shell: bash | ||||
|         run: | | ||||
|           if ! pnpm run lint; then | ||||
|               # print a nice error message on lint failure | ||||
|               ERROR_MESSAGE='Running `pnpm run lint` failed.' | ||||
|               ERROR_MESSAGE+=' Running `pnpm -w run lint:fix` may fix this issue. ' | ||||
|               ERROR_MESSAGE+=" If this error doesn't occur on your local machine," | ||||
|               ERROR_MESSAGE+=' make sure your packages are up-to-date by running `pnpm install`.' | ||||
|               ERROR_MESSAGE+=' You may also need to delete your prettier cache by running' | ||||
|               ERROR_MESSAGE+=' `rm ./node_modules/.cache/prettier/.prettier-cache`.' | ||||
|               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 `./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 | ||||
|         id: verifyDocs | ||||
|         working-directory: ./packages/mermaid | ||||
|         continue-on-error: ${{ github.event_name == 'push' }} | ||||
|         run: pnpm run docs:verify | ||||
|  | ||||
|       - uses: testomatio/check-tests@0ea638fcec1820cf2e7b9854fdbdd04128a55bd4 # stable | ||||
|         with: | ||||
|           framework: cypress | ||||
|           tests: './cypress/e2e/**/**.spec.js' | ||||
|           token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           has-tests-label: true | ||||
|     - name: Run Linting | ||||
|       run: yarn lint | ||||
|   | ||||
							
								
								
									
										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 | ||||
							
								
								
									
										48
									
								
								.github/workflows/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								.github/workflows/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,57 +1,13 @@ | ||||
| name: Apply labels to PR | ||||
| on: | ||||
|   pull_request_target: | ||||
|     # required for pr-labeler to support PRs from forks | ||||
|     # ===================== ⛔ ☢️ 🚫 ⚠️ 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 | ||||
|     types: [opened] | ||||
|  | ||||
| jobs: | ||||
|   pr-labeler: | ||||
|     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: | ||||
|       - name: Label PR | ||||
|         uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0 | ||||
|         with: | ||||
|           config-name: pr-labeler.yml | ||||
|           disable-autolabeler: false | ||||
|           disable-releaser: true | ||||
|         uses: TimonVS/pr-labeler-action@v3 | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|  | ||||
|       - name: Add "Sponsored by MermaidChart" label | ||||
|         uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 | ||||
|         with: | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           script: | | ||||
|             const prNumber = context.payload.pull_request.number; | ||||
|             const { data: commits } = await github.rest.pulls.listCommits({ | ||||
|               owner: context.repo.owner, | ||||
|               repo: context.repo.repo, | ||||
|               pull_number: prNumber, | ||||
|             }); | ||||
|  | ||||
|             const isSponsored = commits.every( | ||||
|               (c) => c.commit.author.email?.endsWith('@mermaidchart.com') | ||||
|             ); | ||||
|  | ||||
|             if (isSponsored) { | ||||
|               console.log('PR is sponsored. Adding label.'); | ||||
|               await github.rest.issues.addLabels({ | ||||
|                 owner: context.repo.owner, | ||||
|                 repo: context.repo.repo, | ||||
|                 issue_number: prNumber, | ||||
|                 labels: ['Sponsored by MermaidChart'], | ||||
|               }); | ||||
|             } | ||||
|   | ||||
							
								
								
									
										59
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										59
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,59 +0,0 @@ | ||||
| name: Deploy Vitepress docs to Pages | ||||
|  | ||||
| on: | ||||
|   # Runs on pushes targeting the default branch | ||||
|   push: | ||||
|     branches: | ||||
|       - master | ||||
|  | ||||
| # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages | ||||
| permissions: | ||||
|   contents: read | ||||
|   pages: write | ||||
|   id-token: write | ||||
|  | ||||
| # Allow one concurrent deployment | ||||
| concurrency: | ||||
|   group: 'pages' | ||||
|   cancel-in-progress: true | ||||
|  | ||||
| jobs: | ||||
|   # Build job | ||||
|   build-docs: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         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: Setup Pages | ||||
|         uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0 | ||||
|  | ||||
|       - name: Run Build | ||||
|         run: pnpm --filter mermaid run docs:build:vitepress | ||||
|  | ||||
|       - name: Upload artifact | ||||
|         uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1 | ||||
|         with: | ||||
|           path: packages/mermaid/src/vitepress/.vitepress/dist | ||||
|  | ||||
|   # Deployment job | ||||
|   deploy-docs: | ||||
|     environment: | ||||
|       name: github-pages | ||||
|     runs-on: ubuntu-latest | ||||
|     needs: build-docs | ||||
|     steps: | ||||
|       - name: Deploy to GitHub Pages | ||||
|         id: deployment | ||||
|         uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 | ||||
							
								
								
									
										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 }} | ||||
							
								
								
									
										53
									
								
								.github/workflows/release-preview-publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								.github/workflows/release-preview-publish.yml
									
									
									
									
										vendored
									
									
								
							| @@ -6,39 +6,32 @@ on: | ||||
|       - 'release/**' | ||||
|  | ||||
| jobs: | ||||
|   publish-preview: | ||||
|   publish: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|     - uses: actions/checkout@v3 | ||||
|     - name: Setup Node.js | ||||
|       uses: actions/setup-node@v3 | ||||
|       with: | ||||
|         node-version: 16.x | ||||
|     - name: Install Yarn | ||||
|       run: npm i yarn --global | ||||
|  | ||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 | ||||
|     - name: Install Json | ||||
|       run: npm i json --global | ||||
|  | ||||
|       - name: Setup Node.js | ||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 | ||||
|         with: | ||||
|           cache: pnpm | ||||
|           node-version-file: '.node-version' | ||||
|     - name: Install Packages | ||||
|       run: yarn install --frozen-lockfile | ||||
|  | ||||
|       - name: Install Packages | ||||
|         run: | | ||||
|           pnpm install --frozen-lockfile | ||||
|         env: | ||||
|           CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
|     - name: Publish | ||||
|       run: | | ||||
|         PREVIEW_VERSION=8 | ||||
|         VERSION=$(echo ${{github.ref}} | tail -c +20)-preview.$PREVIEW_VERSION | ||||
|         echo $VERSION | ||||
|         npm version --no-git-tag-version --allow-same-version $VERSION | ||||
|         npm set //npm.pkg.github.com/:_authToken ${{ secrets.GITHUB_TOKEN }} | ||||
|         npm set registry https://npm.pkg.github.com/mermaid-js | ||||
|         json -I -f package.json -e 'this.name="@mermaid-js/mermaid"' # Package name needs to be set to a scoped one because GitHub registry requires this | ||||
|         json -I -f package.json -e 'this.repository="git://github.com/mermaid-js/mermaid"' # Repo url needs to have a specific format too | ||||
|         npm publish | ||||
|  | ||||
|       - name: Install Json | ||||
|         run: npm i json@11.0.0 --global | ||||
|  | ||||
|       - name: Publish | ||||
|         working-directory: ./packages/mermaid | ||||
|         run: | | ||||
|           PREVIEW_VERSION=$(git log --oneline "origin/$GITHUB_REF_NAME" ^"origin/master" | wc -l) | ||||
|           VERSION=$(echo ${{github.ref}} | tail -c +20)-preview.$PREVIEW_VERSION | ||||
|           echo $VERSION | ||||
|           npm version --no-git-tag-version --allow-same-version $VERSION | ||||
|           npm set //npm.pkg.github.com/:_authToken ${{ secrets.GITHUB_TOKEN }} | ||||
|           npm set registry https://npm.pkg.github.com/mermaid-js | ||||
|           json -I -f package.json -e 'this.name="@mermaid-js/mermaid"' # Package name needs to be set to a scoped one because GitHub registry requires this | ||||
|           json -I -f package.json -e 'this.repository="git://github.com/mermaid-js/mermaid"' # Repo url needs to have a specific format too | ||||
|           npm publish | ||||
|   | ||||
							
								
								
									
										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/*' | ||||
							
								
								
									
										44
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| name: Publish release | ||||
|  | ||||
| on: | ||||
|   release: | ||||
|     types: [published] | ||||
|  | ||||
| jobs: | ||||
|   publish: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|     - uses: fregante/setup-git-user@v1 | ||||
|  | ||||
|     - name: Setup Node.js | ||||
|       uses: actions/setup-node@v3 | ||||
|       with: | ||||
|         node-version: 16.x | ||||
|     - name: Install Yarn | ||||
|       run: npm i yarn --global | ||||
|  | ||||
|     - name: Install Json | ||||
|       run: npm i json --global | ||||
|  | ||||
|     - name: Install Packages | ||||
|       run: yarn install --frozen-lockfile | ||||
|  | ||||
|     - 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 -m "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@06245a4e0a36c064a573d4150030f5ec548e4fcc # v1.4.10 | ||||
|         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@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2 | ||||
|         with: | ||||
|           results_file: results.sarif | ||||
|           results_format: sarif | ||||
|           publish_results: true | ||||
|       - name: Upload artifact | ||||
|         uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | ||||
|         with: | ||||
|           name: SARIF file | ||||
|           path: results.sarif | ||||
|           retention-days: 5 | ||||
|       - name: Upload to code-scanning | ||||
|         uses: github/codeql-action/upload-sarif@5378192d256ef1302a6980fffe5ca04426d43091 # v3.28.21 | ||||
|         with: | ||||
|           sarif_file: results.sarif | ||||
							
								
								
									
										63
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										63
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,55 +1,34 @@ | ||||
| name: Unit Tests | ||||
|  | ||||
| on: [push, pull_request, merge_group] | ||||
| on: [push, pull_request] | ||||
|  | ||||
| permissions: | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   unit-test: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       matrix: | ||||
|         node-version: [16.x] | ||||
|     steps: | ||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|     - uses: actions/checkout@v3 | ||||
|  | ||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 | ||||
|         # uses version from "packageManager" field in package.json | ||||
|     - name: Setup Node.js ${{ matrix.node-version }} | ||||
|       uses: actions/setup-node@v3 | ||||
|       with: | ||||
|         cache: yarn | ||||
|         node-version: ${{ matrix.node-version }} | ||||
|  | ||||
|       - name: Setup Node.js | ||||
|         uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 | ||||
|         with: | ||||
|           cache: pnpm | ||||
|           node-version-file: '.node-version' | ||||
|     - name: Install Yarn | ||||
|       run: npm i yarn --global | ||||
|  | ||||
|       - name: Install Packages | ||||
|         run: | | ||||
|           pnpm install --frozen-lockfile | ||||
|         env: | ||||
|           CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
|     - name: Install Packages | ||||
|       run: | | ||||
|         yarn install --frozen-lockfile | ||||
|       env: | ||||
|         CYPRESS_CACHE_FOLDER: .cache/Cypress | ||||
|  | ||||
|       - name: Run Unit Tests | ||||
|         run: | | ||||
|           pnpm test:coverage | ||||
|  | ||||
|       - name: Run ganttDb tests using California timezone | ||||
|         env: | ||||
|           # Makes sure that gantt db works even in a timezone that has daylight savings | ||||
|           # since some days have 25 hours instead of 24. | ||||
|           TZ: America/Los_Angeles | ||||
|         run: | | ||||
|           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 | ||||
|         uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1 | ||||
|         # Run step only pushes to develop and pull_requests | ||||
|         if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }} | ||||
|         with: | ||||
|           files: ./coverage/vitest/lcov.info | ||||
|           flags: unit | ||||
|           name: mermaid-codecov | ||||
|           fail_ci_if_error: false | ||||
|           verbose: true | ||||
|           token: 6845cc80-77ee-4e17-85a1-026cd95e0766 | ||||
|     - name: Run Unit Tests | ||||
|       run: | | ||||
|         yarn ci --coverage | ||||
|   | ||||
							
								
								
									
										8
									
								
								.github/workflows/unlock-reopened-issues.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/unlock-reopened-issues.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| name: Unlock reopened issue | ||||
|  | ||||
| on: | ||||
| on:  | ||||
|   issues: | ||||
|     types: [reopened] | ||||
|  | ||||
| @@ -8,6 +8,6 @@ jobs: | ||||
|   triage: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: Dunning-Kruger/unlock-issues@b06b7f7e5c3f2eaa1c6d5d89f40930e4d6d9699e # v1 | ||||
|         with: | ||||
|           repo-token: '${{ secrets.GITHUB_TOKEN }}' | ||||
|     - uses: Dunning-Kruger/unlock-issues@v1 | ||||
|       with: | ||||
|         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: | ||||
|  | ||||
| jobs: | ||||
|   update-browser-list: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|       - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 | ||||
|       - run: npx update-browserslist-db@latest | ||||
|       - uses: actions/checkout@v3 | ||||
|       - run: npx browserslist@latest --update-db | ||||
|       - name: Commit changes | ||||
|         uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4 | ||||
|         uses: EndBug/add-and-commit@v9 | ||||
|         with: | ||||
|           author_name: ${{ github.actor }} | ||||
|           author_email: ${{ github.actor }}@users.noreply.github.com | ||||
|           message: 'chore: update browsers list' | ||||
|           push: false | ||||
|       - name: Create Pull Request | ||||
|         uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 | ||||
|         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_ | ||||
							
								
								
									
										34
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -3,11 +3,8 @@ | ||||
| node_modules/ | ||||
| coverage/ | ||||
| .idea/ | ||||
| .pnpm-store/ | ||||
| .instructions/ | ||||
|  | ||||
| dist | ||||
| v8-compile-cache-0 | ||||
|  | ||||
| yarn-error.log | ||||
| .npmrc | ||||
| @@ -15,11 +12,7 @@ token | ||||
|  | ||||
| package-lock.json | ||||
|  | ||||
| # ignore files in /.vscode/ except for launch.json and extensions.json | ||||
| /.vscode/** | ||||
| !/.vscode/launch.json | ||||
| !/.vscode/extensions.json | ||||
|  | ||||
| .vscode/ | ||||
| cypress/platform/current.html | ||||
| cypress/platform/experimental.html | ||||
| local/ | ||||
| @@ -29,27 +22,4 @@ Gemfile.lock | ||||
| /.vs | ||||
|  | ||||
| cypress/screenshots/ | ||||
| cypress/snapshots/ | ||||
|  | ||||
| # eslint --cache file | ||||
| .eslintcache | ||||
| .tsbuildinfo | ||||
| tsconfig.tsbuildinfo | ||||
|  | ||||
| #knsv*.html | ||||
| local*.html | ||||
| stats/ | ||||
|  | ||||
| **/user-avatars/* | ||||
| **/contributor-names.json | ||||
| .pnpm-store | ||||
| .nyc_output | ||||
|  | ||||
| demos/dev/** | ||||
| !/demos/dev/example.html | ||||
| !/demos/dev/reload.js | ||||
| tsx-0/** | ||||
| vite.config.ts.timestamp-* | ||||
|  | ||||
| # autogenereated by langium-cli | ||||
| generated/ | ||||
| cypress/snapshots/ | ||||
| @@ -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 | ||||
| NODE_OPTIONS="--max_old_space_size=8192" pnpm run pre-commit | ||||
| #!/bin/sh | ||||
| . "$(dirname "$0")/_/husky.sh" | ||||
|  | ||||
| yarn pre-commit | ||||
|   | ||||
							
								
								
									
										5
									
								
								.lintstagedrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.lintstagedrc.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| { | ||||
|   "*.{js,json,html,md}": [ | ||||
|       "yarn lint:fix"  | ||||
|    ] | ||||
| } | ||||
| @@ -1,11 +0,0 @@ | ||||
| export default { | ||||
|   '!(docs/**/*)*.{ts,js,html,md,mts}': [ | ||||
|     'eslint --cache --cache-strategy content --fix', | ||||
|     // don't cache prettier yet, since we use `prettier-plugin-jsdoc`, | ||||
|     // and prettier doesn't invalidate cache on plugin updates" | ||||
|     // https://prettier.io/docs/en/cli.html#--cache | ||||
|     'prettier --write', | ||||
|   ], | ||||
|   '.cspell/*.txt': ['tsx scripts/fixCSpell.ts'], | ||||
|   '**/*.jison': ['pnpm -w run lint:jison'], | ||||
| }; | ||||
| @@ -1 +0,0 @@ | ||||
| 22.14.0 | ||||
							
								
								
									
										4
									
								
								.npmrc
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								.npmrc
									
									
									
									
									
								
							| @@ -1,4 +0,0 @@ | ||||
| registry=https://registry.npmjs.org | ||||
| auto-install-peers=true | ||||
| strict-peer-dependencies=false | ||||
| package-import-method=clone-or-copy | ||||
							
								
								
									
										6
									
								
								.percy.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.percy.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| version: 2 | ||||
| snapshot: | ||||
|   widths: | ||||
|     - 1280 | ||||
| discovery: | ||||
|   disable-cache: true | ||||
| @@ -1,20 +0,0 @@ | ||||
| dist | ||||
| cypress/platform/xss3.html | ||||
| .cache | ||||
| .pnpm-store | ||||
| coverage | ||||
| # Autogenerated by PNPM | ||||
| pnpm-lock.yaml | ||||
| stats | ||||
| **/.vitepress/components.d.ts | ||||
| **/.vitepress/cache | ||||
| .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 | ||||
| @@ -1,8 +1,8 @@ | ||||
| { | ||||
|   "endOfLine": "auto", | ||||
|   "plugins": [ | ||||
|     "prettier-plugin-jsdoc" | ||||
|   ], | ||||
|   "printWidth": 100, | ||||
|   "singleQuote": true, | ||||
|   "useTabs": false, | ||||
|   "tabWidth": 2, | ||||
|   "trailingComma": "es5" | ||||
| } | ||||
|   "singleQuote": true | ||||
| } | ||||
							
								
								
									
										19
									
								
								.tern-project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.tern-project
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| { | ||||
|   "ecmaVersion": 6, | ||||
|   "libs": [ | ||||
|     "browser" | ||||
|   ], | ||||
|   "loadEagerly": [], | ||||
|   "dontLoad": [ | ||||
|     "node_modules/**" | ||||
|   ], | ||||
|   "plugins": { | ||||
|     "modules": {}, | ||||
|     "es_modules": {}, | ||||
|     "node": {}, | ||||
|     "doc_comment": { | ||||
|       "fullDocs": true, | ||||
|       "strong": true | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										140
									
								
								.vite/build.ts
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								.vite/build.ts
									
									
									
									
									
								
							| @@ -1,140 +0,0 @@ | ||||
| import type { InlineConfig } from 'vite'; | ||||
| import { build, type PluginOption } from 'vite'; | ||||
| import { resolve } from 'path'; | ||||
| import { fileURLToPath } from 'url'; | ||||
| import jisonPlugin from './jisonPlugin.js'; | ||||
| import jsonSchemaPlugin from './jsonSchemaPlugin.js'; | ||||
| import typescript from '@rollup/plugin-typescript'; | ||||
| import { visualizer } from 'rollup-plugin-visualizer'; | ||||
| import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js'; | ||||
| 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 watch = process.argv.includes('--watch'); | ||||
| const mermaidOnly = process.argv.includes('--mermaid'); | ||||
| const coverage = process.env.VITE_COVERAGE === 'true'; | ||||
| const __dirname = fileURLToPath(new URL('.', import.meta.url)); | ||||
| const sourcemap = false; | ||||
|  | ||||
| type OutputOptions = Exclude< | ||||
|   Exclude<InlineConfig['build'], undefined>['rollupOptions'], | ||||
|   undefined | ||||
| >['output']; | ||||
|  | ||||
| const visualizerOptions = (packageName: string, core = false): PluginOption[] => { | ||||
|   if (packageName !== 'mermaid' || !visualize) { | ||||
|     return []; | ||||
|   } | ||||
|   return ['network', 'treemap', 'sunburst'].map( | ||||
|     (chartType) => | ||||
|       visualizer({ | ||||
|         filename: `./stats/${chartType}${core ? '.core' : ''}.html`, | ||||
|         template: chartType as TemplateType, | ||||
|         gzipSize: true, | ||||
|         brotliSize: true, | ||||
|       }) as PluginOption | ||||
|   ); | ||||
| }; | ||||
|  | ||||
| interface BuildOptions { | ||||
|   minify: boolean | 'esbuild'; | ||||
|   core?: boolean; | ||||
|   watch?: boolean; | ||||
|   entryName: keyof typeof packageOptions; | ||||
| } | ||||
|  | ||||
| export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => { | ||||
|   const external: (string | RegExp)[] = ['require', 'fs', 'path']; | ||||
|   // eslint-disable-next-line no-console | ||||
|   console.log(entryName, packageOptions[entryName]); | ||||
|   const { name, file, packageName } = packageOptions[entryName]; | ||||
|   const output: OutputOptions = [ | ||||
|     { | ||||
|       name, | ||||
|       format: 'esm', | ||||
|       sourcemap, | ||||
|       entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`, | ||||
|     }, | ||||
|   ]; | ||||
|  | ||||
|   const config: InlineConfig = { | ||||
|     configFile: false, | ||||
|     build: { | ||||
|       emptyOutDir: false, | ||||
|       outDir: resolve(__dirname, `../packages/${packageName}/dist`), | ||||
|       lib: { | ||||
|         entry: resolve(__dirname, `../packages/${packageName}/src/${file}`), | ||||
|         name, | ||||
|         // the proper extensions will be added | ||||
|         fileName: name, | ||||
|       }, | ||||
|       minify, | ||||
|       rollupOptions: { | ||||
|         external, | ||||
|         output, | ||||
|       }, | ||||
|     }, | ||||
|     define: { | ||||
|       'import.meta.vitest': 'undefined', | ||||
|     }, | ||||
|     resolve: { | ||||
|       extensions: [], | ||||
|     }, | ||||
|     plugins: [ | ||||
|       jisonPlugin(), | ||||
|       jsonSchemaPlugin(), // handles `.schema.yaml` files | ||||
|       typescript({ compilerOptions: { declaration: false } }), | ||||
|       istanbul({ | ||||
|         exclude: ['node_modules', 'test/', '__mocks__', 'generated'], | ||||
|         extension: ['.js', '.ts'], | ||||
|         requireEnv: true, | ||||
|         forceBuildInstrument: coverage, | ||||
|       }), | ||||
|       ...visualizerOptions(packageName, core), | ||||
|     ], | ||||
|     define: { | ||||
|       // Needs to be string | ||||
|       includeLargeFeatures: 'true', | ||||
|     }, | ||||
|   }; | ||||
|  | ||||
|   if (watch && config.build) { | ||||
|     config.build.watch = { | ||||
|       include: ['packages/mermaid-example-diagram/src/**', 'packages/mermaid/src/**'], | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   return config; | ||||
| }; | ||||
|  | ||||
| const buildPackage = async (entryName: keyof typeof packageOptions) => { | ||||
|   await build(getBuildConfig({ minify: false, entryName })); | ||||
| }; | ||||
|  | ||||
| const main = async () => { | ||||
|   const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[]; | ||||
|   for (const pkg of packageNames.filter( | ||||
|     (pkg) => !mermaidOnly || pkg === 'mermaid' || pkg === 'parser' | ||||
|   )) { | ||||
|     await buildPackage(pkg); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| await generateLangium(); | ||||
|  | ||||
| if (watch) { | ||||
|   await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' })); | ||||
|   void build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' })); | ||||
|   if (!mermaidOnly) { | ||||
|     void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' })); | ||||
|     void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' })); | ||||
|   } | ||||
| } 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: false, entryName: 'mermaid' })); | ||||
| } else { | ||||
|   void main(); | ||||
| } | ||||
| @@ -1,17 +0,0 @@ | ||||
| import { transformJison } from '../.build/jisonTransformer.js'; | ||||
|  | ||||
| const fileRegex = /\.(jison)$/; | ||||
|  | ||||
| export default function jison() { | ||||
|   return { | ||||
|     name: 'jison', | ||||
|     transform(src: string, id: string) { | ||||
|       if (fileRegex.test(id)) { | ||||
|         return { | ||||
|           code: transformJison(src), | ||||
|           map: null, // provide source map if available | ||||
|         }; | ||||
|       } | ||||
|     }, | ||||
|   }; | ||||
| } | ||||
| @@ -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,31 +0,0 @@ | ||||
| import express from 'express'; | ||||
| import cors from 'cors'; | ||||
| import { createServer as createViteServer } from 'vite'; | ||||
| import { packageOptions } from '../.build/common.js'; | ||||
|  | ||||
| async function createServer() { | ||||
|   const app = express(); | ||||
|  | ||||
|   // Create Vite server in middleware mode | ||||
|   const vite = await createViteServer({ | ||||
|     configFile: './vite.config.ts', | ||||
|     mode: 'production', | ||||
|     server: { middlewareMode: true }, | ||||
|     appType: 'custom', // don't include Vite's default HTML handling middleware | ||||
|   }); | ||||
|  | ||||
|   app.use(cors()); | ||||
|   for (const { packageName } of Object.values(packageOptions)) { | ||||
|     app.use(express.static(`./packages/${packageName}/dist`)); | ||||
|   } | ||||
|   app.use(vite.middlewares); | ||||
|   app.use(express.static('demos')); | ||||
|   app.use(express.static('cypress/platform')); | ||||
|  | ||||
|   app.listen(9000, () => { | ||||
|     // eslint-disable-next-line no-console | ||||
|     console.log(`Listening on http://localhost:9000`); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| void createServer(); | ||||
							
								
								
									
										8
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +0,0 @@ | ||||
| { | ||||
|   "recommendations": [ | ||||
|     "dbaeumer.vscode-eslint", | ||||
|     "esbenp.prettier-vscode", | ||||
|     "vitest.explorer", | ||||
|     "luniclynx.bison" | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										29
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,29 +0,0 @@ | ||||
| { | ||||
|   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||
|   "version": "0.2.0", | ||||
|   "configurations": [ | ||||
|     { | ||||
|       "type": "node", | ||||
|       "request": "launch", | ||||
|       "name": "Debug Current Test File", | ||||
|       "autoAttachChildProcesses": true, | ||||
|       "skipFiles": ["<node_internals>/**", "**/node_modules/**"], | ||||
|       "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", | ||||
|       "args": ["run", "${relativeFile}"], | ||||
|       "smartStep": true, | ||||
|       "console": "integratedTerminal" | ||||
|     }, | ||||
|     { | ||||
|       "name": "Docs generation", | ||||
|       "type": "node", | ||||
|       "request": "launch", | ||||
|       "args": ["scripts/docs.cli.mts"], | ||||
|       // we'll need to change this to --import in Node.JS v20.6.0 and up | ||||
|       "runtimeArgs": ["--loader", "tsx/esm"], | ||||
|       "cwd": "${workspaceRoot}/packages/mermaid", | ||||
|       "skipFiles": ["<node_internals>/**", "**/node_modules/**"], | ||||
|       "smartStep": true, | ||||
|       "internalConsoleOptions": "openOnSessionStart" | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										25
									
								
								.webpack/loaders/jison.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.webpack/loaders/jison.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| const { Generator } = require('jison'); | ||||
| const validate = require('schema-utils'); | ||||
|  | ||||
| const schema = { | ||||
|   title: 'Jison Parser options', | ||||
|   type: 'object', | ||||
|   properties: { | ||||
|     'token-stack': { | ||||
|       type: 'boolean', | ||||
|     }, | ||||
|     debug: { | ||||
|       type: 'boolean', | ||||
|     }, | ||||
|   }, | ||||
|   additionalProperties: false, | ||||
| }; | ||||
|  | ||||
| module.exports = function jisonLoader(source) { | ||||
|   const options = this.getOptions(); | ||||
|   (validate.validate || validate)(schema, options, { | ||||
|     name: 'Jison Loader', | ||||
|     baseDataPath: 'options', | ||||
|   }); | ||||
|   return new Generator(source, options).generate(); | ||||
| }; | ||||
							
								
								
									
										45
									
								
								.webpack/webpack.config.babel.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								.webpack/webpack.config.babel.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| import { merge, mergeWithCustomize, customizeObject } from 'webpack-merge'; | ||||
| import nodeExternals from 'webpack-node-externals'; | ||||
| import baseConfig from './webpack.config.base'; | ||||
|  | ||||
| export default (_env, args) => { | ||||
|   switch (args.mode) { | ||||
|     case 'development': | ||||
|       return [ | ||||
|         baseConfig, | ||||
|         merge(baseConfig, { | ||||
|           externals: [nodeExternals()], | ||||
|           output: { | ||||
|             filename: '[name].core.js', | ||||
|           }, | ||||
|         }), | ||||
|       ]; | ||||
|     case 'production': | ||||
|       return [ | ||||
|         // umd | ||||
|         merge(baseConfig, { | ||||
|           output: { | ||||
|             filename: '[name].min.js', | ||||
|           }, | ||||
|         }), | ||||
|         // esm | ||||
|         mergeWithCustomize({ | ||||
|           customizeObject: customizeObject({ | ||||
|             'output.library': 'replace', | ||||
|           }), | ||||
|         })(baseConfig, { | ||||
|           experiments: { | ||||
|             outputModule: true, | ||||
|           }, | ||||
|           output: { | ||||
|             library: { | ||||
|               type: 'module', | ||||
|             }, | ||||
|             filename: '[name].esm.min.mjs', | ||||
|           }, | ||||
|         }), | ||||
|       ]; | ||||
|     default: | ||||
|       throw new Error('No matching configuration was found!'); | ||||
|   } | ||||
| }; | ||||
							
								
								
									
										54
									
								
								.webpack/webpack.config.base.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								.webpack/webpack.config.base.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| import path from 'path'; | ||||
|  | ||||
| export const resolveRoot = (...relativePath) => path.resolve(__dirname, '..', ...relativePath); | ||||
|  | ||||
| export default { | ||||
|   amd: false, // https://github.com/lodash/lodash/issues/3052 | ||||
|   target: 'web', | ||||
|   entry: { | ||||
|     mermaid: './src/mermaid.js', | ||||
|   }, | ||||
|   resolve: { | ||||
|     extensions: ['.wasm', '.mjs', '.js', '.json', '.jison'], | ||||
|     fallback: { | ||||
|       fs: false, // jison generated code requires 'fs' | ||||
|       path: require.resolve('path-browserify'), | ||||
|     }, | ||||
|   }, | ||||
|   output: { | ||||
|     path: resolveRoot('./dist'), | ||||
|     filename: '[name].js', | ||||
|     library: { | ||||
|       name: 'mermaid', | ||||
|       type: 'umd', | ||||
|       export: 'default', | ||||
|     }, | ||||
|     globalObject: 'typeof self !== "undefined" ? self : this', | ||||
|   }, | ||||
|   module: { | ||||
|     rules: [ | ||||
|       { | ||||
|         test: /\.js$/, | ||||
|         include: [resolveRoot('./src'), resolveRoot('./node_modules/dagre-d3-renderer/lib')], | ||||
|         use: { | ||||
|           loader: 'babel-loader', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         // load scss to string | ||||
|         test: /\.scss$/, | ||||
|         use: ['css-to-string-loader', 'css-loader', 'sass-loader'], | ||||
|       }, | ||||
|       { | ||||
|         test: /\.jison$/, | ||||
|         use: { | ||||
|           loader: path.resolve(__dirname, './loaders/jison.js'), | ||||
|           options: { | ||||
|             'token-stack': true, | ||||
|           }, | ||||
|         }, | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
|   devtool: 'source-map', | ||||
| }; | ||||
							
								
								
									
										37
									
								
								.webpack/webpack.config.e2e.babel.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.webpack/webpack.config.e2e.babel.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| import baseConfig, { resolveRoot } from './webpack.config.base'; | ||||
| import { merge } from 'webpack-merge'; | ||||
|  | ||||
| export default merge(baseConfig, { | ||||
|   mode: 'development', | ||||
|   entry: { | ||||
|     mermaid: './src/mermaid.js', | ||||
|     e2e: './cypress/platform/viewer.js', | ||||
|     'bundle-test': './cypress/platform/bundle-test.js', | ||||
|   }, | ||||
|   output: { | ||||
|     globalObject: 'window', | ||||
|   }, | ||||
|   devServer: { | ||||
|     compress: true, | ||||
|     port: 9000, | ||||
|     static: [ | ||||
|       { directory: resolveRoot('cypress', 'platform') }, | ||||
|       { directory: resolveRoot('dist') }, | ||||
|       { directory: resolveRoot('demos') }, | ||||
|     ], | ||||
|   }, | ||||
|   externals: { | ||||
|     mermaid: 'mermaid', | ||||
|   }, | ||||
|   module: { | ||||
|     rules: [ | ||||
|       { | ||||
|         test: /\.js$/, | ||||
|         exclude: /node_modules/, | ||||
|         use: { | ||||
|           loader: 'babel-loader', | ||||
|         }, | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
| }); | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user