mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-09 18:39:41 +02:00
Compare commits
3 Commits
flowchart-
...
layout-v3
Author | SHA1 | Date | |
---|---|---|---|
![]() |
25c9e499b3 | ||
![]() |
be5d9bd623 | ||
![]() |
d851cc63bf |
@@ -1,36 +0,0 @@
|
|||||||
export interface PackageOptions {
|
|
||||||
name: string;
|
|
||||||
packageName: string;
|
|
||||||
file: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Shared common options for both ESBuild and Vite
|
|
||||||
*/
|
|
||||||
export const packageOptions = {
|
|
||||||
parser: {
|
|
||||||
name: 'mermaid-parser',
|
|
||||||
packageName: 'parser',
|
|
||||||
file: 'index.ts',
|
|
||||||
},
|
|
||||||
mermaid: {
|
|
||||||
name: 'mermaid',
|
|
||||||
packageName: 'mermaid',
|
|
||||||
file: 'mermaid.ts',
|
|
||||||
},
|
|
||||||
'mermaid-example-diagram': {
|
|
||||||
name: 'mermaid-example-diagram',
|
|
||||||
packageName: 'mermaid-example-diagram',
|
|
||||||
file: 'detector.ts',
|
|
||||||
},
|
|
||||||
'mermaid-zenuml': {
|
|
||||||
name: 'mermaid-zenuml',
|
|
||||||
packageName: 'mermaid-zenuml',
|
|
||||||
file: 'detector.ts',
|
|
||||||
},
|
|
||||||
'mermaid-layout-elk': {
|
|
||||||
name: 'mermaid-layout-elk',
|
|
||||||
packageName: 'mermaid-layout-elk',
|
|
||||||
file: 'layouts.ts',
|
|
||||||
},
|
|
||||||
} as const satisfies Record<string, PackageOptions>;
|
|
@@ -1,5 +0,0 @@
|
|||||||
import { generate } from 'langium-cli';
|
|
||||||
|
|
||||||
export async function generateLangium() {
|
|
||||||
await generate({ file: `./packages/parser/langium-config.json` });
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
import jison from 'jison';
|
|
||||||
|
|
||||||
export const transformJison = (src: string): string => {
|
|
||||||
// @ts-ignore - Jison is not typed properly
|
|
||||||
const parser = new jison.Generator(src, {
|
|
||||||
moduleType: 'js',
|
|
||||||
'token-stack': true,
|
|
||||||
});
|
|
||||||
const source = parser.generate({ moduleMain: '() => {}' });
|
|
||||||
const exporter = `
|
|
||||||
parser.parser = parser;
|
|
||||||
export { parser };
|
|
||||||
export default parser;
|
|
||||||
`;
|
|
||||||
return `${source} ${exporter}`;
|
|
||||||
};
|
|
@@ -1,127 +0,0 @@
|
|||||||
import { load, JSON_SCHEMA } from 'js-yaml';
|
|
||||||
import assert from 'node:assert';
|
|
||||||
import Ajv2019, { type JSONSchemaType } from 'ajv/dist/2019.js';
|
|
||||||
import type { MermaidConfig, BaseDiagramConfig } from '../packages/mermaid/src/config.type.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* All of the keys in the mermaid config that have a mermaid diagram config.
|
|
||||||
*/
|
|
||||||
const MERMAID_CONFIG_DIAGRAM_KEYS = [
|
|
||||||
'flowchart',
|
|
||||||
'sequence',
|
|
||||||
'gantt',
|
|
||||||
'journey',
|
|
||||||
'class',
|
|
||||||
'state',
|
|
||||||
'er',
|
|
||||||
'pie',
|
|
||||||
'quadrantChart',
|
|
||||||
'xyChart',
|
|
||||||
'requirement',
|
|
||||||
'mindmap',
|
|
||||||
'kanban',
|
|
||||||
'timeline',
|
|
||||||
'gitGraph',
|
|
||||||
'c4',
|
|
||||||
'sankey',
|
|
||||||
'block',
|
|
||||||
'packet',
|
|
||||||
'architecture',
|
|
||||||
'radar',
|
|
||||||
] as const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate default values from the JSON Schema.
|
|
||||||
*
|
|
||||||
* AJV does not support nested default values yet (or default values with $ref),
|
|
||||||
* so we need to manually find them (this may be fixed in ajv v9).
|
|
||||||
*
|
|
||||||
* @param mermaidConfigSchema - The Mermaid JSON Schema to use.
|
|
||||||
* @returns The default mermaid config object.
|
|
||||||
*/
|
|
||||||
function generateDefaults(mermaidConfigSchema: JSONSchemaType<MermaidConfig>) {
|
|
||||||
const ajv = new Ajv2019({
|
|
||||||
useDefaults: true,
|
|
||||||
allowUnionTypes: true,
|
|
||||||
strict: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
ajv.addKeyword({
|
|
||||||
keyword: 'meta:enum', // used by jsonschema2md
|
|
||||||
errors: false,
|
|
||||||
});
|
|
||||||
ajv.addKeyword({
|
|
||||||
keyword: 'tsType', // used by json-schema-to-typescript
|
|
||||||
errors: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
// ajv currently doesn't support nested default values, see https://github.com/ajv-validator/ajv/issues/1718
|
|
||||||
// (may be fixed in v9) so we need to manually use sub-schemas
|
|
||||||
const mermaidDefaultConfig = {};
|
|
||||||
|
|
||||||
assert.ok(mermaidConfigSchema.$defs);
|
|
||||||
const baseDiagramConfig = mermaidConfigSchema.$defs.BaseDiagramConfig;
|
|
||||||
|
|
||||||
for (const key of MERMAID_CONFIG_DIAGRAM_KEYS) {
|
|
||||||
const subSchemaRef = mermaidConfigSchema.properties[key].$ref;
|
|
||||||
const [root, defs, defName] = subSchemaRef.split('/');
|
|
||||||
assert.strictEqual(root, '#');
|
|
||||||
assert.strictEqual(defs, '$defs');
|
|
||||||
const subSchema = {
|
|
||||||
$schema: mermaidConfigSchema.$schema,
|
|
||||||
$defs: mermaidConfigSchema.$defs,
|
|
||||||
...mermaidConfigSchema.$defs[defName],
|
|
||||||
} as JSONSchemaType<BaseDiagramConfig>;
|
|
||||||
|
|
||||||
const validate = ajv.compile(subSchema);
|
|
||||||
|
|
||||||
mermaidDefaultConfig[key] = {};
|
|
||||||
|
|
||||||
for (const required of subSchema.required ?? []) {
|
|
||||||
if (subSchema.properties[required] === undefined && baseDiagramConfig.properties[required]) {
|
|
||||||
mermaidDefaultConfig[key][required] = baseDiagramConfig.properties[required].default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!validate(mermaidDefaultConfig[key])) {
|
|
||||||
throw new Error(
|
|
||||||
`schema for subconfig ${key} does not have valid defaults! Errors were ${JSON.stringify(
|
|
||||||
validate.errors,
|
|
||||||
undefined,
|
|
||||||
2
|
|
||||||
)}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const validate = ajv.compile(mermaidConfigSchema);
|
|
||||||
|
|
||||||
if (!validate(mermaidDefaultConfig)) {
|
|
||||||
throw new Error(
|
|
||||||
`Mermaid config JSON Schema does not have valid defaults! Errors were ${JSON.stringify(
|
|
||||||
validate.errors,
|
|
||||||
undefined,
|
|
||||||
2
|
|
||||||
)}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mermaidDefaultConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const loadSchema = (src: string, filename: string): JSONSchemaType<MermaidConfig> => {
|
|
||||||
const jsonSchema = load(src, {
|
|
||||||
filename,
|
|
||||||
// only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
|
|
||||||
// e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
|
|
||||||
schema: JSON_SCHEMA,
|
|
||||||
}) as JSONSchemaType<MermaidConfig>;
|
|
||||||
return jsonSchema;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getDefaults = (schema: JSONSchemaType<MermaidConfig>) => {
|
|
||||||
return `export default ${JSON.stringify(generateDefaults(schema), undefined, 2)};`;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getSchema = (schema: JSONSchemaType<MermaidConfig>) => {
|
|
||||||
return `export default ${JSON.stringify(schema, undefined, 2)};`;
|
|
||||||
};
|
|
@@ -1,25 +0,0 @@
|
|||||||
/* eslint-disable no-console */
|
|
||||||
import { packageOptions } from './common.js';
|
|
||||||
import { execSync } from 'child_process';
|
|
||||||
|
|
||||||
const buildType = (packageName: string) => {
|
|
||||||
console.log(`Building types for ${packageName}`);
|
|
||||||
try {
|
|
||||||
const out = execSync(`tsc -p ./packages/${packageName}/tsconfig.json --emitDeclarationOnly`);
|
|
||||||
if (out.length > 0) {
|
|
||||||
console.log(out.toString());
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
if (e.stdout.length > 0) {
|
|
||||||
console.error(e.stdout.toString());
|
|
||||||
}
|
|
||||||
if (e.stderr.length > 0) {
|
|
||||||
console.error(e.stderr.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
for (const { packageName } of Object.values(packageOptions)) {
|
|
||||||
buildType(packageName);
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
# Changesets
|
|
||||||
|
|
||||||
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
|
|
||||||
with multi-package repos, or single-package repos to help you version and publish your code. You can
|
|
||||||
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
|
|
||||||
|
|
||||||
We have a quick list of common questions to get you started engaging with this project in
|
|
||||||
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
feat: Add Vertical Line To Gantt Plot At Specified Time
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'@mermaid-js/mermaid-zenuml': major
|
|
||||||
---
|
|
||||||
|
|
||||||
Upgraded the dependency @zenuml/core
|
|
@@ -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 stroke styles for ER diagram to correctly apply path and row-specific styles
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
chore: Convert StateDB into TypeScript
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
fix: Remove incorrect `style="undefined;"` attributes in some Mermaid diagrams
|
|
@@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
'@mermaid-js/mermaid-zenuml': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
chore: bump minimum ZenUML version to 3.23.28
|
|
||||||
|
|
||||||
commit: 9d06d8f31e7f12af9e9e092214f907f2dc93ad75
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
feat: Add support for styling Journey Diagram title (color, font-family, and font-size)
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
FontAwesome icons can now be embedded as SVGs in flowcharts if they are registered via `mermaid.registerIconPacks`.
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
Added support for the click directive in stateDiagram syntax
|
|
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': minor
|
|
||||||
'@mermaid-js/parser': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
feat: Add shorter `+<count>: Label` syntax in packet diagram
|
|
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': patch
|
|
||||||
'@mermaid-js/parser': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
Refactor grammar so that title don't break Architecture Diagrams
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': major
|
|
||||||
---
|
|
||||||
|
|
||||||
fix: allow sequence diagram arrows with a trailing colon but no message
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': minor
|
|
||||||
---
|
|
||||||
|
|
||||||
feat: Dynamically Render Data Labels Within Bar Charts
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
fix: allow colons in events
|
|
@@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
'@mermaid-js/mermaid-zenuml': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
fix(zenuml): limit `peerDependencies` to Mermaid v10 and v11
|
|
||||||
|
|
||||||
commit: 0ad44c12feead9d20c6a870a49327ada58d6e657
|
|
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
'mermaid': patch
|
|
||||||
---
|
|
||||||
|
|
||||||
fix: Fix incomplete string escaping in URL manipulation logic when `arrowMarkerAbsolute: true` by ensuring all unsafe characters are escaped.
|
|
3
.commitlintrc.json
Normal file
3
.commitlintrc.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": ["@commitlint/config-conventional"]
|
||||||
|
}
|
@@ -1,151 +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
|
|
||||||
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
|
|
||||||
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,9 +0,0 @@
|
|||||||
# Contributors to mermaidjs, one per line
|
|
||||||
Ashish Jain
|
|
||||||
cpettitt
|
|
||||||
Dong Cai
|
|
||||||
Nikolay Rozhkov
|
|
||||||
Peng Xiao
|
|
||||||
Per Brolin
|
|
||||||
subhash-halder
|
|
||||||
Vinod Sidharth
|
|
@@ -1,55 +0,0 @@
|
|||||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json
|
|
||||||
|
|
||||||
$schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json
|
|
||||||
|
|
||||||
dictionaryDefinitions:
|
|
||||||
- name: code-terms
|
|
||||||
path: ./code-terms.txt
|
|
||||||
description: A list of coding related terms.
|
|
||||||
addWords: true
|
|
||||||
- name: mermaid-terms
|
|
||||||
path: ./mermaid-terms.txt
|
|
||||||
description: A list of terms related to the mermaid project.
|
|
||||||
addWords: true
|
|
||||||
- name: misc-terms
|
|
||||||
path: ./misc-terms.txt
|
|
||||||
description: A list of miscellaneous terms.
|
|
||||||
- name: 3rd-party-terms
|
|
||||||
path: ./libraries.txt
|
|
||||||
description: A list of 3rd party terms from dependencies.
|
|
||||||
addWords: true
|
|
||||||
- name: contributors
|
|
||||||
path: ./contributors.txt
|
|
||||||
description: A list of contributors to the mermaid project.
|
|
||||||
type: 'W'
|
|
||||||
addWords: true
|
|
||||||
|
|
||||||
# cspell:disable
|
|
||||||
- name: suggestions
|
|
||||||
words:
|
|
||||||
- none
|
|
||||||
- disp
|
|
||||||
- subproc
|
|
||||||
- tria
|
|
||||||
suggestWords:
|
|
||||||
- seperator:separator
|
|
||||||
- vertice:vertex
|
|
||||||
# cspell:enable
|
|
||||||
|
|
||||||
patterns:
|
|
||||||
- name: character-set-cyrillic
|
|
||||||
pattern: '/\p{Script_Extensions=Cyrillic}+/gu'
|
|
||||||
- name: svg-block
|
|
||||||
pattern: '<svg[\S\s]+?</svg>'
|
|
||||||
- name: json-property
|
|
||||||
pattern: '/"[\w/@-]+":/g'
|
|
||||||
|
|
||||||
dictionaries:
|
|
||||||
- mermaid-terms
|
|
||||||
- suggestions
|
|
||||||
- contributors
|
|
||||||
|
|
||||||
ignorePaths:
|
|
||||||
- '*.txt' # do not spell check local dictionaries
|
|
||||||
|
|
||||||
# cspell:dictionary misc-terms
|
|
@@ -1,80 +0,0 @@
|
|||||||
# Add third party library terms below
|
|
||||||
acyclicer
|
|
||||||
Antlr
|
|
||||||
Appli
|
|
||||||
applitools
|
|
||||||
Asciidoctor
|
|
||||||
Astah
|
|
||||||
automerge
|
|
||||||
bilkent
|
|
||||||
bisheng
|
|
||||||
Blazor
|
|
||||||
codedoc
|
|
||||||
Codemia
|
|
||||||
codepaths
|
|
||||||
csstree
|
|
||||||
cytoscape
|
|
||||||
cytoscape-cose-bilkent
|
|
||||||
dagre
|
|
||||||
dagre-d3
|
|
||||||
Deepdwn
|
|
||||||
Docsify
|
|
||||||
Docsy
|
|
||||||
Doctave
|
|
||||||
DokuWiki
|
|
||||||
dompurify
|
|
||||||
elkjs
|
|
||||||
fcose
|
|
||||||
fontawesome
|
|
||||||
Fonticons
|
|
||||||
Forgejo
|
|
||||||
Foswiki
|
|
||||||
Gitea
|
|
||||||
graphlib
|
|
||||||
Grav
|
|
||||||
icones
|
|
||||||
iconify
|
|
||||||
Inkdrop
|
|
||||||
jiti
|
|
||||||
jsdocs
|
|
||||||
jsfiddle
|
|
||||||
jsonschema
|
|
||||||
katex
|
|
||||||
khroma
|
|
||||||
langium
|
|
||||||
mathml
|
|
||||||
matplotlib
|
|
||||||
mdbook
|
|
||||||
Mermerd
|
|
||||||
mkdocs
|
|
||||||
Nextra
|
|
||||||
nodenext
|
|
||||||
npmjs
|
|
||||||
pageview
|
|
||||||
pathe
|
|
||||||
phpbb
|
|
||||||
pixelmatch
|
|
||||||
Podlite
|
|
||||||
presetAttributify
|
|
||||||
pyplot
|
|
||||||
redmine
|
|
||||||
rehype
|
|
||||||
roughjs
|
|
||||||
rscratch
|
|
||||||
shiki
|
|
||||||
Slidev
|
|
||||||
sparkline
|
|
||||||
sphinxcontrib
|
|
||||||
ssim
|
|
||||||
stylis
|
|
||||||
Swimm
|
|
||||||
tsbuildinfo
|
|
||||||
tseslint
|
|
||||||
Tuleap
|
|
||||||
Typora
|
|
||||||
unocss
|
|
||||||
unplugin
|
|
||||||
unstub
|
|
||||||
vite
|
|
||||||
vitest
|
|
||||||
Zune
|
|
@@ -1,45 +0,0 @@
|
|||||||
Adamiecki
|
|
||||||
arrowend
|
|
||||||
Bendpoints
|
|
||||||
bmatrix
|
|
||||||
braintree
|
|
||||||
catmull
|
|
||||||
compositTitleSize
|
|
||||||
curv
|
|
||||||
doublecircle
|
|
||||||
elems
|
|
||||||
gantt
|
|
||||||
gitgraph
|
|
||||||
gzipped
|
|
||||||
handDrawn
|
|
||||||
kanban
|
|
||||||
knsv
|
|
||||||
Knut
|
|
||||||
marginx
|
|
||||||
marginy
|
|
||||||
Markdownish
|
|
||||||
mermaidjs
|
|
||||||
mindmap
|
|
||||||
mindmaps
|
|
||||||
mrtree
|
|
||||||
multigraph
|
|
||||||
nodesep
|
|
||||||
NOTEGROUP
|
|
||||||
Pinterest
|
|
||||||
procs
|
|
||||||
rankdir
|
|
||||||
ranksep
|
|
||||||
rect
|
|
||||||
rects
|
|
||||||
sandboxed
|
|
||||||
siebling
|
|
||||||
statediagram
|
|
||||||
substate
|
|
||||||
Sveidqvist
|
|
||||||
unfixable
|
|
||||||
Viewbox
|
|
||||||
viewports
|
|
||||||
visio
|
|
||||||
vitepress
|
|
||||||
xlink
|
|
||||||
xychart
|
|
@@ -1,7 +0,0 @@
|
|||||||
BRANDES
|
|
||||||
circo
|
|
||||||
handDrawn
|
|
||||||
KOEPF
|
|
||||||
neato
|
|
||||||
newbranch
|
|
||||||
validify
|
|
@@ -1,106 +0,0 @@
|
|||||||
import { build } from 'esbuild';
|
|
||||||
import { 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');
|
|
||||||
};
|
|
||||||
|
|
||||||
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;
|
|
||||||
};
|
|
5
.eslintignore
Normal file
5
.eslintignore
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
dist/**
|
||||||
|
.github/**
|
||||||
|
docs/Setup.md
|
||||||
|
cypress.config.js
|
||||||
|
cypress/plugins/index.js
|
68
.eslintrc.json
Normal file
68
.eslintrc.json
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"es6": true,
|
||||||
|
"jest/globals": true,
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"experimentalObjectRestSpread": true,
|
||||||
|
"jsx": true
|
||||||
|
},
|
||||||
|
"sourceType": "module"
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
"plugin:jsdoc/recommended",
|
||||||
|
"plugin:json/recommended",
|
||||||
|
"plugin:markdown/recommended",
|
||||||
|
"prettier"
|
||||||
|
],
|
||||||
|
"plugins": ["@typescript-eslint", "html", "jest", "jsdoc", "json"],
|
||||||
|
"rules": {
|
||||||
|
"no-console": "error",
|
||||||
|
"no-prototype-builtins": "off",
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"jsdoc/check-indentation": "off",
|
||||||
|
"jsdoc/check-alignment": "off",
|
||||||
|
"jsdoc/check-line-alignment": "off",
|
||||||
|
"jsdoc/multiline-blocks": "off",
|
||||||
|
"jsdoc/newline-after-description": "off",
|
||||||
|
"jsdoc/tag-lines": "off",
|
||||||
|
"jsdoc/require-param-description": "off",
|
||||||
|
"jsdoc/require-param-type": "off",
|
||||||
|
"jsdoc/require-returns": "off",
|
||||||
|
"jsdoc/require-returns-description": "off",
|
||||||
|
"cypress/no-async-tests": "off",
|
||||||
|
"@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"],
|
||||||
|
"no-empty": ["error", { "allowEmptyCatch": true }]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": "./**/*.html",
|
||||||
|
"rules": {
|
||||||
|
"no-undef": "off",
|
||||||
|
"jsdoc/require-jsdoc": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": ["./cypress/**", "./demos/**"],
|
||||||
|
"rules": {
|
||||||
|
"no-console": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
4
.github/FUNDING.yml
vendored
4
.github/FUNDING.yml
vendored
@@ -1,8 +1,6 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github:
|
github: [knsv]
|
||||||
- knsv
|
|
||||||
- sidharthv96
|
|
||||||
#patreon: # Replace with a single Patreon username
|
#patreon: # Replace with a single Patreon username
|
||||||
#open_collective: # Replace with a single Open Collective username
|
#open_collective: # Replace with a single Open Collective username
|
||||||
#ko_fi: # Replace with a single Ko-fi username
|
#ko_fi: # Replace with a single Ko-fi username
|
||||||
|
43
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
43
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: ''
|
||||||
|
labels: 'Status: Triage, Type: Bug / Error'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Code Sample**
|
||||||
|
If applicable, add the code sample or a link to the [live editor](https://mermaid.live).
|
||||||
|
|
||||||
|
**Desktop (please complete the following information):**
|
||||||
|
|
||||||
|
- OS: [e.g. iOS]
|
||||||
|
- Browser [e.g. chrome, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Smartphone (please complete the following information):**
|
||||||
|
|
||||||
|
- Device: [e.g. iPhone6]
|
||||||
|
- OS: [e.g. iOS8.1]
|
||||||
|
- Browser [e.g. stock browser, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
73
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
73
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -1,73 +0,0 @@
|
|||||||
name: Bug Report
|
|
||||||
description: Create a report to help us improve
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Bug / Error'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Security vulnerabilities
|
|
||||||
Please refer our [Security Policy](https://github.com/mermaid-js/.github/blob/main/SECURITY.md) and report to keep vulnerabilities confidential so we can release fixes first.
|
|
||||||
|
|
||||||
## Before you submit...
|
|
||||||
We like to help you, but in order to do that should you make a few things first:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible.
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
|
|
||||||
There is a chance that the bug is already fixed in the git `develop` branch, but is not released yet.
|
|
||||||
So please check in [Live Editor - Develop](https://develop.git.mermaid.live) before raising an issue.
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Description
|
|
||||||
description: Give a clear and concise description of what the bug is.
|
|
||||||
placeholder: When I do ... does ... happen.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
description: Give a step-by-step example on how to reproduce the bug.
|
|
||||||
placeholder: |-
|
|
||||||
1. Do this
|
|
||||||
2. Do that
|
|
||||||
3. ...
|
|
||||||
4. Bug!
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to help explain your issue.
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Code Sample
|
|
||||||
description: |-
|
|
||||||
If applicable, add the code sample or a link to the [Live Editor - Develop](https://develop.git.mermaid.live).
|
|
||||||
Any text pasted here will be rendered as a Code block.
|
|
||||||
render: text
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Setup
|
|
||||||
description: |-
|
|
||||||
Please fill out the info below.
|
|
||||||
Note that you only need to fill out the relevant section
|
|
||||||
value: |-
|
|
||||||
- Mermaid version:
|
|
||||||
- Browser and Version: [Chrome, Edge, Firefox]
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Suggested Solutions
|
|
||||||
description: >
|
|
||||||
If applicable, suggest solutions that could resolve the bug.
|
|
||||||
It would help maintainers/contributors to not waste time looking for the solution. Even pointing the line causing the bug would be great!
|
|
||||||
placeholder: |-
|
|
||||||
- Variable `parser` in file <filepath> is not initialised ...
|
|
||||||
- Add a new type for ...
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Additional Context
|
|
||||||
description: Anything else to add?
|
|
20
.github/ISSUE_TEMPLATE/config.yml
vendored
20
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,20 +0,0 @@
|
|||||||
blank_issues_enabled: true
|
|
||||||
contact_links:
|
|
||||||
- name: GitHub Discussions
|
|
||||||
url: https://github.com/mermaid-js/mermaid/discussions
|
|
||||||
about: Ask the Community questions or share your own graphs in our discussions.
|
|
||||||
- name: Discord
|
|
||||||
url: https://discord.gg/sKeNQX4Wtj
|
|
||||||
about: Join our Community on Discord for Help and a casual chat.
|
|
||||||
- name: Documentation
|
|
||||||
url: https://mermaid.js.org
|
|
||||||
about: Read our documentation for all that Mermaid.js can offer.
|
|
||||||
- name: Live Editor
|
|
||||||
url: https://mermaid.live
|
|
||||||
about: Try the live editor to preview graphs in no time.
|
|
||||||
- name: Live Editor - Develop
|
|
||||||
url: https://develop.git.mermaid.live
|
|
||||||
about: Try unreleased changes in the develop branch.
|
|
||||||
- name: Live Editor - Next
|
|
||||||
url: https://next.git.mermaid.live
|
|
||||||
about: Try unreleased changes in the next branch.
|
|
60
.github/ISSUE_TEMPLATE/diagram_proposal.yml
vendored
60
.github/ISSUE_TEMPLATE/diagram_proposal.yml
vendored
@@ -1,60 +0,0 @@
|
|||||||
name: Diagram Proposal
|
|
||||||
description: Suggest a new Diagram Type to add to Mermaid.
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Enhancement'
|
|
||||||
- 'Type: New Diagram'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Before you submit...
|
|
||||||
First of all, thank you for proposing a new Diagram to us.
|
|
||||||
We are always happy about new ideas to improve Mermaid.js wherever possible.
|
|
||||||
|
|
||||||
To get the fastest and best response possible, make sure you do the following:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible.
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
|
|
||||||
## Example issues
|
|
||||||
|
|
||||||
Refer to the discussions here to get an idea of how the diagram syntax is created.
|
|
||||||
|
|
||||||
- https://github.com/mermaid-js/mermaid/issues/4269
|
|
||||||
- https://github.com/mermaid-js/mermaid/issues/4282
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Proposal
|
|
||||||
description: A clear and concise description of what should be added to Mermaid.js.
|
|
||||||
placeholder: Mermaid.js should add ... because ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Use Cases
|
|
||||||
description: If applicable, give some use cases for where this diagram would be useful.
|
|
||||||
placeholder: The Diagram could be used for ...
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to show possible examples of how the diagram may look like.
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Syntax
|
|
||||||
description: |-
|
|
||||||
If possible, include a syntax which could be used to write the diagram.
|
|
||||||
Try to add one or two examples of valid use-cases here.
|
|
||||||
- type: dropdown
|
|
||||||
id: implementation
|
|
||||||
attributes:
|
|
||||||
label: Implementation
|
|
||||||
description: |-
|
|
||||||
Would you like to implement this yourself, or is it a proposal for the community?
|
|
||||||
If there is no corresponding PR from your side after 30 days, the diagram will be open for everyone to implement.
|
|
||||||
options:
|
|
||||||
- I will try and implement it myself.
|
|
||||||
- This is a proposal which I'd love to see built into mermaid by the wonderful community.
|
|
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ''
|
||||||
|
labels: 'Status: Triage, Type: Enhancement'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
16
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
16
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
name: Question
|
||||||
|
about: Get some help from the community.
|
||||||
|
title: ''
|
||||||
|
labels: 'Help wanted!, Type: Other'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## Help us help you!
|
||||||
|
|
||||||
|
You want an answer. Here are some ways to get it quicker:
|
||||||
|
|
||||||
|
- Use a clear and concise title.
|
||||||
|
- Try to pose a clear and concise question.
|
||||||
|
- Include as much, or as little, code as necessary.
|
||||||
|
- Don't be shy to give us some screenshots, if it helps!
|
34
.github/ISSUE_TEMPLATE/syntax_proposal.yml
vendored
34
.github/ISSUE_TEMPLATE/syntax_proposal.yml
vendored
@@ -1,34 +0,0 @@
|
|||||||
name: Syntax Proposal
|
|
||||||
description: Suggest a new Syntax to add to Mermaid.js.
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Enhancement'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Before you submit...
|
|
||||||
First of all, thank you for proposing a new Syntax to us.
|
|
||||||
We are always happy about new ideas to improve Mermaid.js wherever possible.
|
|
||||||
|
|
||||||
To get the fastest and best response possible, make sure you do the following:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible. Examples are always welcome.
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Proposal
|
|
||||||
description: A clear and concise description of what Syntax should be added to Mermaid.js.
|
|
||||||
placeholder: Mermaid.js should add ... because ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Example
|
|
||||||
description: If applicable, provide an example of the new Syntax.
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to show possible examples of how the theme may look like.
|
|
42
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
42
.github/ISSUE_TEMPLATE/theme_proposal.yml
vendored
@@ -1,42 +0,0 @@
|
|||||||
name: Theme Proposal
|
|
||||||
description: Suggest a new theme to add to Mermaid.js.
|
|
||||||
labels:
|
|
||||||
- 'Status: Triage'
|
|
||||||
- 'Type: Enhancement'
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |-
|
|
||||||
## Before you submit...
|
|
||||||
First of all, thank you for proposing a new Theme to us.
|
|
||||||
We are always happy about new ideas to improve Mermaid.js wherever possible.
|
|
||||||
|
|
||||||
To get the fastest and best response possible, make sure you do the following:
|
|
||||||
|
|
||||||
- Use a clear and concise title
|
|
||||||
- Fill out the text fields with as much detail as possible. Examples are always welcome!
|
|
||||||
- Never be shy to give us screenshots and/or code samples. It will help!
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Proposal
|
|
||||||
description: A clear and concise description of what theme should be added to Mermaid.js.
|
|
||||||
placeholder: Mermaid.js should add ... because ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Colors
|
|
||||||
description: |-
|
|
||||||
A detailed list of the different colour values to use.
|
|
||||||
See the [list of currently used variable names](https://mermaid-js.github.io/mermaid/#/theming?id=theme-variables-reference-table)
|
|
||||||
placeholder: |-
|
|
||||||
- background: #f4f4f4
|
|
||||||
- primaryColor: #fff4dd
|
|
||||||
- ...
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Screenshots
|
|
||||||
description: If applicable, add screenshots to show possible examples of how the theme may look like.
|
|
18
.github/codecov.yaml
vendored
18
.github/codecov.yaml
vendored
@@ -1,18 +0,0 @@
|
|||||||
codecov:
|
|
||||||
branch: develop
|
|
||||||
|
|
||||||
comment:
|
|
||||||
layout: 'reach, diff, flags, files'
|
|
||||||
behavior: default
|
|
||||||
require_changes: false # if true: only post the comment if coverage changes
|
|
||||||
require_base: no # [yes :: must have a base report to post]
|
|
||||||
require_head: yes # [yes :: must have a head report to post]
|
|
||||||
|
|
||||||
coverage:
|
|
||||||
status:
|
|
||||||
project:
|
|
||||||
off
|
|
||||||
# Turing off for now as code coverage isn't stable and causes unnecessary build failures.
|
|
||||||
# default:
|
|
||||||
# threshold: 2%
|
|
||||||
patch: off
|
|
18
.github/dependabot.yml
vendored
Normal file
18
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: npm
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
directory: /
|
||||||
|
target-branch: develop
|
||||||
|
versioning-strategy: increase
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
day: monday
|
||||||
|
time: '07:00'
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directory: /
|
||||||
|
target-branch: develop
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
day: monday
|
||||||
|
time: '07:00'
|
61
.github/lychee.toml
vendored
61
.github/lychee.toml
vendored
@@ -1,61 +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",
|
|
||||||
|
|
||||||
# Swimm returns 404, even though the link is valid
|
|
||||||
"https://docs.swimm.io",
|
|
||||||
|
|
||||||
# Timeout
|
|
||||||
"https://huehive.co",
|
|
||||||
"https://foswiki.org",
|
|
||||||
"https://www.gnu.org",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Exclude all private IPs from checking.
|
|
||||||
# Equivalent to setting `exclude_private`, `exclude_link_local`, and
|
|
||||||
# `exclude_loopback` to true.
|
|
||||||
exclude_all_private = true
|
|
25
.github/pr-labeler.yml
vendored
25
.github/pr-labeler.yml
vendored
@@ -1,22 +1,3 @@
|
|||||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/release-drafter/release-drafter/master/schema.json
|
'Type: Bug / Error': 'bug/*'
|
||||||
autolabeler:
|
'Type: Enhancement': 'feature/*'
|
||||||
- label: 'Type: Bug / Error'
|
'Type: Other': 'other/*'
|
||||||
branch:
|
|
||||||
- '/bug\/.+/'
|
|
||||||
- '/fix\/.+/'
|
|
||||||
- label: 'Type: Enhancement'
|
|
||||||
branch:
|
|
||||||
- '/feature\/.+/'
|
|
||||||
- '/feat\/.+/'
|
|
||||||
- label: 'Type: Other'
|
|
||||||
branch:
|
|
||||||
- '/other\/.+/'
|
|
||||||
- '/chore\/.+/'
|
|
||||||
- '/test\/.+/'
|
|
||||||
- '/refactor\/.+/'
|
|
||||||
- label: 'Area: Documentation'
|
|
||||||
branch:
|
|
||||||
- '/docs\/.+/'
|
|
||||||
|
|
||||||
template: |
|
|
||||||
This field is unused, as we only use this config file for labeling PRs.
|
|
||||||
|
7
.github/pull_request_template.md
vendored
7
.github/pull_request_template.md
vendored
@@ -12,7 +12,6 @@ Describe the way your implementation works or what design decisions you made if
|
|||||||
|
|
||||||
Make sure you
|
Make sure you
|
||||||
|
|
||||||
- [ ] :book: have read the [contribution guidelines](https://mermaid.js.org/community/contributing.html)
|
- [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
|
||||||
- [ ] :computer: have added necessary unit/e2e tests.
|
- [ ] :computer: have added unit/e2e tests (if appropriate)
|
||||||
- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://mermaid.js.org/community/contributing.html#update-documentation) is used for all new features.
|
- [ ] :bookmark: targeted `develop` branch
|
||||||
- [ ] :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:`.
|
|
||||||
|
25
.github/release-drafter.yml
vendored
Normal file
25
.github/release-drafter.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name-template: '$NEXT_PATCH_VERSION'
|
||||||
|
tag-template: '$NEXT_PATCH_VERSION'
|
||||||
|
categories:
|
||||||
|
- title: '🚀 Features'
|
||||||
|
labels:
|
||||||
|
- 'Type: Enhancement'
|
||||||
|
- title: '🐛 Bug Fixes'
|
||||||
|
labels:
|
||||||
|
- 'Type: Bug / Error'
|
||||||
|
- title: '🧰 Maintenance'
|
||||||
|
label: 'Type: Other'
|
||||||
|
change-template: '- $TITLE (#$NUMBER) @$AUTHOR'
|
||||||
|
sort-by: title
|
||||||
|
sort-direction: ascending
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
exclude-labels:
|
||||||
|
- 'Skip changelog'
|
||||||
|
no-changes-template: 'This release contains minor changes and bugfixes.'
|
||||||
|
template: |
|
||||||
|
# Release Notes
|
||||||
|
|
||||||
|
$CHANGES
|
||||||
|
|
||||||
|
🎉 **Thanks to all contributors helping with this release!** 🎉
|
2
.github/stale.yml
vendored
2
.github/stale.yml
vendored
@@ -15,5 +15,5 @@ markComment: >
|
|||||||
If you are still interested in this issue and it is still relevant you can comment to revive it.
|
If you are still interested in this issue and it is still relevant you can comment to revive it.
|
||||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
closeComment: >
|
closeComment: >
|
||||||
This issue has been automatically closed due to a lack of activity.
|
This issue has been been automatically closed due to a lack of activity.
|
||||||
This is done to maintain a clean list of issues that the community is interested in developing.
|
This is done to maintain a clean list of issues that the community is interested in developing.
|
||||||
|
45
.github/workflows/autofix.yml
vendored
45
.github/workflows/autofix.yml
vendored
@@ -1,45 +0,0 @@
|
|||||||
name: autofix.ci # needed to securely identify the workflow
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches-ignore:
|
|
||||||
- 'renovate/**'
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
autofix:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
# uses version from "packageManager" field in package.json
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
cache: pnpm
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
- name: Install Packages
|
|
||||||
run: |
|
|
||||||
pnpm install --frozen-lockfile
|
|
||||||
env:
|
|
||||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
|
||||||
|
|
||||||
- name: Fix Linting
|
|
||||||
shell: bash
|
|
||||||
run: pnpm -w run lint:fix
|
|
||||||
|
|
||||||
- name: Sync `./src/config.type.ts` with `./src/schemas/config.schema.yaml`
|
|
||||||
shell: bash
|
|
||||||
run: pnpm run --filter mermaid types:build-config
|
|
||||||
|
|
||||||
- name: Build Docs
|
|
||||||
working-directory: ./packages/mermaid
|
|
||||||
run: pnpm run docs:build
|
|
||||||
|
|
||||||
- uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main
|
|
39
.github/workflows/build-docs.yml
vendored
39
.github/workflows/build-docs.yml
vendored
@@ -1,39 +0,0 @@
|
|||||||
name: Build Vitepress docs
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- release/*
|
|
||||||
pull_request:
|
|
||||||
merge_group:
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-docs:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
cache: pnpm
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
- name: Install Packages
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Verify release version
|
|
||||||
if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release')) }}
|
|
||||||
run: pnpm --filter mermaid run docs:verify-version
|
|
||||||
|
|
||||||
- name: Run Build
|
|
||||||
run: pnpm --filter mermaid run docs:build:vitepress
|
|
45
.github/workflows/build.yml
vendored
Normal file
45
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push: {}
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- ready_for_review
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [16.x]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
cache: yarn
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Install Yarn
|
||||||
|
run: npm i yarn --global
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: |
|
||||||
|
yarn install --frozen-lockfile
|
||||||
|
env:
|
||||||
|
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||||
|
|
||||||
|
- name: Run Build
|
||||||
|
run: yarn build
|
||||||
|
|
||||||
|
- name: Upload Build as Artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: dist
|
||||||
|
path: dist
|
4
.github/workflows/check-readme-in-sync.yml
vendored
4
.github/workflows/check-readme-in-sync.yml
vendored
@@ -14,11 +14,11 @@ permissions:
|
|||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-readme:
|
check:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Check for difference in README.md and docs/README.md
|
- name: Check for difference in README.md and docs/README.md
|
||||||
run: |
|
run: |
|
||||||
|
25
.github/workflows/checks.yml
vendored
Normal file
25
.github/workflows/checks.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
on:
|
||||||
|
push: {}
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- ready_for_review
|
||||||
|
|
||||||
|
name: Static analysis
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: check tests
|
||||||
|
if: github.repository_owner == 'mermaid-js'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- uses: testomatio/check-tests@stable
|
||||||
|
with:
|
||||||
|
framework: cypress
|
||||||
|
tests: './cypress/e2e/**/**.spec.js'
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
has-tests-label: true
|
11
.github/workflows/codeql.yml
vendored
11
.github/workflows/codeql.yml
vendored
@@ -11,9 +11,6 @@ on:
|
|||||||
- synchronize
|
- synchronize
|
||||||
- ready_for_review
|
- ready_for_review
|
||||||
|
|
||||||
permissions: # added using https://github.com/step-security/secure-repo
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
@@ -32,11 +29,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
uses: github/codeql-action/init@v2
|
||||||
with:
|
with:
|
||||||
config-file: ./.github/codeql/codeql-config.yml
|
config-file: ./.github/codeql/codeql-config.yml
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
@@ -48,7 +45,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
@@ -62,4 +59,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
uses: github/codeql-action/analyze@v2
|
||||||
|
6
.github/workflows/dependency-review.yml
vendored
6
.github/workflows/dependency-review.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
# Dependency Review Action
|
# Dependency Review Action
|
||||||
#
|
#
|
||||||
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
# This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
||||||
#
|
#
|
||||||
# Source repository: https://github.com/actions/dependency-review-action
|
# Source repository: https://github.com/actions/dependency-review-action
|
||||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||||
@@ -15,6 +15,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@v3
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0
|
uses: actions/dependency-review-action@v2
|
||||||
|
44
.github/workflows/e2e
vendored
Normal file
44
.github/workflows/e2e
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
name: E2E
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [16.x]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
cache: yarn
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Install Yarn
|
||||||
|
run: npm i yarn --global
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: |
|
||||||
|
yarn install --frozen-lockfile
|
||||||
|
env:
|
||||||
|
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||||
|
|
||||||
|
- name: Run Build
|
||||||
|
run: yarn build
|
||||||
|
|
||||||
|
- name: Run E2E Tests
|
||||||
|
run: yarn e2e
|
||||||
|
env:
|
||||||
|
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||||
|
|
||||||
|
- name: Upload Coverage to Coveralls
|
||||||
|
uses: coverallsapp/github-action@master
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
flag-name: e2e
|
72
.github/workflows/e2e-applitools.yml
vendored
72
.github/workflows/e2e-applitools.yml
vendored
@@ -1,72 +0,0 @@
|
|||||||
name: E2E (Applitools)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
# Because we want to limit Applitools usage, so we only want to start this
|
|
||||||
# workflow on rare occasions/manually.
|
|
||||||
inputs:
|
|
||||||
parent_branch:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: master
|
|
||||||
description: 'Parent branch to use for PRs'
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
env:
|
|
||||||
# on PRs from forks, this secret will always be empty, for security reasons
|
|
||||||
USE_APPLI: ${{ secrets.APPLITOOLS_API_KEY && 'true' || '' }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
e2e-applitools:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
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:
|
|
||||||
- if: ${{ ! env.USE_APPLI }}
|
|
||||||
name: Warn if not using Applitools
|
|
||||||
run: |
|
|
||||||
echo "::error,title=Not using Applitools::APPLITOOLS_API_KEY is empty, disabling Applitools for this run."
|
|
||||||
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
# uses version from "packageManager" field in package.json
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
- if: ${{ env.USE_APPLI }}
|
|
||||||
name: Notify applitools of new batch
|
|
||||||
# Copied from docs https://applitools.com/docs/topics/integrations/github-integration-ci-setup.html
|
|
||||||
env:
|
|
||||||
# e.g. mermaid-js/mermaid/my-branch
|
|
||||||
APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }}
|
|
||||||
APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }}
|
|
||||||
APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
|
|
||||||
APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com'
|
|
||||||
uses: wei/curl@012398a392d02480afa2720780031f8621d5f94c
|
|
||||||
with:
|
|
||||||
args: -X POST "$APPLITOOLS_SERVER_URL/api/externals/github/push?apiKey=$APPLITOOLS_API_KEY&CommitSha=$GITHUB_SHA&BranchName=${APPLITOOLS_BRANCH}$&ParentBranchName=$APPLITOOLS_PARENT_BRANCH"
|
|
||||||
|
|
||||||
- name: Cypress run
|
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
|
||||||
id: cypress
|
|
||||||
with:
|
|
||||||
start: pnpm run dev
|
|
||||||
wait-on: 'http://localhost:9000'
|
|
||||||
env:
|
|
||||||
# Mermaid applitools.config.js uses this to pick batch name.
|
|
||||||
APPLI_BRANCH: ${{ github.ref_name }}
|
|
||||||
APPLITOOLS_BATCH_ID: ${{ github.sha }}
|
|
||||||
# e.g. mermaid-js/mermaid/my-branch
|
|
||||||
APPLITOOLS_BRANCH: ${{ github.repository }}/${{ github.ref_name }}
|
|
||||||
APPLITOOLS_PARENT_BRANCH: ${{ github.event.inputs.parent_branch }}
|
|
||||||
APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
|
|
||||||
APPLITOOLS_SERVER_URL: 'https://eyesapi.applitools.com'
|
|
70
.github/workflows/e2e-timings.yml
vendored
70
.github/workflows/e2e-timings.yml
vendored
@@ -1,70 +0,0 @@
|
|||||||
name: E2E - Generate Timings
|
|
||||||
|
|
||||||
on:
|
|
||||||
# run this workflow every night at 3am
|
|
||||||
schedule:
|
|
||||||
- cron: '28 3 * * *'
|
|
||||||
# or when the user triggers it from GitHub Actions page
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
timings:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
|
||||||
options: --user 1001
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
- name: Install dependencies
|
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
|
||||||
with:
|
|
||||||
runTests: false
|
|
||||||
|
|
||||||
- name: Cypress run
|
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
|
||||||
id: cypress
|
|
||||||
with:
|
|
||||||
install: false
|
|
||||||
start: pnpm run dev:coverage
|
|
||||||
wait-on: 'http://localhost:9000'
|
|
||||||
browser: chrome
|
|
||||||
publish-summary: false
|
|
||||||
env:
|
|
||||||
VITEST_COVERAGE: true
|
|
||||||
CYPRESS_COMMIT: ${{ github.sha }}
|
|
||||||
SPLIT: 1
|
|
||||||
SPLIT_INDEX: 0
|
|
||||||
SPLIT_FILE: 'cypress/timings.json'
|
|
||||||
|
|
||||||
- name: Compare timings
|
|
||||||
id: compare
|
|
||||||
run: |
|
|
||||||
OUTPUT=$(pnpm tsx scripts/compare-timings.ts)
|
|
||||||
echo "$OUTPUT" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
echo "output<<EOF" >> $GITHUB_OUTPUT
|
|
||||||
echo "$OUTPUT" >> $GITHUB_OUTPUT
|
|
||||||
echo "EOF" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Commit and create pull request
|
|
||||||
uses: peter-evans/create-pull-request@889dce9eaba7900ce30494f5e1ac7220b27e5c81
|
|
||||||
with:
|
|
||||||
add-paths: |
|
|
||||||
cypress/timings.json
|
|
||||||
commit-message: 'chore: update E2E timings'
|
|
||||||
branch: update-timings
|
|
||||||
title: Update E2E Timings
|
|
||||||
body: ${{ steps.compare.outputs.output }}
|
|
||||||
delete-branch: true
|
|
||||||
sign-commits: true
|
|
151
.github/workflows/e2e.yml
vendored
151
.github/workflows/e2e.yml
vendored
@@ -1,151 +0,0 @@
|
|||||||
name: E2E
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
- master
|
|
||||||
- release/**
|
|
||||||
pull_request:
|
|
||||||
merge_group:
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
env:
|
|
||||||
# For PRs and MergeQueues, the target commit is used, and for push events to non-develop branches, github.event.previous is used if available. Otherwise, 'develop' is used.
|
|
||||||
targetHash: >-
|
|
||||||
${{
|
|
||||||
github.event.pull_request.base.sha ||
|
|
||||||
github.event.merge_group.base_sha ||
|
|
||||||
(
|
|
||||||
(
|
|
||||||
(github.event_name == 'push' && github.ref == 'refs/heads/develop') ||
|
|
||||||
github.event.before == '0000000000000000000000000000000000000000'
|
|
||||||
) && 'develop'
|
|
||||||
) ||
|
|
||||||
github.event.before
|
|
||||||
}}
|
|
||||||
RUN_VISUAL_TEST: >-
|
|
||||||
${{ github.repository == 'mermaid-js/mermaid' && (github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/')) }}
|
|
||||||
jobs:
|
|
||||||
cache:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
|
||||||
options: --user 1001
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
- name: Cache snapshots
|
|
||||||
id: cache-snapshot
|
|
||||||
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
|
||||||
with:
|
|
||||||
path: ./cypress/snapshots
|
|
||||||
key: ${{ runner.os }}-snapshots-${{ env.targetHash }}
|
|
||||||
|
|
||||||
# If a snapshot for a given Hash is not found, we checkout that commit, run the tests and cache the snapshots.
|
|
||||||
- name: Switch to base branch
|
|
||||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
with:
|
|
||||||
ref: ${{ env.targetHash }}
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true' }}
|
|
||||||
uses: cypress-io/github-action@18a6541367f4580a515371905f499a27a44e8dbe # v6.7.12
|
|
||||||
with:
|
|
||||||
# just perform install
|
|
||||||
runTests: false
|
|
||||||
|
|
||||||
- name: Calculate bundle size
|
|
||||||
if: ${{ steps.cache-snapshot.outputs.cache-hit != 'true'}}
|
|
||||||
run: |
|
|
||||||
pnpm run build:viz
|
|
||||||
mkdir -p cypress/snapshots/stats/base
|
|
||||||
mv stats cypress/snapshots/stats/base
|
|
||||||
|
|
||||||
e2e:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: cypress/browsers:node-20.11.0-chrome-121.0.6167.85-1-ff-120.0-edge-121.0.2277.83-1
|
|
||||||
options: --user 1001
|
|
||||||
needs: cache
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
containers: [1, 2, 3, 4, 5]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
# uses version from "packageManager" field in package.json
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
# These cached snapshots are downloaded, providing the reference snapshots.
|
|
||||||
- name: Cache snapshots
|
|
||||||
id: cache-snapshot
|
|
||||||
uses: actions/cache/restore@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
|
|
||||||
# and run all Cypress tests
|
|
||||||
- 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
|
|
||||||
# Disable recording if we don't have an API key
|
|
||||||
# e.g. if this action was run from a fork
|
|
||||||
record: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY != '' }}
|
|
||||||
env:
|
|
||||||
ARGOS_PARALLEL: ${{ env.RUN_VISUAL_TEST == 'true' }}
|
|
||||||
ARGOS_PARALLEL_TOTAL: ${{ env.RUN_VISUAL_TEST == 'true' && strategy.job-total || 1 }}
|
|
||||||
ARGOS_PARALLEL_INDEX: ${{ env.RUN_VISUAL_TEST == 'true' && matrix.containers || 1 }}
|
|
||||||
CYPRESS_COMMIT: ${{ github.sha }}
|
|
||||||
CYPRESS_RECORD_KEY: ${{ env.RUN_VISUAL_TEST == 'true' && secrets.CYPRESS_RECORD_KEY || ''}}
|
|
||||||
SPLIT: ${{ strategy.job-total }}
|
|
||||||
SPLIT_INDEX: ${{ strategy.job-index }}
|
|
||||||
SPLIT_FILE: 'cypress/timings.json'
|
|
||||||
VITEST_COVERAGE: true
|
|
||||||
|
|
||||||
- name: Upload Coverage to Codecov
|
|
||||||
uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
|
|
||||||
# Run step only pushes to develop and pull_requests
|
|
||||||
if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
|
|
||||||
with:
|
|
||||||
files: coverage/cypress/lcov.info
|
|
||||||
flags: e2e
|
|
||||||
name: mermaid-codecov
|
|
||||||
fail_ci_if_error: false
|
|
||||||
verbose: true
|
|
||||||
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
|
|
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'
|
||||||
|
52
.github/workflows/link-checker.yml
vendored
52
.github/workflows/link-checker.yml
vendored
@@ -1,52 +0,0 @@
|
|||||||
# This Link Checker is run on all documentation files once per week.
|
|
||||||
|
|
||||||
# references:
|
|
||||||
# - https://github.com/lycheeverse/lychee-action
|
|
||||||
# - https://github.com/lycheeverse/lychee
|
|
||||||
|
|
||||||
name: Link Checker
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
# * is a special character in YAML so you have to quote this string
|
|
||||||
- cron: '30 8 * * *'
|
|
||||||
|
|
||||||
permissions: # added using https://github.com/step-security/secure-repo
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
link-checker:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
# lychee only uses the GITHUB_TOKEN to avoid rate-limiting
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- name: Restore lychee cache
|
|
||||||
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
|
|
||||||
with:
|
|
||||||
path: .lycheecache
|
|
||||||
key: cache-lychee-${{ github.sha }}
|
|
||||||
restore-keys: cache-lychee-
|
|
||||||
|
|
||||||
- name: Link Checker
|
|
||||||
uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0
|
|
||||||
with:
|
|
||||||
args: >-
|
|
||||||
--config .github/lychee.toml
|
|
||||||
packages/mermaid/src/docs/**/*.md
|
|
||||||
README.md
|
|
||||||
README.zh-CN.md
|
|
||||||
fail: true
|
|
||||||
jobSummary: true
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
108
.github/workflows/lint.yml
vendored
108
.github/workflows/lint.yml
vendored
@@ -1,97 +1,57 @@
|
|||||||
name: Lint
|
name: Lint
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push: {}
|
||||||
merge_group:
|
|
||||||
pull_request:
|
pull_request:
|
||||||
workflow_dispatch:
|
types:
|
||||||
|
- opened
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
- synchronize
|
||||||
|
- ready_for_review
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: read
|
||||||
|
|
||||||
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: [16.x]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
# uses version from "packageManager" field in package.json
|
uses: actions/setup-node@v3
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: yarn
|
||||||
node-version-file: '.node-version'
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Install Yarn
|
||||||
|
run: npm i yarn --global
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: |
|
run: |
|
||||||
pnpm install --frozen-lockfile
|
yarn install --frozen-lockfile
|
||||||
env:
|
env:
|
||||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||||
|
|
||||||
- name: Run Linting
|
- name: Run Linting
|
||||||
shell: bash
|
run: yarn lint
|
||||||
run: |
|
|
||||||
if ! pnpm run lint; then
|
|
||||||
# print a nice error message on lint failure
|
|
||||||
ERROR_MESSAGE='Running `pnpm run lint` failed.'
|
|
||||||
ERROR_MESSAGE+=' Running `pnpm -w run lint:fix` may fix this issue. '
|
|
||||||
ERROR_MESSAGE+=" If this error doesn't occur on your local machine,"
|
|
||||||
ERROR_MESSAGE+=' make sure your packages are up-to-date by running `pnpm install`.'
|
|
||||||
ERROR_MESSAGE+=' You may also need to delete your prettier cache by running'
|
|
||||||
ERROR_MESSAGE+=' `rm ./node_modules/.cache/prettier/.prettier-cache`.'
|
|
||||||
echo "::error title=Lint failure::${ERROR_MESSAGE}"
|
|
||||||
# make sure to return an error exitcode so that GitHub actions shows a red-cross
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Verify `./src/config.type.ts` is in sync with `./src/schemas/config.schema.yaml`
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if ! pnpm run --filter mermaid types:verify-config; then
|
|
||||||
ERROR_MESSAGE='Running `pnpm run --filter mermaid types:verify-config` failed.'
|
|
||||||
ERROR_MESSAGE+=' This should be fixed by running'
|
|
||||||
ERROR_MESSAGE+=' `pnpm run --filter mermaid types:build-config`'
|
|
||||||
ERROR_MESSAGE+=' on your local machine.'
|
|
||||||
echo "::error title=Lint failure::${ERROR_MESSAGE}"
|
|
||||||
# make sure to return an error exitcode so that GitHub actions shows a red-cross
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Verify no circular dependencies
|
|
||||||
working-directory: ./packages/mermaid
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if ! pnpm run --filter mermaid checkCircle; then
|
|
||||||
ERROR_MESSAGE='Circular dependency detected.'
|
|
||||||
ERROR_MESSAGE+=' This should be fixed by removing the circular dependency.'
|
|
||||||
ERROR_MESSAGE+=' Run `pnpm run --filter mermaid checkCircle` on your local machine'
|
|
||||||
ERROR_MESSAGE+=' to see the circular dependency.'
|
|
||||||
echo "::error title=Lint failure::${ERROR_MESSAGE}"
|
|
||||||
# make sure to return an error exitcode so that GitHub actions shows a red-cross
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Verify Docs
|
- name: Verify Docs
|
||||||
id: verifyDocs
|
run: yarn docs:verify
|
||||||
working-directory: ./packages/mermaid
|
|
||||||
continue-on-error: ${{ github.event_name == 'push' }}
|
|
||||||
run: pnpm run docs:verify
|
|
||||||
|
|
||||||
- uses: testomatio/check-tests@0ea638fcec1820cf2e7b9854fdbdd04128a55bd4 # stable
|
- name: Check no `console.log()` in .jison files
|
||||||
with:
|
# ESLint can't parse .jison files directly
|
||||||
framework: cypress
|
# In the future, it might be worth making a `eslint-plugin-jison`, so
|
||||||
tests: './cypress/e2e/**/**.spec.js'
|
# that this will be built into the `yarn lint` command.
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
run: |
|
||||||
has-tests-label: true
|
shopt -s globstar
|
||||||
|
mkdir -p tmp/
|
||||||
|
for jison_file in src/**/*.jison; do
|
||||||
|
outfile="tmp/$(basename -- "$jison_file" .jison)-jison.js"
|
||||||
|
echo "Converting $jison_file to $outfile"
|
||||||
|
# default module-type (CJS) always adds a console.log()
|
||||||
|
yarn jison "$jison_file" --outfile "$outfile" --module-type "amd"
|
||||||
|
done
|
||||||
|
yarn eslint --no-eslintrc --rule no-console:error --parser "@babel/eslint-parser" "./tmp/*-jison.js"
|
||||||
|
19
.github/workflows/pr-labeler-config-validator.yml
vendored
Normal file
19
.github/workflows/pr-labeler-config-validator.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: Validate PR Labeler Configuration
|
||||||
|
on:
|
||||||
|
push: {}
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- ready_for_review
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pr-labeler:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Validate Configuration
|
||||||
|
uses: Yash-Singh1/pr-labeler-config-validator@releases/v0.0.3
|
||||||
|
with:
|
||||||
|
configuration-path: .github/pr-labeler.yml
|
22
.github/workflows/pr-labeler.yml
vendored
22
.github/workflows/pr-labeler.yml
vendored
@@ -1,31 +1,13 @@
|
|||||||
name: Apply labels to PR
|
name: Apply labels to PR
|
||||||
on:
|
on:
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
# required for pr-labeler to support PRs from forks
|
types: [opened]
|
||||||
# ===================== ⛔ ☢️ 🚫 ⚠️ Warning ⚠️ 🚫 ☢️ ⛔ =======================
|
|
||||||
# Be very careful what you put in this GitHub Action workflow file to avoid
|
|
||||||
# malicious PRs from getting access to the Mermaid-js repo.
|
|
||||||
#
|
|
||||||
# Please read the following first before reviewing/merging:
|
|
||||||
# - https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
|
|
||||||
# - https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
|
|
||||||
types: [opened, reopened, synchronize]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pr-labeler:
|
pr-labeler:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: read # read permission is required to read config file
|
|
||||||
pull-requests: write # write permission is required to label PRs
|
|
||||||
steps:
|
steps:
|
||||||
- name: Label PR
|
- name: Label PR
|
||||||
uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
|
uses: TimonVS/pr-labeler-action@v3
|
||||||
with:
|
|
||||||
config-name: pr-labeler.yml
|
|
||||||
disable-autolabeler: false
|
|
||||||
disable-releaser: true
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
59
.github/workflows/publish-docs.yml
vendored
59
.github/workflows/publish-docs.yml
vendored
@@ -1,59 +0,0 @@
|
|||||||
name: Deploy Vitepress docs to Pages
|
|
||||||
|
|
||||||
on:
|
|
||||||
# Runs on pushes targeting the default branch
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pages: write
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# Allow one concurrent deployment
|
|
||||||
concurrency:
|
|
||||||
group: 'pages'
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# Build job
|
|
||||||
build-docs:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
cache: pnpm
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
- name: Install Packages
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Setup Pages
|
|
||||||
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
|
|
||||||
|
|
||||||
- name: Run Build
|
|
||||||
run: pnpm --filter mermaid run docs:build:vitepress
|
|
||||||
|
|
||||||
- name: Upload artifact
|
|
||||||
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1
|
|
||||||
with:
|
|
||||||
path: packages/mermaid/src/vitepress/.vitepress/dist
|
|
||||||
|
|
||||||
# Deployment job
|
|
||||||
deploy-docs:
|
|
||||||
environment:
|
|
||||||
name: github-pages
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build-docs
|
|
||||||
steps:
|
|
||||||
- name: Deploy to GitHub Pages
|
|
||||||
id: deployment
|
|
||||||
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
|
|
15
.github/workflows/release-draft.yml
vendored
Normal file
15
.github/workflows/release-draft.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
name: Draft Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
draft-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Draft Release
|
||||||
|
uses: toolmantim/release-drafter@v5
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
30
.github/workflows/release-preview-publish.yml
vendored
30
.github/workflows/release-preview-publish.yml
vendored
@@ -6,34 +6,26 @@ on:
|
|||||||
- 'release/**'
|
- 'release/**'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish-preview:
|
publish:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@v3
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
|
|
||||||
- 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
|
node-version: 16.x
|
||||||
node-version-file: '.node-version'
|
- name: Install Yarn
|
||||||
|
run: npm i yarn --global
|
||||||
- name: Install Packages
|
|
||||||
run: |
|
|
||||||
pnpm install --frozen-lockfile
|
|
||||||
env:
|
|
||||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
|
||||||
|
|
||||||
- name: Install Json
|
- name: Install Json
|
||||||
run: npm i json@11.0.0 --global
|
run: npm i json --global
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
|
||||||
- name: Publish
|
- name: Publish
|
||||||
working-directory: ./packages/mermaid
|
|
||||||
run: |
|
run: |
|
||||||
PREVIEW_VERSION=$(git log --oneline "origin/$GITHUB_REF_NAME" ^"origin/master" | wc -l)
|
PREVIEW_VERSION=8
|
||||||
VERSION=$(echo ${{github.ref}} | tail -c +20)-preview.$PREVIEW_VERSION
|
VERSION=$(echo ${{github.ref}} | tail -c +20)-preview.$PREVIEW_VERSION
|
||||||
echo $VERSION
|
echo $VERSION
|
||||||
npm version --no-git-tag-version --allow-same-version $VERSION
|
npm version --no-git-tag-version --allow-same-version $VERSION
|
||||||
|
43
.github/workflows/release-preview.yml
vendored
43
.github/workflows/release-preview.yml
vendored
@@ -1,43 +0,0 @@
|
|||||||
name: Preview release
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [develop]
|
|
||||||
types: [opened, synchronize, labeled, ready_for_review]
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.event.number }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
actions: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
preview:
|
|
||||||
if: ${{ github.repository_owner == 'mermaid-js' }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
name: Publish preview release
|
|
||||||
timeout-minutes: 5
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repo
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
cache: pnpm
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
- name: Install Packages
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Publish packages
|
|
||||||
run: pnpx pkg-pr-new publish --pnpm './packages/*'
|
|
44
.github/workflows/release-publish.yml
vendored
Normal file
44
.github/workflows/release-publish.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
name: Publish release
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: fregante/setup-git-user@v1
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
- name: Install Yarn
|
||||||
|
run: npm i yarn --global
|
||||||
|
|
||||||
|
- name: Install Json
|
||||||
|
run: npm i json --global
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Prepare release
|
||||||
|
run: |
|
||||||
|
VERSION=${GITHUB_REF:10}
|
||||||
|
echo "Preparing release $VERSION"
|
||||||
|
git checkout -t origin/release/$VERSION
|
||||||
|
npm version --no-git-tag-version --allow-same-version $VERSION
|
||||||
|
git add package.json
|
||||||
|
git commit -m "Bump version $VERSION"
|
||||||
|
git checkout -t origin/master
|
||||||
|
git merge -m "Release $VERSION" --no-ff release/$VERSION
|
||||||
|
git push --no-verify
|
||||||
|
|
||||||
|
- name: Publish
|
||||||
|
run: |
|
||||||
|
npm set //registry.npmjs.org/:_authToken $NPM_TOKEN
|
||||||
|
npm publish
|
||||||
|
env:
|
||||||
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
46
.github/workflows/release.yml
vendored
46
.github/workflows/release.yml
vendored
@@ -1,46 +0,0 @@
|
|||||||
name: Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
permissions: # added using https://github.com/step-security/secure-repo
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
if: github.repository == 'mermaid-js/mermaid'
|
|
||||||
permissions:
|
|
||||||
contents: write # to create release (changesets/action)
|
|
||||||
id-token: write # OpenID Connect token needed for provenance
|
|
||||||
pull-requests: write # to create pull request (changesets/action)
|
|
||||||
name: Release
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repo
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
|
||||||
cache: pnpm
|
|
||||||
node-version-file: '.node-version'
|
|
||||||
|
|
||||||
- name: Install Packages
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Create Release Pull Request or Publish to npm
|
|
||||||
id: changesets
|
|
||||||
uses: changesets/action@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
|
|
56
.github/workflows/test.yml
vendored
56
.github/workflows/test.yml
vendored
@@ -1,55 +1,43 @@
|
|||||||
name: Unit Tests
|
name: Unit Tests
|
||||||
|
|
||||||
on: [push, pull_request, merge_group]
|
on: [push, pull_request]
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
unit-test:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [16.x]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
# uses version from "packageManager" field in package.json
|
uses: actions/setup-node@v3
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
|
||||||
with:
|
with:
|
||||||
cache: pnpm
|
cache: yarn
|
||||||
node-version-file: '.node-version'
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Install Yarn
|
||||||
|
run: npm i yarn --global
|
||||||
|
|
||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: |
|
run: |
|
||||||
pnpm install --frozen-lockfile
|
yarn install --frozen-lockfile
|
||||||
env:
|
env:
|
||||||
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
CYPRESS_CACHE_FOLDER: .cache/Cypress
|
||||||
|
|
||||||
- name: Run Unit Tests
|
- name: Run Unit Tests
|
||||||
run: |
|
run: |
|
||||||
pnpm test:coverage
|
yarn ci --coverage
|
||||||
|
|
||||||
- name: Run ganttDb tests using California timezone
|
- name: Upload Coverage to Coveralls
|
||||||
env:
|
# it feels a bit weird to use @master, but that's what the docs use
|
||||||
# Makes sure that gantt db works even in a timezone that has daylight savings
|
# (coveralls also doesn't publish a @v1 we can use)
|
||||||
# since some days have 25 hours instead of 24.
|
# https://github.com/marketplace/actions/coveralls-github-action
|
||||||
TZ: America/Los_Angeles
|
uses: coverallsapp/github-action@master
|
||||||
run: |
|
|
||||||
pnpm exec vitest run ./packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts --coverage
|
|
||||||
|
|
||||||
- name: Verify out-of-tree build with TypeScript
|
|
||||||
run: |
|
|
||||||
pnpm test:check:tsc
|
|
||||||
|
|
||||||
- name: Upload Coverage to Codecov
|
|
||||||
uses: codecov/codecov-action@13ce06bfc6bbe3ecf90edbbf1bc32fe5978ca1d3 # v5.3.1
|
|
||||||
# Run step only pushes to develop and pull_requests
|
|
||||||
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
|
|
||||||
with:
|
with:
|
||||||
files: ./coverage/vitest/lcov.info
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
flags: unit
|
flag-name: unit
|
||||||
name: mermaid-codecov
|
|
||||||
fail_ci_if_error: false
|
|
||||||
verbose: true
|
|
||||||
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
|
|
||||||
|
2
.github/workflows/unlock-reopened-issues.yml
vendored
2
.github/workflows/unlock-reopened-issues.yml
vendored
@@ -8,6 +8,6 @@ jobs:
|
|||||||
triage:
|
triage:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: Dunning-Kruger/unlock-issues@b06b7f7e5c3f2eaa1c6d5d89f40930e4d6d9699e # v1
|
- uses: Dunning-Kruger/unlock-issues@v1
|
||||||
with:
|
with:
|
||||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||||
|
15
.github/workflows/update-browserlist.yml
vendored
15
.github/workflows/update-browserlist.yml
vendored
@@ -5,21 +5,14 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update-browser-list:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@v3
|
||||||
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
- run: npx browserslist@latest --update-db
|
||||||
- run: npx update-browserslist-db@latest
|
|
||||||
- name: Commit changes
|
- name: Commit changes
|
||||||
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
|
uses: EndBug/add-and-commit@v9
|
||||||
with:
|
with:
|
||||||
author_name: ${{ github.actor }}
|
author_name: ${{ github.actor }}
|
||||||
author_email: ${{ github.actor }}@users.noreply.github.com
|
author_email: ${{ github.actor }}@users.noreply.github.com
|
||||||
message: 'chore: update browsers list'
|
message: 'chore: update browsers list'
|
||||||
push: false
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6
|
|
||||||
with:
|
|
||||||
branch: update-browserslist
|
|
||||||
title: Update Browserslist
|
|
||||||
|
28
.gitignore
vendored
28
.gitignore
vendored
@@ -3,10 +3,8 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
coverage/
|
coverage/
|
||||||
.idea/
|
.idea/
|
||||||
.pnpm-store/
|
|
||||||
|
|
||||||
dist
|
dist
|
||||||
v8-compile-cache-0
|
|
||||||
|
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
.npmrc
|
.npmrc
|
||||||
@@ -14,11 +12,7 @@ token
|
|||||||
|
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
# ignore files in /.vscode/ except for launch.json and extensions.json
|
.vscode/
|
||||||
/.vscode/**
|
|
||||||
!/.vscode/launch.json
|
|
||||||
!/.vscode/extensions.json
|
|
||||||
|
|
||||||
cypress/platform/current.html
|
cypress/platform/current.html
|
||||||
cypress/platform/experimental.html
|
cypress/platform/experimental.html
|
||||||
local/
|
local/
|
||||||
@@ -32,23 +26,3 @@ cypress/snapshots/
|
|||||||
|
|
||||||
# eslint --cache file
|
# eslint --cache file
|
||||||
.eslintcache
|
.eslintcache
|
||||||
.tsbuildinfo
|
|
||||||
tsconfig.tsbuildinfo
|
|
||||||
|
|
||||||
#knsv*.html
|
|
||||||
local*.html
|
|
||||||
stats/
|
|
||||||
|
|
||||||
**/user-avatars/*
|
|
||||||
**/contributor-names.json
|
|
||||||
.pnpm-store
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
demos/dev/**
|
|
||||||
!/demos/dev/example.html
|
|
||||||
!/demos/dev/reload.js
|
|
||||||
tsx-0/**
|
|
||||||
vite.config.ts.timestamp-*
|
|
||||||
|
|
||||||
# autogenereated by langium-cli
|
|
||||||
generated/
|
|
||||||
|
@@ -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"
|
||||||
|
|
||||||
|
yarn pre-commit
|
||||||
|
5
.lintstagedrc.json
Normal file
5
.lintstagedrc.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"src/docs/**": ["yarn docs:build --git"],
|
||||||
|
"src/docs.mts": ["yarn docs:build --git"],
|
||||||
|
"*.{ts,js,json,html,md,mts}": ["eslint --fix", "prettier --write"]
|
||||||
|
}
|
@@ -1,11 +0,0 @@
|
|||||||
export default {
|
|
||||||
'!(docs/**/*)*.{ts,js,html,md,mts}': [
|
|
||||||
'eslint --cache --cache-strategy content --fix',
|
|
||||||
// don't cache prettier yet, since we use `prettier-plugin-jsdoc`,
|
|
||||||
// and prettier doesn't invalidate cache on plugin updates"
|
|
||||||
// https://prettier.io/docs/en/cli.html#--cache
|
|
||||||
'prettier --write',
|
|
||||||
],
|
|
||||||
'.cspell/*.txt': ['tsx scripts/fixCSpell.ts'],
|
|
||||||
'**/*.jison': ['pnpm -w run lint:jison'],
|
|
||||||
};
|
|
@@ -1 +0,0 @@
|
|||||||
22.14.0
|
|
4
.npmrc
4
.npmrc
@@ -1,4 +0,0 @@
|
|||||||
registry=https://registry.npmjs.org
|
|
||||||
auto-install-peers=true
|
|
||||||
strict-peer-dependencies=false
|
|
||||||
package-import-method=clone-or-copy
|
|
6
.percy.yml
Normal file
6
.percy.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
version: 2
|
||||||
|
snapshot:
|
||||||
|
widths:
|
||||||
|
- 1280
|
||||||
|
discovery:
|
||||||
|
disable-cache: true
|
@@ -1,20 +1,3 @@
|
|||||||
dist
|
dist
|
||||||
cypress/platform/xss3.html
|
cypress/platform/xss3.html
|
||||||
.cache
|
.cache
|
||||||
.pnpm-store
|
|
||||||
coverage
|
|
||||||
# Autogenerated by PNPM
|
|
||||||
pnpm-lock.yaml
|
|
||||||
stats
|
|
||||||
**/.vitepress/components.d.ts
|
|
||||||
**/.vitepress/cache
|
|
||||||
.nyc_output
|
|
||||||
# Autogenerated by `pnpm run --filter mermaid types:build-config`
|
|
||||||
packages/mermaid/src/config.type.ts
|
|
||||||
# autogenereated by langium-cli
|
|
||||||
generated/
|
|
||||||
# Ignore the files creates in /demos/dev except for example.html
|
|
||||||
demos/dev/**
|
|
||||||
!/demos/dev/example.html
|
|
||||||
# TODO: Lots of errors to fix
|
|
||||||
cypress/platform/state-refactor.html
|
|
||||||
|
@@ -3,6 +3,5 @@
|
|||||||
"printWidth": 100,
|
"printWidth": 100,
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"useTabs": false,
|
"useTabs": false,
|
||||||
"tabWidth": 2,
|
"tabWidth": 2
|
||||||
"trailingComma": "es5"
|
|
||||||
}
|
}
|
||||||
|
15
.tern-project
Normal file
15
.tern-project
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"ecmaVersion": 6,
|
||||||
|
"libs": ["browser"],
|
||||||
|
"loadEagerly": [],
|
||||||
|
"dontLoad": ["node_modules/**"],
|
||||||
|
"plugins": {
|
||||||
|
"modules": {},
|
||||||
|
"es_modules": {},
|
||||||
|
"node": {},
|
||||||
|
"doc_comment": {
|
||||||
|
"fullDocs": true,
|
||||||
|
"strong": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
140
.vite/build.ts
140
.vite/build.ts
@@ -1,140 +0,0 @@
|
|||||||
import type { InlineConfig } from 'vite';
|
|
||||||
import { build, type PluginOption } from 'vite';
|
|
||||||
import { resolve } from 'path';
|
|
||||||
import { fileURLToPath } from 'url';
|
|
||||||
import jisonPlugin from './jisonPlugin.js';
|
|
||||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
|
|
||||||
import typescript from '@rollup/plugin-typescript';
|
|
||||||
import { visualizer } from 'rollup-plugin-visualizer';
|
|
||||||
import type { TemplateType } from 'rollup-plugin-visualizer/dist/plugin/template-types.js';
|
|
||||||
import istanbul from 'vite-plugin-istanbul';
|
|
||||||
import { packageOptions } from '../.build/common.js';
|
|
||||||
import { generateLangium } from '../.build/generateLangium.js';
|
|
||||||
|
|
||||||
const visualize = process.argv.includes('--visualize');
|
|
||||||
const watch = process.argv.includes('--watch');
|
|
||||||
const mermaidOnly = process.argv.includes('--mermaid');
|
|
||||||
const coverage = process.env.VITE_COVERAGE === 'true';
|
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
||||||
const sourcemap = false;
|
|
||||||
|
|
||||||
type OutputOptions = Exclude<
|
|
||||||
Exclude<InlineConfig['build'], undefined>['rollupOptions'],
|
|
||||||
undefined
|
|
||||||
>['output'];
|
|
||||||
|
|
||||||
const visualizerOptions = (packageName: string, core = false): PluginOption[] => {
|
|
||||||
if (packageName !== 'mermaid' || !visualize) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
return ['network', 'treemap', 'sunburst'].map(
|
|
||||||
(chartType) =>
|
|
||||||
visualizer({
|
|
||||||
filename: `./stats/${chartType}${core ? '.core' : ''}.html`,
|
|
||||||
template: chartType as TemplateType,
|
|
||||||
gzipSize: true,
|
|
||||||
brotliSize: true,
|
|
||||||
}) as PluginOption
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
interface BuildOptions {
|
|
||||||
minify: boolean | 'esbuild';
|
|
||||||
core?: boolean;
|
|
||||||
watch?: boolean;
|
|
||||||
entryName: keyof typeof packageOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions): InlineConfig => {
|
|
||||||
const external: (string | RegExp)[] = ['require', 'fs', 'path'];
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
console.log(entryName, packageOptions[entryName]);
|
|
||||||
const { name, file, packageName } = packageOptions[entryName];
|
|
||||||
const output: OutputOptions = [
|
|
||||||
{
|
|
||||||
name,
|
|
||||||
format: 'esm',
|
|
||||||
sourcemap,
|
|
||||||
entryFileNames: `${name}.esm${minify ? '.min' : ''}.mjs`,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const config: InlineConfig = {
|
|
||||||
configFile: false,
|
|
||||||
build: {
|
|
||||||
emptyOutDir: false,
|
|
||||||
outDir: resolve(__dirname, `../packages/${packageName}/dist`),
|
|
||||||
lib: {
|
|
||||||
entry: resolve(__dirname, `../packages/${packageName}/src/${file}`),
|
|
||||||
name,
|
|
||||||
// the proper extensions will be added
|
|
||||||
fileName: name,
|
|
||||||
},
|
|
||||||
minify,
|
|
||||||
rollupOptions: {
|
|
||||||
external,
|
|
||||||
output,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
define: {
|
|
||||||
'import.meta.vitest': 'undefined',
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
extensions: [],
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
jisonPlugin(),
|
|
||||||
jsonSchemaPlugin(), // handles `.schema.yaml` files
|
|
||||||
typescript({ compilerOptions: { declaration: false } }),
|
|
||||||
istanbul({
|
|
||||||
exclude: ['node_modules', 'test/', '__mocks__', 'generated'],
|
|
||||||
extension: ['.js', '.ts'],
|
|
||||||
requireEnv: true,
|
|
||||||
forceBuildInstrument: coverage,
|
|
||||||
}),
|
|
||||||
...visualizerOptions(packageName, core),
|
|
||||||
],
|
|
||||||
define: {
|
|
||||||
// Needs to be string
|
|
||||||
includeLargeFeatures: 'true',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
if (watch && config.build) {
|
|
||||||
config.build.watch = {
|
|
||||||
include: ['packages/mermaid-example-diagram/src/**', 'packages/mermaid/src/**'],
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return config;
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
|
||||||
await build(getBuildConfig({ minify: false, entryName }));
|
|
||||||
};
|
|
||||||
|
|
||||||
const main = async () => {
|
|
||||||
const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
|
|
||||||
for (const pkg of packageNames.filter(
|
|
||||||
(pkg) => !mermaidOnly || pkg === 'mermaid' || pkg === 'parser'
|
|
||||||
)) {
|
|
||||||
await buildPackage(pkg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
await generateLangium();
|
|
||||||
|
|
||||||
if (watch) {
|
|
||||||
await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
|
|
||||||
void build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
|
|
||||||
if (!mermaidOnly) {
|
|
||||||
void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
|
|
||||||
void build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
|
|
||||||
}
|
|
||||||
} else if (visualize) {
|
|
||||||
await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
|
|
||||||
await build(getBuildConfig({ minify: false, core: true, entryName: 'mermaid' }));
|
|
||||||
await build(getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }));
|
|
||||||
} else {
|
|
||||||
void main();
|
|
||||||
}
|
|
@@ -1,17 +0,0 @@
|
|||||||
import { transformJison } from '../.build/jisonTransformer.js';
|
|
||||||
|
|
||||||
const fileRegex = /\.(jison)$/;
|
|
||||||
|
|
||||||
export default function jison() {
|
|
||||||
return {
|
|
||||||
name: 'jison',
|
|
||||||
transform(src: string, id: string) {
|
|
||||||
if (fileRegex.test(id)) {
|
|
||||||
return {
|
|
||||||
code: transformJison(src),
|
|
||||||
map: null, // provide source map if available
|
|
||||||
};
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
@@ -1,28 +0,0 @@
|
|||||||
import type { PluginOption } from 'vite';
|
|
||||||
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Vite plugin that handles JSON Schemas saved as a `.schema.yaml` file.
|
|
||||||
*
|
|
||||||
* Use `my-example.schema.yaml?only-defaults=true` to only load the default values.
|
|
||||||
*/
|
|
||||||
export default function jsonSchemaPlugin(): PluginOption {
|
|
||||||
return {
|
|
||||||
name: 'json-schema-plugin',
|
|
||||||
transform(src: string, id: string) {
|
|
||||||
const idAsUrl = new URL(id, 'file:///');
|
|
||||||
|
|
||||||
if (!idAsUrl.pathname.endsWith('schema.yaml')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const jsonSchema = loadSchema(src, idAsUrl.pathname);
|
|
||||||
return {
|
|
||||||
code: idAsUrl.searchParams.get('only-defaults')
|
|
||||||
? getDefaults(jsonSchema)
|
|
||||||
: getSchema(jsonSchema),
|
|
||||||
map: null, // no source map
|
|
||||||
};
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
@@ -1,31 +0,0 @@
|
|||||||
import express from 'express';
|
|
||||||
import cors from 'cors';
|
|
||||||
import { createServer as createViteServer } from 'vite';
|
|
||||||
import { packageOptions } from '../.build/common.js';
|
|
||||||
|
|
||||||
async function createServer() {
|
|
||||||
const app = express();
|
|
||||||
|
|
||||||
// Create Vite server in middleware mode
|
|
||||||
const vite = await createViteServer({
|
|
||||||
configFile: './vite.config.ts',
|
|
||||||
mode: 'production',
|
|
||||||
server: { middlewareMode: true },
|
|
||||||
appType: 'custom', // don't include Vite's default HTML handling middleware
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use(cors());
|
|
||||||
for (const { packageName } of Object.values(packageOptions)) {
|
|
||||||
app.use(express.static(`./packages/${packageName}/dist`));
|
|
||||||
}
|
|
||||||
app.use(vite.middlewares);
|
|
||||||
app.use(express.static('demos'));
|
|
||||||
app.use(express.static('cypress/platform'));
|
|
||||||
|
|
||||||
app.listen(9000, () => {
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
console.log(`Listening on http://localhost:9000`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void createServer();
|
|
8
.vscode/extensions.json
vendored
8
.vscode/extensions.json
vendored
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": [
|
|
||||||
"dbaeumer.vscode-eslint",
|
|
||||||
"esbenp.prettier-vscode",
|
|
||||||
"vitest.explorer",
|
|
||||||
"luniclynx.bison"
|
|
||||||
]
|
|
||||||
}
|
|
29
.vscode/launch.json
vendored
29
.vscode/launch.json
vendored
@@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"type": "node",
|
|
||||||
"request": "launch",
|
|
||||||
"name": "Debug Current Test File",
|
|
||||||
"autoAttachChildProcesses": true,
|
|
||||||
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
|
||||||
"program": "${workspaceRoot}/node_modules/vitest/vitest.mjs",
|
|
||||||
"args": ["run", "${relativeFile}"],
|
|
||||||
"smartStep": true,
|
|
||||||
"console": "integratedTerminal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Docs generation",
|
|
||||||
"type": "node",
|
|
||||||
"request": "launch",
|
|
||||||
"args": ["scripts/docs.cli.mts"],
|
|
||||||
// we'll need to change this to --import in Node.JS v20.6.0 and up
|
|
||||||
"runtimeArgs": ["--loader", "tsx/esm"],
|
|
||||||
"cwd": "${workspaceRoot}/packages/mermaid",
|
|
||||||
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
|
||||||
"smartStep": true,
|
|
||||||
"internalConsoleOptions": "openOnSessionStart"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
25
.webpack/loaders/jison.js
Normal file
25
.webpack/loaders/jison.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
const { Generator } = require('jison');
|
||||||
|
const validate = require('schema-utils');
|
||||||
|
|
||||||
|
const schema = {
|
||||||
|
title: 'Jison Parser options',
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
'token-stack': {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
debug: {
|
||||||
|
type: 'boolean',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
additionalProperties: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = function jisonLoader(source) {
|
||||||
|
const options = this.getOptions();
|
||||||
|
(validate.validate || validate)(schema, options, {
|
||||||
|
name: 'Jison Loader',
|
||||||
|
baseDataPath: 'options',
|
||||||
|
});
|
||||||
|
return new Generator(source, options).generate();
|
||||||
|
};
|
45
.webpack/webpack.config.babel.js
Normal file
45
.webpack/webpack.config.babel.js
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import { merge, mergeWithCustomize, customizeObject } from 'webpack-merge';
|
||||||
|
import nodeExternals from 'webpack-node-externals';
|
||||||
|
import baseConfig from './webpack.config.base';
|
||||||
|
|
||||||
|
export default (_env, args) => {
|
||||||
|
switch (args.mode) {
|
||||||
|
case 'development':
|
||||||
|
return [
|
||||||
|
baseConfig,
|
||||||
|
merge(baseConfig, {
|
||||||
|
externals: [nodeExternals()],
|
||||||
|
output: {
|
||||||
|
filename: '[name].core.js',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
case 'production':
|
||||||
|
return [
|
||||||
|
// umd
|
||||||
|
merge(baseConfig, {
|
||||||
|
output: {
|
||||||
|
filename: '[name].min.js',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
// esm
|
||||||
|
mergeWithCustomize({
|
||||||
|
customizeObject: customizeObject({
|
||||||
|
'output.library': 'replace',
|
||||||
|
}),
|
||||||
|
})(baseConfig, {
|
||||||
|
experiments: {
|
||||||
|
outputModule: true,
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
library: {
|
||||||
|
type: 'module',
|
||||||
|
},
|
||||||
|
filename: '[name].esm.min.mjs',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
default:
|
||||||
|
throw new Error('No matching configuration was found!');
|
||||||
|
}
|
||||||
|
};
|
58
.webpack/webpack.config.base.js
Normal file
58
.webpack/webpack.config.base.js
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
import path from 'path';
|
||||||
|
export const resolveRoot = (...relativePath) => path.resolve(__dirname, '..', ...relativePath);
|
||||||
|
|
||||||
|
export default {
|
||||||
|
amd: false, // https://github.com/lodash/lodash/issues/3052
|
||||||
|
target: 'web',
|
||||||
|
entry: {
|
||||||
|
mermaid: './src/mermaid',
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.wasm', '.mjs', '.js', '.ts', '.json', '.jison'],
|
||||||
|
fallback: {
|
||||||
|
fs: false, // jison generated code requires 'fs'
|
||||||
|
path: require.resolve('path-browserify'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: resolveRoot('./dist'),
|
||||||
|
filename: '[name].js',
|
||||||
|
library: {
|
||||||
|
name: 'mermaid',
|
||||||
|
type: 'umd',
|
||||||
|
export: 'default',
|
||||||
|
},
|
||||||
|
globalObject: 'typeof self !== "undefined" ? self : this',
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.ts$/,
|
||||||
|
use: 'ts-loader',
|
||||||
|
exclude: /node_modules/,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
include: [resolveRoot('./src'), resolveRoot('./node_modules/dagre-d3-renderer/lib')],
|
||||||
|
use: {
|
||||||
|
loader: 'babel-loader',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// load scss to string
|
||||||
|
test: /\.scss$/,
|
||||||
|
use: ['css-to-string-loader', 'css-loader', 'sass-loader'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.jison$/,
|
||||||
|
use: {
|
||||||
|
loader: path.resolve(__dirname, './loaders/jison.js'),
|
||||||
|
options: {
|
||||||
|
'token-stack': true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
devtool: 'source-map',
|
||||||
|
};
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user