mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 04:44:08 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			a716a525c3
			...
			feature/46
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6a89e28e1e | 
@@ -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,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-js/mermaid-zenuml': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Fixed a critical bug that the ZenUML diagram is not rendered.
 | 
					 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'@mermaid-js/layout-elk': patch
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
feat: Exposing elk configuration forceNodeModelOrder and considerModelOrder to the mermaid configuration
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
chore: Remove the "-beta" suffix from the XYChart, Block, Sankey diagrams to reflect their stable status
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: Position the edge label in state diagram correctly relative to the edge
 | 
					 | 
				
			||||||
@@ -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: Apply correct dateFormat in Gantt chart to show only day when specified
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: handle exclude dates properly in Gantt charts when using dateFormat: 'YYYY-MM-DD HH:mm:ss'
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: fixed connection gaps in flowchart for roundedRect, stadium and diamond shape
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': minor
 | 
					 | 
				
			||||||
'@mermaid-js/layout-tidy-tree': minor
 | 
					 | 
				
			||||||
'@mermaid-js/layout-elk': minor
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
feat: Update mindmap rendering to support multiple layouts, improved edge intersections, and new shapes
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: Update casing of ID in requirement diagram
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': minor
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
feat: Added support for per link curve styling in flowchart diagram using edge ids
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: Make flowchart elk detector regex match less greedy
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix(block): overflowing blocks no longer affect later lines
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This may change the layout of block diagrams that have overflowing lines
 | 
					 | 
				
			||||||
(i.e. block diagrams that use up more columns that the `columns` specifier).
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: log warning for blocks exceeding column width
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This update adds a validation check that logs a warning message when a block's width exceeds the defined column layout.
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: Add escaped class literal name on namespace
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: Allow equals sign in sequenceDiagram labels
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Add validation for negative values in pie charts:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Prevents crashes during parsing by validating values post-parsing.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Provides clearer, user-friendly error messages for invalid negative inputs.
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
chore: migrate to class-based ArchitectureDB implementation
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: node border style for handdrawn shapes
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: Update flowchart direction TD's behavior to be the same as TB
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'@mermaid-js/layout-elk': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Make elk not force node model order, but strongly consider it instead
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: correctly render non-directional lines for '---' in block diagrams
 | 
					 | 
				
			||||||
@@ -1,9 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
fix: fallback to raw text instead of rendering _Unsupported markdown_ or empty blocks
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Instead of printing **Unsupported markdown: XXX**, or empty blocks when using a markdown feature
 | 
					 | 
				
			||||||
that Mermaid does not yet support when `htmlLabels: true`(default) or `htmlLabels: false`,
 | 
					 | 
				
			||||||
fallback to the raw markdown text.
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
'mermaid': patch
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
chore: Update packet diagram to use new class-based database structure
 | 
					 | 
				
			||||||
							
								
								
									
										3
									
								
								.commitlintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.commitlintrc.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "extends": ["@commitlint/config-conventional"]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,153 +0,0 @@
 | 
				
			|||||||
# This file contains coding related terms
 | 
					 | 
				
			||||||
ALPHANUM
 | 
					 | 
				
			||||||
antiscript
 | 
					 | 
				
			||||||
APPLYCLASS
 | 
					 | 
				
			||||||
ARROWHEADSTYLE
 | 
					 | 
				
			||||||
ARROWTYPE
 | 
					 | 
				
			||||||
autonumber
 | 
					 | 
				
			||||||
axisl-line
 | 
					 | 
				
			||||||
Bigdecimal
 | 
					 | 
				
			||||||
birel
 | 
					 | 
				
			||||||
BIREL
 | 
					 | 
				
			||||||
bqstring
 | 
					 | 
				
			||||||
BQUOTE
 | 
					 | 
				
			||||||
bramp
 | 
					 | 
				
			||||||
BRKT
 | 
					 | 
				
			||||||
brotli
 | 
					 | 
				
			||||||
callbackargs
 | 
					 | 
				
			||||||
callbackname
 | 
					 | 
				
			||||||
classdef
 | 
					 | 
				
			||||||
classdefid
 | 
					 | 
				
			||||||
classentity
 | 
					 | 
				
			||||||
classname
 | 
					 | 
				
			||||||
COLONSEP
 | 
					 | 
				
			||||||
COMPOSIT_STATE
 | 
					 | 
				
			||||||
concat
 | 
					 | 
				
			||||||
controlx
 | 
					 | 
				
			||||||
controly
 | 
					 | 
				
			||||||
CSSCLASS
 | 
					 | 
				
			||||||
curv
 | 
					 | 
				
			||||||
CYLINDEREND
 | 
					 | 
				
			||||||
CYLINDERSTART
 | 
					 | 
				
			||||||
DAGA
 | 
					 | 
				
			||||||
datakey
 | 
					 | 
				
			||||||
DEND
 | 
					 | 
				
			||||||
descr
 | 
					 | 
				
			||||||
distp
 | 
					 | 
				
			||||||
distq
 | 
					 | 
				
			||||||
divs
 | 
					 | 
				
			||||||
docref
 | 
					 | 
				
			||||||
DOMID
 | 
					 | 
				
			||||||
doublecircle
 | 
					 | 
				
			||||||
DOUBLECIRCLEEND
 | 
					 | 
				
			||||||
DOUBLECIRCLESTART
 | 
					 | 
				
			||||||
DQUOTE
 | 
					 | 
				
			||||||
DSTART
 | 
					 | 
				
			||||||
edgesep
 | 
					 | 
				
			||||||
EMPTYSTR
 | 
					 | 
				
			||||||
enddate
 | 
					 | 
				
			||||||
ERDIAGRAM
 | 
					 | 
				
			||||||
eslint
 | 
					 | 
				
			||||||
flatmap
 | 
					 | 
				
			||||||
forwardable
 | 
					 | 
				
			||||||
frontmatter
 | 
					 | 
				
			||||||
funs
 | 
					 | 
				
			||||||
gantt
 | 
					 | 
				
			||||||
GENERICTYPE
 | 
					 | 
				
			||||||
grammr
 | 
					 | 
				
			||||||
graphtype
 | 
					 | 
				
			||||||
halign
 | 
					 | 
				
			||||||
iife
 | 
					 | 
				
			||||||
interp
 | 
					 | 
				
			||||||
introdcued
 | 
					 | 
				
			||||||
INVTRAPEND
 | 
					 | 
				
			||||||
INVTRAPSTART
 | 
					 | 
				
			||||||
JDBC
 | 
					 | 
				
			||||||
jison
 | 
					 | 
				
			||||||
Kaufmann
 | 
					 | 
				
			||||||
keyify
 | 
					 | 
				
			||||||
LABELPOS
 | 
					 | 
				
			||||||
LABELTYPE
 | 
					 | 
				
			||||||
layoutstop
 | 
					 | 
				
			||||||
lcov
 | 
					 | 
				
			||||||
LEFTOF
 | 
					 | 
				
			||||||
Lexa
 | 
					 | 
				
			||||||
linebreak
 | 
					 | 
				
			||||||
LINETYPE
 | 
					 | 
				
			||||||
LINKSTYLE
 | 
					 | 
				
			||||||
LLABEL
 | 
					 | 
				
			||||||
loglevel
 | 
					 | 
				
			||||||
LOGMSG
 | 
					 | 
				
			||||||
lookaheads
 | 
					 | 
				
			||||||
mdast
 | 
					 | 
				
			||||||
metafile
 | 
					 | 
				
			||||||
minlen
 | 
					 | 
				
			||||||
Mstartx
 | 
					 | 
				
			||||||
MULT
 | 
					 | 
				
			||||||
NODIR
 | 
					 | 
				
			||||||
NSTR
 | 
					 | 
				
			||||||
outdir
 | 
					 | 
				
			||||||
Qcontrolx
 | 
					 | 
				
			||||||
QSTR
 | 
					 | 
				
			||||||
reinit
 | 
					 | 
				
			||||||
rels
 | 
					 | 
				
			||||||
reqs
 | 
					 | 
				
			||||||
rewritelinks
 | 
					 | 
				
			||||||
rgba
 | 
					 | 
				
			||||||
RIGHTOF
 | 
					 | 
				
			||||||
roughjs
 | 
					 | 
				
			||||||
sankey
 | 
					 | 
				
			||||||
sequencenumber
 | 
					 | 
				
			||||||
shrc
 | 
					 | 
				
			||||||
signaltype
 | 
					 | 
				
			||||||
someclass
 | 
					 | 
				
			||||||
SPACELINE
 | 
					 | 
				
			||||||
SPACELIST
 | 
					 | 
				
			||||||
STADIUMEND
 | 
					 | 
				
			||||||
STADIUMSTART
 | 
					 | 
				
			||||||
startdate
 | 
					 | 
				
			||||||
startx
 | 
					 | 
				
			||||||
starty
 | 
					 | 
				
			||||||
STMNT
 | 
					 | 
				
			||||||
stopx
 | 
					 | 
				
			||||||
stopy
 | 
					 | 
				
			||||||
strikethrough
 | 
					 | 
				
			||||||
stringifying
 | 
					 | 
				
			||||||
struct
 | 
					 | 
				
			||||||
STYLECLASS
 | 
					 | 
				
			||||||
STYLEDEF
 | 
					 | 
				
			||||||
STYLEOPTS
 | 
					 | 
				
			||||||
subcomponent
 | 
					 | 
				
			||||||
subcomponents
 | 
					 | 
				
			||||||
subconfig
 | 
					 | 
				
			||||||
SUBROUTINEEND
 | 
					 | 
				
			||||||
SUBROUTINESTART
 | 
					 | 
				
			||||||
Subschemas
 | 
					 | 
				
			||||||
substr
 | 
					 | 
				
			||||||
SVGG
 | 
					 | 
				
			||||||
SVGSVG
 | 
					 | 
				
			||||||
TAGEND
 | 
					 | 
				
			||||||
TAGSTART
 | 
					 | 
				
			||||||
techn
 | 
					 | 
				
			||||||
TESTSTR
 | 
					 | 
				
			||||||
TEXTDATA
 | 
					 | 
				
			||||||
TEXTLENGTH
 | 
					 | 
				
			||||||
titlevalue
 | 
					 | 
				
			||||||
topbar
 | 
					 | 
				
			||||||
TRAPEND
 | 
					 | 
				
			||||||
TRAPSTART
 | 
					 | 
				
			||||||
treemap
 | 
					 | 
				
			||||||
ts-nocheck
 | 
					 | 
				
			||||||
tsdoc
 | 
					 | 
				
			||||||
typeof
 | 
					 | 
				
			||||||
typestr
 | 
					 | 
				
			||||||
unshift
 | 
					 | 
				
			||||||
urlsafe
 | 
					 | 
				
			||||||
verifymethod
 | 
					 | 
				
			||||||
VERIFYMTHD
 | 
					 | 
				
			||||||
WARN_DOCSDIR_DOESNT_MATCH
 | 
					 | 
				
			||||||
xhost
 | 
					 | 
				
			||||||
yaxis
 | 
					 | 
				
			||||||
yfunc
 | 
					 | 
				
			||||||
yytext
 | 
					 | 
				
			||||||
zenuml
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
# Contributors to mermaidjs, one per line
 | 
					 | 
				
			||||||
Ashish Jain
 | 
					 | 
				
			||||||
cpettitt
 | 
					 | 
				
			||||||
Dong Cai
 | 
					 | 
				
			||||||
knsv
 | 
					 | 
				
			||||||
Knut Sveidqvist
 | 
					 | 
				
			||||||
Nikolay Rozhkov
 | 
					 | 
				
			||||||
Peng Xiao
 | 
					 | 
				
			||||||
Per Brolin
 | 
					 | 
				
			||||||
Sidharth Vinod
 | 
					 | 
				
			||||||
subhash-halder
 | 
					 | 
				
			||||||
@@ -1,55 +0,0 @@
 | 
				
			|||||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
dictionaryDefinitions:
 | 
					 | 
				
			||||||
  - name: code-terms
 | 
					 | 
				
			||||||
    path: ./code-terms.txt
 | 
					 | 
				
			||||||
    description: A list of coding related terms.
 | 
					 | 
				
			||||||
    addWords: true
 | 
					 | 
				
			||||||
  - name: mermaid-terms
 | 
					 | 
				
			||||||
    path: ./mermaid-terms.txt
 | 
					 | 
				
			||||||
    description: A list of terms related to the mermaid project.
 | 
					 | 
				
			||||||
    addWords: true
 | 
					 | 
				
			||||||
  - name: misc-terms
 | 
					 | 
				
			||||||
    path: ./misc-terms.txt
 | 
					 | 
				
			||||||
    description: A list of miscellaneous terms.
 | 
					 | 
				
			||||||
  - name: 3rd-party-terms
 | 
					 | 
				
			||||||
    path: ./libraries.txt
 | 
					 | 
				
			||||||
    description: A list of 3rd party terms from dependencies.
 | 
					 | 
				
			||||||
    addWords: true
 | 
					 | 
				
			||||||
  - name: contributors
 | 
					 | 
				
			||||||
    path: ./contributors.txt
 | 
					 | 
				
			||||||
    description: A list of contributors to the mermaid project.
 | 
					 | 
				
			||||||
    type: 'W'
 | 
					 | 
				
			||||||
    addWords: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # cspell:disable
 | 
					 | 
				
			||||||
  - name: suggestions
 | 
					 | 
				
			||||||
    words:
 | 
					 | 
				
			||||||
      - none
 | 
					 | 
				
			||||||
      - disp
 | 
					 | 
				
			||||||
      - subproc
 | 
					 | 
				
			||||||
      - tria
 | 
					 | 
				
			||||||
    suggestWords:
 | 
					 | 
				
			||||||
      - seperator:separator
 | 
					 | 
				
			||||||
      - vertice:vertex
 | 
					 | 
				
			||||||
  # cspell:enable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
patterns:
 | 
					 | 
				
			||||||
  - name: character-set-cyrillic
 | 
					 | 
				
			||||||
    pattern: '/\p{Script_Extensions=Cyrillic}+/gu'
 | 
					 | 
				
			||||||
  - name: svg-block
 | 
					 | 
				
			||||||
    pattern: '<svg[\S\s]+?</svg>'
 | 
					 | 
				
			||||||
  - name: json-property
 | 
					 | 
				
			||||||
    pattern: '/"[\w/@-]+":/g'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
dictionaries:
 | 
					 | 
				
			||||||
  - mermaid-terms
 | 
					 | 
				
			||||||
  - suggestions
 | 
					 | 
				
			||||||
  - contributors
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ignorePaths:
 | 
					 | 
				
			||||||
  - '*.txt' # do not spell check local dictionaries
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# cspell:dictionary misc-terms
 | 
					 | 
				
			||||||
@@ -1,80 +0,0 @@
 | 
				
			|||||||
# Add third party library terms below
 | 
					 | 
				
			||||||
acyclicer
 | 
					 | 
				
			||||||
Antlr
 | 
					 | 
				
			||||||
Appli
 | 
					 | 
				
			||||||
applitools
 | 
					 | 
				
			||||||
Asciidoctor
 | 
					 | 
				
			||||||
Astah
 | 
					 | 
				
			||||||
automerge
 | 
					 | 
				
			||||||
bilkent
 | 
					 | 
				
			||||||
bisheng
 | 
					 | 
				
			||||||
Blazor
 | 
					 | 
				
			||||||
codedoc
 | 
					 | 
				
			||||||
Codemia
 | 
					 | 
				
			||||||
codepaths
 | 
					 | 
				
			||||||
csstree
 | 
					 | 
				
			||||||
cytoscape
 | 
					 | 
				
			||||||
cytoscape-cose-bilkent
 | 
					 | 
				
			||||||
dagre
 | 
					 | 
				
			||||||
dagre-d3
 | 
					 | 
				
			||||||
Deepdwn
 | 
					 | 
				
			||||||
Docsify
 | 
					 | 
				
			||||||
Docsy
 | 
					 | 
				
			||||||
Doctave
 | 
					 | 
				
			||||||
DokuWiki
 | 
					 | 
				
			||||||
dompurify
 | 
					 | 
				
			||||||
elkjs
 | 
					 | 
				
			||||||
fcose
 | 
					 | 
				
			||||||
fontawesome
 | 
					 | 
				
			||||||
Fonticons
 | 
					 | 
				
			||||||
Forgejo
 | 
					 | 
				
			||||||
Foswiki
 | 
					 | 
				
			||||||
Gitea
 | 
					 | 
				
			||||||
graphlib
 | 
					 | 
				
			||||||
Grav
 | 
					 | 
				
			||||||
icones
 | 
					 | 
				
			||||||
iconify
 | 
					 | 
				
			||||||
Inkdrop
 | 
					 | 
				
			||||||
jiti
 | 
					 | 
				
			||||||
jsdocs
 | 
					 | 
				
			||||||
jsfiddle
 | 
					 | 
				
			||||||
jsonschema
 | 
					 | 
				
			||||||
katex
 | 
					 | 
				
			||||||
khroma
 | 
					 | 
				
			||||||
langium
 | 
					 | 
				
			||||||
mathml
 | 
					 | 
				
			||||||
matplotlib
 | 
					 | 
				
			||||||
mdbook
 | 
					 | 
				
			||||||
Mermerd
 | 
					 | 
				
			||||||
mkdocs
 | 
					 | 
				
			||||||
Nextra
 | 
					 | 
				
			||||||
nodenext
 | 
					 | 
				
			||||||
npmjs
 | 
					 | 
				
			||||||
pageview
 | 
					 | 
				
			||||||
pathe
 | 
					 | 
				
			||||||
phpbb
 | 
					 | 
				
			||||||
pixelmatch
 | 
					 | 
				
			||||||
Podlite
 | 
					 | 
				
			||||||
presetAttributify
 | 
					 | 
				
			||||||
pyplot
 | 
					 | 
				
			||||||
redmine
 | 
					 | 
				
			||||||
rehype
 | 
					 | 
				
			||||||
roughjs
 | 
					 | 
				
			||||||
rscratch
 | 
					 | 
				
			||||||
shiki
 | 
					 | 
				
			||||||
Slidev
 | 
					 | 
				
			||||||
sparkline
 | 
					 | 
				
			||||||
sphinxcontrib
 | 
					 | 
				
			||||||
ssim
 | 
					 | 
				
			||||||
stylis
 | 
					 | 
				
			||||||
Swimm
 | 
					 | 
				
			||||||
tsbuildinfo
 | 
					 | 
				
			||||||
tseslint
 | 
					 | 
				
			||||||
Tuleap
 | 
					 | 
				
			||||||
Typora
 | 
					 | 
				
			||||||
unocss
 | 
					 | 
				
			||||||
unplugin
 | 
					 | 
				
			||||||
unstub
 | 
					 | 
				
			||||||
vite
 | 
					 | 
				
			||||||
vitest
 | 
					 | 
				
			||||||
Zune
 | 
					 | 
				
			||||||
@@ -1,44 +0,0 @@
 | 
				
			|||||||
Adamiecki
 | 
					 | 
				
			||||||
arrowend
 | 
					 | 
				
			||||||
Bendpoints
 | 
					 | 
				
			||||||
bmatrix
 | 
					 | 
				
			||||||
braintree
 | 
					 | 
				
			||||||
catmull
 | 
					 | 
				
			||||||
compositTitleSize
 | 
					 | 
				
			||||||
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,7 +0,0 @@
 | 
				
			|||||||
BRANDES
 | 
					 | 
				
			||||||
circo
 | 
					 | 
				
			||||||
handDrawn
 | 
					 | 
				
			||||||
KOEPF
 | 
					 | 
				
			||||||
neato
 | 
					 | 
				
			||||||
newbranch
 | 
					 | 
				
			||||||
validify
 | 
					 | 
				
			||||||
@@ -1,107 +0,0 @@
 | 
				
			|||||||
import { build } from 'esbuild';
 | 
					 | 
				
			||||||
import { cp, mkdir, readFile, rename, writeFile } from 'node:fs/promises';
 | 
					 | 
				
			||||||
import { packageOptions } from '../.build/common.js';
 | 
					 | 
				
			||||||
import { generateLangium } from '../.build/generateLangium.js';
 | 
					 | 
				
			||||||
import type { MermaidBuildOptions } from './util.js';
 | 
					 | 
				
			||||||
import { defaultOptions, getBuildConfig } from './util.js';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const shouldVisualize = process.argv.includes('--visualize');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
					 | 
				
			||||||
  const commonOptions: MermaidBuildOptions = {
 | 
					 | 
				
			||||||
    ...defaultOptions,
 | 
					 | 
				
			||||||
    options: packageOptions[entryName],
 | 
					 | 
				
			||||||
  } as const;
 | 
					 | 
				
			||||||
  const buildConfigs: MermaidBuildOptions[] = [
 | 
					 | 
				
			||||||
    // package.mjs
 | 
					 | 
				
			||||||
    { ...commonOptions },
 | 
					 | 
				
			||||||
    // package.min.mjs
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      ...commonOptions,
 | 
					 | 
				
			||||||
      minify: true,
 | 
					 | 
				
			||||||
      metafile: shouldVisualize,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    // package.core.mjs
 | 
					 | 
				
			||||||
    { ...commonOptions, core: true },
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (entryName === 'mermaid') {
 | 
					 | 
				
			||||||
    const iifeOptions: MermaidBuildOptions = { ...commonOptions, format: 'iife' };
 | 
					 | 
				
			||||||
    buildConfigs.push(
 | 
					 | 
				
			||||||
      // mermaid.js
 | 
					 | 
				
			||||||
      { ...iifeOptions },
 | 
					 | 
				
			||||||
      // mermaid.min.js
 | 
					 | 
				
			||||||
      { ...iifeOptions, minify: true, metafile: shouldVisualize },
 | 
					 | 
				
			||||||
      // mermaid.tiny.min.js
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        ...iifeOptions,
 | 
					 | 
				
			||||||
        minify: true,
 | 
					 | 
				
			||||||
        includeLargeFeatures: false,
 | 
					 | 
				
			||||||
        metafile: shouldVisualize,
 | 
					 | 
				
			||||||
        sourcemap: false,
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (entryName === 'mermaid-zenuml') {
 | 
					 | 
				
			||||||
    const iifeOptions: MermaidBuildOptions = {
 | 
					 | 
				
			||||||
      ...commonOptions,
 | 
					 | 
				
			||||||
      format: 'iife',
 | 
					 | 
				
			||||||
      globalName: 'mermaid-zenuml',
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    buildConfigs.push(
 | 
					 | 
				
			||||||
      // mermaid-zenuml.js
 | 
					 | 
				
			||||||
      { ...iifeOptions },
 | 
					 | 
				
			||||||
      // mermaid-zenuml.min.js
 | 
					 | 
				
			||||||
      { ...iifeOptions, minify: true, metafile: shouldVisualize }
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const results = await Promise.all(buildConfigs.map((option) => build(getBuildConfig(option))));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (shouldVisualize) {
 | 
					 | 
				
			||||||
    for (const { metafile } of results) {
 | 
					 | 
				
			||||||
      if (!metafile?.outputs) {
 | 
					 | 
				
			||||||
        continue;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      const fileName = Object.keys(metafile.outputs)
 | 
					 | 
				
			||||||
        .find((file) => !file.includes('chunks') && file.endsWith('js'))!
 | 
					 | 
				
			||||||
        .replace('dist/', '');
 | 
					 | 
				
			||||||
      // Upload metafile into https://esbuild.github.io/analyze/
 | 
					 | 
				
			||||||
      await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const handler = (e) => {
 | 
					 | 
				
			||||||
  // eslint-disable-next-line no-console
 | 
					 | 
				
			||||||
  console.error(e);
 | 
					 | 
				
			||||||
  process.exit(1);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const buildTinyMermaid = async () => {
 | 
					 | 
				
			||||||
  await mkdir('./packages/tiny/dist', { recursive: true });
 | 
					 | 
				
			||||||
  await rename(
 | 
					 | 
				
			||||||
    './packages/mermaid/dist/mermaid.tiny.min.js',
 | 
					 | 
				
			||||||
    './packages/tiny/dist/mermaid.tiny.js'
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
  // Copy version from mermaid's package.json to tiny's package.json
 | 
					 | 
				
			||||||
  const mermaidPkg = JSON.parse(await readFile('./packages/mermaid/package.json', 'utf8'));
 | 
					 | 
				
			||||||
  const tinyPkg = JSON.parse(await readFile('./packages/tiny/package.json', 'utf8'));
 | 
					 | 
				
			||||||
  tinyPkg.version = mermaidPkg.version;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  await writeFile('./packages/tiny/package.json', JSON.stringify(tinyPkg, null, 2) + '\n');
 | 
					 | 
				
			||||||
  await cp('./packages/mermaid/CHANGELOG.md', './packages/tiny/CHANGELOG.md');
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const main = async () => {
 | 
					 | 
				
			||||||
  await generateLangium();
 | 
					 | 
				
			||||||
  await mkdir('stats', { recursive: true });
 | 
					 | 
				
			||||||
  const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
 | 
					 | 
				
			||||||
  // it should build `parser` before `mermaid` because it's a dependency
 | 
					 | 
				
			||||||
  for (const pkg of packageNames) {
 | 
					 | 
				
			||||||
    await buildPackage(pkg).catch(handler);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  await buildTinyMermaid();
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void main();
 | 
					 | 
				
			||||||
@@ -1,15 +0,0 @@
 | 
				
			|||||||
import { readFile } from 'node:fs/promises';
 | 
					 | 
				
			||||||
import { transformJison } from '../.build/jisonTransformer.js';
 | 
					 | 
				
			||||||
import type { Plugin } from 'esbuild';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const jisonPlugin: Plugin = {
 | 
					 | 
				
			||||||
  name: 'jison',
 | 
					 | 
				
			||||||
  setup(build) {
 | 
					 | 
				
			||||||
    build.onLoad({ filter: /\.jison$/ }, async (args) => {
 | 
					 | 
				
			||||||
      // Load the file from the file system
 | 
					 | 
				
			||||||
      const source = await readFile(args.path, 'utf8');
 | 
					 | 
				
			||||||
      const contents = transformJison(source);
 | 
					 | 
				
			||||||
      return { contents, warnings: [] };
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,35 +0,0 @@
 | 
				
			|||||||
import type { JSONSchemaType } from 'ajv/dist/2019.js';
 | 
					 | 
				
			||||||
import type { MermaidConfig } from '../packages/mermaid/src/config.type.js';
 | 
					 | 
				
			||||||
import { readFile } from 'node:fs/promises';
 | 
					 | 
				
			||||||
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * ESBuild plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Use `my-example.schema.yaml?only-defaults=true` to only load the default values.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const jsonSchemaPlugin = {
 | 
					 | 
				
			||||||
  name: 'json-schema-plugin',
 | 
					 | 
				
			||||||
  setup(build) {
 | 
					 | 
				
			||||||
    let schema: JSONSchemaType<MermaidConfig> | undefined = undefined;
 | 
					 | 
				
			||||||
    let content = '';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    build.onLoad({ filter: /config\.schema\.yaml$/ }, async (args) => {
 | 
					 | 
				
			||||||
      // Load the file from the file system
 | 
					 | 
				
			||||||
      const source = await readFile(args.path, 'utf8');
 | 
					 | 
				
			||||||
      const resolvedSchema: JSONSchemaType<MermaidConfig> =
 | 
					 | 
				
			||||||
        content === source && schema ? schema : loadSchema(source, args.path);
 | 
					 | 
				
			||||||
      if (content !== source) {
 | 
					 | 
				
			||||||
        content = source;
 | 
					 | 
				
			||||||
        schema = resolvedSchema;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      const contents = args.suffix.includes('only-defaults')
 | 
					 | 
				
			||||||
        ? getDefaults(resolvedSchema)
 | 
					 | 
				
			||||||
        : getSchema(resolvedSchema);
 | 
					 | 
				
			||||||
      return { contents, warnings: [] };
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default jsonSchemaPlugin;
 | 
					 | 
				
			||||||
@@ -1,122 +0,0 @@
 | 
				
			|||||||
/* eslint-disable no-console */
 | 
					 | 
				
			||||||
import chokidar from 'chokidar';
 | 
					 | 
				
			||||||
import cors from 'cors';
 | 
					 | 
				
			||||||
import { context } from 'esbuild';
 | 
					 | 
				
			||||||
import type { Request, Response } from 'express';
 | 
					 | 
				
			||||||
import express from 'express';
 | 
					 | 
				
			||||||
import { packageOptions } from '../.build/common.js';
 | 
					 | 
				
			||||||
import { generateLangium } from '../.build/generateLangium.js';
 | 
					 | 
				
			||||||
import { defaultOptions, getBuildConfig } from './util.js';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const configs = Object.values(packageOptions).map(({ packageName }) =>
 | 
					 | 
				
			||||||
  getBuildConfig({
 | 
					 | 
				
			||||||
    ...defaultOptions,
 | 
					 | 
				
			||||||
    minify: false,
 | 
					 | 
				
			||||||
    core: false,
 | 
					 | 
				
			||||||
    options: packageOptions[packageName],
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
const mermaidIIFEConfig = getBuildConfig({
 | 
					 | 
				
			||||||
  ...defaultOptions,
 | 
					 | 
				
			||||||
  minify: false,
 | 
					 | 
				
			||||||
  core: false,
 | 
					 | 
				
			||||||
  options: packageOptions.mermaid,
 | 
					 | 
				
			||||||
  format: 'iife',
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
configs.push(mermaidIIFEConfig);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const contexts = await Promise.all(
 | 
					 | 
				
			||||||
  configs.map(async (config) => ({ config, context: await context(config) }))
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let rebuildCounter = 1;
 | 
					 | 
				
			||||||
const rebuildAll = async () => {
 | 
					 | 
				
			||||||
  const buildNumber = rebuildCounter++;
 | 
					 | 
				
			||||||
  const timeLabel = `Rebuild ${buildNumber} Time (total)`;
 | 
					 | 
				
			||||||
  console.time(timeLabel);
 | 
					 | 
				
			||||||
  await Promise.all(
 | 
					 | 
				
			||||||
    contexts.map(async ({ config, context }) => {
 | 
					 | 
				
			||||||
      const buildVariant = `Rebuild ${buildNumber} Time (${Object.keys(config.entryPoints!)[0]} ${config.format})`;
 | 
					 | 
				
			||||||
      console.time(buildVariant);
 | 
					 | 
				
			||||||
      await context.rebuild();
 | 
					 | 
				
			||||||
      console.timeEnd(buildVariant);
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  ).catch((e) => console.error(e));
 | 
					 | 
				
			||||||
  console.timeEnd(timeLabel);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let clients: { id: number; response: Response }[] = [];
 | 
					 | 
				
			||||||
function eventsHandler(request: Request, response: Response) {
 | 
					 | 
				
			||||||
  const headers = {
 | 
					 | 
				
			||||||
    'Content-Type': 'text/event-stream',
 | 
					 | 
				
			||||||
    Connection: 'keep-alive',
 | 
					 | 
				
			||||||
    'Cache-Control': 'no-cache',
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  response.writeHead(200, headers);
 | 
					 | 
				
			||||||
  const clientId = Date.now();
 | 
					 | 
				
			||||||
  clients.push({
 | 
					 | 
				
			||||||
    id: clientId,
 | 
					 | 
				
			||||||
    response,
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
  request.on('close', () => {
 | 
					 | 
				
			||||||
    clients = clients.filter((client) => client.id !== clientId);
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let timeoutID: NodeJS.Timeout | undefined = undefined;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Debounce file change events to avoid rebuilding multiple times.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
function handleFileChange() {
 | 
					 | 
				
			||||||
  if (timeoutID !== undefined) {
 | 
					 | 
				
			||||||
    clearTimeout(timeoutID);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
					 | 
				
			||||||
  timeoutID = setTimeout(async () => {
 | 
					 | 
				
			||||||
    await rebuildAll();
 | 
					 | 
				
			||||||
    sendEventsToAll();
 | 
					 | 
				
			||||||
    timeoutID = undefined;
 | 
					 | 
				
			||||||
  }, 100);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sendEventsToAll() {
 | 
					 | 
				
			||||||
  clients.forEach(({ response }) => response.write(`data: ${Date.now()}\n\n`));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async function createServer() {
 | 
					 | 
				
			||||||
  await generateLangium();
 | 
					 | 
				
			||||||
  handleFileChange();
 | 
					 | 
				
			||||||
  const app = express();
 | 
					 | 
				
			||||||
  chokidar
 | 
					 | 
				
			||||||
    .watch('**/src/**/*.{js,ts,langium,yaml,json}', {
 | 
					 | 
				
			||||||
      ignoreInitial: true,
 | 
					 | 
				
			||||||
      ignored: [/node_modules/, /dist/, /docs/, /coverage/],
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
    // eslint-disable-next-line @typescript-eslint/no-misused-promises
 | 
					 | 
				
			||||||
    .on('all', async (event, path) => {
 | 
					 | 
				
			||||||
      // Ignore other events.
 | 
					 | 
				
			||||||
      if (!['add', 'change'].includes(event)) {
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      console.log(`${path} changed. Rebuilding...`);
 | 
					 | 
				
			||||||
      if (path.endsWith('.langium')) {
 | 
					 | 
				
			||||||
        await generateLangium();
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      handleFileChange();
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  app.use(cors());
 | 
					 | 
				
			||||||
  app.get('/events', eventsHandler);
 | 
					 | 
				
			||||||
  for (const { packageName } of Object.values(packageOptions)) {
 | 
					 | 
				
			||||||
    app.use(express.static(`./packages/${packageName}/dist`));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  app.use(express.static('demos'));
 | 
					 | 
				
			||||||
  app.use(express.static('cypress/platform'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  app.listen(9000, () => {
 | 
					 | 
				
			||||||
    console.log(`Listening on http://localhost:9000`);
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void createServer();
 | 
					 | 
				
			||||||
							
								
								
									
										119
									
								
								.esbuild/util.ts
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								.esbuild/util.ts
									
									
									
									
									
								
							@@ -1,119 +0,0 @@
 | 
				
			|||||||
import { resolve } from 'path';
 | 
					 | 
				
			||||||
import { fileURLToPath } from 'url';
 | 
					 | 
				
			||||||
import type { BuildOptions } from 'esbuild';
 | 
					 | 
				
			||||||
import { readFileSync } from 'fs';
 | 
					 | 
				
			||||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
 | 
					 | 
				
			||||||
import type { PackageOptions } from '../.build/common.js';
 | 
					 | 
				
			||||||
import { jisonPlugin } from './jisonPlugin.js';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export interface MermaidBuildOptions extends BuildOptions {
 | 
					 | 
				
			||||||
  minify: boolean;
 | 
					 | 
				
			||||||
  core: boolean;
 | 
					 | 
				
			||||||
  metafile: boolean;
 | 
					 | 
				
			||||||
  format: 'esm' | 'iife';
 | 
					 | 
				
			||||||
  options: PackageOptions;
 | 
					 | 
				
			||||||
  includeLargeFeatures: boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
 | 
					 | 
				
			||||||
  minify: false,
 | 
					 | 
				
			||||||
  metafile: false,
 | 
					 | 
				
			||||||
  core: false,
 | 
					 | 
				
			||||||
  format: 'esm',
 | 
					 | 
				
			||||||
  includeLargeFeatures: true,
 | 
					 | 
				
			||||||
} as const;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const buildOptions = (override: BuildOptions): BuildOptions => {
 | 
					 | 
				
			||||||
  return {
 | 
					 | 
				
			||||||
    bundle: true,
 | 
					 | 
				
			||||||
    minify: true,
 | 
					 | 
				
			||||||
    keepNames: true,
 | 
					 | 
				
			||||||
    platform: 'browser',
 | 
					 | 
				
			||||||
    tsconfig: 'tsconfig.json',
 | 
					 | 
				
			||||||
    resolveExtensions: ['.ts', '.js', '.json', '.jison', '.yaml'],
 | 
					 | 
				
			||||||
    external: ['require', 'fs', 'path'],
 | 
					 | 
				
			||||||
    outdir: 'dist',
 | 
					 | 
				
			||||||
    plugins: [jisonPlugin, jsonSchemaPlugin],
 | 
					 | 
				
			||||||
    sourcemap: 'external',
 | 
					 | 
				
			||||||
    ...override,
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const getFileName = (
 | 
					 | 
				
			||||||
  fileName: string,
 | 
					 | 
				
			||||||
  { core, format, minify, includeLargeFeatures }: MermaidBuildOptions
 | 
					 | 
				
			||||||
) => {
 | 
					 | 
				
			||||||
  if (core) {
 | 
					 | 
				
			||||||
    fileName += '.core';
 | 
					 | 
				
			||||||
  } else if (format === 'esm') {
 | 
					 | 
				
			||||||
    fileName += '.esm';
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (!includeLargeFeatures) {
 | 
					 | 
				
			||||||
    fileName += '.tiny';
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (minify) {
 | 
					 | 
				
			||||||
    fileName += '.min';
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return fileName;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
 | 
					 | 
				
			||||||
  const {
 | 
					 | 
				
			||||||
    core,
 | 
					 | 
				
			||||||
    format,
 | 
					 | 
				
			||||||
    options: { name, file, packageName },
 | 
					 | 
				
			||||||
    globalName = 'mermaid',
 | 
					 | 
				
			||||||
    includeLargeFeatures,
 | 
					 | 
				
			||||||
    ...rest
 | 
					 | 
				
			||||||
  } = options;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const external: string[] = ['require', 'fs', 'path'];
 | 
					 | 
				
			||||||
  const outFileName = getFileName(name, options);
 | 
					 | 
				
			||||||
  const output: BuildOptions = buildOptions({
 | 
					 | 
				
			||||||
    ...rest,
 | 
					 | 
				
			||||||
    absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
 | 
					 | 
				
			||||||
    entryPoints: {
 | 
					 | 
				
			||||||
      [outFileName]: `src/${file}`,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    globalName,
 | 
					 | 
				
			||||||
    logLevel: 'info',
 | 
					 | 
				
			||||||
    chunkNames: `chunks/${outFileName}/[name]-[hash]`,
 | 
					 | 
				
			||||||
    define: {
 | 
					 | 
				
			||||||
      // This needs to be stringified for esbuild
 | 
					 | 
				
			||||||
      includeLargeFeatures: `${includeLargeFeatures}`,
 | 
					 | 
				
			||||||
      'import.meta.vitest': 'undefined',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (core) {
 | 
					 | 
				
			||||||
    const { dependencies } = JSON.parse(
 | 
					 | 
				
			||||||
      readFileSync(resolve(__dirname, `../packages/${packageName}/package.json`), 'utf-8')
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    // Core build is used to generate file without bundled dependencies.
 | 
					 | 
				
			||||||
    // This is used by downstream projects to bundle dependencies themselves.
 | 
					 | 
				
			||||||
    // Ignore dependencies and any dependencies of dependencies
 | 
					 | 
				
			||||||
    external.push(...Object.keys(dependencies));
 | 
					 | 
				
			||||||
    output.external = external;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (format === 'iife') {
 | 
					 | 
				
			||||||
    output.format = 'iife';
 | 
					 | 
				
			||||||
    output.splitting = false;
 | 
					 | 
				
			||||||
    const originalGlobalName = output.globalName ?? 'mermaid';
 | 
					 | 
				
			||||||
    output.globalName = `__esbuild_esm_mermaid_nm[${JSON.stringify(originalGlobalName)}]`;
 | 
					 | 
				
			||||||
    // Workaround for removing the .default access in esbuild IIFE.
 | 
					 | 
				
			||||||
    // https://github.com/mermaid-js/mermaid/pull/4109#discussion_r1292317396
 | 
					 | 
				
			||||||
    output.footer = {
 | 
					 | 
				
			||||||
      js: `globalThis[${JSON.stringify(originalGlobalName)}] = globalThis.${output.globalName}.default;`,
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    output.outExtension = { '.js': '.js' };
 | 
					 | 
				
			||||||
  } else {
 | 
					 | 
				
			||||||
    output.format = 'esm';
 | 
					 | 
				
			||||||
    output.splitting = true;
 | 
					 | 
				
			||||||
    output.outExtension = { '.js': '.mjs' };
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return output;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										8
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					dist/**
 | 
				
			||||||
 | 
					.github/**
 | 
				
			||||||
 | 
					docs/Setup.md
 | 
				
			||||||
 | 
					cypress.config.js
 | 
				
			||||||
 | 
					cypress/plugins/index.js
 | 
				
			||||||
 | 
					coverage
 | 
				
			||||||
 | 
					*.json
 | 
				
			||||||
 | 
					node_modules
 | 
				
			||||||
							
								
								
									
										162
									
								
								.eslintrc.cjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								.eslintrc.cjs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,162 @@
 | 
				
			|||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  env: {
 | 
				
			||||||
 | 
					    browser: true,
 | 
				
			||||||
 | 
					    es6: true,
 | 
				
			||||||
 | 
					    'jest/globals': true,
 | 
				
			||||||
 | 
					    node: true,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  root: true,
 | 
				
			||||||
 | 
					  parser: '@typescript-eslint/parser',
 | 
				
			||||||
 | 
					  parserOptions: {
 | 
				
			||||||
 | 
					    ecmaFeatures: {
 | 
				
			||||||
 | 
					      experimentalObjectRestSpread: true,
 | 
				
			||||||
 | 
					      jsx: true,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    tsconfigRootDir: __dirname,
 | 
				
			||||||
 | 
					    sourceType: 'module',
 | 
				
			||||||
 | 
					    ecmaVersion: 2020,
 | 
				
			||||||
 | 
					    allowAutomaticSingleRunInference: true,
 | 
				
			||||||
 | 
					    project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
 | 
				
			||||||
 | 
					    parser: '@typescript-eslint/parser',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  extends: [
 | 
				
			||||||
 | 
					    'eslint:recommended',
 | 
				
			||||||
 | 
					    'plugin:@typescript-eslint/recommended',
 | 
				
			||||||
 | 
					    'plugin:json/recommended',
 | 
				
			||||||
 | 
					    'plugin:markdown/recommended',
 | 
				
			||||||
 | 
					    'plugin:@cspell/recommended',
 | 
				
			||||||
 | 
					    'prettier',
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  plugins: [
 | 
				
			||||||
 | 
					    '@typescript-eslint',
 | 
				
			||||||
 | 
					    'no-only-tests',
 | 
				
			||||||
 | 
					    'html',
 | 
				
			||||||
 | 
					    'jest',
 | 
				
			||||||
 | 
					    'jsdoc',
 | 
				
			||||||
 | 
					    'json',
 | 
				
			||||||
 | 
					    '@cspell',
 | 
				
			||||||
 | 
					    'lodash',
 | 
				
			||||||
 | 
					    'unicorn',
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  ignorePatterns: [
 | 
				
			||||||
 | 
					    // this file is automatically generated by `pnpm run --filter mermaid types:build-config`
 | 
				
			||||||
 | 
					    'packages/mermaid/src/config.type.ts',
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  rules: {
 | 
				
			||||||
 | 
					    curly: 'error',
 | 
				
			||||||
 | 
					    'no-console': 'error',
 | 
				
			||||||
 | 
					    'no-prototype-builtins': 'off',
 | 
				
			||||||
 | 
					    'no-unused-vars': 'off',
 | 
				
			||||||
 | 
					    'cypress/no-async-tests': 'off',
 | 
				
			||||||
 | 
					    '@typescript-eslint/no-floating-promises': 'error',
 | 
				
			||||||
 | 
					    '@typescript-eslint/no-misused-promises': 'error',
 | 
				
			||||||
 | 
					    '@typescript-eslint/ban-ts-comment': [
 | 
				
			||||||
 | 
					      'error',
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        'ts-expect-error': 'allow-with-description',
 | 
				
			||||||
 | 
					        'ts-ignore': 'allow-with-description',
 | 
				
			||||||
 | 
					        'ts-nocheck': 'allow-with-description',
 | 
				
			||||||
 | 
					        'ts-check': 'allow-with-description',
 | 
				
			||||||
 | 
					        minimumDescriptionLength: 10,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    'json/*': ['error', 'allowComments'],
 | 
				
			||||||
 | 
					    '@cspell/spellchecker': [
 | 
				
			||||||
 | 
					      'error',
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        checkIdentifiers: false,
 | 
				
			||||||
 | 
					        checkStrings: false,
 | 
				
			||||||
 | 
					        checkStringTemplates: false,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    'no-empty': [
 | 
				
			||||||
 | 
					      'error',
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        allowEmptyCatch: true,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    'no-only-tests/no-only-tests': 'error',
 | 
				
			||||||
 | 
					    'lodash/import-scope': ['error', 'method'],
 | 
				
			||||||
 | 
					    'unicorn/better-regex': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-abusive-eslint-disable': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-array-push-push': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-for-loop': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-instanceof-array': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-typeof-undefined': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-unnecessary-await': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-unsafe-regex': 'warn',
 | 
				
			||||||
 | 
					    'unicorn/no-useless-promise-resolve-reject': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-array-find': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-array-flat-map': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-array-index-of': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-array-some': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-default-parameters': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-includes': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-negative-index': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-object-from-entries': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-string-starts-ends-with': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-string-trim-start-end': 'error',
 | 
				
			||||||
 | 
					    'unicorn/string-content': 'error',
 | 
				
			||||||
 | 
					    'unicorn/prefer-spread': 'error',
 | 
				
			||||||
 | 
					    'unicorn/no-lonely-if': 'error',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  overrides: [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      files: ['cypress/**', 'demos/**'],
 | 
				
			||||||
 | 
					      rules: {
 | 
				
			||||||
 | 
					        'no-console': 'off',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      files: ['*.{js,jsx,mjs,cjs}'],
 | 
				
			||||||
 | 
					      extends: ['plugin:jsdoc/recommended'],
 | 
				
			||||||
 | 
					      rules: {
 | 
				
			||||||
 | 
					        'jsdoc/check-indentation': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/check-alignment': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/check-line-alignment': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/multiline-blocks': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/newline-after-description': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/tag-lines': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/require-param-description': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/require-param-type': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/require-returns': 'off',
 | 
				
			||||||
 | 
					        'jsdoc/require-returns-description': 'off',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      files: ['*.{ts,tsx}'],
 | 
				
			||||||
 | 
					      plugins: ['tsdoc'],
 | 
				
			||||||
 | 
					      rules: {
 | 
				
			||||||
 | 
					        'no-restricted-syntax': [
 | 
				
			||||||
 | 
					          'error',
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            selector: 'TSEnumDeclaration',
 | 
				
			||||||
 | 
					            message:
 | 
				
			||||||
 | 
					              'Prefer using TypeScript union types over TypeScript enum, since TypeScript enums have a bunch of issues, see https://dev.to/dvddpl/whats-the-problem-with-typescript-enums-2okj',
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'tsdoc/syntax': 'error',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      files: ['*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'],
 | 
				
			||||||
 | 
					      rules: {
 | 
				
			||||||
 | 
					        'jsdoc/require-jsdoc': 'off',
 | 
				
			||||||
 | 
					        '@typescript-eslint/no-unused-vars': 'off',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      files: ['*.html', '*.md', '**/*.md/*'],
 | 
				
			||||||
 | 
					      rules: {
 | 
				
			||||||
 | 
					        'no-var': 'error',
 | 
				
			||||||
 | 
					        'no-undef': 'off',
 | 
				
			||||||
 | 
					        '@typescript-eslint/no-unused-vars': 'off',
 | 
				
			||||||
 | 
					        '@typescript-eslint/no-floating-promises': 'off',
 | 
				
			||||||
 | 
					        '@typescript-eslint/no-misused-promises': 'off',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      parserOptions: {
 | 
				
			||||||
 | 
					        project: null,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										5
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							@@ -17,9 +17,6 @@ body:
 | 
				
			|||||||
        - Use a clear and concise title
 | 
					        - Use a clear and concise title
 | 
				
			||||||
        - Fill out the text fields with as much detail as possible.
 | 
					        - Fill out the text fields with as much detail as possible.
 | 
				
			||||||
        - Never be shy to give us screenshots and/or code samples. It will help!
 | 
					        - Never be shy to give us screenshots and/or code samples. It will help!
 | 
				
			||||||
 | 
					 | 
				
			||||||
        There is a chance that the bug is already fixed in the git `develop` branch, but is not released yet. 
 | 
					 | 
				
			||||||
        So please check in [Live Editor - Develop](https://develop.git.mermaid.live) before raising an issue.
 | 
					 | 
				
			||||||
  - type: textarea
 | 
					  - type: textarea
 | 
				
			||||||
    attributes:
 | 
					    attributes:
 | 
				
			||||||
      label: Description
 | 
					      label: Description
 | 
				
			||||||
@@ -46,7 +43,7 @@ body:
 | 
				
			|||||||
    attributes:
 | 
					    attributes:
 | 
				
			||||||
      label: Code Sample
 | 
					      label: Code Sample
 | 
				
			||||||
      description: |-
 | 
					      description: |-
 | 
				
			||||||
        If applicable, add the code sample or a link to the [Live Editor - Develop](https://develop.git.mermaid.live).
 | 
					        If applicable, add the code sample or a link to the [Live Editor](https://mermaid.live).
 | 
				
			||||||
        Any text pasted here will be rendered as a Code block.
 | 
					        Any text pasted here will be rendered as a Code block.
 | 
				
			||||||
      render: text
 | 
					      render: text
 | 
				
			||||||
  - type: textarea
 | 
					  - type: textarea
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -3,18 +3,12 @@ contact_links:
 | 
				
			|||||||
  - name: GitHub Discussions
 | 
					  - name: GitHub Discussions
 | 
				
			||||||
    url: https://github.com/mermaid-js/mermaid/discussions
 | 
					    url: https://github.com/mermaid-js/mermaid/discussions
 | 
				
			||||||
    about: Ask the Community questions or share your own graphs in our discussions.
 | 
					    about: Ask the Community questions or share your own graphs in our discussions.
 | 
				
			||||||
  - name: Discord
 | 
					  - name: Slack
 | 
				
			||||||
    url: https://discord.gg/sKeNQX4Wtj
 | 
					    url: https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE
 | 
				
			||||||
    about: Join our Community on Discord for Help and a casual chat.
 | 
					    about: Join our Community on Slack for Help and a casual chat.
 | 
				
			||||||
  - name: Documentation
 | 
					  - name: Documentation
 | 
				
			||||||
    url: https://mermaid.js.org
 | 
					    url: https://mermaid-js.github.io
 | 
				
			||||||
    about: Read our documentation for all that Mermaid.js can offer.
 | 
					    about: Read our documentation for all that Mermaid.js can offer.
 | 
				
			||||||
  - name: Live Editor
 | 
					  - name: Live Editor
 | 
				
			||||||
    url: https://mermaid.live
 | 
					    url: https://mermaid.live
 | 
				
			||||||
    about: Try the live editor to preview graphs in no time.
 | 
					    about: Try the live editor to preview graphs in no time.
 | 
				
			||||||
  - name: Live Editor - Develop
 | 
					 | 
				
			||||||
    url: https://develop.git.mermaid.live
 | 
					 | 
				
			||||||
    about: Try unreleased changes in the develop branch.
 | 
					 | 
				
			||||||
  - name: Live Editor - Next
 | 
					 | 
				
			||||||
    url: https://next.git.mermaid.live
 | 
					 | 
				
			||||||
    about: Try unreleased changes in the next branch.
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/theme_proposal.yml
									
									
									
									
										vendored
									
									
								
							@@ -29,7 +29,7 @@ body:
 | 
				
			|||||||
      label: Colors
 | 
					      label: Colors
 | 
				
			||||||
      description: |-
 | 
					      description: |-
 | 
				
			||||||
        A detailed list of the different colour values to use.
 | 
					        A detailed list of the different colour values to use.
 | 
				
			||||||
        See the [list of currently used variable names](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
 | 
					        A list of currently used variable names can be found [here](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
 | 
				
			||||||
      placeholder: |-
 | 
					      placeholder: |-
 | 
				
			||||||
        - background: #f4f4f4
 | 
					        - background: #f4f4f4
 | 
				
			||||||
        - primaryColor: #fff4dd
 | 
					        - primaryColor: #fff4dd
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								.github/codecov.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/codecov.yaml
									
									
									
									
										vendored
									
									
								
							@@ -15,4 +15,3 @@ coverage:
 | 
				
			|||||||
      # Turing off for now as code coverage isn't stable and causes unnecessary build failures.
 | 
					      # Turing off for now as code coverage isn't stable and causes unnecessary build failures.
 | 
				
			||||||
      # default:
 | 
					      # default:
 | 
				
			||||||
      #   threshold: 2%
 | 
					      #   threshold: 2%
 | 
				
			||||||
    patch: off
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										68
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										68
									
								
								.github/lychee.toml
									
									
									
									
										vendored
									
									
								
							@@ -1,68 +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://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
 | 
					 | 
				
			||||||
							
								
								
									
										26
									
								
								.github/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/pr-labeler.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,22 +1,4 @@
 | 
				
			|||||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/release-drafter/release-drafter/master/schema.json
 | 
					'Type: Bug / Error': ['bug/*', fix/*]
 | 
				
			||||||
autolabeler:
 | 
					'Type: Enhancement': ['feature/*', 'feat/*']
 | 
				
			||||||
  - label: 'Type: Bug / Error'
 | 
					'Type: Other': ['other/*', 'chore/*', 'test/*', 'refactor/*']
 | 
				
			||||||
    branch:
 | 
					'Area: Documentation': ['docs/*']
 | 
				
			||||||
      - '/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.
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							@@ -12,7 +12,7 @@ Describe the way your implementation works or what design decisions you made if
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Make sure you
 | 
					Make sure you
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [ ] :book: have read the [contribution guidelines](https://mermaid.js.org/community/contributing.html)
 | 
					- [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
 | 
				
			||||||
- [ ] :computer: have added necessary unit/e2e tests.
 | 
					- [ ] :computer: have added 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.
 | 
					- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/docs/community/development.md#3-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:`.
 | 
					- [ ] :bookmark: targeted `develop` branch
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								.github/release-drafter.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.github/release-drafter.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					name-template: '$NEXT_PATCH_VERSION'
 | 
				
			||||||
 | 
					tag-template: '$NEXT_PATCH_VERSION'
 | 
				
			||||||
 | 
					categories:
 | 
				
			||||||
 | 
					  - title: '🚀 Features'
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      - 'Type: Enhancement'
 | 
				
			||||||
 | 
					  - title: '🐛 Bug Fixes'
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      - 'Type: Bug / Error'
 | 
				
			||||||
 | 
					  - title: '🧰 Maintenance'
 | 
				
			||||||
 | 
					    label: 'Type: Other'
 | 
				
			||||||
 | 
					change-template: '- $TITLE (#$NUMBER) @$AUTHOR'
 | 
				
			||||||
 | 
					sort-by: title
 | 
				
			||||||
 | 
					sort-direction: ascending
 | 
				
			||||||
 | 
					branches:
 | 
				
			||||||
 | 
					  - develop
 | 
				
			||||||
 | 
					exclude-labels:
 | 
				
			||||||
 | 
					  - 'Skip changelog'
 | 
				
			||||||
 | 
					no-changes-template: 'This release contains minor changes and bugfixes.'
 | 
				
			||||||
 | 
					template: |
 | 
				
			||||||
 | 
					  # Release Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  $CHANGES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  🎉 **Thanks to all contributors helping with this release!** 🎉
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/stale.yml
									
									
									
									
										vendored
									
									
								
							@@ -15,5 +15,5 @@ markComment: >
 | 
				
			|||||||
  If you are still interested in this issue and it is still relevant you can comment to revive it.
 | 
					  If you are still interested in this issue and it is still relevant you can comment to revive it.
 | 
				
			||||||
# Comment to post when closing a stale issue. Set to `false` to disable
 | 
					# Comment to post when closing a stale issue. Set to `false` to disable
 | 
				
			||||||
closeComment: >
 | 
					closeComment: >
 | 
				
			||||||
  This issue has been automatically closed due to a lack of activity. 
 | 
					  This issue has been been automatically closed due to a lack of activity. 
 | 
				
			||||||
  This is done to maintain a clean list of issues that the community is interested in developing.
 | 
					  This is done to maintain a clean list of issues that the community is interested in developing.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								.github/workflows/autofix.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								.github/workflows/autofix.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,45 +0,0 @@
 | 
				
			|||||||
name: autofix.ci # needed to securely identify the workflow
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  pull_request:
 | 
					 | 
				
			||||||
    branches-ignore:
 | 
					 | 
				
			||||||
      - 'renovate/**'
 | 
					 | 
				
			||||||
permissions:
 | 
					 | 
				
			||||||
  contents: read
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  autofix:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup Node.js
 | 
					 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          cache: pnpm
 | 
					 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install Packages
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pnpm install --frozen-lockfile
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          CYPRESS_CACHE_FOLDER: .cache/Cypress
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Fix Linting
 | 
					 | 
				
			||||||
        shell: bash
 | 
					 | 
				
			||||||
        run: pnpm -w run lint:fix
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Sync `./src/config.type.ts` with `./src/schemas/config.schema.yaml`
 | 
					 | 
				
			||||||
        shell: bash
 | 
					 | 
				
			||||||
        run: pnpm run --filter mermaid types:build-config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Build Docs
 | 
					 | 
				
			||||||
        working-directory: ./packages/mermaid
 | 
					 | 
				
			||||||
        run: pnpm run docs:build
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - uses: autofix-ci/action@635ffb0c9798bd160680f18fd73371e355b85f27 # main
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/build-docs.yml
									
									
									
									
										vendored
									
									
								
							@@ -8,8 +8,6 @@ on:
 | 
				
			|||||||
  pull_request:
 | 
					  pull_request:
 | 
				
			||||||
  merge_group:
 | 
					  merge_group:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions:
 | 
					permissions:
 | 
				
			||||||
  contents: read
 | 
					  contents: read
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,20 +16,20 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout
 | 
					      - name: Checkout
 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					        uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          cache: pnpm
 | 
					          cache: pnpm
 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					          node-version: 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Install Packages
 | 
					      - name: Install Packages
 | 
				
			||||||
        run: pnpm install --frozen-lockfile
 | 
					        run: pnpm install --frozen-lockfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Verify release version
 | 
					      - name: Verify release verion
 | 
				
			||||||
        if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release')) }}
 | 
					        if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release')) }}
 | 
				
			||||||
        run: pnpm --filter mermaid run docs:verify-version
 | 
					        run: pnpm --filter mermaid run docs:verify-version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										52
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					name: Build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push: {}
 | 
				
			||||||
 | 
					  merge_group:
 | 
				
			||||||
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    types:
 | 
				
			||||||
 | 
					      - opened
 | 
				
			||||||
 | 
					      - synchronize
 | 
				
			||||||
 | 
					      - ready_for_review
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					permissions:
 | 
				
			||||||
 | 
					  contents: read
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  build-mermaid:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        node-version: [18.x]
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Setup Node.js ${{ matrix.node-version }}
 | 
				
			||||||
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          cache: pnpm
 | 
				
			||||||
 | 
					          node-version: ${{ matrix.node-version }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Install Packages
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          pnpm install --frozen-lockfile
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          CYPRESS_CACHE_FOLDER: .cache/Cypress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Run Build
 | 
				
			||||||
 | 
					        run: pnpm run build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Upload Mermaid Build as Artifact
 | 
				
			||||||
 | 
					        uses: actions/upload-artifact@v3
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          name: mermaid-build
 | 
				
			||||||
 | 
					          path: packages/mermaid/dist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Upload Mermaid Mindmap Build as Artifact
 | 
				
			||||||
 | 
					        uses: actions/upload-artifact@v3
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          name: mermaid-mindmap-build
 | 
				
			||||||
 | 
					          path: packages/mermaid-mindmap/dist
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/workflows/check-readme-in-sync.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/check-readme-in-sync.yml
									
									
									
									
										vendored
									
									
								
							@@ -18,7 +18,7 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout repository
 | 
					      - name: Checkout repository
 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					        uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Check for difference in README.md and docs/README.md
 | 
					      - name: Check for difference in README.md and docs/README.md
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								.github/workflows/checks.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/checks.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					  merge_group:
 | 
				
			||||||
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    types:
 | 
				
			||||||
 | 
					      - opened
 | 
				
			||||||
 | 
					      - synchronize
 | 
				
			||||||
 | 
					      - ready_for_review
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					name: Static analysis on Test files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  check-tests:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    name: check tests
 | 
				
			||||||
 | 
					    if: github.repository_owner == 'mermaid-js'
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          fetch-depth: 0
 | 
				
			||||||
 | 
					      - uses: testomatio/check-tests@stable
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          framework: cypress
 | 
				
			||||||
 | 
					          tests: './cypress/e2e/**/**.spec.js'
 | 
				
			||||||
 | 
					          token: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
 | 
					          has-tests-label: true
 | 
				
			||||||
							
								
								
									
										11
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							@@ -11,9 +11,6 @@ on:
 | 
				
			|||||||
      - synchronize
 | 
					      - synchronize
 | 
				
			||||||
      - ready_for_review
 | 
					      - ready_for_review
 | 
				
			||||||
 | 
					
 | 
				
			||||||
permissions: # added using https://github.com/step-security/secure-repo
 | 
					 | 
				
			||||||
  contents: read
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  analyze:
 | 
					  analyze:
 | 
				
			||||||
    name: Analyze
 | 
					    name: Analyze
 | 
				
			||||||
@@ -32,11 +29,11 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout repository
 | 
					      - name: Checkout repository
 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					        uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Initializes the CodeQL tools for scanning.
 | 
					      # Initializes the CodeQL tools for scanning.
 | 
				
			||||||
      - name: Initialize CodeQL
 | 
					      - name: Initialize CodeQL
 | 
				
			||||||
        uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
					        uses: github/codeql-action/init@v2
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          config-file: ./.github/codeql/codeql-config.yml
 | 
					          config-file: ./.github/codeql/codeql-config.yml
 | 
				
			||||||
          languages: ${{ matrix.language }}
 | 
					          languages: ${{ matrix.language }}
 | 
				
			||||||
@@ -48,7 +45,7 @@ jobs:
 | 
				
			|||||||
      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
 | 
					      # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
 | 
				
			||||||
      # If this step fails, then you should remove it and run the build manually (see below)
 | 
					      # If this step fails, then you should remove it and run the build manually (see below)
 | 
				
			||||||
      - name: Autobuild
 | 
					      - name: Autobuild
 | 
				
			||||||
        uses: github/codeql-action/autobuild@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
					        uses: github/codeql-action/autobuild@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # ℹ️ Command-line programs to run using the OS shell.
 | 
					      # ℹ️ Command-line programs to run using the OS shell.
 | 
				
			||||||
      # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
 | 
					      # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
 | 
				
			||||||
@@ -62,4 +59,4 @@ jobs:
 | 
				
			|||||||
      #   make release
 | 
					      #   make release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Perform CodeQL Analysis
 | 
					      - name: Perform CodeQL Analysis
 | 
				
			||||||
        uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
					        uses: github/codeql-action/analyze@v2
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/dependency-review.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
				
			|||||||
# Dependency Review Action
 | 
					# Dependency Review Action
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
 | 
					# This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Source repository: https://github.com/actions/dependency-review-action
 | 
					# Source repository: https://github.com/actions/dependency-review-action
 | 
				
			||||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
 | 
					# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
 | 
				
			||||||
@@ -15,6 +15,6 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: 'Checkout Repository'
 | 
					      - name: 'Checkout Repository'
 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					        uses: actions/checkout@v3
 | 
				
			||||||
      - name: 'Dependency Review'
 | 
					      - name: 'Dependency Review'
 | 
				
			||||||
        uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
 | 
					        uses: actions/dependency-review-action@v3
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/e2e-applitools.yml
									
									
									
									
										vendored
									
									
								
							@@ -11,8 +11,6 @@ on:
 | 
				
			|||||||
        default: master
 | 
					        default: master
 | 
				
			||||||
        description: 'Parent branch to use for PRs'
 | 
					        description: 'Parent branch to use for PRs'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions:
 | 
					permissions:
 | 
				
			||||||
  contents: read
 | 
					  contents: read
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,40 +21,38 @@ env:
 | 
				
			|||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  e2e-applitools:
 | 
					  e2e-applitools:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    container:
 | 
					    strategy:
 | 
				
			||||||
      image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
 | 
					      matrix:
 | 
				
			||||||
      options: --user 1001
 | 
					        node-version: [18.x]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - if: ${{ ! env.USE_APPLI }}
 | 
					      - if: ${{ ! env.USE_APPLI }}
 | 
				
			||||||
        name: Warn if not using Applitools
 | 
					        name: Warn if not using Applitools
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          echo "::error,title=Not using Applitools::APPLITOOLS_API_KEY is empty, disabling Applitools for this run."
 | 
					          echo "::error,title=Not using Applitols::APPLITOOLS_API_KEY is empty, disabling Applitools for this run."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js ${{ matrix.node-version }}
 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					          node-version: ${{ matrix.node-version }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - if: ${{ env.USE_APPLI }}
 | 
					      - if: ${{ env.USE_APPLI }}
 | 
				
			||||||
        name: Notify applitools of new batch
 | 
					        name: Notify applitools of new batch
 | 
				
			||||||
        # Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html
 | 
					        # Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html
 | 
				
			||||||
 | 
					        run: curl -L -d '' -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH"
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          # e.g. mermaid-js/mermaid/my-branch
 | 
					          # e.g. mermaid-js/mermaid/my-branch
 | 
				
			||||||
          APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }}
 | 
					          APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }}
 | 
				
			||||||
          APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }}
 | 
					          APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }}
 | 
				
			||||||
          APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
 | 
					          APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
 | 
				
			||||||
          APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com'
 | 
					          APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com'
 | 
				
			||||||
        uses: wei/curl@012398a392d02480afa2720780031f8621d5f94c
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          args: -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Cypress run
 | 
					      - name: Cypress run
 | 
				
			||||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
					        uses: cypress-io/github-action@v4
 | 
				
			||||||
        id: cypress
 | 
					        id: cypress
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          start: pnpm run dev
 | 
					          start: pnpm run dev
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										70
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										70
									
								
								.github/workflows/e2e-timings.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,70 +0,0 @@
 | 
				
			|||||||
name: E2E - Generate Timings
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  # run this workflow every night at 3am
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: '28 3 * * *'
 | 
					 | 
				
			||||||
  # or when the user triggers it from GitHub Actions page
 | 
					 | 
				
			||||||
  workflow_dispatch:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions:
 | 
					 | 
				
			||||||
  contents: write
 | 
					 | 
				
			||||||
  pull-requests: write
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  timings:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    container:
 | 
					 | 
				
			||||||
      image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
 | 
					 | 
				
			||||||
      options: --user 1001
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					 | 
				
			||||||
      - name: Setup Node.js
 | 
					 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          runTests: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Cypress run
 | 
					 | 
				
			||||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
					 | 
				
			||||||
        id: cypress
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          install: false
 | 
					 | 
				
			||||||
          start: pnpm run dev:coverage
 | 
					 | 
				
			||||||
          wait-on: 'http://localhost:9000'
 | 
					 | 
				
			||||||
          browser: chrome
 | 
					 | 
				
			||||||
          publish-summary: false
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          VITEST_COVERAGE: true
 | 
					 | 
				
			||||||
          CYPRESS_COMMIT: ${{ github.sha }}
 | 
					 | 
				
			||||||
          SPLIT: 1
 | 
					 | 
				
			||||||
          SPLIT_INDEX: 0
 | 
					 | 
				
			||||||
          SPLIT_FILE: 'cypress/timings.json'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Compare timings
 | 
					 | 
				
			||||||
        id: compare
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          OUTPUT=$(pnpm tsx scripts/compare-timings.ts)
 | 
					 | 
				
			||||||
          echo "$OUTPUT" >> $GITHUB_STEP_SUMMARY
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          echo "output<<EOF" >> $GITHUB_OUTPUT
 | 
					 | 
				
			||||||
          echo "$OUTPUT" >> $GITHUB_OUTPUT
 | 
					 | 
				
			||||||
          echo "EOF" >> $GITHUB_OUTPUT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Commit and create pull request
 | 
					 | 
				
			||||||
        uses: peter-evans/create-pull-request@1310d7dab503600742045e6fd4b84dda64352858
 | 
					 | 
				
			||||||
        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
 | 
					 | 
				
			||||||
							
								
								
									
										130
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										130
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							@@ -2,144 +2,52 @@ name: E2E
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
  push:
 | 
					  push:
 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - develop
 | 
					 | 
				
			||||||
      - master
 | 
					 | 
				
			||||||
      - release/**
 | 
					 | 
				
			||||||
  pull_request:
 | 
					  pull_request:
 | 
				
			||||||
  merge_group:
 | 
					  merge_group:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions:
 | 
					permissions:
 | 
				
			||||||
  contents: read
 | 
					  contents: read
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					 | 
				
			||||||
  # For PRs and MergeQueues, the target commit is used, and for push events to non-develop branches, github.event.previous is used if available. Otherwise, 'develop' is used.
 | 
					 | 
				
			||||||
  targetHash: >-
 | 
					 | 
				
			||||||
    ${{ 
 | 
					 | 
				
			||||||
      github.event.pull_request.base.sha || 
 | 
					 | 
				
			||||||
      github.event.merge_group.base_sha || 
 | 
					 | 
				
			||||||
      (
 | 
					 | 
				
			||||||
        (
 | 
					 | 
				
			||||||
          (github.event_name == 'push' && github.ref == 'refs/heads/develop') || 
 | 
					 | 
				
			||||||
          github.event.before == '0000000000000000000000000000000000000000'
 | 
					 | 
				
			||||||
        ) && 'develop'
 | 
					 | 
				
			||||||
      ) || 
 | 
					 | 
				
			||||||
      github.event.before
 | 
					 | 
				
			||||||
    }}
 | 
					 | 
				
			||||||
  RUN_VISUAL_TEST: >-
 | 
					 | 
				
			||||||
    ${{ github.repository == 'mermaid-js/mermaid' && (github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/')) }}
 | 
					 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  cache:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    container:
 | 
					 | 
				
			||||||
      image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
 | 
					 | 
				
			||||||
      options: --user 1001
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					 | 
				
			||||||
      - name: Setup Node.js
 | 
					 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					 | 
				
			||||||
      - name: Cache snapshots
 | 
					 | 
				
			||||||
        id: cache-snapshot
 | 
					 | 
				
			||||||
        uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          path: ./cypress/snapshots
 | 
					 | 
				
			||||||
          key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
 | 
					 | 
				
			||||||
      - name: Switch to base branch
 | 
					 | 
				
			||||||
        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
 | 
					 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          ref: ${{ env.targetHash }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
 | 
					 | 
				
			||||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          # just perform install
 | 
					 | 
				
			||||||
          runTests: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Calculate bundle size
 | 
					 | 
				
			||||||
        if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true'}}
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pnpm run build:viz
 | 
					 | 
				
			||||||
          mkdir -p cypress/snapshots/stats/base
 | 
					 | 
				
			||||||
          mv stats cypress/snapshots/stats/base
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  e2e:
 | 
					  e2e:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    container:
 | 
					 | 
				
			||||||
      image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
 | 
					 | 
				
			||||||
      options: --user 1001
 | 
					 | 
				
			||||||
    needs: cache
 | 
					 | 
				
			||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      fail-fast: false
 | 
					      fail-fast: false
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        containers: [1, 2, 3, 4, 5]
 | 
					        node-version: [18.x]
 | 
				
			||||||
 | 
					        containers: [1, 2, 3, 4]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js ${{ matrix.node-version }}
 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					          node-version: ${{ matrix.node-version }}
 | 
				
			||||||
 | 
					 | 
				
			||||||
      # These cached snapshots are downloaded, providing the reference snapshots.
 | 
					 | 
				
			||||||
      - name: Cache snapshots
 | 
					 | 
				
			||||||
        id: cache-snapshot
 | 
					 | 
				
			||||||
        uses: actions/cache/restore@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          path: ./cypress/snapshots
 | 
					 | 
				
			||||||
          key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install dependencies
 | 
					 | 
				
			||||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          runTests: false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Output size diff
 | 
					 | 
				
			||||||
        if: ${{ matrix.containers == 1 }}
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pnpm run build:viz
 | 
					 | 
				
			||||||
          mv stats cypress/snapshots/stats/head
 | 
					 | 
				
			||||||
          echo '## Bundle size difference' >> "$GITHUB_STEP_SUMMARY"
 | 
					 | 
				
			||||||
          echo '' >> "$GITHUB_STEP_SUMMARY"
 | 
					 | 
				
			||||||
          npx tsx scripts/size.ts >> "$GITHUB_STEP_SUMMARY"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Install NPM dependencies, cache them correctly
 | 
					      # Install NPM dependencies, cache them correctly
 | 
				
			||||||
      # and run all Cypress tests
 | 
					      # and run all Cypress tests
 | 
				
			||||||
      - name: Cypress run
 | 
					      - name: Cypress run
 | 
				
			||||||
        uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
 | 
					        uses: cypress-io/github-action@v4
 | 
				
			||||||
        id: cypress
 | 
					        id: cypress
 | 
				
			||||||
 | 
					        # If CYPRESS_RECORD_KEY is set, run in parallel on all containers
 | 
				
			||||||
 | 
					        # Otherwise (e.g. if running from fork), we run on a single container only
 | 
				
			||||||
 | 
					        if: ${{ ( env.CYPRESS_RECORD_KEY != '' ) || ( matrix.containers == 1 ) }}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          install: false
 | 
					 | 
				
			||||||
          start: pnpm run dev:coverage
 | 
					          start: pnpm run dev:coverage
 | 
				
			||||||
          wait-on: 'http://localhost:9000'
 | 
					          wait-on: 'http://localhost:9000'
 | 
				
			||||||
          browser: chrome
 | 
					 | 
				
			||||||
          # Disable recording if we don't have an API key
 | 
					          # Disable recording if we don't have an API key
 | 
				
			||||||
          # e.g. if this action was run from a fork
 | 
					          # e.g. if this action was run from a fork
 | 
				
			||||||
          record: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY != '' }}
 | 
					          record: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
 | 
				
			||||||
 | 
					          parallel: ${{ secrets.CYPRESS_RECORD_KEY != '' }}
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          ARGOS_PARALLEL: ${{ env.RUN_VISUAL_TEST == 'true' }}
 | 
					          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
 | 
				
			||||||
          ARGOS_PARALLEL_TOTAL: ${{ env.RUN_VISUAL_TEST == 'true' && strategy.job-total || 1 }}
 | 
					 | 
				
			||||||
          ARGOS_PARALLEL_INDEX: ${{ env.RUN_VISUAL_TEST == 'true' && matrix.containers || 1 }}
 | 
					 | 
				
			||||||
          CYPRESS_COMMIT: ${{ github.sha }}
 | 
					 | 
				
			||||||
          CYPRESS_RECORD_KEY: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY || ''}}
 | 
					 | 
				
			||||||
          SPLIT: ${{ strategy.job-total }}
 | 
					 | 
				
			||||||
          SPLIT_INDEX: ${{ strategy.job-index }}
 | 
					 | 
				
			||||||
          SPLIT_FILE: 'cypress/timings.json'
 | 
					 | 
				
			||||||
          VITEST_COVERAGE: true
 | 
					          VITEST_COVERAGE: true
 | 
				
			||||||
 | 
					          CYPRESS_COMMIT: ${{ github.sha }}
 | 
				
			||||||
      - name: Upload Coverage to Codecov
 | 
					      - name: Upload Coverage to Codecov
 | 
				
			||||||
        uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
 | 
					        uses: codecov/codecov-action@v3
 | 
				
			||||||
        # Run step only pushes to develop and pull_requests
 | 
					        # Run step only pushes to develop and pull_requests
 | 
				
			||||||
        if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
 | 
					        if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
@@ -149,3 +57,9 @@ jobs:
 | 
				
			|||||||
          fail_ci_if_error: false
 | 
					          fail_ci_if_error: false
 | 
				
			||||||
          verbose: true
 | 
					          verbose: true
 | 
				
			||||||
          token: 6845cc80-77ee-4e17-85a1-026cd95e0766
 | 
					          token: 6845cc80-77ee-4e17-85a1-026cd95e0766
 | 
				
			||||||
 | 
					      - name: Upload Artifacts
 | 
				
			||||||
 | 
					        uses: actions/upload-artifact@v3
 | 
				
			||||||
 | 
					        if: ${{ failure() && steps.cypress.conclusion == 'failure' }}
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          name: error-snapshots
 | 
				
			||||||
 | 
					          path: cypress/snapshots/**/__diff_output__/*
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								.github/workflows/issue-triage.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/workflows/issue-triage.yml
									
									
									
									
										vendored
									
									
								
							@@ -4,17 +4,11 @@ on:
 | 
				
			|||||||
  issues:
 | 
					  issues:
 | 
				
			||||||
    types: [opened]
 | 
					    types: [opened]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
permissions: # added using https://github.com/step-security/secure-repo
 | 
					 | 
				
			||||||
  contents: read
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  triage:
 | 
					  triage:
 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      issues: write # for andymckay/labeler to label issues
 | 
					 | 
				
			||||||
      pull-requests: write # for andymckay/labeler to label PRs
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # 1.0.4
 | 
					      - uses: andymckay/labeler@1.0.4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          repo-token: '${{ secrets.GITHUB_TOKEN }}'
 | 
					          repo-token: '${{ secrets.GITHUB_TOKEN }}'
 | 
				
			||||||
          add-labels: 'Status: Triage'
 | 
					          add-labels: 'Status: Triage'
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/link-checker.yml
									
									
									
									
										vendored
									
									
								
							@@ -19,30 +19,30 @@ on:
 | 
				
			|||||||
    # * is a special character in YAML so you have to quote this string
 | 
					    # * is a special character in YAML so you have to quote this string
 | 
				
			||||||
    - cron: '30 8 * * *'
 | 
					    - cron: '30 8 * * *'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
permissions: # added using https://github.com/step-security/secure-repo
 | 
					 | 
				
			||||||
  contents: read
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  link-checker:
 | 
					  linkChecker:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    permissions:
 | 
					    permissions:
 | 
				
			||||||
      # lychee only uses the GITHUB_TOKEN to avoid rate-limiting
 | 
					      # lychee only uses the GITHUB_TOKEN to avoid rate-limiting
 | 
				
			||||||
      contents: read
 | 
					      contents: read
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Restore lychee cache
 | 
					      - name: Restore lychee cache
 | 
				
			||||||
        uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
 | 
					        uses: actions/cache@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          path: .lycheecache
 | 
					          path: .lycheecache
 | 
				
			||||||
          key: cache-lychee-${{ github.sha }}
 | 
					          key: cache-lychee-${{ github.sha }}
 | 
				
			||||||
          restore-keys: cache-lychee-
 | 
					          restore-keys: cache-lychee-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Link Checker
 | 
					      - name: Link Checker
 | 
				
			||||||
        uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0
 | 
					        uses: lycheeverse/lychee-action@v1.8.0
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          args: >-
 | 
					          args: >-
 | 
				
			||||||
            --config .github/lychee.toml
 | 
					            --verbose
 | 
				
			||||||
 | 
					            --no-progress
 | 
				
			||||||
 | 
					            --cache
 | 
				
			||||||
 | 
					            --max-cache-age 1d
 | 
				
			||||||
            packages/mermaid/src/docs/**/*.md
 | 
					            packages/mermaid/src/docs/**/*.md
 | 
				
			||||||
            README.md
 | 
					            README.md
 | 
				
			||||||
            README.zh-CN.md
 | 
					            README.zh-CN.md
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										60
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							@@ -4,35 +4,32 @@ on:
 | 
				
			|||||||
  push:
 | 
					  push:
 | 
				
			||||||
  merge_group:
 | 
					  merge_group:
 | 
				
			||||||
  pull_request:
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    types:
 | 
				
			||||||
 | 
					      - opened
 | 
				
			||||||
 | 
					      - synchronize
 | 
				
			||||||
 | 
					      - ready_for_review
 | 
				
			||||||
  workflow_dispatch:
 | 
					  workflow_dispatch:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions:
 | 
					permissions:
 | 
				
			||||||
  contents: write
 | 
					  contents: write
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  docker-lint:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf # v3.1.0
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          verbose: true
 | 
					 | 
				
			||||||
  lint:
 | 
					  lint:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        node-version: [18.x]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js ${{ matrix.node-version }}
 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          cache: pnpm
 | 
					          cache: pnpm
 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					          node-version: ${{ matrix.node-version }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Install Packages
 | 
					      - name: Install Packages
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
@@ -65,22 +62,8 @@ jobs:
 | 
				
			|||||||
            ERROR_MESSAGE+=' `pnpm run --filter mermaid types:build-config`'
 | 
					            ERROR_MESSAGE+=' `pnpm run --filter mermaid types:build-config`'
 | 
				
			||||||
            ERROR_MESSAGE+=' on your local machine.'
 | 
					            ERROR_MESSAGE+=' on your local machine.'
 | 
				
			||||||
            echo "::error title=Lint failure::${ERROR_MESSAGE}"
 | 
					            echo "::error title=Lint failure::${ERROR_MESSAGE}"
 | 
				
			||||||
            # make sure to return an error exitcode so that GitHub actions shows a red-cross
 | 
					              # make sure to return an error exitcode so that GitHub actions shows a red-cross
 | 
				
			||||||
            exit 1
 | 
					              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
 | 
					          fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Verify Docs
 | 
					      - name: Verify Docs
 | 
				
			||||||
@@ -89,9 +72,14 @@ jobs:
 | 
				
			|||||||
        continue-on-error: ${{ github.event_name == 'push' }}
 | 
					        continue-on-error: ${{ github.event_name == 'push' }}
 | 
				
			||||||
        run: pnpm run docs:verify
 | 
					        run: pnpm run docs:verify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: testomatio/check-tests@0ea638fcec1820cf2e7b9854fdbdd04128a55bd4 # stable
 | 
					      - name: Rebuild Docs
 | 
				
			||||||
 | 
					        if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
 | 
				
			||||||
 | 
					        working-directory: ./packages/mermaid
 | 
				
			||||||
 | 
					        run: pnpm run docs:build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Commit changes
 | 
				
			||||||
 | 
					        uses: EndBug/add-and-commit@v9
 | 
				
			||||||
 | 
					        if: ${{ steps.verifyDocs.outcome == 'failure' && github.event_name == 'push' }}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          framework: cypress
 | 
					          message: 'Update docs'
 | 
				
			||||||
          tests: './cypress/e2e/**/**.spec.js'
 | 
					          add: 'docs/*'
 | 
				
			||||||
          token: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
          has-tests-label: true
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								.github/workflows/pr-labeler-config-validator.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.github/workflows/pr-labeler-config-validator.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					name: Validate PR Labeler Configuration
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    paths:
 | 
				
			||||||
 | 
					      - .github/workflows/pr-labeler-config-validator.yml
 | 
				
			||||||
 | 
					      - .github/workflows/pr-labeler.yml
 | 
				
			||||||
 | 
					      - .github/pr-labeler.yml
 | 
				
			||||||
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    paths:
 | 
				
			||||||
 | 
					      - .github/workflows/pr-labeler-config-validator.yml
 | 
				
			||||||
 | 
					      - .github/workflows/pr-labeler.yml
 | 
				
			||||||
 | 
					      - .github/pr-labeler.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
					name: Apply labels to PR
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
  pull_request_target:
 | 
					  pull_request_target:
 | 
				
			||||||
    # required for pr-labeler to support PRs from forks
 | 
					    types: [opened]
 | 
				
			||||||
    # ===================== ⛔ ☢️ 🚫 ⚠️ Warning ⚠️ 🚫 ☢️ ⛔ =======================
 | 
					 | 
				
			||||||
    # Be very careful what you put in this GitHub Action workflow file to avoid
 | 
					 | 
				
			||||||
    # malicious PRs from getting access to the Mermaid-js repo.
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # Please read the following first before reviewing/merging:
 | 
					 | 
				
			||||||
    # - https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
 | 
					 | 
				
			||||||
    # - https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
 | 
					 | 
				
			||||||
    types: [opened, reopened, synchronize]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions:
 | 
					 | 
				
			||||||
  contents: read
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  pr-labeler:
 | 
					  pr-labeler:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      contents: read # read permission is required to read config file
 | 
					 | 
				
			||||||
      pull-requests: write # write permission is required to label PRs
 | 
					 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Label PR
 | 
					      - name: Label PR
 | 
				
			||||||
        uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
 | 
					        uses: TimonVS/pr-labeler-action@v4
 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          config-name: pr-labeler.yml
 | 
					 | 
				
			||||||
          disable-autolabeler: false
 | 
					 | 
				
			||||||
          disable-releaser: true
 | 
					 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
 | 
					 | 
				
			||||||
      - 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'],
 | 
					 | 
				
			||||||
              });
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/publish-docs.yml
									
									
									
									
										vendored
									
									
								
							@@ -23,27 +23,27 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout
 | 
					      - name: Checkout
 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					        uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          cache: pnpm
 | 
					          cache: pnpm
 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					          node-version: 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Install Packages
 | 
					      - name: Install Packages
 | 
				
			||||||
        run: pnpm install --frozen-lockfile
 | 
					        run: pnpm install --frozen-lockfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Pages
 | 
					      - name: Setup Pages
 | 
				
			||||||
        uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
 | 
					        uses: actions/configure-pages@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Run Build
 | 
					      - name: Run Build
 | 
				
			||||||
        run: pnpm --filter mermaid run docs:build:vitepress
 | 
					        run: pnpm --filter mermaid run docs:build:vitepress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Upload artifact
 | 
					      - name: Upload artifact
 | 
				
			||||||
        uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1
 | 
					        uses: actions/upload-pages-artifact@v1
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          path: packages/mermaid/src/vitepress/.vitepress/dist
 | 
					          path: packages/mermaid/src/vitepress/.vitepress/dist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,4 +56,4 @@ jobs:
 | 
				
			|||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: Deploy to GitHub Pages
 | 
					      - name: Deploy to GitHub Pages
 | 
				
			||||||
        id: deployment
 | 
					        id: deployment
 | 
				
			||||||
        uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
 | 
					        uses: actions/deploy-pages@v2
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.github/workflows/release-draft.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					name: Draft Release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    branches:
 | 
				
			||||||
 | 
					      - develop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  draft-release:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Draft Release
 | 
				
			||||||
 | 
					        uses: toolmantim/release-drafter@v5
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
							
								
								
									
										10
									
								
								.github/workflows/release-preview-publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/release-preview-publish.yml
									
									
									
									
										vendored
									
									
								
							@@ -9,17 +9,17 @@ jobs:
 | 
				
			|||||||
  publish-preview:
 | 
					  publish-preview:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          fetch-depth: 0
 | 
					          fetch-depth: 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js
 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          cache: pnpm
 | 
					          cache: pnpm
 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					          node-version: 18.x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Install Packages
 | 
					      - name: Install Packages
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
@@ -28,7 +28,7 @@ jobs:
 | 
				
			|||||||
          CYPRESS_CACHE_FOLDER: .cache/Cypress
 | 
					          CYPRESS_CACHE_FOLDER: .cache/Cypress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Install Json
 | 
					      - name: Install Json
 | 
				
			||||||
        run: npm i json@11.0.0 --global
 | 
					        run: npm i json --global
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Publish
 | 
					      - name: Publish
 | 
				
			||||||
        working-directory: ./packages/mermaid
 | 
					        working-directory: ./packages/mermaid
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										43
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								.github/workflows/release-preview.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,43 +0,0 @@
 | 
				
			|||||||
name: Preview release
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  pull_request:
 | 
					 | 
				
			||||||
    branches: [develop]
 | 
					 | 
				
			||||||
    types: [opened, synchronize, labeled, ready_for_review]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency:
 | 
					 | 
				
			||||||
  group: ${{ github.workflow }}-${{ github.event.number }}
 | 
					 | 
				
			||||||
  cancel-in-progress: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions:
 | 
					 | 
				
			||||||
  contents: read
 | 
					 | 
				
			||||||
  actions: write
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  preview:
 | 
					 | 
				
			||||||
    if: ${{ github.repository_owner == 'mermaid-js' }}
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      contents: read
 | 
					 | 
				
			||||||
      id-token: write
 | 
					 | 
				
			||||||
      issues: write
 | 
					 | 
				
			||||||
      pull-requests: write
 | 
					 | 
				
			||||||
    name: Publish preview release
 | 
					 | 
				
			||||||
    timeout-minutes: 5
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout Repo
 | 
					 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup Node.js
 | 
					 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          cache: pnpm
 | 
					 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install Packages
 | 
					 | 
				
			||||||
        run: pnpm install --frozen-lockfile
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Publish packages
 | 
					 | 
				
			||||||
        run: pnpx pkg-pr-new publish --pnpm './packages/*'
 | 
					 | 
				
			||||||
							
								
								
									
										47
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								.github/workflows/release-publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					name: Publish release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  release:
 | 
				
			||||||
 | 
					    types: [published]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  publish:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					      - uses: fregante/setup-git-user@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Setup Node.js v18
 | 
				
			||||||
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          cache: pnpm
 | 
				
			||||||
 | 
					          node-version: 18.x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Install Packages
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          pnpm install --frozen-lockfile
 | 
				
			||||||
 | 
					          npm i json --global
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          CYPRESS_CACHE_FOLDER: .cache/Cypress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Prepare release
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          VERSION=${GITHUB_REF:10}
 | 
				
			||||||
 | 
					          echo "Preparing release $VERSION"
 | 
				
			||||||
 | 
					          git checkout -t origin/release/$VERSION
 | 
				
			||||||
 | 
					          npm version --no-git-tag-version --allow-same-version $VERSION
 | 
				
			||||||
 | 
					          git add package.json
 | 
				
			||||||
 | 
					          git commit -nm "Bump version $VERSION"
 | 
				
			||||||
 | 
					          git checkout -t origin/master
 | 
				
			||||||
 | 
					          git merge -m "Release $VERSION" --no-ff release/$VERSION
 | 
				
			||||||
 | 
					          git push --no-verify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Publish
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          npm set //registry.npmjs.org/:_authToken $NPM_TOKEN
 | 
				
			||||||
 | 
					          npm publish
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
 | 
				
			||||||
							
								
								
									
										46
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,46 +0,0 @@
 | 
				
			|||||||
name: Release
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - master
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
permissions: # added using https://github.com/step-security/secure-repo
 | 
					 | 
				
			||||||
  contents: read
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  release:
 | 
					 | 
				
			||||||
    if: github.repository == 'mermaid-js/mermaid'
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      contents: write # to create release (changesets/action)
 | 
					 | 
				
			||||||
      id-token: write # OpenID Connect token needed for provenance
 | 
					 | 
				
			||||||
      pull-requests: write # to create pull request (changesets/action)
 | 
					 | 
				
			||||||
    name: Release
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout Repo
 | 
					 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Setup Node.js
 | 
					 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          cache: pnpm
 | 
					 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Install Packages
 | 
					 | 
				
			||||||
        run: pnpm install --frozen-lockfile
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Create Release Pull Request or Publish to npm
 | 
					 | 
				
			||||||
        id: changesets
 | 
					 | 
				
			||||||
        uses: changesets/action@c8bada60c408975afd1a20b3db81d6eee6789308 # v1.4.9
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          version: pnpm changeset:version
 | 
					 | 
				
			||||||
          publish: pnpm changeset:publish
 | 
					 | 
				
			||||||
        env:
 | 
					 | 
				
			||||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
 | 
					 | 
				
			||||||
          NPM_CONFIG_PROVENANCE: true
 | 
					 | 
				
			||||||
							
								
								
									
										37
									
								
								.github/workflows/scorecard.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								.github/workflows/scorecard.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,37 +0,0 @@
 | 
				
			|||||||
name: Scorecard supply-chain security
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  branch_protection_rule:
 | 
					 | 
				
			||||||
  push:
 | 
					 | 
				
			||||||
    branches:
 | 
					 | 
				
			||||||
      - develop
 | 
					 | 
				
			||||||
  schedule:
 | 
					 | 
				
			||||||
    - cron: 29 15 * * 0
 | 
					 | 
				
			||||||
permissions: read-all
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  analysis:
 | 
					 | 
				
			||||||
    name: Scorecard analysis
 | 
					 | 
				
			||||||
    permissions:
 | 
					 | 
				
			||||||
      id-token: write
 | 
					 | 
				
			||||||
      security-events: write
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout code
 | 
					 | 
				
			||||||
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          persist-credentials: false
 | 
					 | 
				
			||||||
      - name: Run analysis
 | 
					 | 
				
			||||||
        uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          results_file: results.sarif
 | 
					 | 
				
			||||||
          results_format: sarif
 | 
					 | 
				
			||||||
          publish_results: true
 | 
					 | 
				
			||||||
      - name: Upload artifact
 | 
					 | 
				
			||||||
        uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          name: SARIF file
 | 
					 | 
				
			||||||
          path: results.sarif
 | 
					 | 
				
			||||||
          retention-days: 5
 | 
					 | 
				
			||||||
      - name: Upload to code-scanning
 | 
					 | 
				
			||||||
        uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          sarif_file: results.sarif
 | 
					 | 
				
			||||||
							
								
								
									
										19
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							@@ -8,17 +8,20 @@ permissions:
 | 
				
			|||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  unit-test:
 | 
					  unit-test:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        node-version: [18.x]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - uses: pnpm/action-setup@v2
 | 
				
			||||||
        # uses version from "packageManager" field in package.json
 | 
					        # uses version from "packageManager" field in package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Setup Node.js
 | 
					      - name: Setup Node.js ${{ matrix.node-version }}
 | 
				
			||||||
        uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          cache: pnpm
 | 
					          cache: pnpm
 | 
				
			||||||
          node-version-file: '.node-version'
 | 
					          node-version: ${{ matrix.node-version }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Install Packages
 | 
					      - name: Install Packages
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
@@ -38,12 +41,8 @@ jobs:
 | 
				
			|||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage
 | 
					          pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Verify out-of-tree build with TypeScript
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          pnpm test:check:tsc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Upload Coverage to Codecov
 | 
					      - name: Upload Coverage to Codecov
 | 
				
			||||||
        uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
 | 
					        uses: codecov/codecov-action@v3
 | 
				
			||||||
        # Run step only pushes to develop and pull_requests
 | 
					        # Run step only pushes to develop and pull_requests
 | 
				
			||||||
        if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
 | 
					        if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/unlock-reopened-issues.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/unlock-reopened-issues.yml
									
									
									
									
										vendored
									
									
								
							@@ -8,6 +8,6 @@ jobs:
 | 
				
			|||||||
  triage:
 | 
					  triage:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: Dunning-Kruger/unlock-issues@b06b7f7e5c3f2eaa1c6d5d89f40930e4d6d9699e # v1
 | 
					      - uses: Dunning-Kruger/unlock-issues@v1
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          repo-token: '${{ secrets.GITHUB_TOKEN }}'
 | 
					          repo-token: '${{ secrets.GITHUB_TOKEN }}'
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/update-browserlist.yml
									
									
									
									
										vendored
									
									
								
							@@ -8,18 +8,11 @@ jobs:
 | 
				
			|||||||
  update-browser-list:
 | 
					  update-browser-list:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@v3
 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					      - run: npx browserslist@latest --update-db
 | 
				
			||||||
      - run: npx update-browserslist-db@latest
 | 
					 | 
				
			||||||
      - name: Commit changes
 | 
					      - name: Commit changes
 | 
				
			||||||
        uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
 | 
					        uses: EndBug/add-and-commit@v9
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          author_name: ${{ github.actor }}
 | 
					          author_name: ${{ github.actor }}
 | 
				
			||||||
          author_email: ${{ github.actor }}@users.noreply.github.com
 | 
					          author_email: ${{ github.actor }}@users.noreply.github.com
 | 
				
			||||||
          message: 'chore: update browsers list'
 | 
					          message: 'chore: update browsers list'
 | 
				
			||||||
          push: false
 | 
					 | 
				
			||||||
      - name: Create Pull Request
 | 
					 | 
				
			||||||
        uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          branch: update-browserslist
 | 
					 | 
				
			||||||
          title: Update Browserslist
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										70
									
								
								.github/workflows/validate-lockfile.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										70
									
								
								.github/workflows/validate-lockfile.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,70 +0,0 @@
 | 
				
			|||||||
name: Validate pnpm-lock.yaml
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
on:
 | 
					 | 
				
			||||||
  pull_request:
 | 
					 | 
				
			||||||
    paths:
 | 
					 | 
				
			||||||
      - 'pnpm-lock.yaml'
 | 
					 | 
				
			||||||
      - '**/package.json'
 | 
					 | 
				
			||||||
      - '.github/workflows/validate-lockfile.yml'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
jobs:
 | 
					 | 
				
			||||||
  validate-lockfile:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
      - name: Checkout code
 | 
					 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          fetch-depth: 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Set up Node.js
 | 
					 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          node-version: 20
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Validate pnpm-lock.yaml entries
 | 
					 | 
				
			||||||
        id: validate # give this step an ID so we can reference its outputs
 | 
					 | 
				
			||||||
        run: |
 | 
					 | 
				
			||||||
          issues=()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          # 1) No tarball references
 | 
					 | 
				
			||||||
          if grep -qF 'tarball:' pnpm-lock.yaml; then
 | 
					 | 
				
			||||||
            issues+=("• Tarball references found (forbidden)")
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          # 2) No unwanted vitepress paths
 | 
					 | 
				
			||||||
          if grep -qF 'packages/mermaid/src/vitepress' pnpm-lock.yaml; then
 | 
					 | 
				
			||||||
            issues+=("• Disallowed path 'packages/mermaid/src/vitepress' present. Run \`rm -rf packages/mermaid/src/vitepress && pnpm install\` to regenerate.")
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          # 3) Lockfile only changes when package.json changes
 | 
					 | 
				
			||||||
          git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} > changed.txt
 | 
					 | 
				
			||||||
          if grep -q '^pnpm-lock.yaml$' changed.txt && ! grep -q 'package.json' changed.txt; then
 | 
					 | 
				
			||||||
            issues+=("• pnpm-lock.yaml changed without any package.json modification")
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          # If any issues, output them and fail
 | 
					 | 
				
			||||||
          if [ ${#issues[@]} -gt 0 ]; then
 | 
					 | 
				
			||||||
            # Use the new GITHUB_OUTPUT approach to set a multiline output
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
              echo "errors<<EOF"
 | 
					 | 
				
			||||||
              printf '%s\n' "${issues[@]}"
 | 
					 | 
				
			||||||
              echo "EOF"
 | 
					 | 
				
			||||||
            } >> $GITHUB_OUTPUT
 | 
					 | 
				
			||||||
            exit 1
 | 
					 | 
				
			||||||
          fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      - name: Comment on PR if validation failed
 | 
					 | 
				
			||||||
        if: failure()
 | 
					 | 
				
			||||||
        uses: peter-evans/create-or-update-comment@v4
 | 
					 | 
				
			||||||
        with:
 | 
					 | 
				
			||||||
          token: ${{ secrets.GITHUB_TOKEN }}
 | 
					 | 
				
			||||||
          issue-number: ${{ github.event.pull_request.number }}
 | 
					 | 
				
			||||||
          body: |
 | 
					 | 
				
			||||||
            The following issue(s) were detected:
 | 
					 | 
				
			||||||
            ${{ steps.validate.outputs.errors }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Please address these and push an update.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            _Posted automatically by GitHub Actions_
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -4,7 +4,6 @@ node_modules/
 | 
				
			|||||||
coverage/
 | 
					coverage/
 | 
				
			||||||
.idea/
 | 
					.idea/
 | 
				
			||||||
.pnpm-store/
 | 
					.pnpm-store/
 | 
				
			||||||
.instructions/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
dist
 | 
					dist
 | 
				
			||||||
v8-compile-cache-0
 | 
					v8-compile-cache-0
 | 
				
			||||||
@@ -36,7 +35,7 @@ cypress/snapshots/
 | 
				
			|||||||
.tsbuildinfo
 | 
					.tsbuildinfo
 | 
				
			||||||
tsconfig.tsbuildinfo
 | 
					tsconfig.tsbuildinfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#knsv*.html
 | 
					knsv*.html
 | 
				
			||||||
local*.html
 | 
					local*.html
 | 
				
			||||||
stats/
 | 
					stats/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,12 +43,3 @@ stats/
 | 
				
			|||||||
**/contributor-names.json
 | 
					**/contributor-names.json
 | 
				
			||||||
.pnpm-store
 | 
					.pnpm-store
 | 
				
			||||||
.nyc_output
 | 
					.nyc_output
 | 
				
			||||||
 | 
					 | 
				
			||||||
demos/dev/**
 | 
					 | 
				
			||||||
!/demos/dev/example.html
 | 
					 | 
				
			||||||
!/demos/dev/reload.js
 | 
					 | 
				
			||||||
tsx-0/**
 | 
					 | 
				
			||||||
vite.config.ts.timestamp-*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# autogenereated by langium-cli
 | 
					 | 
				
			||||||
generated/
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +0,0 @@
 | 
				
			|||||||
ignored:
 | 
					 | 
				
			||||||
  - DL3002 # TODO: Last USER should not be root
 | 
					 | 
				
			||||||
							
								
								
									
										4
									
								
								.husky/commit-msg
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.husky/commit-msg
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					# . "$(dirname "$0")/_/husky.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# npx --no-install commitlint --edit $1
 | 
				
			||||||
@@ -1,2 +1,4 @@
 | 
				
			|||||||
#!/usr/bin/env sh
 | 
					#!/bin/sh
 | 
				
			||||||
NODE_OPTIONS="--max_old_space_size=8192" pnpm run pre-commit
 | 
					. "$(dirname "$0")/_/husky.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pnpm run pre-commit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,6 @@ export default {
 | 
				
			|||||||
    // https://prettier.io/docs/en/cli.html#--cache
 | 
					    // https://prettier.io/docs/en/cli.html#--cache
 | 
				
			||||||
    'prettier --write',
 | 
					    'prettier --write',
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  '.cspell/*.txt': ['tsx scripts/fixCSpell.ts'],
 | 
					  'cSpell.json': ['ts-node-esm scripts/fixCSpell.ts'],
 | 
				
			||||||
  '**/*.md': ['pnpm cspell'],
 | 
					 | 
				
			||||||
  '**/*.jison': ['pnpm -w run lint:jison'],
 | 
					  '**/*.jison': ['pnpm -w run lint:jison'],
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										17
									
								
								.lycheeignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.lycheeignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					# These links are ignored by our link checker https://github.com/lycheeverse/lychee
 | 
				
			||||||
 | 
					# The file allows you to list multiple regular expressions for exclusion (one pattern per line).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Network error: Forbidden
 | 
				
			||||||
 | 
					https://codepen.io
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Timeout error, maybe Twitter has anti-bot defenses against GitHub's CI servers?
 | 
				
			||||||
 | 
					https://twitter.com/mermaidjs_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Don't check files that are generated during the build via `pnpm docs:code`
 | 
				
			||||||
 | 
					packages/mermaid/src/docs/config/setup/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ignore localhost
 | 
				
			||||||
 | 
					http://localhost:3333/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ignore slack invite
 | 
				
			||||||
 | 
					https://join.slack.com/
 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
22.14.0
 | 
					 | 
				
			||||||
							
								
								
									
										2
									
								
								.npmrc
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.npmrc
									
									
									
									
									
								
							@@ -1,4 +1,2 @@
 | 
				
			|||||||
registry=https://registry.npmjs.org
 | 
					 | 
				
			||||||
auto-install-peers=true
 | 
					auto-install-peers=true
 | 
				
			||||||
strict-peer-dependencies=false
 | 
					strict-peer-dependencies=false
 | 
				
			||||||
package-import-method=clone-or-copy
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
dist
 | 
					dist
 | 
				
			||||||
cypress/platform/xss3.html
 | 
					cypress/platform/xss3.html
 | 
				
			||||||
.cache
 | 
					.cache
 | 
				
			||||||
.pnpm-store
 | 
					 | 
				
			||||||
coverage
 | 
					coverage
 | 
				
			||||||
# Autogenerated by PNPM
 | 
					# Autogenerated by PNPM
 | 
				
			||||||
pnpm-lock.yaml
 | 
					pnpm-lock.yaml
 | 
				
			||||||
@@ -11,10 +10,3 @@ stats
 | 
				
			|||||||
.nyc_output
 | 
					.nyc_output
 | 
				
			||||||
# Autogenerated by `pnpm run --filter mermaid types:build-config`
 | 
					# Autogenerated by `pnpm run --filter mermaid types:build-config`
 | 
				
			||||||
packages/mermaid/src/config.type.ts
 | 
					packages/mermaid/src/config.type.ts
 | 
				
			||||||
# autogenereated by langium-cli
 | 
					 | 
				
			||||||
generated/
 | 
					 | 
				
			||||||
# Ignore the files creates in /demos/dev except for example.html
 | 
					 | 
				
			||||||
demos/dev/**
 | 
					 | 
				
			||||||
!/demos/dev/example.html
 | 
					 | 
				
			||||||
# TODO: Lots of errors to fix
 | 
					 | 
				
			||||||
cypress/platform/state-refactor.html
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,5 @@
 | 
				
			|||||||
  "printWidth": 100,
 | 
					  "printWidth": 100,
 | 
				
			||||||
  "singleQuote": true,
 | 
					  "singleQuote": true,
 | 
				
			||||||
  "useTabs": false,
 | 
					  "useTabs": false,
 | 
				
			||||||
  "tabWidth": 2,
 | 
					  "tabWidth": 2
 | 
				
			||||||
  "trailingComma": "es5"
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,15 +1,13 @@
 | 
				
			|||||||
import type { InlineConfig } from 'vite';
 | 
					import { build, InlineConfig, type PluginOption } from 'vite';
 | 
				
			||||||
import { build, type PluginOption } from 'vite';
 | 
					 | 
				
			||||||
import { resolve } from 'path';
 | 
					import { resolve } from 'path';
 | 
				
			||||||
import { fileURLToPath } from 'url';
 | 
					import { fileURLToPath } from 'url';
 | 
				
			||||||
import jisonPlugin from './jisonPlugin.js';
 | 
					import jisonPlugin from './jisonPlugin.js';
 | 
				
			||||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
 | 
					import jsonSchemaPlugin from './jsonSchemaPlugin.js';
 | 
				
			||||||
 | 
					import { readFileSync } from 'fs';
 | 
				
			||||||
import typescript from '@rollup/plugin-typescript';
 | 
					import typescript from '@rollup/plugin-typescript';
 | 
				
			||||||
import { visualizer } from 'rollup-plugin-visualizer';
 | 
					import { visualizer } from 'rollup-plugin-visualizer';
 | 
				
			||||||
import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js';
 | 
					import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js';
 | 
				
			||||||
import istanbul from 'vite-plugin-istanbul';
 | 
					import istanbul from 'vite-plugin-istanbul';
 | 
				
			||||||
import { packageOptions } from '../.build/common.js';
 | 
					 | 
				
			||||||
import { generateLangium } from '../.build/generateLangium.js';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const visualize = process.argv.includes('--visualize');
 | 
					const visualize = process.argv.includes('--visualize');
 | 
				
			||||||
const watch = process.argv.includes('--watch');
 | 
					const watch = process.argv.includes('--watch');
 | 
				
			||||||
@@ -38,6 +36,24 @@ const visualizerOptions = (packageName: string, core = false): PluginOption[] =>
 | 
				
			|||||||
  );
 | 
					  );
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const packageOptions = {
 | 
				
			||||||
 | 
					  mermaid: {
 | 
				
			||||||
 | 
					    name: 'mermaid',
 | 
				
			||||||
 | 
					    packageName: 'mermaid',
 | 
				
			||||||
 | 
					    file: 'mermaid.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'mermaid-example-diagram': {
 | 
				
			||||||
 | 
					    name: 'mermaid-example-diagram',
 | 
				
			||||||
 | 
					    packageName: 'mermaid-example-diagram',
 | 
				
			||||||
 | 
					    file: 'detector.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'mermaid-zenuml': {
 | 
				
			||||||
 | 
					    name: 'mermaid-zenuml',
 | 
				
			||||||
 | 
					    packageName: 'mermaid-zenuml',
 | 
				
			||||||
 | 
					    file: 'detector.ts',
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface BuildOptions {
 | 
					interface BuildOptions {
 | 
				
			||||||
  minify: boolean | 'esbuild';
 | 
					  minify: boolean | 'esbuild';
 | 
				
			||||||
  core?: boolean;
 | 
					  core?: boolean;
 | 
				
			||||||
@@ -47,18 +63,43 @@ interface BuildOptions {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => {
 | 
					export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => {
 | 
				
			||||||
  const external: (string | RegExp)[] = ['require', 'fs', 'path'];
 | 
					  const external: (string | RegExp)[] = ['require', 'fs', 'path'];
 | 
				
			||||||
  // eslint-disable-next-line no-console
 | 
					 | 
				
			||||||
  console.log(entryName, packageOptions[entryName]);
 | 
					  console.log(entryName, packageOptions[entryName]);
 | 
				
			||||||
  const { name, file, packageName } = packageOptions[entryName];
 | 
					  const { name, file, packageName } = packageOptions[entryName];
 | 
				
			||||||
  const output: OutputOptions = [
 | 
					  let output: OutputOptions = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      name,
 | 
					      name,
 | 
				
			||||||
      format: 'esm',
 | 
					      format: 'esm',
 | 
				
			||||||
      sourcemap,
 | 
					      sourcemap,
 | 
				
			||||||
      entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`,
 | 
					      entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name,
 | 
				
			||||||
 | 
					      format: 'umd',
 | 
				
			||||||
 | 
					      sourcemap,
 | 
				
			||||||
 | 
					      entryFileNames: `${name}${minify ? '.min' : ''}.js`,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (core) {
 | 
				
			||||||
 | 
					    const { dependencies } = JSON.parse(
 | 
				
			||||||
 | 
					      readFileSync(resolve(__dirname, `../packages/${packageName}/package.json`), 'utf-8')
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    // Core build is used to generate file without bundled dependencies.
 | 
				
			||||||
 | 
					    // This is used by downstream projects to bundle dependencies themselves.
 | 
				
			||||||
 | 
					    // Ignore dependencies and any dependencies of dependencies
 | 
				
			||||||
 | 
					    // Adapted from the RegEx used by `rollup-plugin-node`
 | 
				
			||||||
 | 
					    external.push(new RegExp('^(?:' + Object.keys(dependencies).join('|') + ')(?:/.+)?$'));
 | 
				
			||||||
 | 
					    // This needs to be an array. Otherwise vite will build esm & umd with same name and overwrite esm with umd.
 | 
				
			||||||
 | 
					    output = [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        name,
 | 
				
			||||||
 | 
					        format: 'esm',
 | 
				
			||||||
 | 
					        sourcemap,
 | 
				
			||||||
 | 
					        entryFileNames: `${name}.core.mjs`,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const config: InlineConfig = {
 | 
					  const config: InlineConfig = {
 | 
				
			||||||
    configFile: false,
 | 
					    configFile: false,
 | 
				
			||||||
    build: {
 | 
					    build: {
 | 
				
			||||||
@@ -76,28 +117,22 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
 | 
				
			|||||||
        output,
 | 
					        output,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    define: {
 | 
					 | 
				
			||||||
      'import.meta.vitest': 'undefined',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    resolve: {
 | 
					    resolve: {
 | 
				
			||||||
      extensions: [],
 | 
					      extensions: [],
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    plugins: [
 | 
					    plugins: [
 | 
				
			||||||
      jisonPlugin(),
 | 
					      jisonPlugin(),
 | 
				
			||||||
      jsonSchemaPlugin(), // handles `.schema.yaml` files
 | 
					      jsonSchemaPlugin(), // handles `.schema.yaml` files
 | 
				
			||||||
 | 
					      // @ts-expect-error According to the type definitions, rollup plugins are incompatible with vite
 | 
				
			||||||
      typescript({ compilerOptions: { declaration: false } }),
 | 
					      typescript({ compilerOptions: { declaration: false } }),
 | 
				
			||||||
      istanbul({
 | 
					      istanbul({
 | 
				
			||||||
        exclude: ['node_modules', 'test/', '__mocks__', 'generated'],
 | 
					        exclude: ['node_modules', 'test/', '__mocks__'],
 | 
				
			||||||
        extension: ['.js', '.ts'],
 | 
					        extension: ['.js', '.ts'],
 | 
				
			||||||
        requireEnv: true,
 | 
					        requireEnv: true,
 | 
				
			||||||
        forceBuildInstrument: coverage,
 | 
					        forceBuildInstrument: coverage,
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
      ...visualizerOptions(packageName, core),
 | 
					      ...visualizerOptions(packageName, core),
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    define: {
 | 
					 | 
				
			||||||
      // Needs to be string
 | 
					 | 
				
			||||||
      includeLargeFeatures: 'true',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (watch && config.build) {
 | 
					  if (watch && config.build) {
 | 
				
			||||||
@@ -111,28 +146,24 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
					const buildPackage = async (entryName: keyof typeof packageOptions) => {
 | 
				
			||||||
  await build(getBuildConfig({ minify: false, entryName }));
 | 
					  await build(getBuildConfig({ minify: false, entryName }));
 | 
				
			||||||
 | 
					  await build(getBuildConfig({ minify: 'esbuild', entryName }));
 | 
				
			||||||
 | 
					  await build(getBuildConfig({ minify: false, core: true, entryName }));
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const main = async () => {
 | 
					const main = async () => {
 | 
				
			||||||
  const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
 | 
					  const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
 | 
				
			||||||
  for (const pkg of packageNames.filter(
 | 
					  for (const pkg of packageNames.filter((pkg) => !mermaidOnly || pkg === 'mermaid')) {
 | 
				
			||||||
    (pkg) => !mermaidOnly || pkg === 'mermaid' || pkg === 'parser'
 | 
					 | 
				
			||||||
  )) {
 | 
					 | 
				
			||||||
    await buildPackage(pkg);
 | 
					    await buildPackage(pkg);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
await generateLangium();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (watch) {
 | 
					if (watch) {
 | 
				
			||||||
  await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
 | 
					  build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
 | 
				
			||||||
  void build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
 | 
					 | 
				
			||||||
  if (!mermaidOnly) {
 | 
					  if (!mermaidOnly) {
 | 
				
			||||||
    void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
 | 
					    build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
 | 
				
			||||||
    void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
 | 
					    build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
} else if (visualize) {
 | 
					} else if (visualize) {
 | 
				
			||||||
  await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
 | 
					 | 
				
			||||||
  await build(getBuildConfig({ minify: false, core: true, entryName: 'mermaid' }));
 | 
					  await build(getBuildConfig({ minify: false, core: true, entryName: 'mermaid' }));
 | 
				
			||||||
  await build(getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }));
 | 
					  await build(getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }));
 | 
				
			||||||
} else {
 | 
					} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import { transformJison } from '../.build/jisonTransformer.js';
 | 
					import { transformJison } from './jisonTransformer.js';
 | 
				
			||||||
 | 
					 | 
				
			||||||
const fileRegex = /\.(jison)$/;
 | 
					const fileRegex = /\.(jison)$/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function jison() {
 | 
					export default function jison() {
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    name: 'jison',
 | 
					    name: 'jison',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    transform(src: string, id: string) {
 | 
					    transform(src: string, id: string) {
 | 
				
			||||||
      if (fileRegex.test(id)) {
 | 
					      if (fileRegex.test(id)) {
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
import jison from 'jison';
 | 
					import jison from 'jison';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const transformJison = (src: string): string => {
 | 
					export const transformJison = (src: string): string => {
 | 
				
			||||||
  // @ts-ignore - Jison is not typed properly
 | 
					 | 
				
			||||||
  const parser = new jison.Generator(src, {
 | 
					  const parser = new jison.Generator(src, {
 | 
				
			||||||
    moduleType: 'js',
 | 
					    moduleType: 'js',
 | 
				
			||||||
    'token-stack': true,
 | 
					    'token-stack': true,
 | 
				
			||||||
@@ -1,5 +1,108 @@
 | 
				
			|||||||
import type { PluginOption } from 'vite';
 | 
					import { load, JSON_SCHEMA } from 'js-yaml';
 | 
				
			||||||
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
 | 
					import assert from 'node:assert';
 | 
				
			||||||
 | 
					import Ajv2019, { type JSONSchemaType } from 'ajv/dist/2019.js';
 | 
				
			||||||
 | 
					import { PluginOption } from 'vite';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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',
 | 
				
			||||||
 | 
					  'requirement',
 | 
				
			||||||
 | 
					  'mindmap',
 | 
				
			||||||
 | 
					  'timeline',
 | 
				
			||||||
 | 
					  'gitGraph',
 | 
				
			||||||
 | 
					  'c4',
 | 
				
			||||||
 | 
					  'sankey',
 | 
				
			||||||
 | 
					] as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Generate default values from the JSON Schema.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * AJV does not support nested default values yet (or default values with $ref),
 | 
				
			||||||
 | 
					 * so we need to manually find them (this may be fixed in ajv v9).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param mermaidConfigSchema - The Mermaid JSON Schema to use.
 | 
				
			||||||
 | 
					 * @returns The default mermaid config object.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function generateDefaults(mermaidConfigSchema: JSONSchemaType<MermaidConfig>) {
 | 
				
			||||||
 | 
					  const ajv = new Ajv2019({
 | 
				
			||||||
 | 
					    useDefaults: true,
 | 
				
			||||||
 | 
					    allowUnionTypes: true,
 | 
				
			||||||
 | 
					    strict: true,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ajv.addKeyword({
 | 
				
			||||||
 | 
					    keyword: 'meta:enum', // used by jsonschema2md
 | 
				
			||||||
 | 
					    errors: false,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  ajv.addKeyword({
 | 
				
			||||||
 | 
					    keyword: 'tsType', // used by json-schema-to-typescript
 | 
				
			||||||
 | 
					    errors: false,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ajv currently doesn't support nested default values, see https://github.com/ajv-validator/ajv/issues/1718
 | 
				
			||||||
 | 
					  // (may be fixed in v9) so we need to manually use sub-schemas
 | 
				
			||||||
 | 
					  const mermaidDefaultConfig = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  assert.ok(mermaidConfigSchema.$defs);
 | 
				
			||||||
 | 
					  const baseDiagramConfig = mermaidConfigSchema.$defs.BaseDiagramConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (const key of MERMAID_CONFIG_DIAGRAM_KEYS) {
 | 
				
			||||||
 | 
					    const subSchemaRef = mermaidConfigSchema.properties[key].$ref;
 | 
				
			||||||
 | 
					    const [root, defs, defName] = subSchemaRef.split('/');
 | 
				
			||||||
 | 
					    assert.strictEqual(root, '#');
 | 
				
			||||||
 | 
					    assert.strictEqual(defs, '$defs');
 | 
				
			||||||
 | 
					    const subSchema = {
 | 
				
			||||||
 | 
					      $schema: mermaidConfigSchema.$schema,
 | 
				
			||||||
 | 
					      $defs: mermaidConfigSchema.$defs,
 | 
				
			||||||
 | 
					      ...mermaidConfigSchema.$defs[defName],
 | 
				
			||||||
 | 
					    } as JSONSchemaType<BaseDiagramConfig>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const validate = ajv.compile(subSchema);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mermaidDefaultConfig[key] = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const required of subSchema.required ?? []) {
 | 
				
			||||||
 | 
					      if (subSchema.properties[required] === undefined && baseDiagramConfig.properties[required]) {
 | 
				
			||||||
 | 
					        mermaidDefaultConfig[key][required] = baseDiagramConfig.properties[required].default;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!validate(mermaidDefaultConfig[key])) {
 | 
				
			||||||
 | 
					      throw new Error(
 | 
				
			||||||
 | 
					        `schema for subconfig ${key} does not have valid defaults! Errors were ${JSON.stringify(
 | 
				
			||||||
 | 
					          validate.errors,
 | 
				
			||||||
 | 
					          undefined,
 | 
				
			||||||
 | 
					          2
 | 
				
			||||||
 | 
					        )}`
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const validate = ajv.compile(mermaidConfigSchema);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!validate(mermaidDefaultConfig)) {
 | 
				
			||||||
 | 
					    throw new Error(
 | 
				
			||||||
 | 
					      `Mermaid config JSON Schema does not have valid defaults! Errors were ${JSON.stringify(
 | 
				
			||||||
 | 
					        validate.errors,
 | 
				
			||||||
 | 
					        undefined,
 | 
				
			||||||
 | 
					        2
 | 
				
			||||||
 | 
					      )}`
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return mermaidDefaultConfig;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Vite plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | 
					 * Vite plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | 
				
			||||||
@@ -16,13 +119,32 @@ export default function jsonSchemaPlugin(): PluginOption {
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const jsonSchema = loadSchema(src, idAsUrl.pathname);
 | 
					      if (idAsUrl.searchParams.get('only-defaults')) {
 | 
				
			||||||
      return {
 | 
					        const jsonSchema = load(src, {
 | 
				
			||||||
        code: idAsUrl.searchParams.get('only-defaults')
 | 
					          filename: idAsUrl.pathname,
 | 
				
			||||||
          ? getDefaults(jsonSchema)
 | 
					          // only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
 | 
				
			||||||
          : getSchema(jsonSchema),
 | 
					          // e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
 | 
				
			||||||
        map: null, // no source map
 | 
					          schema: JSON_SCHEMA,
 | 
				
			||||||
      };
 | 
					        }) as JSONSchemaType<MermaidConfig>;
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          code: `export default ${JSON.stringify(generateDefaults(jsonSchema), undefined, 2)};`,
 | 
				
			||||||
 | 
					          map: null, // no source map
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          code: `export default ${JSON.stringify(
 | 
				
			||||||
 | 
					            load(src, {
 | 
				
			||||||
 | 
					              filename: idAsUrl.pathname,
 | 
				
			||||||
 | 
					              // only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
 | 
				
			||||||
 | 
					              // e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
 | 
				
			||||||
 | 
					              schema: JSON_SCHEMA,
 | 
				
			||||||
 | 
					            }),
 | 
				
			||||||
 | 
					            undefined,
 | 
				
			||||||
 | 
					            2
 | 
				
			||||||
 | 
					          )};`,
 | 
				
			||||||
 | 
					          map: null, // provide source map if available
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
import express from 'express';
 | 
					import express from 'express';
 | 
				
			||||||
import cors from 'cors';
 | 
					import cors from 'cors';
 | 
				
			||||||
import { createServer as createViteServer } from 'vite';
 | 
					import { createServer as createViteServer } from 'vite';
 | 
				
			||||||
import { packageOptions } from '../.build/common.js';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function createServer() {
 | 
					async function createServer() {
 | 
				
			||||||
  const app = express();
 | 
					  const app = express();
 | 
				
			||||||
@@ -15,17 +14,16 @@ async function createServer() {
 | 
				
			|||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  app.use(cors());
 | 
					  app.use(cors());
 | 
				
			||||||
  for (const { packageName } of Object.values(packageOptions)) {
 | 
					  app.use(express.static('./packages/mermaid/dist'));
 | 
				
			||||||
    app.use(express.static(`./packages/${packageName}/dist`));
 | 
					  app.use(express.static('./packages/mermaid-zenuml/dist'));
 | 
				
			||||||
  }
 | 
					  app.use(express.static('./packages/mermaid-example-diagram/dist'));
 | 
				
			||||||
  app.use(vite.middlewares);
 | 
					  app.use(vite.middlewares);
 | 
				
			||||||
  app.use(express.static('demos'));
 | 
					  app.use(express.static('demos'));
 | 
				
			||||||
  app.use(express.static('cypress/platform'));
 | 
					  app.use(express.static('cypress/platform'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  app.listen(9000, () => {
 | 
					  app.listen(9000, () => {
 | 
				
			||||||
    // eslint-disable-next-line no-console
 | 
					 | 
				
			||||||
    console.log(`Listening on http://localhost:9000`);
 | 
					    console.log(`Listening on http://localhost:9000`);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void createServer();
 | 
					createServer();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
  "recommendations": [
 | 
					  "recommendations": [
 | 
				
			||||||
    "dbaeumer.vscode-eslint",
 | 
					    "dbaeumer.vscode-eslint",
 | 
				
			||||||
    "esbenp.prettier-vscode",
 | 
					    "esbenp.prettier-vscode",
 | 
				
			||||||
    "vitest.explorer",
 | 
					    "zixuanchen.vitest-explorer",
 | 
				
			||||||
    "luniclynx.bison"
 | 
					    "luniclynx.bison"
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							@@ -18,8 +18,7 @@
 | 
				
			|||||||
      "type": "node",
 | 
					      "type": "node",
 | 
				
			||||||
      "request": "launch",
 | 
					      "request": "launch",
 | 
				
			||||||
      "args": ["scripts/docs.cli.mts"],
 | 
					      "args": ["scripts/docs.cli.mts"],
 | 
				
			||||||
      // we'll need to change this to --import in Node.JS v20.6.0 and up
 | 
					      "runtimeArgs": ["--loader", "ts-node/esm"],
 | 
				
			||||||
      "runtimeArgs": ["--loader", "tsx/esm"],
 | 
					 | 
				
			||||||
      "cwd": "${workspaceRoot}/packages/mermaid",
 | 
					      "cwd": "${workspaceRoot}/packages/mermaid",
 | 
				
			||||||
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"],
 | 
					      "skipFiles": ["<node_internals>/**", "**/node_modules/**"],
 | 
				
			||||||
      "smartStep": true,
 | 
					      "smartStep": true,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
./packages/mermaid/CHANGELOG.md
 | 
					 | 
				
			||||||
							
								
								
									
										1005
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1005
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -59,8 +59,8 @@ representative at an online or offline event.
 | 
				
			|||||||
## Enforcement
 | 
					## Enforcement
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
 | 
					Instances of abusive, harassing, or otherwise unacceptable behavior may be
 | 
				
			||||||
reported to the community leaders responsible for enforcement at <security@mermaid.live>.
 | 
					reported to the community leaders responsible for enforcement at security@mermaid.live
 | 
				
			||||||
 | 
					.
 | 
				
			||||||
All complaints will be reviewed and investigated promptly and fairly.
 | 
					All complaints will be reviewed and investigated promptly and fairly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
All community leaders are obligated to respect the privacy and security of the
 | 
					All community leaders are obligated to respect the privacy and security of the
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
./packages/mermaid/src/docs/community/contributing.md
 | 
					 | 
				
			||||||
							
								
								
									
										71
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					# Contributing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please read in detail about how to contribute documentation and code on the [Mermaid documentation site.](https://mermaid-js.github.io/mermaid/#/development)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Mermaid contribution cheat-sheet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Requirements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [volta](https://volta.sh/) to manage node versions.
 | 
				
			||||||
 | 
					- [Node.js](https://nodejs.org/en/). `volta install node`
 | 
				
			||||||
 | 
					- [pnpm](https://pnpm.io/) package manager. `volta install pnpm`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Development Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you don't have direct access to push to mermaid repositories, make a fork first. Then clone. Or clone directly from mermaid-js:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					git clone git@github.com:mermaid-js/mermaid.git
 | 
				
			||||||
 | 
					cd mermaid
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Install required packages:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# npx is required for first install as volta support for pnpm is not added yet.
 | 
				
			||||||
 | 
					npx pnpm install
 | 
				
			||||||
 | 
					pnpm test
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Docker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					./run install # npx pnpm install
 | 
				
			||||||
 | 
					./run test # pnpm test
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Testing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# Run unit test
 | 
				
			||||||
 | 
					pnpm test
 | 
				
			||||||
 | 
					# Run unit test in watch mode
 | 
				
			||||||
 | 
					pnpm test:watch
 | 
				
			||||||
 | 
					# Run E2E test
 | 
				
			||||||
 | 
					pnpm e2e
 | 
				
			||||||
 | 
					# Debug E2E tests
 | 
				
			||||||
 | 
					pnpm dev
 | 
				
			||||||
 | 
					pnpm cypress:open # in another terminal
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Branch name format:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```text
 | 
				
			||||||
 | 
					   [feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					eg: `feature/2945_state-diagram-new-arrow-florbs`, `bug/1123_fix_random_ugly_red_text`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Documentation is necessary for all non bugfix/refactoring changes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Only make changes to files are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**_DO NOT CHANGE FILES IN `/docs`_**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Join our slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user