diff --git a/.build/types.ts b/.build/types.ts
index 4192407824..9dec05a68b 100644
--- a/.build/types.ts
+++ b/.build/types.ts
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
import { packageOptions } from './common.js';
import { execSync } from 'child_process';
@@ -5,11 +6,17 @@ const buildType = (packageName: string) => {
console.log(`Building types for ${packageName}`);
try {
const out = execSync(`tsc -p ./packages/${packageName}/tsconfig.json --emitDeclarationOnly`);
- out.length > 0 && console.log(out.toString());
+ if (out.length > 0) {
+ console.log(out.toString());
+ }
} catch (e) {
console.error(e);
- e.stdout.length > 0 && console.error(e.stdout.toString());
- e.stderr.length > 0 && console.error(e.stderr.toString());
+ if (e.stdout.length > 0) {
+ console.error(e.stdout.toString());
+ }
+ if (e.stderr.length > 0) {
+ console.error(e.stderr.toString());
+ }
}
};
diff --git a/.cspell/code-terms.txt b/.cspell/code-terms.txt
index fa063616a7..36d3b94c65 100644
--- a/.cspell/code-terms.txt
+++ b/.cspell/code-terms.txt
@@ -13,6 +13,7 @@ bqstring
BQUOTE
bramp
BRKT
+brotli
callbackargs
callbackname
classdef
@@ -111,6 +112,7 @@ STYLECLASS
STYLEOPTS
subcomponent
subcomponents
+subconfig
SUBROUTINEEND
SUBROUTINESTART
Subschemas
@@ -125,6 +127,7 @@ titlevalue
topbar
TRAPEND
TRAPSTART
+treemap
ts-nocheck
tsdoc
typeof
diff --git a/.cspell/contributors.txt b/.cspell/contributors.txt
index bd3ad9da24..b7f52f8d0c 100644
--- a/.cspell/contributors.txt
+++ b/.cspell/contributors.txt
@@ -4,5 +4,6 @@ cpettitt
Dong Cai
Nikolay Rozhkov
Peng Xiao
+Per Brolin
subhash-halder
Vinod Sidharth
diff --git a/.cspell/libraries.txt b/.cspell/libraries.txt
index 9d29261868..38fd605a4a 100644
--- a/.cspell/libraries.txt
+++ b/.cspell/libraries.txt
@@ -55,12 +55,14 @@ pyplot
redmine
rehype
rscratch
+shiki
sparkline
sphinxcontrib
ssim
stylis
Swimm
tsbuildinfo
+tseslint
Tuleap
Typora
unocss
diff --git a/.cspell/misc-terms.txt b/.cspell/misc-terms.txt
index 467e48891e..0efd1dcc00 100644
--- a/.cspell/misc-terms.txt
+++ b/.cspell/misc-terms.txt
@@ -1 +1,4 @@
+BRANDES
+handdrawn
+KOEPF
newbranch
diff --git a/.esbuild/build.ts b/.esbuild/build.ts
index 3c87f9d621..505c18405d 100644
--- a/.esbuild/build.ts
+++ b/.esbuild/build.ts
@@ -2,7 +2,8 @@ import { build } from 'esbuild';
import { mkdir, writeFile } from 'node:fs/promises';
import { packageOptions } from '../.build/common.js';
import { generateLangium } from '../.build/generateLangium.js';
-import { MermaidBuildOptions, defaultOptions, getBuildConfig } from './util.js';
+import type { MermaidBuildOptions } from './util.js';
+import { defaultOptions, getBuildConfig } from './util.js';
const shouldVisualize = process.argv.includes('--visualize');
@@ -35,11 +36,11 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
if (shouldVisualize) {
for (const { metafile } of results) {
- if (!metafile) {
+ if (!metafile?.outputs) {
continue;
}
const fileName = Object.keys(metafile.outputs)
- .filter((file) => !file.includes('chunks') && file.endsWith('js'))[0]
+ .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));
@@ -48,13 +49,14 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
};
const handler = (e) => {
+ // eslint-disable-next-line no-console
console.error(e);
process.exit(1);
};
const main = async () => {
await generateLangium();
- await mkdir('stats').catch(() => {});
+ 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) {
diff --git a/.esbuild/jisonPlugin.ts b/.esbuild/jisonPlugin.ts
index de801ea9f3..007516f089 100644
--- a/.esbuild/jisonPlugin.ts
+++ b/.esbuild/jisonPlugin.ts
@@ -1,6 +1,6 @@
import { readFile } from 'node:fs/promises';
import { transformJison } from '../.build/jisonTransformer.js';
-import { Plugin } from 'esbuild';
+import type { Plugin } from 'esbuild';
export const jisonPlugin: Plugin = {
name: 'jison',
diff --git a/.esbuild/server.ts b/.esbuild/server.ts
index 39204d1289..ef61ebec22 100644
--- a/.esbuild/server.ts
+++ b/.esbuild/server.ts
@@ -1,11 +1,12 @@
-import express from 'express';
-import type { NextFunction, Request, Response } from 'express';
+/* eslint-disable no-console */
+import chokidar from 'chokidar';
import cors from 'cors';
-import { getBuildConfig, defaultOptions } from './util.js';
import { context } from 'esbuild';
-import chokidar from 'chokidar';
-import { generateLangium } from '../.build/generateLangium.js';
+import 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, entryName: packageName })
@@ -40,7 +41,7 @@ const rebuildAll = async () => {
};
let clients: { id: number; response: Response }[] = [];
-function eventsHandler(request: Request, response: Response, next: NextFunction) {
+function eventsHandler(request: Request, response: Response) {
const headers = {
'Content-Type': 'text/event-stream',
Connection: 'keep-alive',
@@ -66,6 +67,7 @@ function handleFileChange() {
if (timeoutID !== undefined) {
clearTimeout(timeoutID);
}
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
timeoutID = setTimeout(async () => {
await rebuildAll();
sendEventsToAll();
@@ -86,14 +88,14 @@ async function createServer() {
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 (/\.langium$/.test(path)) {
+ if (path.endsWith('.langium')) {
await generateLangium();
}
handleFileChange();
@@ -112,4 +114,4 @@ async function createServer() {
});
}
-createServer();
+void createServer();
diff --git a/.esbuild/util.ts b/.esbuild/util.ts
index 5c21cbf452..6d424ab17c 100644
--- a/.esbuild/util.ts
+++ b/.esbuild/util.ts
@@ -56,7 +56,7 @@ export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
const external: string[] = ['require', 'fs', 'path'];
const { name, file, packageName } = packageOptions[entryName];
const outFileName = getFileName(name, options);
- let output: BuildOptions = buildOptions({
+ const output: BuildOptions = buildOptions({
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
entryPoints: {
[outFileName]: `src/${file}`,
diff --git a/.eslintignore b/.eslintignore
deleted file mode 120000
index 3e4e48b0b5..0000000000
--- a/.eslintignore
+++ /dev/null
@@ -1 +0,0 @@
-.gitignore
\ No newline at end of file
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
deleted file mode 100644
index c9428c9f59..0000000000
--- a/.eslintrc.cjs
+++ /dev/null
@@ -1,190 +0,0 @@
-module.exports = {
- env: {
- browser: true,
- es6: true,
- 'jest/globals': true,
- node: true,
- },
- root: true,
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaFeatures: {
- experimentalObjectRestSpread: true,
- jsx: true,
- },
- tsconfigRootDir: __dirname,
- sourceType: 'module',
- ecmaVersion: 2022,
- allowAutomaticSingleRunInference: true,
- project: ['./tsconfig.eslint.json', './packages/*/tsconfig.json'],
- parser: '@typescript-eslint/parser',
- },
- extends: [
- 'eslint:recommended',
- 'plugin:@typescript-eslint/recommended',
- 'plugin:json/recommended',
- 'plugin:markdown/recommended-legacy',
- 'plugin:@cspell/recommended',
- 'prettier',
- ],
- plugins: [
- '@typescript-eslint',
- 'no-only-tests',
- 'html',
- 'jest',
- 'jsdoc',
- 'json',
- '@cspell',
- 'lodash',
- 'unicorn',
- ],
- ignorePatterns: [
- // this file is automatically generated by `pnpm run --filter mermaid types:build-config`
- 'packages/mermaid/src/config.type.ts',
- ],
- rules: {
- curly: 'error',
- 'no-console': 'error',
- 'no-prototype-builtins': 'off',
- 'no-unused-vars': 'off',
- 'cypress/no-async-tests': 'off',
- '@typescript-eslint/consistent-type-imports': 'error',
- '@typescript-eslint/no-explicit-any': 'warn',
- '@typescript-eslint/no-floating-promises': 'error',
- '@typescript-eslint/no-misused-promises': 'error',
- '@typescript-eslint/no-unused-vars': 'warn',
- '@typescript-eslint/consistent-type-definitions': 'error',
- '@typescript-eslint/ban-ts-comment': [
- 'error',
- {
- 'ts-expect-error': 'allow-with-description',
- 'ts-ignore': 'allow-with-description',
- 'ts-nocheck': 'allow-with-description',
- 'ts-check': 'allow-with-description',
- minimumDescriptionLength: 10,
- },
- ],
- '@typescript-eslint/naming-convention': [
- 'error',
- {
- selector: 'typeLike',
- format: ['PascalCase'],
- custom: {
- regex: '^I[A-Z]',
- match: false,
- },
- },
- ],
- 'json/*': ['error', 'allowComments'],
- '@cspell/spellchecker': [
- 'error',
- {
- checkIdentifiers: true,
- checkStrings: true,
- checkStringTemplates: true,
- },
- ],
- 'no-empty': [
- 'error',
- {
- allowEmptyCatch: true,
- },
- ],
- 'no-only-tests/no-only-tests': 'error',
- 'lodash/import-scope': ['error', 'method'],
- 'unicorn/better-regex': 'error',
- 'unicorn/no-abusive-eslint-disable': 'error',
- 'unicorn/no-array-push-push': 'error',
- 'unicorn/no-for-loop': 'error',
- 'unicorn/no-instanceof-array': 'error',
- 'unicorn/no-typeof-undefined': 'error',
- 'unicorn/no-unnecessary-await': 'error',
- 'unicorn/no-unsafe-regex': 'warn',
- 'unicorn/no-useless-promise-resolve-reject': 'error',
- 'unicorn/prefer-array-find': 'error',
- 'unicorn/prefer-array-flat-map': 'error',
- 'unicorn/prefer-array-index-of': 'error',
- 'unicorn/prefer-array-some': 'error',
- 'unicorn/prefer-default-parameters': 'error',
- 'unicorn/prefer-includes': 'error',
- 'unicorn/prefer-negative-index': 'error',
- 'unicorn/prefer-object-from-entries': 'error',
- 'unicorn/prefer-string-starts-ends-with': 'error',
- 'unicorn/prefer-string-trim-start-end': 'error',
- 'unicorn/string-content': 'error',
- 'unicorn/prefer-spread': 'error',
- 'unicorn/no-lonely-if': 'error',
- },
- overrides: [
- {
- files: ['cypress/**', 'demos/**'],
- rules: {
- 'no-console': 'off',
- },
- },
- {
- files: ['*.{js,jsx,mjs,cjs}'],
- extends: ['plugin:jsdoc/recommended'],
- rules: {
- 'jsdoc/check-indentation': 'off',
- 'jsdoc/check-alignment': 'off',
- 'jsdoc/check-line-alignment': 'off',
- 'jsdoc/multiline-blocks': 'off',
- 'jsdoc/newline-after-description': 'off',
- 'jsdoc/tag-lines': 'off',
- 'jsdoc/require-param-description': 'off',
- 'jsdoc/require-param-type': 'off',
- 'jsdoc/require-returns': 'off',
- 'jsdoc/require-returns-description': 'off',
- },
- },
- {
- files: ['*.{ts,tsx}'],
- plugins: ['tsdoc'],
- rules: {
- 'no-restricted-syntax': [
- 'error',
- {
- selector: 'TSEnumDeclaration',
- message:
- 'Prefer using TypeScript union types over TypeScript enum, since TypeScript enums have a bunch of issues, see https://dev.to/dvddpl/whats-the-problem-with-typescript-enums-2okj',
- },
- ],
- 'tsdoc/syntax': 'error',
- },
- },
- {
- files: ['*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'],
- rules: {
- 'jsdoc/require-jsdoc': 'off',
- '@typescript-eslint/no-unused-vars': 'off',
- },
- },
- {
- files: ['*.spec.{ts,js}', 'tests/**', 'cypress/**/*.js'],
- rules: {
- '@cspell/spellchecker': [
- 'error',
- {
- checkIdentifiers: false,
- checkStrings: false,
- checkStringTemplates: false,
- },
- ],
- },
- },
- {
- files: ['*.html', '*.md', '**/*.md/*'],
- rules: {
- 'no-var': 'error',
- 'no-undef': 'off',
- '@typescript-eslint/no-unused-vars': 'off',
- '@typescript-eslint/no-floating-promises': 'off',
- '@typescript-eslint/no-misused-promises': 'off',
- },
- parserOptions: {
- project: null,
- },
- },
- ],
-};
diff --git a/.vite/build.ts b/.vite/build.ts
index 7ce93a497f..486d594525 100644
--- a/.vite/build.ts
+++ b/.vite/build.ts
@@ -1,4 +1,5 @@
-import { build, InlineConfig, type PluginOption } from 'vite';
+import type { InlineConfig } from 'vite';
+import { build, type PluginOption } from 'vite';
import { resolve } from 'path';
import { fileURLToPath } from 'url';
import jisonPlugin from './jisonPlugin.js';
@@ -46,9 +47,10 @@ interface BuildOptions {
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];
- let output: OutputOptions = [
+ const output: OutputOptions = [
{
name,
format: 'esm',
@@ -83,7 +85,6 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
plugins: [
jisonPlugin(),
jsonSchemaPlugin(), // handles `.schema.yaml` files
- // @ts-expect-error According to the type definitions, rollup plugins are incompatible with vite
typescript({ compilerOptions: { declaration: false } }),
istanbul({
exclude: ['node_modules', 'test/', '__mocks__', 'generated'],
@@ -121,10 +122,10 @@ await generateLangium();
if (watch) {
await build(getBuildConfig({ minify: false, watch, core: false, entryName: 'parser' }));
- build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
+ void build(getBuildConfig({ minify: false, watch, core: false, entryName: 'mermaid' }));
if (!mermaidOnly) {
- build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-example-diagram' }));
- build(getBuildConfig({ minify: false, watch, entryName: 'mermaid-zenuml' }));
+ 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' }));
diff --git a/.vite/jsonSchemaPlugin.ts b/.vite/jsonSchemaPlugin.ts
index 2e5b5cc0b5..3614d5b457 100644
--- a/.vite/jsonSchemaPlugin.ts
+++ b/.vite/jsonSchemaPlugin.ts
@@ -1,4 +1,4 @@
-import { PluginOption } from 'vite';
+import type { PluginOption } from 'vite';
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
/**
diff --git a/.vite/server.ts b/.vite/server.ts
index 99d16f6f24..078599dc1c 100644
--- a/.vite/server.ts
+++ b/.vite/server.ts
@@ -23,8 +23,9 @@ async function createServer() {
app.use(express.static('cypress/platform'));
app.listen(9000, () => {
+ // eslint-disable-next-line no-console
console.log(`Listening on http://localhost:9000`);
});
}
-createServer();
+void createServer();
diff --git a/cypress/helpers/util.ts b/cypress/helpers/util.ts
index 17bebeaef8..3ffba697a8 100644
--- a/cypress/helpers/util.ts
+++ b/cypress/helpers/util.ts
@@ -35,7 +35,7 @@ export const mermaidUrl = (
};
const objStr: string = JSON.stringify(codeObject);
let url = `http://localhost:9000/e2e.html?graph=${utf8ToB64(objStr)}`;
- if (api) {
+ if (api && typeof graphStr === 'string') {
url = `http://localhost:9000/xss.html?graph=${graphStr}`;
}
@@ -54,16 +54,15 @@ export const imgSnapshotTest = (
): void => {
const options: CypressMermaidConfig = {
..._options,
- fontFamily: _options.fontFamily || 'courier',
+ fontFamily: _options.fontFamily ?? 'courier',
// @ts-ignore TODO: Fix type of fontSize
- fontSize: _options.fontSize || '16px',
+ fontSize: _options.fontSize ?? '16px',
sequence: {
- ...(_options.sequence || {}),
+ ...(_options.sequence ?? {}),
actorFontFamily: 'courier',
- noteFontFamily:
- _options.sequence && _options.sequence.noteFontFamily
- ? _options.sequence.noteFontFamily
- : 'courier',
+ noteFontFamily: _options.sequence?.noteFontFamily
+ ? _options.sequence.noteFontFamily
+ : 'courier',
messageFontFamily: 'courier',
},
};
@@ -95,7 +94,7 @@ export const openURLAndVerifyRendering = (
options: CypressMermaidConfig,
validation?: any
): void => {
- const name: string = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
+ const name: string = (options.name ?? cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
cy.visit(url);
cy.window().should('have.property', 'rendered', true);
diff --git a/cypress/integration/rendering/sequencediagram.spec.js b/cypress/integration/rendering/sequencediagram.spec.js
index 7b4e98b4d5..f18e99abf8 100644
--- a/cypress/integration/rendering/sequencediagram.spec.js
+++ b/cypress/integration/rendering/sequencediagram.spec.js
@@ -1,8 +1,6 @@
-//
-
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
-context('Sequence diagram', () => {
+describe('Sequence diagram', () => {
it('should render a sequence diagram with boxes', () => {
renderGraph(
`
@@ -244,7 +242,7 @@ context('Sequence diagram', () => {
`
);
});
- context('font settings', () => {
+ describe('font settings', () => {
it('should render different note fonts when configured', () => {
imgSnapshotTest(
`
@@ -341,7 +339,7 @@ context('Sequence diagram', () => {
);
});
});
- context('auth width scaling', () => {
+ describe('auth width scaling', () => {
it('should render long actor descriptions', () => {
imgSnapshotTest(
`
@@ -530,7 +528,7 @@ context('Sequence diagram', () => {
);
});
});
- context('background rects', () => {
+ describe('background rects', () => {
it('should render a single and nested rects', () => {
imgSnapshotTest(
`
@@ -810,7 +808,7 @@ context('Sequence diagram', () => {
);
});
});
- context('directives', () => {
+ describe('directives', () => {
it('should override config with directive settings', () => {
imgSnapshotTest(
`
@@ -842,7 +840,7 @@ context('Sequence diagram', () => {
);
});
});
- context('links', () => {
+ describe('links', () => {
it('should support actor links', () => {
renderGraph(
`
@@ -858,7 +856,7 @@ context('Sequence diagram', () => {
);
cy.get('#actor0_popup').should((popupMenu) => {
const style = popupMenu.attr('style');
- expect(style).to.undefined;
+ // expect(style).to.undefined;
});
cy.get('#root-0').click();
cy.get('#actor0_popup').should((popupMenu) => {
@@ -933,7 +931,7 @@ context('Sequence diagram', () => {
);
});
});
- context('svg size', () => {
+ describe('svg size', () => {
it('should render a sequence diagram when useMaxWidth is true (default)', () => {
renderGraph(
`
@@ -1012,7 +1010,7 @@ context('Sequence diagram', () => {
});
});
});
- context('render after error', () => {
+ describe('render after error', () => {
it('should render diagram after fixing destroy participant error', () => {
cy.on('uncaught:exception', (err) => {
return false;
diff --git a/cypress/platform/bundle-test.js b/cypress/platform/bundle-test.js
index f5bf0ecd6a..24ce8d753c 100644
--- a/cypress/platform/bundle-test.js
+++ b/cypress/platform/bundle-test.js
@@ -27,7 +27,7 @@ const code3 = `flowchart TD
A( )
B(Bold text! )`;
-if (location.href.match('test-html-escaping')) {
+if (/test-html-escaping/.exec(location.href)) {
code = code3;
}
diff --git a/cypress/platform/viewer.js b/cypress/platform/viewer.js
index 482a90646d..c397f0e168 100644
--- a/cypress/platform/viewer.js
+++ b/cypress/platform/viewer.js
@@ -132,7 +132,7 @@ if (typeof document !== 'undefined') {
window.addEventListener(
'load',
function () {
- if (this.location.href.match('xss.html')) {
+ if (/xss.html/.exec(this.location.href)) {
this.console.log('Using api');
void contentLoadedApi().finally(markRendered);
} else {
diff --git a/docs/config/setup/interfaces/mermaid.DetailedError.md b/docs/config/setup/interfaces/mermaid.DetailedError.md
index 6b7d471ae9..3b019e58ad 100644
--- a/docs/config/setup/interfaces/mermaid.DetailedError.md
+++ b/docs/config/setup/interfaces/mermaid.DetailedError.md
@@ -16,7 +16,7 @@
#### Defined in
-[packages/mermaid/src/utils.ts:789](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L789)
+[packages/mermaid/src/utils.ts:785](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L785)
---
@@ -26,7 +26,7 @@
#### Defined in
-[packages/mermaid/src/utils.ts:787](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L787)
+[packages/mermaid/src/utils.ts:783](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L783)
---
@@ -36,7 +36,7 @@
#### Defined in
-[packages/mermaid/src/utils.ts:790](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L790)
+[packages/mermaid/src/utils.ts:786](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L786)
---
@@ -46,4 +46,4 @@
#### Defined in
-[packages/mermaid/src/utils.ts:785](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L785)
+[packages/mermaid/src/utils.ts:781](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/utils.ts#L781)
diff --git a/docs/config/setup/modules/mermaid.md b/docs/config/setup/modules/mermaid.md
index d51400d6ef..10e9330b5c 100644
--- a/docs/config/setup/modules/mermaid.md
+++ b/docs/config/setup/modules/mermaid.md
@@ -44,7 +44,7 @@
#### Defined in
-[packages/mermaid/src/Diagram.ts:9](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/Diagram.ts#L9)
+[packages/mermaid/src/Diagram.ts:10](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/Diagram.ts#L10)
## Variables
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000000..ed703ea714
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,221 @@
+import cspell from '@cspell/eslint-plugin';
+import eslint from '@eslint/js';
+import cypress from 'eslint-plugin-cypress';
+import jsdoc from 'eslint-plugin-jsdoc';
+import json from 'eslint-plugin-json';
+import lodash from 'eslint-plugin-lodash';
+import markdown from 'eslint-plugin-markdown';
+import noOnlyTests from 'eslint-plugin-no-only-tests';
+import tsdoc from 'eslint-plugin-tsdoc';
+import unicorn from 'eslint-plugin-unicorn';
+import globals from 'globals';
+import tseslint from 'typescript-eslint';
+
+export default tseslint.config(
+ eslint.configs.recommended,
+ ...tseslint.configs.recommendedTypeChecked,
+ ...tseslint.configs.stylisticTypeChecked,
+ {
+ ignores: [
+ '**/dist/',
+ '**/node_modules/',
+ '.git/',
+ '**/generated/',
+ '**/coverage/',
+ 'packages/mermaid/src/config.type.ts',
+ ],
+ },
+ {
+ languageOptions: {
+ parserOptions: {
+ project: [
+ './tsconfig.eslint.json',
+ './packages/*/tsconfig.json',
+ './packages/*/tsconfig.eslint.json',
+ './packages/mermaid/src/docs/tsconfig.json',
+ ],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ globals: {
+ ...globals.browser,
+ ...globals.node,
+ ...globals.es2020,
+ ...globals.jest,
+ cy: 'readonly',
+ Cypress: 'readonly',
+ },
+ },
+ },
+ {
+ plugins: {
+ json,
+ '@cspell': cspell,
+ 'no-only-tests': noOnlyTests,
+ lodash,
+ unicorn,
+ cypress,
+ markdown,
+ tsdoc,
+ jsdoc,
+ },
+ rules: {
+ curly: 'error',
+ 'no-console': 'error',
+ 'no-prototype-builtins': 'off',
+ 'no-unused-vars': 'off',
+ 'cypress/no-async-tests': 'off',
+ '@typescript-eslint/consistent-type-imports': 'error',
+ '@typescript-eslint/no-explicit-any': 'warn',
+ '@typescript-eslint/no-floating-promises': 'error',
+ '@typescript-eslint/no-misused-promises': 'error',
+ '@typescript-eslint/no-unused-vars': [
+ 'error',
+ {
+ args: 'after-used',
+ argsIgnorePattern: '^_',
+ caughtErrors: 'all',
+ caughtErrorsIgnorePattern: '^_',
+ destructuredArrayIgnorePattern: '^_',
+ varsIgnorePattern: '^_',
+ ignoreRestSiblings: true,
+ },
+ ],
+ '@typescript-eslint/consistent-type-definitions': 'error',
+ '@typescript-eslint/ban-ts-comment': [
+ 'error',
+ {
+ 'ts-expect-error': 'allow-with-description',
+ 'ts-ignore': 'allow-with-description',
+ 'ts-nocheck': 'allow-with-description',
+ 'ts-check': 'allow-with-description',
+ minimumDescriptionLength: 10,
+ },
+ ],
+ '@typescript-eslint/naming-convention': [
+ 'error',
+ {
+ selector: 'typeLike',
+ format: ['PascalCase'],
+ custom: {
+ regex: '^I[A-Z]',
+ match: false,
+ },
+ },
+ ],
+ // START: These rules should be turned on once the codebase is cleaned up
+ '@typescript-eslint/no-unsafe-argument': 'off',
+ '@typescript-eslint/no-unsafe-assignment': 'off',
+ '@typescript-eslint/no-unsafe-call': 'off',
+ '@typescript-eslint/no-unsafe-member-access': 'off',
+ '@typescript-eslint/no-unsafe-return': 'off',
+ '@typescript-eslint/only-throw-error': 'warn',
+ '@typescript-eslint/prefer-promise-reject-errors': 'warn',
+ // END
+ 'json/*': ['error', 'allowComments'],
+ '@cspell/spellchecker': [
+ 'error',
+ {
+ checkIdentifiers: true,
+ checkStrings: true,
+ checkStringTemplates: true,
+ },
+ ],
+ 'no-empty': [
+ 'error',
+ {
+ allowEmptyCatch: true,
+ },
+ ],
+ 'no-only-tests/no-only-tests': 'error',
+ 'lodash/import-scope': ['error', 'method'],
+ 'unicorn/better-regex': 'error',
+ 'unicorn/no-abusive-eslint-disable': 'error',
+ 'unicorn/no-array-push-push': 'error',
+ 'unicorn/no-for-loop': 'error',
+ 'unicorn/no-instanceof-array': 'error',
+ 'unicorn/no-typeof-undefined': 'error',
+ 'unicorn/no-unnecessary-await': 'error',
+ 'unicorn/no-unsafe-regex': 'warn',
+ 'unicorn/no-useless-promise-resolve-reject': 'error',
+ 'unicorn/prefer-array-find': 'error',
+ 'unicorn/prefer-array-flat-map': 'error',
+ 'unicorn/prefer-array-index-of': 'error',
+ 'unicorn/prefer-array-some': 'error',
+ 'unicorn/prefer-default-parameters': 'error',
+ 'unicorn/prefer-includes': 'error',
+ 'unicorn/prefer-negative-index': 'error',
+ 'unicorn/prefer-object-from-entries': 'error',
+ 'unicorn/prefer-string-starts-ends-with': 'error',
+ 'unicorn/prefer-string-trim-start-end': 'error',
+ 'unicorn/string-content': 'error',
+ 'unicorn/prefer-spread': 'error',
+ 'unicorn/no-lonely-if': 'error',
+ },
+ },
+ {
+ files: ['cypress/**', 'demos/**'],
+ rules: {
+ 'no-console': 'off',
+ },
+ },
+ {
+ files: ['**/*.{js,jsx,mjs,cjs}'],
+ rules: {
+ 'jsdoc/check-indentation': 'off',
+ 'jsdoc/check-alignment': 'off',
+ 'jsdoc/check-line-alignment': 'off',
+ 'jsdoc/multiline-blocks': 'off',
+ 'jsdoc/newline-after-description': 'off',
+ 'jsdoc/tag-lines': 'off',
+ 'jsdoc/require-param-description': 'off',
+ 'jsdoc/require-param-type': 'off',
+ 'jsdoc/require-returns': 'off',
+ 'jsdoc/require-returns-description': 'off',
+ },
+ },
+ {
+ files: ['**/*.{ts,tsx}'],
+ rules: {
+ 'no-restricted-syntax': [
+ 'error',
+ {
+ selector: 'TSEnumDeclaration',
+ message:
+ 'Prefer using TypeScript union types over TypeScript enum, since TypeScript enums have a bunch of issues, see https://dev.to/dvddpl/whats-the-problem-with-typescript-enums-2okj',
+ },
+ ],
+ 'tsdoc/syntax': 'error',
+ },
+ },
+ {
+ files: ['**/*.spec.{ts,js}', 'cypress/**', 'demos/**', '**/docs/**'],
+ rules: {
+ 'jsdoc/require-jsdoc': 'off',
+ '@typescript-eslint/no-unused-vars': 'off',
+ },
+ },
+ {
+ files: ['**/*.spec.{ts,js}', 'tests/**', 'cypress/**/*.js'],
+ rules: {
+ '@cspell/spellchecker': [
+ 'error',
+ {
+ checkIdentifiers: false,
+ checkStrings: false,
+ checkStringTemplates: false,
+ },
+ ],
+ },
+ },
+ {
+ files: ['*.html', '*.md', '**/*.md/*'],
+ rules: {
+ 'no-var': 'error',
+ 'no-undef': 'off',
+ '@typescript-eslint/no-unused-vars': 'off',
+ '@typescript-eslint/no-floating-promises': 'off',
+ '@typescript-eslint/no-misused-promises': 'off',
+ },
+ processor: 'markdown/markdown',
+ }
+);
diff --git a/package.json b/package.json
index 1a819de3b1..ec25b8c817 100644
--- a/package.json
+++ b/package.json
@@ -25,8 +25,8 @@
"dev:vite": "tsx .vite/server.ts",
"dev:coverage": "pnpm coverage:cypress:clean && VITE_COVERAGE=true pnpm dev:vite",
"release": "pnpm build",
- "lint": "cross-env NODE_OPTIONS=--max_old_space_size=8192 eslint --cache --cache-strategy content . && pnpm lint:jison && prettier --cache --check .",
- "lint:fix": "cross-env NODE_OPTIONS=--max_old_space_size=8192 eslint --cache --cache-strategy content --fix . && prettier --write . && tsx scripts/fixCSpell.ts",
+ "lint": "eslint --quiet --stats --cache --cache-strategy content . && pnpm lint:jison && prettier --cache --check .",
+ "lint:fix": "eslint --cache --cache-strategy content --fix . && prettier --write . && tsx scripts/fixCSpell.ts",
"lint:jison": "tsx ./scripts/jison/lint.mts",
"contributors": "tsx scripts/updateContributors.ts",
"cypress": "cypress run",
@@ -63,11 +63,11 @@
"devDependencies": {
"@applitools/eyes-cypress": "^3.42.3",
"@argos-ci/cypress": "^2.0.5",
- "@cspell/eslint-plugin": "^8.6.0",
+ "@cspell/eslint-plugin": "^8.8.4",
"@cypress/code-coverage": "^3.12.30",
+ "@eslint/js": "^9.4.0",
"@rollup/plugin-typescript": "^11.1.6",
"@types/cors": "^2.8.17",
- "@types/eslint": "^8.56.6",
"@types/express": "^4.17.21",
"@types/js-yaml": "^4.0.9",
"@types/jsdom": "^21.1.6",
@@ -75,8 +75,6 @@
"@types/mdast": "^4.0.3",
"@types/node": "^20.11.30",
"@types/rollup-plugin-visualizer": "^4.2.4",
- "@typescript-eslint/eslint-plugin": "^7.3.1",
- "@typescript-eslint/parser": "^7.3.1",
"@vitest/coverage-v8": "^1.4.0",
"@vitest/spy": "^1.4.0",
"@vitest/ui": "^1.4.0",
@@ -89,19 +87,20 @@
"cypress": "^13.7.1",
"cypress-image-snapshot": "^4.0.1",
"esbuild": "^0.21.5",
- "eslint": "^8.57.0",
+ "eslint": "^9.4.0",
"eslint-config-prettier": "^9.1.0",
- "eslint-plugin-cypress": "^2.15.1",
- "eslint-plugin-html": "^8.0.0",
- "eslint-plugin-jest": "^27.9.0",
- "eslint-plugin-jsdoc": "^48.2.1",
- "eslint-plugin-json": "^3.1.0",
- "eslint-plugin-lodash": "^7.4.0",
- "eslint-plugin-markdown": "^4.0.1",
+ "eslint-plugin-cypress": "^3.3.0",
+ "eslint-plugin-html": "^8.1.1",
+ "eslint-plugin-jest": "^28.6.0",
+ "eslint-plugin-jsdoc": "^48.2.9",
+ "eslint-plugin-json": "^4.0.0",
+ "eslint-plugin-lodash": "^8.0.0",
+ "eslint-plugin-markdown": "^5.0.0",
"eslint-plugin-no-only-tests": "^3.1.0",
- "eslint-plugin-tsdoc": "^0.2.17",
- "eslint-plugin-unicorn": "^51.0.1",
+ "eslint-plugin-tsdoc": "^0.3.0",
+ "eslint-plugin-unicorn": "^53.0.0",
"express": "^4.19.1",
+ "globals": "^15.4.0",
"globby": "^14.0.1",
"husky": "^9.0.11",
"jest": "^29.7.0",
@@ -120,7 +119,8 @@
"rollup-plugin-visualizer": "^5.12.0",
"start-server-and-test": "^2.0.3",
"tsx": "^4.7.1",
- "typescript": "~5.4.3",
+ "typescript": "~5.4.5",
+ "typescript-eslint": "^8.0.0-alpha.34",
"vite": "^5.2.3",
"vite-plugin-istanbul": "^6.0.0",
"vitest": "^1.4.0"
diff --git a/packages/mermaid-example-diagram/src/mermaidUtils.ts b/packages/mermaid-example-diagram/src/mermaidUtils.ts
index eeeca05c5d..04d0599c08 100644
--- a/packages/mermaid-example-diagram/src/mermaidUtils.ts
+++ b/packages/mermaid-example-diagram/src/mermaidUtils.ts
@@ -25,7 +25,7 @@ export const log: Record = {
fatal: warning,
};
-export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void;
+export let setLogLevel: (level: keyof typeof LEVELS | number) => void;
export let getConfig: () => object;
export let sanitizeText: (str: string) => string;
export let commonDb: () => object;
diff --git a/packages/mermaid-example-diagram/tsconfig.eslint.json b/packages/mermaid-example-diagram/tsconfig.eslint.json
new file mode 100644
index 0000000000..5269794ba2
--- /dev/null
+++ b/packages/mermaid-example-diagram/tsconfig.eslint.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": ["./tsconfig.json"],
+ "compilerOptions": {
+ "noEmit": true
+ },
+ "include": [
+ "./src/**/*.spec.js",
+ "./src/**/*.spec.ts" // test files
+ ]
+}
diff --git a/packages/mermaid-flowchart-elk/src/flowRenderer-elk.js b/packages/mermaid-flowchart-elk/src/flowRenderer-elk.js
index c7bf41ce23..6d30292f42 100644
--- a/packages/mermaid-flowchart-elk/src/flowRenderer-elk.js
+++ b/packages/mermaid-flowchart-elk/src/flowRenderer-elk.js
@@ -64,7 +64,6 @@ export const addVertices = async function (vert, svgId, root, doc, diagObj, pare
let vertexText = vertex.text !== undefined ? vertex.text : vertex.id;
// We create a SVG label, either by delegating to addHtmlLabel or manually
- let vertexNode;
const labelData = { width: 0, height: 0 };
const ports = [
@@ -188,19 +187,6 @@ export const addVertices = async function (vert, svgId, root, doc, diagObj, pare
nodeEl = await insertNode(nodes, node, vertex.dir);
boundingBox = nodeEl.node().getBBox();
} else {
- const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text');
- // svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:'));
- // const rows = vertexText.split(common.lineBreakRegex);
- // for (const row of rows) {
- // const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan');
- // tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
- // tspan.setAttribute('dy', '1em');
- // tspan.setAttribute('x', '1');
- // tspan.textContent = row;
- // svgLabel.appendChild(tspan);
- // }
- // vertexNode = svgLabel;
- // const bbox = vertexNode.getBBox();
const { shapeSvg, bbox } = await labelHelper(nodes, node, undefined, true);
labelData.width = bbox.width;
labelData.wrappingWidth = getConfig().flowchart.wrappingWidth;
diff --git a/packages/mermaid-zenuml/src/mermaidUtils.ts b/packages/mermaid-zenuml/src/mermaidUtils.ts
index 6236858793..413e8d2dee 100644
--- a/packages/mermaid-zenuml/src/mermaidUtils.ts
+++ b/packages/mermaid-zenuml/src/mermaidUtils.ts
@@ -26,7 +26,7 @@ export const log: Record = {
fatal: warning,
};
-export let setLogLevel: (level: keyof typeof LEVELS | number | string) => void;
+export let setLogLevel: (level: keyof typeof LEVELS | number) => void;
export let getConfig: () => MermaidConfig;
export let sanitizeText: (str: string) => string;
// eslint-disable @typescript-eslint/no-explicit-any
diff --git a/packages/mermaid-zenuml/src/zenumlRenderer.ts b/packages/mermaid-zenuml/src/zenumlRenderer.ts
index a1a807dce4..f9dd579961 100644
--- a/packages/mermaid-zenuml/src/zenumlRenderer.ts
+++ b/packages/mermaid-zenuml/src/zenumlRenderer.ts
@@ -9,7 +9,7 @@ function createTemporaryZenumlContainer(id: string) {
container.id = `container-${id}`;
container.style.display = 'flex';
container.innerHTML = `
`;
- const app = container.querySelector(`#zenUMLApp-${id}`) as HTMLElement;
+ const app = container.querySelector(`#zenUMLApp-${id}`)!;
return { container, app };
}
diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json
index eebc1e16d4..bec56d3a04 100644
--- a/packages/mermaid/package.json
+++ b/packages/mermaid/package.json
@@ -103,8 +103,6 @@
"@types/prettier": "^3.0.0",
"@types/stylis": "^4.2.5",
"@types/uuid": "^9.0.8",
- "@typescript-eslint/eslint-plugin": "^7.3.1",
- "@typescript-eslint/parser": "^7.3.1",
"ajv": "^8.12.0",
"chokidar": "^3.6.0",
"concurrently": "^8.2.2",
diff --git a/packages/mermaid/scripts/create-types-from-json-schema.mts b/packages/mermaid/scripts/create-types-from-json-schema.mts
index 57b0668129..1f6015bce1 100644
--- a/packages/mermaid/scripts/create-types-from-json-schema.mts
+++ b/packages/mermaid/scripts/create-types-from-json-schema.mts
@@ -97,7 +97,7 @@ async function generateTypescript(mermaidConfigSchema: JSONSchemaType>) {
- if (schema['allOf']) {
+ if (schema.allOf) {
const { allOf, ...schemaWithoutAllOf } = schema;
return {
...schemaWithoutAllOf,
diff --git a/packages/mermaid/scripts/docs.mts b/packages/mermaid/scripts/docs.mts
index 1bc944ee81..374e788706 100644
--- a/packages/mermaid/scripts/docs.mts
+++ b/packages/mermaid/scripts/docs.mts
@@ -88,9 +88,9 @@ const WARN_DOCSDIR_DOESNT_MATCH = `Changed files were transformed in ${SOURCE_DO
const prettierConfig = (await prettier.resolveConfig('.')) ?? {};
// From https://github.com/vuejs/vitepress/blob/428eec3750d6b5648a77ac52d88128df0554d4d1/src/node/markdownToVue.ts#L20-L21
const includesRE = //g;
-const includedFiles: Set = new Set();
+const includedFiles = new Set();
-const filesTransformed: Set = new Set();
+const filesTransformed = new Set();
const generateHeader = (file: string): string => {
// path from file in docs/* to repo root, e.g ../ or ../../ */
@@ -181,10 +181,10 @@ export const transformToBlockQuote = (
) => {
if (vitepress) {
const vitepressType = type === 'note' ? 'info' : type;
- return `::: ${vitepressType} ${customTitle || ''}\n${content}\n:::`;
+ return `::: ${vitepressType} ${customTitle ?? ''}\n${content}\n:::`;
} else {
- const icon = blockIcons[type] || '';
- const title = `${icon}${customTitle || capitalize(type)}`;
+ const icon = blockIcons[type] ?? '';
+ const title = `${icon}${customTitle ?? capitalize(type)}`;
return `> **${title}** \n> ${content.replace(/\n/g, '\n> ')}`;
}
};
@@ -201,6 +201,7 @@ const transformIncludeStatements = (file: string, text: string): string => {
includedFiles.add(changeToFinalDocDir(includePath));
return content;
} catch (error) {
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
throw new Error(`Failed to resolve include "${m1}" in "${file}": ${error}`);
}
});
@@ -241,7 +242,7 @@ export function transformMarkdownAst({
addEditLink,
removeYAML,
}: TransformMarkdownAstOptions) {
- return (tree: Root, _file?: any): Root => {
+ return (tree: Root): Root => {
const astWithTransformedBlocks = flatmap(tree, (node: Code) => {
if (node.type !== 'code' || !node.lang) {
return [node]; // no transformation if this is not a code block
@@ -509,6 +510,7 @@ export const getGlobs = (globs: string[]): string[] => {
globs.push(
'!**/.vitepress/**',
'!**/vite.config.ts',
+ '!**/tsconfig.json',
'!src/docs/index.md',
'!**/package.json',
'!**/user-avatars/**'
diff --git a/packages/mermaid/src/Diagram.ts b/packages/mermaid/src/Diagram.ts
index 86e7bf159c..fb423b9b0d 100644
--- a/packages/mermaid/src/Diagram.ts
+++ b/packages/mermaid/src/Diagram.ts
@@ -6,6 +6,7 @@ import { encodeEntities } from './utils.js';
import type { DetailedError } from './utils.js';
import type { DiagramDefinition, DiagramMetadata } from './diagram-api/types.js';
+// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
export type ParseErrorFunction = (err: string | DetailedError | unknown, hash?: any) => void;
/**
@@ -19,7 +20,7 @@ export class Diagram {
text = encodeEntities(text) + '\n';
try {
getDiagram(type);
- } catch (e) {
+ } catch {
const loader = getDiagramLoader(type);
if (!loader) {
throw new UnknownDiagramError(`Diagram ${type} not found.`);
diff --git a/packages/mermaid/src/config.spec.ts b/packages/mermaid/src/config.spec.ts
index 8dd4ff33c0..000be12826 100644
--- a/packages/mermaid/src/config.spec.ts
+++ b/packages/mermaid/src/config.spec.ts
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/no-non-null-assertion */
import * as configApi from './config.js';
import type { MermaidConfig } from './config.type.js';
diff --git a/packages/mermaid/src/config.ts b/packages/mermaid/src/config.ts
index b766d9b42b..1229bcd22b 100644
--- a/packages/mermaid/src/config.ts
+++ b/packages/mermaid/src/config.ts
@@ -189,7 +189,7 @@ export const addDirective = (directive: MermaidConfig) => {
sanitizeDirective(directive);
// If the directive has a fontFamily, but no themeVariables, add the fontFamily to the themeVariables
- if (directive.fontFamily && (!directive.themeVariables || !directive.themeVariables.fontFamily)) {
+ if (directive.fontFamily && !directive.themeVariables?.fontFamily) {
directive.themeVariables = { fontFamily: directive.fontFamily };
}
diff --git a/packages/mermaid/src/dagre-wrapper/blockArrowHelper.ts b/packages/mermaid/src/dagre-wrapper/blockArrowHelper.ts
index 3c5000a498..848dc9fccc 100644
--- a/packages/mermaid/src/dagre-wrapper/blockArrowHelper.ts
+++ b/packages/mermaid/src/dagre-wrapper/blockArrowHelper.ts
@@ -42,9 +42,6 @@ export const getArrowPoints = (
// Padding to use, half of the node padding.
const padding = node.padding / 2;
- // Initialize an empty array to store points for the arrow.
- const points = [];
-
if (
directions.has('right') &&
directions.has('left') &&
diff --git a/packages/mermaid/src/dagre-wrapper/edgeMarker.spec.ts b/packages/mermaid/src/dagre-wrapper/edgeMarker.spec.ts
index 6cfb59fab9..6fb4395526 100644
--- a/packages/mermaid/src/dagre-wrapper/edgeMarker.spec.ts
+++ b/packages/mermaid/src/dagre-wrapper/edgeMarker.spec.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/unbound-method */
import type { Mocked } from 'vitest';
import type { SVG } from '../diagram-api/types.js';
import { addEdgeMarkers } from './edgeMarker.js';
diff --git a/packages/mermaid/src/dagre-wrapper/index.js b/packages/mermaid/src/dagre-wrapper/index.js
index 70f1a862cd..c870566a7f 100644
--- a/packages/mermaid/src/dagre-wrapper/index.js
+++ b/packages/mermaid/src/dagre-wrapper/index.js
@@ -51,7 +51,7 @@ const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, sit
}
}
log.info('(Insert) Node XXX' + v + ': ' + JSON.stringify(graph.node(v)));
- if (node && node.clusterNode) {
+ if (node?.clusterNode) {
// const children = graph.children(v);
log.info('Cluster identified', v, node.width, graph.node(v));
// `node.graph.setGraph` applies the graph configurations such as nodeSpacing to subgraphs as without this the default values would be used
@@ -130,7 +130,7 @@ const recursiveRender = async (_elem, graph, diagramType, id, parentCluster, sit
' height: ',
node.height
);
- if (node && node.clusterNode) {
+ if (node?.clusterNode) {
// clusterDb[node.id].node = node;
node.y += subGraphTitleTotalMargin;
positionNode(node);
diff --git a/packages/mermaid/src/dagre-wrapper/intersect.js b/packages/mermaid/src/dagre-wrapper/intersect.js
deleted file mode 100644
index 41bcb5a532..0000000000
--- a/packages/mermaid/src/dagre-wrapper/intersect.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
- node: require('./intersect-node'),
- circle: require('./intersect-circle'),
- ellipse: require('./intersect-ellipse'),
- polygon: require('./intersect-polygon'),
- rect: require('./intersect-rect'),
-};
diff --git a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js
index 04ee9d16b2..ef0c2caa7f 100644
--- a/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js
+++ b/packages/mermaid/src/dagre-wrapper/mermaid-graphlib.js
@@ -399,7 +399,7 @@ export const extractor = (graph, depth) => {
const graphSettings = graph.graph();
let dir = graphSettings.rankdir === 'TB' ? 'LR' : 'TB';
- if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) {
+ if (clusterDb[node]?.clusterData?.dir) {
dir = clusterDb[node].clusterData.dir;
log.warn('Fixing dir', clusterDb[node].clusterData.dir, dir);
}
diff --git a/packages/mermaid/src/dagre-wrapper/nodes.js b/packages/mermaid/src/dagre-wrapper/nodes.js
index 8abcfe5bdf..611cc5b6ee 100644
--- a/packages/mermaid/src/dagre-wrapper/nodes.js
+++ b/packages/mermaid/src/dagre-wrapper/nodes.js
@@ -901,7 +901,7 @@ const class_box = (parent, node) => {
const labelContainer = shapeSvg.insert('g').attr('class', 'label');
let verticalPos = 0;
- const hasInterface = node.classData.annotations && node.classData.annotations[0];
+ const hasInterface = node.classData.annotations?.[0];
// 1. Create the labels
const interfaceLabelText = node.classData.annotations[0]
diff --git a/packages/mermaid/src/dagre-wrapper/patterns.js b/packages/mermaid/src/dagre-wrapper/patterns.js
deleted file mode 100644
index 3025f8ef9c..0000000000
--- a/packages/mermaid/src/dagre-wrapper/patterns.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/** Setup arrow head and define the marker. The result is appended to the svg. */
-
-// import { log } from '../logger.js';
-
-// Only add the number of markers that the diagram needs
-const insertPatterns = (elem, patternArray, type, id) => {
- patternArray.forEach((patternName) => {
- patterns[patternName](elem, type, id);
- });
-};
-
-{
- /*
- {' '}
-
- {' '}
-
- {' '}
-
- {' '}
- {' '}
- {' '}
- {' '}
- ; */
-}
-
-const dots = (elem, type) => {
- elem
- .append('defs')
- .append('marker')
- .attr('id', type + '-barbEnd')
- .attr('refX', 19)
- .attr('refY', 7)
- .attr('markerWidth', 20)
- .attr('markerHeight', 14)
- .attr('markerUnits', 0)
- .attr('orient', 'auto')
- .append('path')
- .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');
-};
-
-// TODO rename the class diagram markers to something shape descriptive and semantic free
-const patterns = {
- dots,
-};
-export default insertPatterns;
diff --git a/packages/mermaid/src/defaultConfig.ts b/packages/mermaid/src/defaultConfig.ts
index 76a8152b7a..727842bba1 100644
--- a/packages/mermaid/src/defaultConfig.ts
+++ b/packages/mermaid/src/defaultConfig.ts
@@ -23,7 +23,7 @@ const config: RequiredDeep = {
themeCSS: undefined,
// add non-JSON default config values
- themeVariables: theme['default'].getThemeVariables(),
+ themeVariables: theme.default.getThemeVariables(),
sequence: {
...defaultConfigJson.sequence,
messageFont: function () {
@@ -272,5 +272,5 @@ const keyify = (obj: any, prefix = ''): string[] =>
return [...res, prefix + el];
}, []);
-export const configKeys: Set = new Set(keyify(config, ''));
+export const configKeys = new Set(keyify(config, ''));
export default config;
diff --git a/packages/mermaid/src/diagram-api/diagramAPI.spec.ts b/packages/mermaid/src/diagram-api/diagramAPI.spec.ts
index 9fe6541d62..68991cffb7 100644
--- a/packages/mermaid/src/diagram-api/diagramAPI.spec.ts
+++ b/packages/mermaid/src/diagram-api/diagramAPI.spec.ts
@@ -29,7 +29,7 @@ describe('DiagramAPI', () => {
`[UnknownDiagramError: No diagram type detected matching given configuration for text: loki diagram]`
);
const detector: DiagramDetector = (str: string) => {
- return str.match('loki') !== null;
+ return /loki/.exec(str) !== null;
};
registerDiagram(
'loki',
diff --git a/packages/mermaid/src/diagram-api/diagramAPI.ts b/packages/mermaid/src/diagram-api/diagramAPI.ts
index 5ea3825ef5..df4514adfc 100644
--- a/packages/mermaid/src/diagram-api/diagramAPI.ts
+++ b/packages/mermaid/src/diagram-api/diagramAPI.ts
@@ -30,9 +30,7 @@ export const getCommonDb = () => {
};
const diagrams: Record = {};
-export interface Detectors {
- [key: string]: DiagramDetector;
-}
+export type Detectors = Record;
/**
* Registers the given diagram with Mermaid.
diff --git a/packages/mermaid/src/diagram-api/loadDiagram.ts b/packages/mermaid/src/diagram-api/loadDiagram.ts
index c1b445bf64..1ec01ec069 100644
--- a/packages/mermaid/src/diagram-api/loadDiagram.ts
+++ b/packages/mermaid/src/diagram-api/loadDiagram.ts
@@ -10,7 +10,7 @@ export const loadRegisteredDiagrams = async () => {
if (loader) {
try {
getDiagram(key);
- } catch (error) {
+ } catch {
try {
// Register diagram if it is not already registered
const { diagram, id } = await loader();
diff --git a/packages/mermaid/src/diagram.spec.ts b/packages/mermaid/src/diagram.spec.ts
index 4b9c907b38..873fada14d 100644
--- a/packages/mermaid/src/diagram.spec.ts
+++ b/packages/mermaid/src/diagram.spec.ts
@@ -30,12 +30,12 @@ const getDummyDiagram = (id: string, title?: string): Awaited {
test('should detect inbuilt diagrams', async () => {
- const graph = (await Diagram.fromText('graph TD; A-->B')) as Diagram;
+ const graph = await Diagram.fromText('graph TD; A-->B');
expect(graph).toBeInstanceOf(Diagram);
expect(graph.type).toBe('flowchart-v2');
- const sequence = (await Diagram.fromText(
+ const sequence = await Diagram.fromText(
'sequenceDiagram; Alice->>+John: Hello John, how are you?'
- )) as Diagram;
+ );
expect(sequence).toBeInstanceOf(Diagram);
expect(sequence.type).toBe('sequence');
});
diff --git a/packages/mermaid/src/diagrams/block/blockDB.ts b/packages/mermaid/src/diagrams/block/blockDB.ts
index 361e23d5cc..d6e35ed15a 100644
--- a/packages/mermaid/src/diagrams/block/blockDB.ts
+++ b/packages/mermaid/src/diagrams/block/blockDB.ts
@@ -8,9 +8,9 @@ import { clear as commonClear } from '../common/commonDb.js';
import type { Block, ClassDef } from './blockTypes.js';
// Initialize the node database for simple lookups
-let blockDatabase: Map = new Map();
+let blockDatabase = new Map();
let edgeList: Block[] = [];
-let edgeCount: Map = new Map();
+let edgeCount = new Map();
const COLOR_KEYWORD = 'color';
const FILL_KEYWORD = 'fill';
@@ -18,7 +18,7 @@ const BG_FILL = 'bgFill';
const STYLECLASS_SEP = ',';
const config = getConfig();
-let classes: Map = new Map();
+let classes = new Map();
const sanitizeText = (txt: string) => common.sanitizeText(txt, config);
@@ -42,7 +42,7 @@ export const addStyleClass = function (id: string, styleAttributes = '') {
const fixedAttrib = attrib.replace(/([^;]*);/, '$1').trim();
// replace some style keywords
- if (attrib.match(COLOR_KEYWORD)) {
+ if (RegExp(COLOR_KEYWORD).exec(attrib)) {
const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);
const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);
foundClass.textStyles.push(newStyle2);
@@ -89,7 +89,7 @@ export const setCssClass = function (itemIds: string, cssClassName: string) {
});
};
-const populateBlockDatabase = (_blockList: Block[] | Block[][], parent: Block): void => {
+const populateBlockDatabase = (_blockList: Block[], parent: Block): void => {
const blockList = _blockList.flat();
const children = [];
for (const block of blockList) {
@@ -101,7 +101,7 @@ const populateBlockDatabase = (_blockList: Block[] | Block[][], parent: Block):
continue;
}
if (block.type === 'applyClass') {
- setCssClass(block.id, block?.styleClass || '');
+ setCssClass(block.id, block?.styleClass ?? '');
continue;
}
if (block.type === 'applyStyles') {
@@ -111,7 +111,7 @@ const populateBlockDatabase = (_blockList: Block[] | Block[][], parent: Block):
continue;
}
if (block.type === 'column-setting') {
- parent.columns = block.columns || -1;
+ parent.columns = block.columns ?? -1;
} else if (block.type === 'edge') {
const count = (edgeCount.get(block.id) ?? 0) + 1;
edgeCount.set(block.id, count);
@@ -145,7 +145,7 @@ const populateBlockDatabase = (_blockList: Block[] | Block[][], parent: Block):
}
if (block.type === 'space') {
// log.debug('abc95 space', block);
- const w = block.width || 1;
+ const w = block.width ?? 1;
for (let j = 0; j < w; j++) {
const newBlock = clone(block);
newBlock.id = newBlock.id + '-' + j;
@@ -168,7 +168,7 @@ const clear = (): void => {
commonClear();
rootBlock = { id: 'root', type: 'composite', children: [], columns: -1 } as Block;
blockDatabase = new Map([['root', rootBlock]]);
- blocks = [] as Block[];
+ blocks = [];
classes = new Map();
edgeList = [];
diff --git a/packages/mermaid/src/diagrams/block/blockRenderer.ts b/packages/mermaid/src/diagrams/block/blockRenderer.ts
index e6289ad828..99b89ceeb2 100644
--- a/packages/mermaid/src/diagrams/block/blockRenderer.ts
+++ b/packages/mermaid/src/diagrams/block/blockRenderer.ts
@@ -1,11 +1,6 @@
-import {
- scaleOrdinal as d3scaleOrdinal,
- schemeTableau10 as d3schemeTableau10,
- select as d3select,
-} from 'd3';
+import { select as d3select } from 'd3';
import type { Diagram } from '../../Diagram.js';
import * as configApi from '../../config.js';
-import type { MermaidConfig } from '../../config.type.js';
import insertMarkers from '../../dagre-wrapper/markers.js';
import { log } from '../../logger.js';
import { configureSvgSize } from '../../setupGraphViewbox.js';
@@ -75,7 +70,7 @@ export const draw = async function (
const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height)));
const height = bounds2.height + magicFactor + 10;
const width = bounds2.width + 10;
- const { useMaxWidth } = conf as Exclude;
+ const { useMaxWidth } = conf!;
configureSvgSize(svg, height, width, !!useMaxWidth);
log.debug('Here Bounds', bounds, bounds2);
svg.attr(
@@ -83,9 +78,6 @@ export const draw = async function (
`${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}`
);
}
-
- // Get color scheme for the graph
- const colorScheme = d3scaleOrdinal(d3schemeTableau10);
};
export default {
diff --git a/packages/mermaid/src/diagrams/block/layout.ts b/packages/mermaid/src/diagrams/block/layout.ts
index c16d4e4971..7f44a5f19f 100644
--- a/packages/mermaid/src/diagrams/block/layout.ts
+++ b/packages/mermaid/src/diagrams/block/layout.ts
@@ -2,7 +2,8 @@ import type { BlockDB } from './blockDB.js';
import type { Block } from './blockTypes.js';
import { log } from '../../logger.js';
import { getConfig } from '../../diagram-api/diagramAPI.js';
-const padding = getConfig()?.block?.padding || 8;
+// TODO: This means the number we provide in diagram's config will never be used. Should fix.
+const padding = getConfig()?.block?.padding ?? 8;
interface BlockPosition {
px: number;
@@ -42,7 +43,7 @@ const getMaxChildSize = (block: Block) => {
// find max width of children
// log.debug('getMaxChildSize abc95 (start) parent:', block.id);
for (const child of block.children) {
- const { width, height, x, y } = child.size || { width: 0, height: 0, x: 0, y: 0 };
+ const { width, height, x, y } = child.size ?? { width: 0, height: 0, x: 0, y: 0 };
log.debug(
'getMaxChildSize abc95 child:',
child.id,
@@ -60,7 +61,7 @@ const getMaxChildSize = (block: Block) => {
continue;
}
if (width > maxWidth) {
- maxWidth = width / (block.widthInColumns || 1);
+ maxWidth = width / (block.widthInColumns ?? 1);
}
if (height > maxHeight) {
maxHeight = height;
@@ -104,10 +105,10 @@ function setBlockSizes(block: Block, db: BlockDB, siblingWidth = 0, siblingHeigh
for (const child of block.children) {
if (child.size) {
log.debug(
- `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${child.size}`
+ `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${JSON.stringify(child.size)}`
);
child.size.width =
- maxWidth * (child.widthInColumns || 1) + padding * ((child.widthInColumns || 1) - 1);
+ maxWidth * (child.widthInColumns ?? 1) + padding * ((child.widthInColumns ?? 1) - 1);
child.size.height = maxHeight;
child.size.x = 0;
child.size.y = 0;
@@ -121,10 +122,10 @@ function setBlockSizes(block: Block, db: BlockDB, siblingWidth = 0, siblingHeigh
setBlockSizes(child, db, maxWidth, maxHeight);
}
- const columns = block.columns || -1;
+ const columns = block.columns ?? -1;
let numItems = 0;
for (const child of block.children) {
- numItems += child.widthInColumns || 1;
+ numItems += child.widthInColumns ?? 1;
}
// The width and height in number blocks
@@ -133,8 +134,6 @@ function setBlockSizes(block: Block, db: BlockDB, siblingWidth = 0, siblingHeigh
xSize = columns;
}
- const w = block.widthInColumns || 1;
-
const ySize = Math.ceil(numItems / xSize);
let width = xSize * (maxWidth + padding) + padding;
@@ -206,13 +205,13 @@ function layoutBlocks(block: Block, db: BlockDB) {
log.debug(
`abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`
);
- const columns = block.columns || -1;
+ const columns = block.columns ?? -1;
log.debug('layoutBlocks columns abc95', block.id, '=>', columns, block);
if (
block.children && // find max width of children
block.children.length > 0
) {
- const width = block?.children[0]?.size?.width || 0;
+ const width = block?.children[0]?.size?.width ?? 0;
const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding;
log.debug('widthOfChildren 88', widthOfChildren, 'posX');
@@ -251,7 +250,7 @@ function layoutBlocks(block: Block, db: BlockDB) {
} ${halfWidth} padding=${padding} width=${width} halfWidth=${halfWidth} => x:${
child.size.x
} y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${
- (width * (child?.widthInColumns || 1)) / 2
+ (width * (child?.widthInColumns ?? 1)) / 2
}`
);
@@ -265,15 +264,13 @@ function layoutBlocks(block: Block, db: BlockDB) {
child.id
}startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${
child.widthInColumns
- }(width * (child?.w || 1)) / 2${(width * (child?.widthInColumns || 1)) / 2}`
+ }(width * (child?.w || 1)) / 2${(width * (child?.widthInColumns ?? 1)) / 2}`
);
}
-
- // posY += height + padding;
if (child.children) {
layoutBlocks(child, db);
}
- columnPos += child?.widthInColumns || 1;
+ columnPos += child?.widthInColumns ?? 1;
log.debug('abc88 columnsPos', child, columnPos);
}
}
diff --git a/packages/mermaid/src/diagrams/block/parser/block.spec.ts b/packages/mermaid/src/diagrams/block/parser/block.spec.ts
index 295dabf89c..1bb8691c12 100644
--- a/packages/mermaid/src/diagrams/block/parser/block.spec.ts
+++ b/packages/mermaid/src/diagrams/block/parser/block.spec.ts
@@ -1,9 +1,6 @@
// @ts-ignore: jison doesn't export types
import block from './block.jison';
import db from '../blockDB.js';
-import { cleanupComments } from '../../../diagram-api/comments.js';
-import { prepareTextForParsing } from '../blockUtils.js';
-import { setConfig } from '../../../config.js';
describe('Block diagram', function () {
describe('when parsing an block diagram graph it should handle > ', function () {
@@ -13,7 +10,7 @@ describe('Block diagram', function () {
block.parser.yy.getLogger = () => console;
});
- it('a diagram with a node', async () => {
+ it('a diagram with a node', () => {
const str = `block-beta
id
`;
@@ -24,7 +21,7 @@ describe('Block diagram', function () {
expect(blocks[0].id).toBe('id');
expect(blocks[0].label).toBe('id');
});
- it('a node with a square shape and a label', async () => {
+ it('a node with a square shape and a label', () => {
const str = `block-beta
id["A label"]
`;
@@ -36,7 +33,7 @@ describe('Block diagram', function () {
expect(blocks[0].label).toBe('A label');
expect(blocks[0].type).toBe('square');
});
- it('a diagram with multiple nodes', async () => {
+ it('a diagram with multiple nodes', () => {
const str = `block-beta
id1
id2
@@ -52,7 +49,7 @@ describe('Block diagram', function () {
expect(blocks[1].label).toBe('id2');
expect(blocks[1].type).toBe('na');
});
- it('a diagram with multiple nodes', async () => {
+ it('a diagram with multiple nodes', () => {
const str = `block-beta
id1
id2
@@ -73,7 +70,7 @@ describe('Block diagram', function () {
expect(blocks[2].type).toBe('na');
});
- it('a node with a square shape and a label', async () => {
+ it('a node with a square shape and a label', () => {
const str = `block-beta
id["A label"]
id2`;
@@ -88,7 +85,7 @@ describe('Block diagram', function () {
expect(blocks[1].label).toBe('id2');
expect(blocks[1].type).toBe('na');
});
- it('a diagram with multiple nodes with edges abc123', async () => {
+ it('a diagram with multiple nodes with edges abc123', () => {
const str = `block-beta
id1["first"] --> id2["second"]
`;
@@ -102,7 +99,7 @@ describe('Block diagram', function () {
expect(edges[0].end).toBe('id2');
expect(edges[0].arrowTypeEnd).toBe('arrow_point');
});
- it('a diagram with multiple nodes with edges abc123', async () => {
+ it('a diagram with multiple nodes with edges abc123', () => {
const str = `block-beta
id1["first"] -- "a label" --> id2["second"]
`;
@@ -117,7 +114,7 @@ describe('Block diagram', function () {
expect(edges[0].arrowTypeEnd).toBe('arrow_point');
expect(edges[0].label).toBe('a label');
});
- it('a diagram with column statements', async () => {
+ it('a diagram with column statements', () => {
const str = `block-beta
columns 2
block1["Block 1"]
@@ -128,7 +125,7 @@ describe('Block diagram', function () {
const blocks = db.getBlocks();
expect(blocks.length).toBe(1);
});
- it('a diagram withput column statements', async () => {
+ it('a diagram withput column statements', () => {
const str = `block-beta
block1["Block 1"]
`;
@@ -138,7 +135,7 @@ describe('Block diagram', function () {
const blocks = db.getBlocks();
expect(blocks.length).toBe(1);
});
- it('a diagram with auto column statements', async () => {
+ it('a diagram with auto column statements', () => {
const str = `block-beta
columns auto
block1["Block 1"]
@@ -150,7 +147,7 @@ describe('Block diagram', function () {
expect(blocks.length).toBe(1);
});
- it('blocks next to each other', async () => {
+ it('blocks next to each other', () => {
const str = `block-beta
columns 2
block1["Block 1"]
@@ -164,7 +161,7 @@ describe('Block diagram', function () {
expect(blocks.length).toBe(2);
});
- it('blocks on top of each other', async () => {
+ it('blocks on top of each other', () => {
const str = `block-beta
columns 1
block1["Block 1"]
@@ -178,7 +175,7 @@ describe('Block diagram', function () {
expect(blocks.length).toBe(2);
});
- it('compound blocks 2', async () => {
+ it('compound blocks 2', () => {
const str = `block-beta
block
aBlock["ABlock"]
@@ -206,7 +203,7 @@ describe('Block diagram', function () {
expect(bBlock.label).toBe('BBlock');
expect(bBlock.type).toBe('square');
});
- it('compound blocks of compound blocks', async () => {
+ it('compound blocks of compound blocks', () => {
const str = `block-beta
block
aBlock["ABlock"]
@@ -241,7 +238,7 @@ describe('Block diagram', function () {
expect(bBlock.label).toBe('BBlock');
expect(bBlock.type).toBe('square');
});
- it('compound blocks with title', async () => {
+ it('compound blocks with title', () => {
const str = `block-beta
block:compoundBlock["Compound block"]
columns 1
@@ -266,7 +263,7 @@ describe('Block diagram', function () {
expect(block2.label).toBe('Block 2');
expect(block2.type).toBe('square');
});
- it('blocks mixed with compound blocks', async () => {
+ it('blocks mixed with compound blocks', () => {
const str = `block-beta
columns 1
block1["Block 1"]
@@ -293,7 +290,7 @@ describe('Block diagram', function () {
expect(block2.type).toBe('square');
});
- it('Arrow blocks', async () => {
+ it('Arrow blocks', () => {
const str = `block-beta
columns 3
block1["Block 1"]
@@ -317,7 +314,7 @@ describe('Block diagram', function () {
expect(blockArrow.type).toBe('block_arrow');
expect(blockArrow.directions).toContain('right');
});
- it('Arrow blocks with multiple points', async () => {
+ it('Arrow blocks with multiple points', () => {
const str = `block-beta
columns 1
A
@@ -340,7 +337,7 @@ describe('Block diagram', function () {
expect(blockArrow.directions).toContain('down');
expect(blockArrow.directions).not.toContain('right');
});
- it('blocks with different widths', async () => {
+ it('blocks with different widths', () => {
const str = `block-beta
columns 3
one["One Slot"]
@@ -355,7 +352,7 @@ describe('Block diagram', function () {
const two = blocks[1];
expect(two.widthInColumns).toBe(2);
});
- it('empty blocks', async () => {
+ it('empty blocks', () => {
const str = `block-beta
columns 3
space
@@ -374,7 +371,7 @@ describe('Block diagram', function () {
expect(sp2.type).toBe('space');
expect(middle.label).toBe('In the middle');
});
- it('classDef statements applied to a block', async () => {
+ it('classDef statements applied to a block', () => {
const str = `block-beta
classDef black color:#ffffff, fill:#000000;
@@ -392,7 +389,7 @@ describe('Block diagram', function () {
expect(black.id).toBe('black');
expect(black.styles[0]).toEqual('color:#ffffff');
});
- it('style statements applied to a block', async () => {
+ it('style statements applied to a block', () => {
const str = `block-beta
columns 1
B["A wide one in the middle"]
diff --git a/packages/mermaid/src/diagrams/block/renderHelpers.ts b/packages/mermaid/src/diagrams/block/renderHelpers.ts
index c509ae198d..97eca40748 100644
--- a/packages/mermaid/src/diagrams/block/renderHelpers.ts
+++ b/packages/mermaid/src/diagrams/block/renderHelpers.ts
@@ -11,14 +11,13 @@ function getNodeFromBlock(block: Block, db: BlockDB, positioned = false) {
let classStr = 'default';
if ((vertex?.classes?.length || 0) > 0) {
- classStr = (vertex?.classes || []).join(' ');
+ classStr = (vertex?.classes ?? []).join(' ');
}
classStr = classStr + ' flowchart-label';
// We create a SVG label, either by delegating to addHtmlLabel or manually
let radius = 0;
let shape = '';
- let layoutOptions = {};
let padding;
// Set the shape based parameters
switch (vertex.type) {
@@ -36,9 +35,6 @@ function getNodeFromBlock(block: Block, db: BlockDB, positioned = false) {
break;
case 'diamond':
shape = 'question';
- layoutOptions = {
- portConstraints: 'FIXED_SIDE',
- };
break;
case 'hexagon':
shape = 'hexagon';
@@ -89,12 +85,12 @@ function getNodeFromBlock(block: Block, db: BlockDB, positioned = false) {
shape = 'rect';
}
- const styles = getStylesFromArray(vertex?.styles || []);
+ const styles = getStylesFromArray(vertex?.styles ?? []);
// Use vertex id as text in the box if no text is provided by the graph definition
const vertexText = vertex.label;
- const bounds = vertex.size || { width: 0, height: 0, x: 0, y: 0 };
+ const bounds = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 };
// Add the node
const node = {
labelStyle: styles.labelStyle,
@@ -113,7 +109,7 @@ function getNodeFromBlock(block: Block, db: BlockDB, positioned = false) {
positioned,
intersect: undefined,
type: vertex.type,
- padding: padding ?? (getConfig()?.block?.padding || 0),
+ padding: padding ?? getConfig()?.block?.padding ?? 0,
};
return node;
}
@@ -142,7 +138,7 @@ export async function insertBlockPositioned(elem: any, block: Block, db: any) {
// Add the element to the DOM to size it
const obj = db.getBlock(node.id);
if (obj.type !== 'space') {
- const nodeEl = await insertNode(elem, node);
+ await insertNode(elem, node);
block.intersect = node?.intersect;
positionNode(node);
}
@@ -218,7 +214,7 @@ export async function insertEdges(
{ x: end.x, y: end.y },
];
// edge.points = points;
- await insertEdge(
+ insertEdge(
elem,
{ v: edge.start, w: edge.end, name: edge.id },
{
@@ -243,7 +239,7 @@ export async function insertEdges(
points,
classes: 'edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1',
});
- await positionEdgeLabel(
+ positionEdgeLabel(
{ ...edge, x: points[1].x, y: points[1].y },
{
originalPath: points,
diff --git a/packages/mermaid/src/diagrams/c4/c4Renderer.js b/packages/mermaid/src/diagrams/c4/c4Renderer.js
index 959eba295f..58dd808fda 100644
--- a/packages/mermaid/src/diagrams/c4/c4Renderer.js
+++ b/packages/mermaid/src/diagrams/c4/c4Renderer.js
@@ -258,21 +258,21 @@ export const drawC4ShapeArray = function (currentBounds, diagram, c4ShapeArray,
c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;
c4ShapeLabelConf.fontWeight = 'bold';
calcC4ShapeTextWH('label', c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);
- c4Shape['label'].Y = Y + 8;
- Y = c4Shape['label'].Y + c4Shape['label'].height;
+ c4Shape.label.Y = Y + 8;
+ Y = c4Shape.label.Y + c4Shape.label.height;
if (c4Shape.type && c4Shape.type.text !== '') {
c4Shape.type.text = '[' + c4Shape.type.text + ']';
let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);
calcC4ShapeTextWH('type', c4Shape, c4ShapeTextWrap, c4ShapeTypeConf, textLimitWidth);
- c4Shape['type'].Y = Y + 5;
- Y = c4Shape['type'].Y + c4Shape['type'].height;
+ c4Shape.type.Y = Y + 5;
+ Y = c4Shape.type.Y + c4Shape.type.height;
} else if (c4Shape.techn && c4Shape.techn.text !== '') {
c4Shape.techn.text = '[' + c4Shape.techn.text + ']';
let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);
calcC4ShapeTextWH('techn', c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);
- c4Shape['techn'].Y = Y + 5;
- Y = c4Shape['techn'].Y + c4Shape['techn'].height;
+ c4Shape.techn.Y = Y + 5;
+ Y = c4Shape.techn.Y + c4Shape.techn.height;
}
let rectHeight = Y;
@@ -281,11 +281,11 @@ export const drawC4ShapeArray = function (currentBounds, diagram, c4ShapeArray,
if (c4Shape.descr && c4Shape.descr.text !== '') {
let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);
calcC4ShapeTextWH('descr', c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);
- c4Shape['descr'].Y = Y + 20;
- Y = c4Shape['descr'].Y + c4Shape['descr'].height;
+ c4Shape.descr.Y = Y + 20;
+ Y = c4Shape.descr.Y + c4Shape.descr.height;
rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);
- rectHeight = Y - c4Shape['descr'].textLines * 5;
+ rectHeight = Y - c4Shape.descr.textLines * 5;
}
rectWidth = rectWidth + conf.c4ShapePadding;
@@ -482,8 +482,8 @@ function drawInsideBoundary(
currentBoundaryLabelConf,
currentBounds.data.widthLimit
);
- currentBoundary['label'].Y = Y + 8;
- Y = currentBoundary['label'].Y + currentBoundary['label'].height;
+ currentBoundary.label.Y = Y + 8;
+ Y = currentBoundary.label.Y + currentBoundary.label.height;
if (currentBoundary.type && currentBoundary.type.text !== '') {
currentBoundary.type.text = '[' + currentBoundary.type.text + ']';
@@ -495,8 +495,8 @@ function drawInsideBoundary(
currentBoundaryTypeConf,
currentBounds.data.widthLimit
);
- currentBoundary['type'].Y = Y + 5;
- Y = currentBoundary['type'].Y + currentBoundary['type'].height;
+ currentBoundary.type.Y = Y + 5;
+ Y = currentBoundary.type.Y + currentBoundary.type.height;
}
if (currentBoundary.descr && currentBoundary.descr.text !== '') {
@@ -509,8 +509,8 @@ function drawInsideBoundary(
currentBoundaryDescrConf,
currentBounds.data.widthLimit
);
- currentBoundary['descr'].Y = Y + 20;
- Y = currentBoundary['descr'].Y + currentBoundary['descr'].height;
+ currentBoundary.descr.Y = Y + 20;
+ Y = currentBoundary.descr.Y + currentBoundary.descr.height;
}
if (i == 0 || i % c4BoundaryInRow === 0) {
diff --git a/packages/mermaid/src/diagrams/class/classDb.ts b/packages/mermaid/src/diagrams/class/classDb.ts
index 4cfa0bd293..cb8b90af4c 100644
--- a/packages/mermaid/src/diagrams/class/classDb.ts
+++ b/packages/mermaid/src/diagrams/class/classDb.ts
@@ -26,10 +26,10 @@ import type {
const MERMAID_DOM_ID_PREFIX = 'classId-';
let relations: ClassRelation[] = [];
-let classes: Map = new Map();
+let classes = new Map();
let notes: ClassNote[] = [];
let classCounter = 0;
-let namespaces: Map = new Map();
+let namespaces = new Map();
let namespaceCounter = 0;
let functions: any[] = [];
@@ -223,7 +223,7 @@ export const cleanupLabel = function (label: string) {
export const setCssClass = function (ids: string, className: string) {
ids.split(',').forEach(function (_id) {
let id = _id;
- if (_id[0].match(/\d/)) {
+ if (/\d/.exec(_id[0])) {
id = MERMAID_DOM_ID_PREFIX + id;
}
const classNode = classes.get(id);
@@ -266,7 +266,7 @@ export const setLink = function (ids: string, linkStr: string, target: string) {
const config = getConfig();
ids.split(',').forEach(function (_id) {
let id = _id;
- if (_id[0].match(/\d/)) {
+ if (/\d/.exec(_id[0])) {
id = MERMAID_DOM_ID_PREFIX + id;
}
const theClass = classes.get(id);
@@ -320,7 +320,7 @@ const setClickFunc = function (_domId: string, functionName: string, functionArg
let item = argList[i].trim();
/* Removes all double quotes at the start and end of an argument */
/* This preserves all starting and ending whitespace inside */
- if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') {
+ if (item.startsWith('"') && item.endsWith('"')) {
item = item.substr(1, item.length - 2);
}
argList[i] = item;
diff --git a/packages/mermaid/src/diagrams/class/classRenderer-v2.ts b/packages/mermaid/src/diagrams/class/classRenderer-v2.ts
index b7b6ad98f5..0f02efa0d6 100644
--- a/packages/mermaid/src/diagrams/class/classRenderer-v2.ts
+++ b/packages/mermaid/src/diagrams/class/classRenderer-v2.ts
@@ -343,7 +343,7 @@ export const draw = async function (text: string, id: string, _version: string,
}
const root =
securityLevel === 'sandbox'
- ? select(sandboxElement!.nodes()[0]!.contentDocument.body)
+ ? select(sandboxElement.nodes()[0]!.contentDocument.body)
: select('body');
const svg = root.select(`[id="${id}"]`);
@@ -363,8 +363,7 @@ export const draw = async function (text: string, id: string, _version: string,
// Add label rects for non html labels
if (!conf?.htmlLabels) {
- const doc =
- securityLevel === 'sandbox' ? sandboxElement!.nodes()[0]!.contentDocument : document;
+ const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0]!.contentDocument : document;
const labels = doc.querySelectorAll('[id="' + id + '"] .edgeLabel .label');
for (const label of labels) {
// Get dimensions of label
diff --git a/packages/mermaid/src/diagrams/class/classTypes.ts b/packages/mermaid/src/diagrams/class/classTypes.ts
index 5c5812ee10..f1955a2246 100644
--- a/packages/mermaid/src/diagrams/class/classTypes.ts
+++ b/packages/mermaid/src/diagrams/class/classTypes.ts
@@ -77,7 +77,7 @@ export class ClassMember {
if (this.memberType === 'method') {
const methodRegEx = /([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/;
- const match = input.match(methodRegEx);
+ const match = methodRegEx.exec(input);
if (match) {
const detectedVisibility = match[1] ? match[1].trim() : '';
@@ -92,7 +92,7 @@ export class ClassMember {
if (potentialClassifier === '') {
const lastChar = this.returnType.substring(this.returnType.length - 1);
- if (lastChar.match(/[$*]/)) {
+ if (/[$*]/.exec(lastChar)) {
potentialClassifier = lastChar;
this.returnType = this.returnType.substring(0, this.returnType.length - 1);
}
@@ -107,7 +107,7 @@ export class ClassMember {
this.visibility = firstChar as Visibility;
}
- if (lastChar.match(/[$*]/)) {
+ if (/[$*]/.exec(lastChar)) {
potentialClassifier = lastChar;
}
diff --git a/packages/mermaid/src/diagrams/class/svgDraw.js b/packages/mermaid/src/diagrams/class/svgDraw.js
index d6ed7bca4e..73cf97aeb7 100644
--- a/packages/mermaid/src/diagrams/class/svgDraw.js
+++ b/packages/mermaid/src/diagrams/class/svgDraw.js
@@ -315,10 +315,10 @@ export const getClassTitleString = function (classDef) {
* @param {SVGSVGElement} elem The element to draw it into
* @param {{id: string; text: string; class: string;}} note
* @param conf
- * @param diagObj
+ * @param _diagObj
* @todo Add more information in the JSDOC here
*/
-export const drawNote = function (elem, note, conf, diagObj) {
+export const drawNote = function (elem, note, conf, _diagObj) {
log.debug('Rendering note ', note, conf);
const id = note.id;
diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts
index 66cc5ff6f0..e24c8e85c8 100644
--- a/packages/mermaid/src/diagrams/common/common.ts
+++ b/packages/mermaid/src/diagrams/common/common.ts
@@ -34,13 +34,13 @@ function setupDompurifyHooks() {
DOMPurify.addHook('beforeSanitizeAttributes', (node: Element) => {
if (node.tagName === 'A' && node.hasAttribute('target')) {
- node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute('target') || '');
+ node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute('target') ?? '');
}
});
DOMPurify.addHook('afterSanitizeAttributes', (node: Element) => {
if (node.tagName === 'A' && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {
- node.setAttribute('target', node.getAttribute(TEMPORARY_ATTRIBUTE) || '');
+ node.setAttribute('target', node.getAttribute(TEMPORARY_ATTRIBUTE) ?? '');
node.removeAttribute(TEMPORARY_ATTRIBUTE);
if (node.getAttribute('target') === '_blank') {
node.setAttribute('rel', 'noopener');
@@ -83,6 +83,7 @@ export const sanitizeText = (text: string, config: MermaidConfig): string => {
return text;
}
if (config.dompurifyConfig) {
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
text = DOMPurify.sanitize(sanitizeMore(text, config), config.dompurifyConfig).toString();
} else {
text = DOMPurify.sanitize(sanitizeMore(text, config), {
diff --git a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts
index cf962f33ec..8d5ba3b7ca 100644
--- a/packages/mermaid/src/diagrams/common/svgDrawCommon.ts
+++ b/packages/mermaid/src/diagrams/common/svgDrawCommon.ts
@@ -24,8 +24,12 @@ export const drawRect = (element: SVG | Group, rectData: RectData): D3RectElemen
if (rectData.name) {
rectElement.attr('name', rectData.name);
}
- rectData.rx !== undefined && rectElement.attr('rx', rectData.rx);
- rectData.ry !== undefined && rectElement.attr('ry', rectData.ry);
+ if (rectData.rx) {
+ rectElement.attr('rx', rectData.rx);
+ }
+ if (rectData.ry) {
+ rectElement.attr('ry', rectData.ry);
+ }
if (rectData.attrs !== undefined) {
for (const attrKey in rectData.attrs) {
@@ -33,7 +37,9 @@ export const drawRect = (element: SVG | Group, rectData: RectData): D3RectElemen
}
}
- rectData.class !== undefined && rectElement.attr('class', rectData.class);
+ if (rectData.class) {
+ rectElement.attr('class', rectData.class);
+ }
return rectElement;
};
@@ -67,7 +73,9 @@ export const drawText = (element: SVG | Group, textData: TextData): D3TextElemen
textElem.attr('class', 'legend');
textElem.style('text-anchor', textData.anchor);
- textData.class !== undefined && textElem.attr('class', textData.class);
+ if (textData.class) {
+ textElem.attr('class', textData.class);
+ }
const tspan: D3TSpanElement = textElem.append('tspan');
tspan.attr('x', textData.x + textData.textMargin * 2);
diff --git a/packages/mermaid/src/diagrams/er/erDb.js b/packages/mermaid/src/diagrams/er/erDb.js
index 745ef938ad..f24f48198b 100644
--- a/packages/mermaid/src/diagrams/er/erDb.js
+++ b/packages/mermaid/src/diagrams/er/erDb.js
@@ -26,12 +26,16 @@ const Identification = {
NON_IDENTIFYING: 'NON_IDENTIFYING',
IDENTIFYING: 'IDENTIFYING',
};
-
+/**
+ * Add entity
+ * @param {string} name - The name of the entity
+ * @param {string | undefined} alias - The alias of the entity
+ */
const addEntity = function (name, alias = undefined) {
if (!entities.has(name)) {
- entities.set(name, { attributes: [], alias: alias });
+ entities.set(name, { attributes: [], alias });
log.info('Added new entity :', name);
- } else if (entities.has(name) && !entities.get(name).alias && alias) {
+ } else if (!entities.get(name).alias && alias) {
entities.get(name).alias = alias;
log.info(`Add alias '${alias}' to entity '${name}'`);
}
diff --git a/packages/mermaid/src/diagrams/flowchart/flowChartShapes.spec.js b/packages/mermaid/src/diagrams/flowchart/flowChartShapes.spec.js
index 96e6f6fd71..3a1bd865f0 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowChartShapes.spec.js
+++ b/packages/mermaid/src/diagrams/flowchart/flowChartShapes.spec.js
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/restrict-template-expressions */
import { addToRender } from './flowChartShapes.js';
describe('flowchart shapes', function () {
diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
index 797130e71c..d03f1d9890 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts
+++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
@@ -17,12 +17,12 @@ import type { FlowVertex, FlowClass, FlowSubGraph, FlowText, FlowEdge, FlowLink
const MERMAID_DOM_ID_PREFIX = 'flowchart-';
let vertexCounter = 0;
let config = getConfig();
-let vertices: Map = new Map();
+let vertices = new Map();
let edges: FlowEdge[] & { defaultInterpolate?: string; defaultStyle?: string[] } = [];
-let classes: Map = new Map();
+let classes = new Map();
let subGraphs: FlowSubGraph[] = [];
-let subGraphLookup: Map = new Map();
-let tooltips: Map = new Map();
+let subGraphLookup = new Map();
+let tooltips = new Map();
let subCount = 0;
let firstGraphFlag = true;
let direction: string;
@@ -84,7 +84,7 @@ export const addVertex = function (
txt = sanitizeText(textObj.text.trim());
vertex.labelType = textObj.type;
// strip quotes if string starts and ends with a quote
- if (txt[0] === '"' && txt[txt.length - 1] === '"') {
+ if (txt.startsWith('"') && txt.endsWith('"')) {
txt = txt.substring(1, txt.length - 1);
}
vertex.text = txt;
@@ -132,7 +132,7 @@ export const addSingleLink = function (_start: string, _end: string, type: any)
edge.text = sanitizeText(linkTextObj.text.trim());
// strip quotes if string starts and ends with a quote
- if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') {
+ if (edge.text.startsWith('"') && edge.text.endsWith('"')) {
edge.text = edge.text.substring(1, edge.text.length - 1);
}
edge.labelType = linkTextObj.type;
@@ -218,7 +218,7 @@ export const addClass = function (ids: string, style: string[]) {
if (style !== undefined && style !== null) {
style.forEach(function (s) {
- if (s.match('color')) {
+ if (/color/.exec(s)) {
const newStyle = s.replace('fill', 'bgFill').replace('color', 'fill');
classNode.textStyles.push(newStyle);
}
@@ -234,16 +234,16 @@ export const addClass = function (ids: string, style: string[]) {
*/
export const setDirection = function (dir: string) {
direction = dir;
- if (direction.match(/.*)) {
+ if (/.*/)) {
+ if (/.*>/.exec(direction)) {
direction = 'LR';
}
- if (direction.match(/.*v/)) {
+ if (/.*v/.exec(direction)) {
direction = 'TB';
}
if (direction === 'TD') {
@@ -297,7 +297,7 @@ const setClickFun = function (id: string, functionName: string, functionArgs: st
let item = argList[i].trim();
/* Removes all double quotes at the start and end of an argument */
/* This preserves all starting and ending whitespace inside */
- if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') {
+ if (item.startsWith('"') && item.endsWith('"')) {
item = item.substr(1, item.length - 2);
}
argList[i] = item;
@@ -469,7 +469,7 @@ export const addSubGraph = function (
) {
let id: string | undefined = _id.text.trim();
let title = _title.text;
- if (_id === _title && _title.text.match(/\s/)) {
+ if (_id === _title && /\s/.exec(_title.text)) {
id = undefined;
}
@@ -503,7 +503,7 @@ export const addSubGraph = function (
}
}
- id = id || 'subGraph' + subCount;
+ id = id ?? 'subGraph' + subCount;
title = title || '';
title = sanitizeText(title);
subCount = subCount + 1;
@@ -651,21 +651,21 @@ const destructEndLink = (_str: string) => {
switch (str.slice(-1)) {
case 'x':
type = 'arrow_cross';
- if (str[0] === 'x') {
+ if (str.startsWith('x')) {
type = 'double_' + type;
line = line.slice(1);
}
break;
case '>':
type = 'arrow_point';
- if (str[0] === '<') {
+ if (str.startsWith('<')) {
type = 'double_' + type;
line = line.slice(1);
}
break;
case 'o':
type = 'arrow_circle';
- if (str[0] === 'o') {
+ if (str.startsWith('o')) {
type = 'double_' + type;
line = line.slice(1);
}
@@ -675,11 +675,11 @@ const destructEndLink = (_str: string) => {
let stroke = 'normal';
let length = line.length - 1;
- if (line[0] === '=') {
+ if (line.startsWith('=')) {
stroke = 'thick';
}
- if (line[0] === '~') {
+ if (line.startsWith('~')) {
stroke = 'invisible';
}
diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js
index 0e963c8ccb..1dce1391ef 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js
+++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v2.js
@@ -190,9 +190,9 @@ export const addVertices = async function (vert, g, svgId, root, doc, diagObj) {
*
* @param {object} edges The edges to add to the graph
* @param {object} g The graph object
- * @param diagObj
+ * @param _diagObj
*/
-export const addEdges = async function (edges, g, diagObj) {
+export const addEdges = async function (edges, g, _diagObj) {
log.info('abc78 edges = ', edges);
let cnt = 0;
let linkIdCnt = {};
@@ -366,8 +366,8 @@ export const draw = async function (text, id, _version, diagObj) {
}
const { securityLevel, flowchart: conf } = getConfig();
- const nodeSpacing = conf.nodeSpacing || 50;
- const rankSpacing = conf.rankSpacing || 50;
+ const nodeSpacing = conf.nodeSpacing ?? 50;
+ const rankSpacing = conf.rankSpacing ?? 50;
// Handle root and document for when rendering in sandbox mode
let sandboxElement;
@@ -420,14 +420,13 @@ export const draw = async function (text, id, _version, diagObj) {
log.info('Edges', edges);
let i = 0;
for (i = subGraphs.length - 1; i >= 0; i--) {
- // for (let i = 0; i < subGraphs.length; i++) {
subG = subGraphs[i];
selectAll('cluster').append('text');
- for (let j = 0; j < subG.nodes.length; j++) {
- log.info('Setting up subgraphs', subG.nodes[j], subG.id);
- g.setParent(subG.nodes[j], subG.id);
+ for (const node of subG.nodes) {
+ log.info('Setting up subgraphs', node, subG.id);
+ g.setParent(node, subG.id);
}
}
await addVertices(vert, g, id, root, doc, diagObj);
diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js
index ca558987c4..314c6aa52b 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowRenderer.js
+++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer.js
@@ -301,8 +301,8 @@ export const draw = async function (text, id, _version, diagObj) {
if (dir === undefined) {
dir = 'TD';
}
- const nodeSpacing = conf.nodeSpacing || 50;
- const rankSpacing = conf.rankSpacing || 50;
+ const nodeSpacing = conf.nodeSpacing ?? 50;
+ const rankSpacing = conf.rankSpacing ?? 50;
// Create the input mermaid.graph
const g = new graphlib.Graph({
@@ -339,14 +339,14 @@ export const draw = async function (text, id, _version, diagObj) {
selectAll('cluster').append('text');
- for (let j = 0; j < subG.nodes.length; j++) {
+ for (const node of subG.nodes) {
log.warn(
'Setting subgraph',
- subG.nodes[j],
- diagObj.db.lookUpDomId(subG.nodes[j]),
+ node,
+ diagObj.db.lookUpDomId(node),
diagObj.db.lookUpDomId(subG.id)
);
- g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id));
+ g.setParent(diagObj.db.lookUpDomId(node), diagObj.db.lookUpDomId(subG.id));
}
}
await addVertices(vert, g, id, root, doc, diagObj);
@@ -429,8 +429,8 @@ export const draw = async function (text, id, _version, diagObj) {
te.attr('transform', `translate(${xPos + _width / 2}, ${yPos + 14})`);
te.attr('id', id + 'Text');
- for (let j = 0; j < subG.classes.length; j++) {
- clusterEl[0].classList.add(subG.classes[j]);
+ for (const className of subG.classes) {
+ clusterEl[0].classList.add(className);
}
}
}
diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js b/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js
index bdf778b548..79bf75453c 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js
+++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer.spec.js
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/restrict-template-expressions */
import { addVertices, addEdges } from './flowRenderer.js';
import { setConfig } from '../../diagram-api/diagramAPI.js';
diff --git a/packages/mermaid/src/diagrams/gantt/ganttDb.js b/packages/mermaid/src/diagrams/gantt/ganttDb.js
index 160f297131..15c7fab979 100644
--- a/packages/mermaid/src/diagrams/gantt/ganttDb.js
+++ b/packages/mermaid/src/diagrams/gantt/ganttDb.js
@@ -676,7 +676,7 @@ const setClickFun = function (id, functionName, functionArgs) {
let item = argList[i].trim();
/* Removes all double quotes at the start and end of an argument */
/* This preserves all starting and ending whitespace inside */
- if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') {
+ if (item.startsWith('"') && item.endsWith('"')) {
item = item.substr(1, item.length - 2);
}
argList[i] = item;
diff --git a/packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts b/packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts
index a59297cdbe..6f2c8c1afe 100644
--- a/packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts
+++ b/packages/mermaid/src/diagrams/gantt/ganttDb.spec.ts
@@ -109,7 +109,7 @@ describe('when using the ganttDb', function () {
ganttDb.addTask(taskName2, taskData2);
const tasks = ganttDb.getTasks();
expect(tasks[1].startTime).toEqual(expStartDate2);
- if (!expEndDate2 === undefined) {
+ if (expEndDate2) {
expect(tasks[1].endTime).toEqual(expEndDate2);
}
expect(tasks[1].id).toEqual(expId2);
diff --git a/packages/mermaid/src/diagrams/git/gitGraphAst.js b/packages/mermaid/src/diagrams/git/gitGraphAst.js
index dc48a8f4b8..0f7ca29a24 100644
--- a/packages/mermaid/src/diagrams/git/gitGraphAst.js
+++ b/packages/mermaid/src/diagrams/git/gitGraphAst.js
@@ -35,7 +35,7 @@ function getId() {
// * @param currentCommit
// * @param otherCommit
// */
-// eslint-disable-next-line @cspell/spellchecker
+
// function isFastForwardable(currentCommit, otherCommit) {
// log.debug('Entering isFastForwardable:', currentCommit.id, otherCommit.id);
// let cnt = 0;
@@ -90,7 +90,7 @@ export const setDirection = function (dir) {
let options = {};
export const setOptions = function (rawOptString) {
log.debug('options str', rawOptString);
- rawOptString = rawOptString && rawOptString.trim();
+ rawOptString = rawOptString?.trim();
rawOptString = rawOptString || '{}';
try {
options = JSON.parse(rawOptString);
diff --git a/packages/mermaid/src/diagrams/git/gitGraphParser.spec.js b/packages/mermaid/src/diagrams/git/gitGraphParser.spec.js
index 3398dd55f5..d498577fe0 100644
--- a/packages/mermaid/src/diagrams/git/gitGraphParser.spec.js
+++ b/packages/mermaid/src/diagrams/git/gitGraphParser.spec.js
@@ -36,7 +36,7 @@ describe('when parsing a gitGraph', function () {
parser.parse(str);
const commits = parser.yy.getCommits();
- expect(parser.yy.getOptions()['key']).toBe('value');
+ expect(parser.yy.getOptions().key).toBe('value');
expect(commits.size).toBe(1);
expect(parser.yy.getCurrentBranch()).toBe('main');
expect(parser.yy.getDirection()).toBe('LR');
diff --git a/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js b/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js
deleted file mode 100644
index d8b34ac854..0000000000
--- a/packages/mermaid/src/diagrams/git/gitGraphRenderer-old.js
+++ /dev/null
@@ -1,366 +0,0 @@
-import { curveBasis, line, select } from 'd3';
-
-import db from './gitGraphAst.js';
-import { logger } from '../../logger.js';
-import { interpolateToCurve } from '../../utils.js';
-
-let allCommitsDict = {};
-let branchNum;
-let config = {
- nodeSpacing: 150,
- nodeFillColor: 'yellow',
- nodeStrokeWidth: 2,
- nodeStrokeColor: 'grey',
- lineStrokeWidth: 4,
- branchOffset: 50,
- lineColor: 'grey',
- leftMargin: 50,
- branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'],
- nodeRadius: 10,
- nodeLabel: {
- width: 75,
- height: 100,
- x: -25,
- y: 0,
- },
-};
-let apiConfig = {};
-export const setConf = function (c) {
- apiConfig = c;
-};
-
-/** @param svg */
-function svgCreateDefs(svg) {
- svg
- .append('defs')
- .append('g')
- .attr('id', 'def-commit')
- .append('circle')
- .attr('r', config.nodeRadius)
- .attr('cx', 0)
- .attr('cy', 0);
- svg
- .select('#def-commit')
- .append('foreignObject')
- .attr('width', config.nodeLabel.width)
- .attr('height', config.nodeLabel.height)
- .attr('x', config.nodeLabel.x)
- .attr('y', config.nodeLabel.y)
- .attr('class', 'node-label')
- .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility')
- .append('p')
- .html('');
-}
-
-/**
- * @param svg
- * @param points
- * @param colorIdx
- * @param interpolate
- */
-function svgDrawLine(svg, points, colorIdx, interpolate) {
- const curve = interpolateToCurve(interpolate, curveBasis);
- const color = config.branchColors[colorIdx % config.branchColors.length];
- const lineGen = line()
- .x(function (d) {
- return Math.round(d.x);
- })
- .y(function (d) {
- return Math.round(d.y);
- })
- .curve(curve);
-
- svg
- .append('svg:path')
- .attr('d', lineGen(points))
- .style('stroke', color)
- .style('stroke-width', config.lineStrokeWidth)
- .style('fill', 'none');
-}
-
-// Pass in the element and its pre-transform coords
-/**
- * @param element
- * @param coords
- */
-function getElementCoords(element, coords) {
- coords = coords || element.node().getBBox();
- const ctm = element.node().getCTM();
- const xn = ctm.e + coords.x * ctm.a;
- const yn = ctm.f + coords.y * ctm.d;
- return {
- left: xn,
- top: yn,
- width: coords.width,
- height: coords.height,
- };
-}
-
-/**
- * @param svg
- * @param fromId
- * @param toId
- * @param direction
- * @param color
- */
-function svgDrawLineForCommits(svg, fromId, toId, direction, color) {
- logger.debug('svgDrawLineForCommits: ', fromId, toId);
- const fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle'));
- const toBbox = getElementCoords(svg.select('#node-' + toId + ' circle'));
- switch (direction) {
- case 'LR':
- // (toBbox)
- // +--------
- // + (fromBbox)
- if (fromBbox.left - toBbox.left > config.nodeSpacing) {
- const lineStart = {
- x: fromBbox.left - config.nodeSpacing,
- y: toBbox.top + toBbox.height / 2,
- };
- const lineEnd = { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2 };
- svgDrawLine(svg, [lineStart, lineEnd], color, 'linear');
- svgDrawLine(
- svg,
- [
- { x: fromBbox.left, y: fromBbox.top + fromBbox.height / 2 },
- { x: fromBbox.left - config.nodeSpacing / 2, y: fromBbox.top + fromBbox.height / 2 },
- { x: fromBbox.left - config.nodeSpacing / 2, y: lineStart.y },
- lineStart,
- ],
- color
- );
- } else {
- svgDrawLine(
- svg,
- [
- {
- x: fromBbox.left,
- y: fromBbox.top + fromBbox.height / 2,
- },
- {
- x: fromBbox.left - config.nodeSpacing / 2,
- y: fromBbox.top + fromBbox.height / 2,
- },
- {
- x: fromBbox.left - config.nodeSpacing / 2,
- y: toBbox.top + toBbox.height / 2,
- },
- {
- x: toBbox.left + toBbox.width,
- y: toBbox.top + toBbox.height / 2,
- },
- ],
- color
- );
- }
- break;
- case 'BT':
- // + (fromBbox)
- // |
- // |
- // + (toBbox)
- if (toBbox.top - fromBbox.top > config.nodeSpacing) {
- const lineStart = {
- x: toBbox.left + toBbox.width / 2,
- y: fromBbox.top + fromBbox.height + config.nodeSpacing,
- };
- const lineEnd = { x: toBbox.left + toBbox.width / 2, y: toBbox.top };
- svgDrawLine(svg, [lineStart, lineEnd], color, 'linear');
- svgDrawLine(
- svg,
- [
- { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height },
- {
- x: fromBbox.left + fromBbox.width / 2,
- y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2,
- },
- { x: toBbox.left + toBbox.width / 2, y: lineStart.y - config.nodeSpacing / 2 },
- lineStart,
- ],
- color
- );
- } else {
- svgDrawLine(
- svg,
- [
- {
- x: fromBbox.left + fromBbox.width / 2,
- y: fromBbox.top + fromBbox.height,
- },
- {
- x: fromBbox.left + fromBbox.width / 2,
- y: fromBbox.top + config.nodeSpacing / 2,
- },
- {
- x: toBbox.left + toBbox.width / 2,
- y: toBbox.top - config.nodeSpacing / 2,
- },
- {
- x: toBbox.left + toBbox.width / 2,
- y: toBbox.top,
- },
- ],
- color
- );
- }
- break;
- }
-}
-
-/**
- * @param svg
- * @param selector
- */
-function cloneNode(svg, selector) {
- return svg.select(selector).node().cloneNode(true);
-}
-
-/**
- * @param svg
- * @param commitId
- * @param branches
- * @param direction
- */
-function renderCommitHistory(svg, commitId, branches, direction) {
- let commit;
- const numCommits = Object.keys(allCommitsDict).length;
- if (typeof commitId === 'string') {
- do {
- commit = allCommitsDict[commitId];
- logger.debug('in renderCommitHistory', commit.id, commit.seq);
- if (svg.select('#node-' + commitId).size() > 0) {
- return;
- }
- svg
- .append(function () {
- return cloneNode(svg, '#def-commit');
- })
- .attr('class', 'commit')
- .attr('id', function () {
- return 'node-' + commit.id;
- })
- .attr('transform', function () {
- switch (direction) {
- case 'LR':
- return (
- 'translate(' +
- (commit.seq * config.nodeSpacing + config.leftMargin) +
- ', ' +
- branchNum * config.branchOffset +
- ')'
- );
- case 'BT':
- return (
- 'translate(' +
- (branchNum * config.branchOffset + config.leftMargin) +
- ', ' +
- (numCommits - commit.seq) * config.nodeSpacing +
- ')'
- );
- }
- })
- .attr('fill', config.nodeFillColor)
- .attr('stroke', config.nodeStrokeColor)
- .attr('stroke-width', config.nodeStrokeWidth);
-
- let branch;
- for (let branchName in branches) {
- if (branches[branchName].commit === commit) {
- branch = branches[branchName];
- break;
- }
- }
- if (branch) {
- logger.debug('found branch ', branch.name);
- svg
- .select('#node-' + commit.id + ' p')
- .append('xhtml:span')
- .attr('class', 'branch-label')
- .text(branch.name + ', ');
- }
- svg
- .select('#node-' + commit.id + ' p')
- .append('xhtml:span')
- .attr('class', 'commit-id')
- .text(commit.id);
- if (commit.message !== '' && direction === 'BT') {
- svg
- .select('#node-' + commit.id + ' p')
- .append('xhtml:span')
- .attr('class', 'commit-msg')
- .text(', ' + commit.message);
- }
- commitId = commit.parent;
- } while (commitId && allCommitsDict[commitId]);
- }
-
- if (Array.isArray(commitId)) {
- logger.debug('found merge commit', commitId);
- renderCommitHistory(svg, commitId[0], branches, direction);
- branchNum++;
- renderCommitHistory(svg, commitId[1], branches, direction);
- branchNum--;
- }
-}
-
-/**
- * @param svg
- * @param commit
- * @param direction
- * @param branchColor
- */
-function renderLines(svg, commit, direction, branchColor = 0) {
- while (commit.seq > 0 && !commit.lineDrawn) {
- if (typeof commit.parent === 'string') {
- svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor);
- commit.lineDrawn = true;
- commit = allCommitsDict[commit.parent];
- } else if (Array.isArray(commit.parent)) {
- svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor);
- svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1);
- renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1);
- commit.lineDrawn = true;
- commit = allCommitsDict[commit.parent[0]];
- }
- }
-}
-
-export const draw = function (txt, id, ver) {
- try {
- logger.debug('in gitgraph renderer', txt + '\n', 'id:', id, ver);
-
- config = Object.assign(config, apiConfig, db.getOptions());
- logger.debug('effective options', config);
- const direction = db.getDirection();
- allCommitsDict = db.getCommits();
- const branches = db.getBranchesAsObjArray();
- if (direction === 'BT') {
- config.nodeLabel.x = branches.length * config.branchOffset;
- config.nodeLabel.width = '100%';
- config.nodeLabel.y = -1 * 2 * config.nodeRadius;
- }
- const svg = select(`[id="${id}"]`);
- svgCreateDefs(svg);
- branchNum = 1;
- for (let branch in branches) {
- const v = branches[branch];
- renderCommitHistory(svg, v.commit.id, branches, direction);
- renderLines(svg, v.commit, direction);
- branchNum++;
- }
- svg.attr('height', function () {
- if (direction === 'BT') {
- return Object.keys(allCommitsDict).length * config.nodeSpacing;
- }
- return (branches.length + 1) * config.branchOffset;
- });
- } catch (e) {
- logger.error('Error while rendering gitgraph');
- logger.error(e.message);
- }
-};
-
-export default {
- setConf,
- draw,
-};
diff --git a/packages/mermaid/src/diagrams/git/layout.js b/packages/mermaid/src/diagrams/git/layout.js
deleted file mode 100644
index 2a782a0798..0000000000
--- a/packages/mermaid/src/diagrams/git/layout.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import { getConfig } from '../../diagram-api/diagramAPI.js';
-
-export default (dir, _branches) => {
- const config = getConfig().gitGraph;
- const branches = [];
- const commits = [];
-
- for (const [i, _branch] of _branches.entries()) {
- const branch = Object.assign({}, _branch);
- if (dir === 'TB' || dir === 'BT') {
- branch.x = config.branchOffset * i;
- branch.y = -1;
- } else {
- branch.y = config.branchOffset * i;
- branch.x = -1;
- }
- branches.push(branch);
- }
-
- return { branches, commits };
-};
diff --git a/packages/mermaid/src/diagrams/git/mockDb.js b/packages/mermaid/src/diagrams/git/mockDb.js
deleted file mode 100644
index dbca4dcdb0..0000000000
--- a/packages/mermaid/src/diagrams/git/mockDb.js
+++ /dev/null
@@ -1,198 +0,0 @@
-export const getDirection = () => 'LR';
-export const getCommits = () => {
- return {
- '0000001': {
- id: '0000001',
- seq: 1,
- message: '',
- branch: 'master',
- parents: null,
- tag: 'v0.1',
- commitType: 'normal',
- note: null,
- },
- '0000002': {
- id: '0000002',
- seq: 2,
- message: '',
- branch: 'develop',
- parents: ['0000001'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000003': {
- id: '0000003',
- seq: 3,
- message: '',
- branch: 'featureB',
- parents: ['0000002'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000004': {
- id: '0000004',
- seq: 4,
- message: '',
- branch: 'hotfix',
- parents: ['0000001'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000005': {
- id: '0000005',
- seq: 5,
- message: '',
- branch: 'develop',
- parents: ['0000002'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000006': {
- id: '0000006',
- seq: 6,
- message: '',
- branch: 'featureB',
- parents: ['0000003'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000007': {
- id: '0000007',
- seq: 7,
- message: '',
- branch: 'master',
- parents: ['0000004'],
- tag: 'v0.2',
- commitType: 'normal',
- note: null,
- },
- '0000008': {
- id: '0000008',
- seq: 8,
- message: '',
- branch: 'featureB',
- parents: ['0000006'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000009': {
- id: '0000009',
- seq: 9,
- message: '',
- branch: 'featureA',
- parents: ['0000005'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000010': {
- id: '0000010',
- seq: 10,
- message: '',
- branch: 'develop',
- parents: ['0000004', '0000005'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000011': {
- id: '0000011',
- seq: 11,
- message: '',
- branch: 'featureA',
- parents: ['0000009'],
- tag: null,
- commitType: 'normal',
- note: '',
- },
- '0000012': {
- id: '0000012',
- seq: 12,
- message: '',
- branch: 'featureB',
- parents: ['0000008'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000013': {
- id: '0000013',
- seq: 13,
- message: '',
- branch: 'develop',
- parents: ['0000010', '0000011'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000014': {
- id: '0000014',
- seq: 14,
- message: '',
- branch: 'release',
- parents: ['0000013'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000015': {
- id: '0000015',
- seq: 15,
- message: '',
- branch: 'master',
- parents: ['0000007'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- '0000016': {
- id: '0000016',
- seq: 16,
- message: '',
- branch: 'release',
- parents: ['0000014', '0000015'],
- tag: 'v1.0',
- commitType: 'normal',
- note: null,
- },
- '0000017': {
- id: '0000017',
- seq: 17,
- message: '',
- branch: 'develop',
- parents: ['0000013', '0000016'],
- tag: null,
- commitType: 'normal',
- note: null,
- },
- };
-};
-export const clear = () => {
- //no-op
-};
-export const getBranchesAsObjArray = () => [
- {
- name: 'master',
- },
- {
- name: 'hotfix',
- },
- {
- name: 'release',
- },
- {
- name: 'develop',
- },
- {
- name: 'featureA',
- },
- {
- name: 'featureB',
- },
-];
diff --git a/packages/mermaid/src/diagrams/mindmap/svgDraw.ts b/packages/mermaid/src/diagrams/mindmap/svgDraw.ts
index bc629c36e4..4288cfca69 100644
--- a/packages/mermaid/src/diagrams/mindmap/svgDraw.ts
+++ b/packages/mermaid/src/diagrams/mindmap/svgDraw.ts
@@ -195,7 +195,7 @@ export const drawNode = function (
// Create the wrapped text element
const textElem = nodeElem.append('g');
const description = node.descr.replace(/( )/g, '\n');
- const newEl = createText(
+ createText(
textElem,
description,
{
diff --git a/packages/mermaid/src/diagrams/packet/renderer.ts b/packages/mermaid/src/diagrams/packet/renderer.ts
index 84feb8c439..c89e055cce 100644
--- a/packages/mermaid/src/diagrams/packet/renderer.ts
+++ b/packages/mermaid/src/diagrams/packet/renderer.ts
@@ -5,7 +5,6 @@ import { selectSvgElement } from '../../rendering-util/selectSvgElement.js';
import { configureSvgSize } from '../../setupGraphViewbox.js';
import type { PacketDB, PacketWord } from './types.js';
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
const draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {
const db = diagram.db as PacketDB;
const config = db.getConfig();
diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts
index 5a3698e1e1..8f3b9cc5b3 100644
--- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts
+++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts
@@ -119,6 +119,7 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => {
return ((datum.data.value / sum) * 100).toFixed(0) + '%';
})
.attr('transform', (datum: d3.PieArcDatum): string => {
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
return 'translate(' + labelArcGenerator.centroid(datum) + ')';
})
.style('text-anchor', 'middle')
diff --git a/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts b/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts
index f1507a1b90..c7d478ed15 100644
--- a/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts
+++ b/packages/mermaid/src/diagrams/quadrant-chart/quadrantBuilder.ts
@@ -127,7 +127,7 @@ export class QuadrantBuilder {
private config: QuadrantBuilderConfig;
private themeConfig: QuadrantBuilderThemeConfig;
private data: QuadrantBuilderData;
- private classes: Map = new Map();
+ private classes = new Map();
constructor() {
this.config = this.getDefaultConfig();
@@ -493,8 +493,8 @@ export class QuadrantBuilder {
const props: QuadrantPointType = {
x: xAxis(point.x),
y: yAxis(point.y),
- fill: point.color || this.themeConfig.quadrantPointFill,
- radius: point.radius || this.config.pointRadius,
+ fill: point.color ?? this.themeConfig.quadrantPointFill,
+ radius: point.radius ?? this.config.pointRadius,
text: {
text: point.text,
fill: this.themeConfig.quadrantPointTextFill,
@@ -505,8 +505,8 @@ export class QuadrantBuilder {
fontSize: this.config.pointLabelFontSize,
rotation: 0,
},
- strokeColor: point.strokeColor || this.themeConfig.quadrantPointFill,
- strokeWidth: point.strokeWidth || '0px',
+ strokeColor: point.strokeColor ?? this.themeConfig.quadrantPointFill,
+ strokeWidth: point.strokeWidth ?? '0px',
};
return props;
});
diff --git a/packages/mermaid/src/diagrams/quadrant-chart/quadrantRenderer.ts b/packages/mermaid/src/diagrams/quadrant-chart/quadrantRenderer.ts
index c2295da4d4..6d2435cd4c 100644
--- a/packages/mermaid/src/diagrams/quadrant-chart/quadrantRenderer.ts
+++ b/packages/mermaid/src/diagrams/quadrant-chart/quadrantRenderer.ts
@@ -46,10 +46,10 @@ export const draw = (txt: string, id: string, _version: string, diagObj: Diagram
const group = svg.append('g').attr('class', 'main');
- const width = conf.quadrantChart?.chartWidth || 500;
- const height = conf.quadrantChart?.chartHeight || 500;
+ const width = conf.quadrantChart?.chartWidth ?? 500;
+ const height = conf.quadrantChart?.chartHeight ?? 500;
- configureSvgSize(svg, height, width, conf.quadrantChart?.useMaxWidth || true);
+ configureSvgSize(svg, height, width, conf.quadrantChart?.useMaxWidth ?? true);
svg.attr('viewBox', '0 0 ' + width + ' ' + height);
diff --git a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.ts b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.ts
index 169aee8731..007cda6f97 100644
--- a/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.ts
+++ b/packages/mermaid/src/diagrams/sankey/parser/sankey.spec.ts
@@ -13,7 +13,7 @@ describe('Sankey diagram', function () {
sankey.parser.yy.clear();
});
- it('parses csv', async () => {
+ it('parses csv', () => {
const csv = path.resolve(__dirname, './energy.csv');
const data = fs.readFileSync(csv, 'utf8');
const graphDefinition = prepareTextForParsing(cleanupComments('sankey-beta\n\n ' + data));
diff --git a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts
index 735ef045ba..c3e1a99015 100644
--- a/packages/mermaid/src/diagrams/sankey/sankeyDB.ts
+++ b/packages/mermaid/src/diagrams/sankey/sankeyDB.ts
@@ -15,7 +15,7 @@ let links: SankeyLink[] = [];
// Array of nodes guarantees their order
let nodes: SankeyNode[] = [];
// We also have to track nodes uniqueness (by ID)
-let nodesMap: Map = new Map();
+let nodesMap = new Map();
const clear = (): void => {
links = [];
@@ -28,7 +28,7 @@ class SankeyLink {
constructor(
public source: SankeyNode,
public target: SankeyNode,
- public value: number = 0
+ public value = 0
) {}
}
diff --git a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts
index 51f808ff44..a981a346e0 100644
--- a/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts
+++ b/packages/mermaid/src/diagrams/sankey/sankeyRenderer.ts
@@ -5,7 +5,6 @@ import {
scaleOrdinal as d3scaleOrdinal,
schemeTableau10 as d3schemeTableau10,
} from 'd3';
-
import type { SankeyNode as d3SankeyNode } from 'd3-sankey';
import {
sankey as d3Sankey,
@@ -41,7 +40,7 @@ const alignmentsMap: Record<
export const draw = function (text: string, id: string, _version: string, diagObj: Diagram): void {
// Get Sankey config
const { securityLevel, sankey: conf } = getConfig();
- const defaultSankeyConfig = defaultConfig!.sankey!;
+ const defaultSankeyConfig = defaultConfig.sankey!;
// TODO:
// This code repeats for every diagram
@@ -160,7 +159,7 @@ export const draw = function (text: string, id: string, _version: string, diagOb
.attr('class', 'link')
.style('mix-blend-mode', 'multiply');
- const linkColor = conf?.linkColor || 'gradient';
+ const linkColor = conf?.linkColor ?? 'gradient';
if (linkColor === 'gradient') {
const gradient = link
diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDb.ts b/packages/mermaid/src/diagrams/sequence/sequenceDb.ts
index 19f6d561a4..69ddeaf18d 100644
--- a/packages/mermaid/src/diagrams/sequence/sequenceDb.ts
+++ b/packages/mermaid/src/diagrams/sequence/sequenceDb.ts
@@ -46,7 +46,7 @@ const state = new ImperativeState(() => ({
export const addBox = function (data: { text: string; color: string; wrap: boolean }) {
state.records.boxes.push({
name: data.text,
- wrap: (data.wrap === undefined && autoWrap()) || !!data.wrap,
+ wrap: data.wrap ?? autoWrap(),
fill: data.color,
actorKeys: [],
});
@@ -80,18 +80,18 @@ export const addActor = function (
}
// Don't allow null descriptions, either
- if (description == null || description.text == null) {
- description = { text: name, wrap: null, type };
+ if (description?.text == null) {
+ description = { text: name, type };
}
if (type == null || description.text == null) {
- description = { text: name, wrap: null, type };
+ description = { text: name, type };
}
state.records.actors.set(id, {
box: assignedBox,
name: name,
description: description.text,
- wrap: (description.wrap === undefined && autoWrap()) || !!description.wrap,
+ wrap: description.wrap ?? autoWrap(),
prevActor: state.records.prevActor,
links: {},
properties: {},
@@ -145,7 +145,7 @@ export const addMessage = function (
from: idFrom,
to: idTo,
message: message.text,
- wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap,
+ wrap: message.wrap ?? autoWrap(),
answer: answer,
});
};
@@ -155,10 +155,10 @@ export const addSignal = function (
idTo?: Message['to'],
message?: { text: string; wrap: boolean },
messageType?: number,
- activate: boolean = false
+ activate = false
) {
if (messageType === LINETYPE.ACTIVE_END) {
- const cnt = activationCount(idFrom || '');
+ const cnt = activationCount(idFrom ?? '');
if (cnt < 1) {
// Bail out as there is an activation signal from an inactive participant
const error = new Error('Trying to inactivate an inactive participant (' + idFrom + ')');
@@ -178,7 +178,7 @@ export const addSignal = function (
from: idFrom,
to: idTo,
message: message?.text ?? '',
- wrap: (message?.wrap === undefined && autoWrap()) || !!message?.wrap,
+ wrap: message?.wrap ?? autoWrap(),
type: messageType,
activate,
});
@@ -228,13 +228,24 @@ export const setWrap = function (wrapSetting?: boolean) {
state.records.wrapEnabled = wrapSetting;
};
+const extractWrap = (text?: string): { cleanedText?: string; wrap?: boolean } => {
+ if (text === undefined) {
+ return {};
+ }
+ text = text.trim();
+ const wrap =
+ /^:?wrap:/.exec(text) !== null ? true : /^:?nowrap:/.exec(text) !== null ? false : undefined;
+ const cleanedText = (wrap === undefined ? text : text.replace(/^:?(?:no)?wrap:/, '')).trim();
+ return { cleanedText, wrap };
+};
+
export const autoWrap = () => {
// if setWrap has been called, use that value, otherwise use the value from the config
// TODO: refactor, always use the config value let setWrap update the config value
if (state.records.wrapEnabled !== undefined) {
return state.records.wrapEnabled;
}
- return getConfig()?.sequence?.wrap;
+ return getConfig().sequence?.wrap ?? false;
};
export const clear = function () {
@@ -244,16 +255,12 @@ export const clear = function () {
export const parseMessage = function (str: string) {
const trimmedStr = str.trim();
+ const { wrap, cleanedText } = extractWrap(trimmedStr);
const message = {
- text: trimmedStr.replace(/^:?(?:no)?wrap:/, '').trim(),
- wrap:
- trimmedStr.match(/^:?wrap:/) !== null
- ? true
- : trimmedStr.match(/^:?nowrap:/) !== null
- ? false
- : undefined,
+ text: cleanedText,
+ wrap,
};
- log.debug(`parseMessage: ${message}`);
+ log.debug(`parseMessage: ${JSON.stringify(message)}`);
return message;
};
@@ -261,12 +268,12 @@ export const parseMessage = function (str: string) {
// The color can be rgb,rgba,hsl,hsla, or css code names #hex codes are not supported for now because of the way the char # is handled
// We extract first segment as color, the rest of the line is considered as text
export const parseBoxData = function (str: string) {
- const match = str.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);
- let color = match != null && match[1] ? match[1].trim() : 'transparent';
- let title = match != null && match[2] ? match[2].trim() : undefined;
+ const match = /^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(str);
+ let color = match?.[1] ? match[1].trim() : 'transparent';
+ let title = match?.[2] ? match[2].trim() : undefined;
// check that the string is a color
- if (window && window.CSS) {
+ if (window?.CSS) {
if (!window.CSS.supports('color', color)) {
color = 'transparent';
title = str.trim();
@@ -279,21 +286,11 @@ export const parseBoxData = function (str: string) {
title = str.trim();
}
}
-
+ const { wrap, cleanedText } = extractWrap(title);
return {
- color: color,
- text:
- title !== undefined
- ? sanitizeText(title.replace(/^:?(?:no)?wrap:/, ''), getConfig())
- : undefined,
- wrap:
- title !== undefined
- ? title.match(/^:?wrap:/) !== null
- ? true
- : title.match(/^:?nowrap:/) !== null
- ? false
- : undefined
- : undefined,
+ text: cleanedText ? sanitizeText(cleanedText, getConfig()) : undefined,
+ color,
+ wrap,
};
};
@@ -352,7 +349,7 @@ export const addNote = function (
actor: actor,
placement: placement,
message: message.text,
- wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap,
+ wrap: message.wrap ?? autoWrap(),
};
//@ts-ignore: Coerce actor into a [to, from, ...] array
@@ -363,7 +360,7 @@ export const addNote = function (
from: actors[0],
to: actors[1],
message: message.text,
- wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap,
+ wrap: message.wrap ?? autoWrap(),
type: LINETYPE.NOTE,
placement: placement,
});
@@ -461,12 +458,12 @@ export const addDetails = function (actorId: string, text: { text: string }) {
const text = elem.innerHTML;
const details = JSON.parse(text);
// add the deserialized text to the actor's property field.
- if (details['properties']) {
- insertProperties(actor, details['properties']);
+ if (details.properties) {
+ insertProperties(actor, details.properties);
}
- if (details['links']) {
- insertLinks(actor, details['links']);
+ if (details.links) {
+ insertLinks(actor, details.links);
}
} catch (e) {
log.error('error while parsing actor details text', e);
@@ -474,13 +471,14 @@ export const addDetails = function (actorId: string, text: { text: string }) {
};
export const getActorProperty = function (actor: Actor, key: string) {
- if (actor !== undefined && actor.properties !== undefined) {
+ if (actor?.properties !== undefined) {
return actor.properties[key];
}
return undefined;
};
+// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents
export const apply = function (param: any | AddMessageParams | AddMessageParams[]) {
if (Array.isArray(param)) {
param.forEach(function (item) {
@@ -544,7 +542,7 @@ export const apply = function (param: any | AddMessageParams | AddMessageParams[
if (param.to !== state.records.lastCreated) {
throw new Error(
'The created participant ' +
- state.records.lastCreated +
+ state.records.lastCreated.name +
' does not have an associated creating message after its declaration. Please check the sequence diagram.'
);
} else {
@@ -557,7 +555,7 @@ export const apply = function (param: any | AddMessageParams | AddMessageParams[
) {
throw new Error(
'The destroyed participant ' +
- state.records.lastDestroyed +
+ state.records.lastDestroyed.name +
' does not have an associated destroying message after its declaration. Please check the sequence diagram.'
);
} else {
diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js
index 5f29b9f731..7f6b80ca5b 100644
--- a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js
+++ b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js
@@ -1339,15 +1339,15 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com
await mermaidAPI.parse(str);
const actors = diagram.db.getActors();
- expect(actors.get('a').links['Repo']).toBe('https://repo.contoso.com/');
- expect(actors.get('b').links['Repo']).toBe(undefined);
- expect(actors.get('a').links['Dashboard']).toBe('https://dashboard.contoso.com/');
- expect(actors.get('b').links['Dashboard']).toBe('https://dashboard.contoso.com/');
+ expect(actors.get('a').links.Repo).toBe('https://repo.contoso.com/');
+ expect(actors.get('b').links.Repo).toBe(undefined);
+ expect(actors.get('a').links.Dashboard).toBe('https://dashboard.contoso.com/');
+ expect(actors.get('b').links.Dashboard).toBe('https://dashboard.contoso.com/');
expect(actors.get('a').links['On-Call']).toBe('https://oncall.contoso.com/?svc=alice');
- expect(actors.get('c').links['Dashboard']).toBe(undefined);
- expect(actors.get('a').links['Endpoint']).toBe('https://alice.contoso.com');
- expect(actors.get('a').links['Swagger']).toBe('https://swagger.contoso.com');
- expect(actors.get('a').links['Tests']).toBe('https://tests.contoso.com/?svc=alice@contoso.com');
+ expect(actors.get('c').links.Dashboard).toBe(undefined);
+ expect(actors.get('a').links.Endpoint).toBe('https://alice.contoso.com');
+ expect(actors.get('a').links.Swagger).toBe('https://swagger.contoso.com');
+ expect(actors.get('a').links.Tests).toBe('https://tests.contoso.com/?svc=alice@contoso.com');
});
it('should handle properties EXPERIMENTAL: USE WITH CAUTION', async () => {
@@ -1363,11 +1363,11 @@ properties b: {"class": "external-service-actor", "icon": "@computer"}
await mermaidAPI.parse(str);
const actors = diagram.db.getActors();
- expect(actors.get('a').properties['class']).toBe('internal-service-actor');
- expect(actors.get('b').properties['class']).toBe('external-service-actor');
- expect(actors.get('a').properties['icon']).toBe('@clock');
- expect(actors.get('b').properties['icon']).toBe('@computer');
- expect(actors.get('c').properties['class']).toBe(undefined);
+ expect(actors.get('a').properties.class).toBe('internal-service-actor');
+ expect(actors.get('b').properties.class).toBe('external-service-actor');
+ expect(actors.get('a').properties.icon).toBe('@clock');
+ expect(actors.get('b').properties.icon).toBe('@computer');
+ expect(actors.get('c').properties.class).toBe(undefined);
});
it('should handle box', async () => {
@@ -1519,7 +1519,7 @@ describe('when checking the bounds in a sequenceDiagram', function () {
diagram.renderer.bounds.init();
conf = diagram.db.getConfig();
});
- it('should handle a simple bound call', async () => {
+ it('should handle a simple bound call', () => {
diagram.renderer.bounds.insert(100, 100, 200, 200);
const { bounds } = diagram.renderer.bounds.getBounds();
@@ -1528,7 +1528,7 @@ describe('when checking the bounds in a sequenceDiagram', function () {
expect(bounds.stopx).toBe(200);
expect(bounds.stopy).toBe(200);
});
- it('should handle an expanding bound', async () => {
+ it('should handle an expanding bound', () => {
diagram.renderer.bounds.insert(100, 100, 200, 200);
diagram.renderer.bounds.insert(25, 50, 300, 400);
@@ -1538,7 +1538,7 @@ describe('when checking the bounds in a sequenceDiagram', function () {
expect(bounds.stopx).toBe(300);
expect(bounds.stopy).toBe(400);
});
- it('should handle inserts within the bound without changing the outer bounds', async () => {
+ it('should handle inserts within the bound without changing the outer bounds', () => {
diagram.renderer.bounds.insert(100, 100, 200, 200);
diagram.renderer.bounds.insert(25, 50, 300, 400);
diagram.renderer.bounds.insert(125, 150, 150, 200);
@@ -1549,7 +1549,7 @@ describe('when checking the bounds in a sequenceDiagram', function () {
expect(bounds.stopx).toBe(300);
expect(bounds.stopy).toBe(400);
});
- it('should handle a loop without expanding the area', async () => {
+ it('should handle a loop without expanding the area', () => {
diagram.renderer.bounds.insert(25, 50, 300, 400);
diagram.renderer.bounds.verticalPos = 150;
diagram.renderer.bounds.newLoop();
@@ -1570,7 +1570,7 @@ describe('when checking the bounds in a sequenceDiagram', function () {
expect(bounds.stopx).toBe(300);
expect(bounds.stopy).toBe(400);
});
- it('should handle multiple loops withtout expanding the bounds', async () => {
+ it('should handle multiple loops withtout expanding the bounds', () => {
diagram.renderer.bounds.insert(100, 100, 1000, 1000);
diagram.renderer.bounds.verticalPos = 200;
diagram.renderer.bounds.newLoop();
@@ -1601,7 +1601,7 @@ describe('when checking the bounds in a sequenceDiagram', function () {
expect(bounds.stopx).toBe(1000);
expect(bounds.stopy).toBe(1000);
});
- it('should handle a loop that expands the area', async () => {
+ it('should handle a loop that expands the area', () => {
diagram.renderer.bounds.insert(100, 100, 200, 200);
diagram.renderer.bounds.verticalPos = 200;
diagram.renderer.bounds.newLoop();
diff --git a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts
index 42bacd5d62..5299f1b1e1 100644
--- a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts
+++ b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts
@@ -383,9 +383,11 @@ const drawMessage = async function (diagram, msgModel, lineStartY: number, diagO
textObj.textMargin = conf.wrapPadding;
textObj.tspan = false;
- hasKatex(textObj.text)
- ? await drawKatex(diagram, textObj, { startx, stopx, starty: lineStartY })
- : drawText(diagram, textObj);
+ if (hasKatex(textObj.text)) {
+ await drawKatex(diagram, textObj, { startx, stopx, starty: lineStartY });
+ } else {
+ drawText(diagram, textObj);
+ }
const textWidth = textDims.width;
@@ -493,7 +495,7 @@ const drawMessage = async function (diagram, msgModel, lineStartY: number, diagO
}
};
-const addActorRenderingData = async function (
+const addActorRenderingData = function (
diagram,
actors,
createdActors: Map,
@@ -820,7 +822,7 @@ export const draw = async function (_text: string, id: string, _version: string,
actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));
}
- await addActorRenderingData(diagram, actors, createdActors, actorKeys, 0, messages, false);
+ addActorRenderingData(diagram, actors, createdActors, actorKeys, 0, messages, false);
const loopWidths = await calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj);
// The arrow head definition is attached to the svg once
@@ -1074,7 +1076,7 @@ export const draw = async function (_text: string, id: string, _version: string,
box.stopx = box.startx + box.width;
box.stopy = box.starty + box.height;
box.stroke = 'rgb(0,0,0, 0.5)';
- await svgDraw.drawBox(diagram, box, conf);
+ svgDraw.drawBox(diagram, box, conf);
}
if (hasBoxes) {
@@ -1145,7 +1147,7 @@ async function getMaxMessageWidthPerActor(
actors: Map,
messages: any[],
diagObj: Diagram
-): Promise<{ [id: string]: number }> {
+): Promise> {
const maxMessageWidthPerActor = {};
for (const msg of messages) {
@@ -1579,7 +1581,7 @@ const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor,
const lastActorActivationIdx = bounds.activations
.map((a) => a.actor)
.lastIndexOf(msg.from);
- delete bounds.activations.splice(lastActorActivationIdx, 1)[0];
+ bounds.activations.splice(lastActorActivationIdx, 1).splice(0, 1);
}
break;
}
diff --git a/packages/mermaid/src/diagrams/sequence/svgDraw.js b/packages/mermaid/src/diagrams/sequence/svgDraw.js
index bcc06602f6..51968ef9fe 100644
--- a/packages/mermaid/src/diagrams/sequence/svgDraw.js
+++ b/packages/mermaid/src/diagrams/sequence/svgDraw.js
@@ -115,6 +115,7 @@ export const drawKatex = async function (elem, textData, msgModel = null) {
stopx = temp;
}
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
textElem.attr('x', Math.round(startx + Math.abs(startx - stopx) / 2 - dim.width / 2));
if (textData.class === 'loopText') {
textElem.attr('y', Math.round(starty));
@@ -325,7 +326,7 @@ export const fixLifeLineHeights = (diagram, actors, actorKeys, conf) => {
* @param {any} conf - DrawText implementation discriminator object
* @param {boolean} isFooter - If the actor is the footer one
*/
-const drawActorTypeParticipant = async function (elem, actor, conf, isFooter) {
+const drawActorTypeParticipant = function (elem, actor, conf, isFooter) {
const actorY = isFooter ? actor.stopy : actor.starty;
const center = actor.x + actor.width / 2;
const centerY = actorY + 5;
@@ -359,8 +360,8 @@ const drawActorTypeParticipant = async function (elem, actor, conf, isFooter) {
const rect = svgDrawCommon.getNoteRect();
var cssclass = 'actor';
- if (actor.properties != null && actor.properties['class']) {
- cssclass = actor.properties['class'];
+ if (actor.properties?.class) {
+ cssclass = actor.properties.class;
} else {
rect.fill = '#eaeaea';
}
@@ -380,8 +381,8 @@ const drawActorTypeParticipant = async function (elem, actor, conf, isFooter) {
const rectElem = drawRect(g, rect);
actor.rectData = rect;
- if (actor.properties != null && actor.properties['icon']) {
- const iconSrc = actor.properties['icon'].trim();
+ if (actor.properties?.icon) {
+ const iconSrc = actor.properties.icon.trim();
if (iconSrc.charAt(0) === '@') {
svgDrawCommon.drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));
} else {
@@ -389,7 +390,7 @@ const drawActorTypeParticipant = async function (elem, actor, conf, isFooter) {
}
}
- await _drawTextCandidateFunc(conf, hasKatex(actor.description))(
+ _drawTextCandidateFunc(conf, hasKatex(actor.description))(
actor.description,
g,
rect.x,
@@ -410,7 +411,7 @@ const drawActorTypeParticipant = async function (elem, actor, conf, isFooter) {
return height;
};
-const drawActorTypeActor = async function (elem, actor, conf, isFooter) {
+const drawActorTypeActor = function (elem, actor, conf, isFooter) {
const actorY = isFooter ? actor.stopy : actor.starty;
const center = actor.x + actor.width / 2;
const centerY = actorY + 80;
@@ -491,7 +492,7 @@ const drawActorTypeActor = async function (elem, actor, conf, isFooter) {
const bounds = actElem.node().getBBox();
actor.height = bounds.height;
- await _drawTextCandidateFunc(conf, hasKatex(actor.description))(
+ _drawTextCandidateFunc(conf, hasKatex(actor.description))(
actor.description,
actElem,
rect.x,
@@ -514,12 +515,12 @@ export const drawActor = async function (elem, actor, conf, isFooter) {
}
};
-export const drawBox = async function (elem, box, conf) {
+export const drawBox = function (elem, box, conf) {
const boxplusTextGroup = elem.append('g');
const g = boxplusTextGroup;
drawBackgroundRect(g, box);
if (box.name) {
- await _drawTextCandidateFunc(conf)(
+ _drawTextCandidateFunc(conf)(
box.name,
g,
box.x,
diff --git a/packages/mermaid/src/diagrams/sequence/types.ts b/packages/mermaid/src/diagrams/sequence/types.ts
index 5cc6ae249c..10c1c8ed32 100644
--- a/packages/mermaid/src/diagrams/sequence/types.ts
+++ b/packages/mermaid/src/diagrams/sequence/types.ts
@@ -78,8 +78,7 @@ export interface AddMessageParams {
| 'breakEnd'
| 'parOverStart'
| 'parOverEnd'
- | 'parOverAnd'
- | 'parOverEnd';
+ | 'parOverAnd';
activate: boolean;
}
diff --git a/packages/mermaid/src/diagrams/state/stateDb.js b/packages/mermaid/src/diagrams/state/stateDb.js
index 85c09c5365..836b6fe079 100644
--- a/packages/mermaid/src/diagrams/state/stateDb.js
+++ b/packages/mermaid/src/diagrams/state/stateDb.js
@@ -465,7 +465,7 @@ export const addStyleClass = function (id, styleAttributes = '') {
const fixedAttrib = attrib.replace(/([^;]*);/, '$1').trim();
// replace some style keywords
- if (attrib.match(COLOR_KEYWORD)) {
+ if (RegExp(COLOR_KEYWORD).exec(attrib)) {
const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);
const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);
foundClass.textStyles.push(newStyle2);
diff --git a/packages/mermaid/src/diagrams/state/stateRenderer-v2.js b/packages/mermaid/src/diagrams/state/stateRenderer-v2.js
index 0ecc0a73af..acb10427b0 100644
--- a/packages/mermaid/src/diagrams/state/stateRenderer-v2.js
+++ b/packages/mermaid/src/diagrams/state/stateRenderer-v2.js
@@ -362,8 +362,7 @@ const setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) =
const getDir = (parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {
let dir = defaultDir;
if (parsedItem.doc) {
- for (let i = 0; i < parsedItem.doc.length; i++) {
- const parsedItemDoc = parsedItem.doc[i];
+ for (const parsedItemDoc of parsedItem.doc) {
if (parsedItemDoc.stmt === 'dir') {
dir = parsedItemDoc.value;
}
diff --git a/packages/mermaid/src/diagrams/timeline/svgDraw.js b/packages/mermaid/src/diagrams/timeline/svgDraw.js
index 874ac62ef0..723dc46f17 100644
--- a/packages/mermaid/src/diagrams/timeline/svgDraw.js
+++ b/packages/mermaid/src/diagrams/timeline/svgDraw.js
@@ -258,24 +258,6 @@ export const drawTask = function (elem, task, conf) {
rect.ry = 3;
drawRect(g, rect);
- let xPos = task.x + 14;
- // task.people.forEach((person) => {
- // const colour = task.actors[person].color;
-
- // const circle = {
- // cx: xPos,
- // cy: task.y,
- // r: 7,
- // fill: colour,
- // stroke: '#000',
- // title: person,
- // pos: task.actors[person].position,
- // };
-
- // drawCircle(g, circle);
- // xPos += 10;
- // });
-
_drawTextCandidateFunc(conf)(
task.task,
g,
@@ -533,8 +515,7 @@ export const drawNode = function (elem, node, fullSection, conf) {
.attr('text-anchor', 'middle')
.call(wrap, node.width);
const bbox = txt.node().getBBox();
- const fontSize =
- conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace('px', '') : conf.fontSize;
+ const fontSize = conf.fontSize?.replace ? conf.fontSize.replace('px', '') : conf.fontSize;
node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding;
node.height = Math.max(node.height, node.maxHeight);
node.width = node.width + 2 * node.padding;
@@ -558,8 +539,7 @@ export const getVirtualNodeHeight = function (elem, node, conf) {
.attr('text-anchor', 'middle')
.call(wrap, node.width);
const bbox = txt.node().getBBox();
- const fontSize =
- conf.fontSize && conf.fontSize.replace ? conf.fontSize.replace('px', '') : conf.fontSize;
+ const fontSize = conf.fontSize?.replace ? conf.fontSize.replace('px', '') : conf.fontSize;
textElem.remove();
return bbox.height + fontSize * 1.1 * 0.5 + node.padding;
};
diff --git a/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts b/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts
index 2f1f156899..b3405bc1bf 100644
--- a/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts
+++ b/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts
@@ -115,8 +115,7 @@ export const draw = function (text: string, id: string, version: string, diagObj
maxEventCount = Math.max(maxEventCount, task.events.length);
//calculate maxEventLineLength
let maxEventLineLengthTemp = 0;
- for (let j = 0; j < task.events.length; j++) {
- const event = task.events[j];
+ for (const event of task.events) {
const eventNode = {
descr: event,
section: task.section,
diff --git a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts
index 864ef1316e..98eb31235d 100644
--- a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts
+++ b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts
@@ -40,6 +40,6 @@ export class BandAxis extends BaseAxis {
}
getScaleValue(value: string): number {
- return this.scale(value) || this.getRange()[0];
+ return this.scale(value) ?? this.getRange()[0];
}
}
diff --git a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts
index c3240a4a7b..ef60cc85fd 100644
--- a/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts
+++ b/packages/mermaid/src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts
@@ -58,7 +58,7 @@ export abstract class BaseAxis implements Axis {
abstract recalculateScale(): void;
- abstract getTickValues(): Array;
+ abstract getTickValues(): (string | number)[];
getTickDistance(): number {
const range = this.getRange();
diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts
index a59b02688c..940fc6940a 100644
--- a/packages/mermaid/src/docs/.vitepress/config.ts
+++ b/packages/mermaid/src/docs/.vitepress/config.ts
@@ -1,4 +1,5 @@
-import { defineConfig, MarkdownOptions } from 'vitepress';
+import type { MarkdownOptions } from 'vitepress';
+import { defineConfig } from 'vitepress';
import { version } from '../../../package.json';
import MermaidExample from './mermaid-markdown-all.js';
@@ -8,8 +9,9 @@ const allMarkdownTransformers: MarkdownOptions = {
light: 'github-light',
dark: 'github-dark',
},
- config: async (md) => {
- await MermaidExample(md);
+
+ config: (md) => {
+ MermaidExample(md);
},
};
@@ -228,8 +230,6 @@ function sidebarNews() {
/**
* Return a string that puts together the pagePage, a '#', then the given id
- * @param pagePath
- * @param id
* @returns the fully formed path
*/
function pathToId(pagePath: string, id = ''): string {
diff --git a/packages/mermaid/src/docs/.vitepress/contributors.ts b/packages/mermaid/src/docs/.vitepress/contributors.ts
index 93eeee2e21..e61cf57e87 100644
--- a/packages/mermaid/src/docs/.vitepress/contributors.ts
+++ b/packages/mermaid/src/docs/.vitepress/contributors.ts
@@ -1,5 +1,6 @@
import contributorUsernamesJson from './contributor-names.json';
-import { CoreTeam, knut, plainTeamMembers } from './teamMembers.js';
+import type { CoreTeam } from './teamMembers.js';
+import { knut, plainTeamMembers } from './teamMembers.js';
const contributorUsernames: string[] = contributorUsernamesJson;
diff --git a/packages/mermaid/src/docs/.vitepress/mermaid-markdown-all.ts b/packages/mermaid/src/docs/.vitepress/mermaid-markdown-all.ts
index 64a069b4c2..d1aeee5ac2 100644
--- a/packages/mermaid/src/docs/.vitepress/mermaid-markdown-all.ts
+++ b/packages/mermaid/src/docs/.vitepress/mermaid-markdown-all.ts
@@ -1,6 +1,6 @@
import type { MarkdownRenderer } from 'vitepress';
-const MermaidExample = async (md: MarkdownRenderer) => {
+const MermaidExample = (md: MarkdownRenderer) => {
const defaultRenderer = md.renderer.rules.fence;
if (!defaultRenderer) {
diff --git a/packages/mermaid/src/docs/.vitepress/scripts/fetch-avatars.ts b/packages/mermaid/src/docs/.vitepress/scripts/fetch-avatars.ts
index cd78be782a..23c3594440 100644
--- a/packages/mermaid/src/docs/.vitepress/scripts/fetch-avatars.ts
+++ b/packages/mermaid/src/docs/.vitepress/scripts/fetch-avatars.ts
@@ -32,11 +32,11 @@ async function fetchAvatars() {
});
contributors = JSON.parse(await readFile(pathContributors, { encoding: 'utf-8' }));
- let avatars = contributors.map((name) => {
- download(`https://github.com/${name}.png?size=100`, getAvatarPath(name));
- });
+ const avatars = contributors.map((name) =>
+ download(`https://github.com/${name}.png?size=100`, getAvatarPath(name))
+ );
await Promise.allSettled(avatars);
}
-fetchAvatars();
+void fetchAvatars();
diff --git a/packages/mermaid/src/docs/.vitepress/scripts/fetch-contributors.ts b/packages/mermaid/src/docs/.vitepress/scripts/fetch-contributors.ts
index da7621b299..54144cf62e 100644
--- a/packages/mermaid/src/docs/.vitepress/scripts/fetch-contributors.ts
+++ b/packages/mermaid/src/docs/.vitepress/scripts/fetch-contributors.ts
@@ -1,3 +1,4 @@
+/* eslint-disable no-console */
// Adapted from https://github.dev/vitest-dev/vitest/blob/991ff33ab717caee85ef6cbe1c16dc514186b4cc/scripts/update-contributors.ts#L6
import { writeFile } from 'node:fs/promises';
diff --git a/packages/mermaid/src/docs/.vitepress/teamMembers.ts b/packages/mermaid/src/docs/.vitepress/teamMembers.ts
index d95f49ed87..e307b81c45 100644
--- a/packages/mermaid/src/docs/.vitepress/teamMembers.ts
+++ b/packages/mermaid/src/docs/.vitepress/teamMembers.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @cspell/spellchecker */
export interface Contributor {
name: string;
avatar: string;
diff --git a/packages/mermaid/src/docs/.vitepress/theme/index.ts b/packages/mermaid/src/docs/.vitepress/theme/index.ts
index 3ebb7614a1..3ce3aea238 100644
--- a/packages/mermaid/src/docs/.vitepress/theme/index.ts
+++ b/packages/mermaid/src/docs/.vitepress/theme/index.ts
@@ -1,14 +1,16 @@
+/* eslint-disable no-console */
import DefaultTheme from 'vitepress/theme';
import './custom.css';
-// @ts-ignore
+// @ts-ignore Type not available
import Mermaid from './Mermaid.vue';
-// @ts-ignore
+// @ts-ignore Type not available
import Contributors from '../components/Contributors.vue';
-// @ts-ignore
+// @ts-ignore Type not available
import HomePage from '../components/HomePage.vue';
-// @ts-ignore
+// @ts-ignore Type not available
import TopBar from '../components/TopBar.vue';
import { getRedirect } from './redirect.js';
+// @ts-ignore Type not available
import { h } from 'vue';
import Theme from 'vitepress/theme';
import '../style/main.css';
@@ -33,7 +35,7 @@ export default {
const url = new URL(window.location.origin + to);
const newPath = getRedirect(url);
if (newPath) {
- console.log(`Redirecting to ${newPath} from ${window.location}`);
+ console.log(`Redirecting to ${newPath} from ${window.location.toString()}`);
// router.go isn't loading the ID properly.
window.location.href = `/${newPath}`;
}
diff --git a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts
index 1b04e01d5f..8283951ac8 100644
--- a/packages/mermaid/src/docs/.vitepress/theme/redirect.ts
+++ b/packages/mermaid/src/docs/.vitepress/theme/redirect.ts
@@ -116,3 +116,5 @@ export const getRedirect = (url: URL): string | undefined => {
return `${idRedirectMap[path]}.html${id ? `#${id}` : ''}`;
}
};
+
+// cspell:ignore mermaidapi, breakingchanges, classdiagram, entityrelationshipdiagram, mermaidapi, mermaidcli, gettingstarted, syntaxreference, newdiagram, requirementdiagram, sequencediagram
diff --git a/packages/mermaid/src/docs/tsconfig.json b/packages/mermaid/src/docs/tsconfig.json
new file mode 100644
index 0000000000..8225d4f96b
--- /dev/null
+++ b/packages/mermaid/src/docs/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": ["../../../../tsconfig.json"],
+ "compilerOptions": {
+ "noEmit": true
+ },
+ "include": ["./**/*.ts", "./.vitepress/**/*.ts"]
+}
diff --git a/packages/mermaid/src/docs/vite.config.ts b/packages/mermaid/src/docs/vite.config.ts
index ed5f4bab91..399e5c65e8 100644
--- a/packages/mermaid/src/docs/vite.config.ts
+++ b/packages/mermaid/src/docs/vite.config.ts
@@ -49,12 +49,12 @@ export default defineConfig({
// TODO: will be fixed in the next vitepress release.
name: 'fix-virtual',
- async resolveId(id: string) {
+ resolveId(id: string) {
if (id === virtualModuleId) {
return resolvedVirtualModuleId;
}
},
- async load(this, id: string) {
+ load(this, id: string) {
if (id === resolvedVirtualModuleId) {
return `export default ${JSON.stringify({
securityLevel: 'loose',
diff --git a/packages/mermaid/src/logger.ts b/packages/mermaid/src/logger.ts
index 44b98315ca..cffd2112ce 100644
--- a/packages/mermaid/src/logger.ts
+++ b/packages/mermaid/src/logger.ts
@@ -1,6 +1,6 @@
-/* eslint-disable @typescript-eslint/no-explicit-any */
-/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable @typescript-eslint/no-empty-function */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
/* eslint-disable no-console */
import dayjs from 'dayjs';
@@ -29,12 +29,11 @@ export const log: Record = {
*
* @param level - The level to set the logging to. Default is `"fatal"`
*/
-export const setLogLevel = function (level: keyof typeof LEVELS | number | string = 'fatal') {
+export const setLogLevel = function (level: keyof typeof LEVELS | number = 'fatal') {
let numericLevel: number = LEVELS.fatal;
if (typeof level === 'string') {
- level = level.toLowerCase();
- if (level in LEVELS) {
- numericLevel = LEVELS[level as keyof typeof LEVELS];
+ if (level.toLowerCase() in LEVELS) {
+ numericLevel = LEVELS[level];
}
} else if (typeof level === 'number') {
numericLevel = level;
diff --git a/packages/mermaid/src/mermaid.spec.ts b/packages/mermaid/src/mermaid.spec.ts
index d03f0ee9dc..586d3605c6 100644
--- a/packages/mermaid/src/mermaid.spec.ts
+++ b/packages/mermaid/src/mermaid.spec.ts
@@ -5,7 +5,7 @@ import { addDiagrams } from './diagram-api/diagram-orchestration.js';
import { beforeAll, describe, it, expect, vi, afterEach } from 'vitest';
import type { DiagramDefinition } from './diagram-api/types.js';
-beforeAll(async () => {
+beforeAll(() => {
addDiagrams();
});
const spyOn = vi.spyOn;
@@ -18,7 +18,7 @@ afterEach(() => {
describe('when using mermaid and ', () => {
describe('when detecting chart type ', () => {
- it('should not start rendering with mermaid.startOnLoad set to false', async () => {
+ it('should not start rendering with mermaid.startOnLoad set to false', () => {
mermaid.startOnLoad = false;
document.body.innerHTML = 'graph TD;\na;
';
spyOn(mermaid, 'run');
@@ -26,7 +26,7 @@ describe('when using mermaid and ', () => {
expect(mermaid.run).not.toHaveBeenCalled();
});
- it('should start rendering with both startOnLoad set', async () => {
+ it('should start rendering with both startOnLoad set', () => {
mermaid.startOnLoad = true;
document.body.innerHTML = 'graph TD;\na;
';
spyOn(mermaid, 'run');
@@ -34,7 +34,7 @@ describe('when using mermaid and ', () => {
expect(mermaid.run).toHaveBeenCalled();
});
- it('should start rendering with mermaid.startOnLoad', async () => {
+ it('should start rendering with mermaid.startOnLoad', () => {
mermaid.startOnLoad = true;
document.body.innerHTML = 'graph TD;\na;
';
spyOn(mermaid, 'run');
@@ -42,7 +42,7 @@ describe('when using mermaid and ', () => {
expect(mermaid.run).toHaveBeenCalled();
});
- it('should start rendering as a default with no changes performed', async () => {
+ it('should start rendering as a default with no changes performed', () => {
document.body.innerHTML = 'graph TD;\na;
';
spyOn(mermaid, 'run');
mermaid.contentLoaded();
@@ -74,7 +74,7 @@ describe('when using mermaid and ', () => {
[
{
id: 'dummyError',
- detector: (text) => /dummyError/.test(text),
+ detector: (text) => text.includes('dummyError'),
loader: () => Promise.reject('dummyError'),
},
],
@@ -114,7 +114,7 @@ describe('when using mermaid and ', () => {
[
{
id: 'dummy',
- detector: (text) => /dummy/.test(text),
+ detector: (text) => text.includes('dummy'),
loader: () => {
loaded = true;
return Promise.resolve({
@@ -133,7 +133,7 @@ describe('when using mermaid and ', () => {
[
{
id: 'dummy2',
- detector: (text) => /dummy2/.test(text),
+ detector: (text) => text.includes('dummy2'),
loader: () => {
loaded = true;
return Promise.resolve({
diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts
index 41ec0c9845..7958f397e0 100644
--- a/packages/mermaid/src/mermaidAPI.spec.ts
+++ b/packages/mermaid/src/mermaidAPI.spec.ts
@@ -606,26 +606,26 @@ describe('mermaidAPI', () => {
let error: any = { message: '' };
try {
// @ts-ignore This is a read-only property. Typescript will not allow assignment, but regular javascript might.
- mermaidAPI['defaultConfig'] = config;
+ mermaidAPI.defaultConfig = config;
} catch (e) {
error = e;
}
expect(error.message).toBe(
"Cannot assign to read only property 'defaultConfig' of object '#'"
);
- expect(mermaidAPI.defaultConfig['logLevel']).toBe(5);
+ expect(mermaidAPI.defaultConfig.logLevel).toBe(5);
});
it('prevents changes to global defaults (direct)', () => {
let error: any = { message: '' };
try {
- mermaidAPI.defaultConfig['logLevel'] = 0;
+ mermaidAPI.defaultConfig.logLevel = 0;
} catch (e) {
error = e;
}
expect(error.message).toBe(
"Cannot assign to read only property 'logLevel' of object '#'"
);
- expect(mermaidAPI.defaultConfig['logLevel']).toBe(5);
+ expect(mermaidAPI.defaultConfig.logLevel).toBe(5);
});
it('prevents sneaky changes to global defaults (assignWithDepth)', () => {
const config = {
@@ -640,7 +640,7 @@ describe('mermaidAPI', () => {
expect(error.message).toBe(
"Cannot assign to read only property 'logLevel' of object '#'"
);
- expect(mermaidAPI.defaultConfig['logLevel']).toBe(5);
+ expect(mermaidAPI.defaultConfig.logLevel).toBe(5);
});
});
@@ -648,7 +648,7 @@ describe('mermaidAPI', () => {
it('allows dompurify config to be set', () => {
mermaidAPI.initialize({ dompurifyConfig: { ADD_ATTR: ['onclick'] } });
- expect(mermaidAPI!.getConfig()!.dompurifyConfig!.ADD_ATTR).toEqual(['onclick']);
+ expect(mermaidAPI.getConfig().dompurifyConfig!.ADD_ATTR).toEqual(['onclick']);
});
});
diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts
index ffd7d4bea4..7bca4d995e 100644
--- a/packages/mermaid/src/mermaidAPI.ts
+++ b/packages/mermaid/src/mermaidAPI.ts
@@ -128,7 +128,7 @@ export const createCssStyles = (
// classDefs defined in the diagram text
if (classDefs instanceof Map) {
- const htmlLabels = config.htmlLabels || config.flowchart?.htmlLabels; // TODO why specifically check the Flowchart diagram config?
+ const htmlLabels = config.htmlLabels ?? config.flowchart?.htmlLabels; // TODO why specifically check the Flowchart diagram config?
const cssHtmlElements = ['> *', 'span']; // TODO make a constant
const cssShapeElements = ['rect', 'polygon', 'ellipse', 'circle', 'path']; // TODO make a constant
diff --git a/packages/mermaid/src/preprocess.ts b/packages/mermaid/src/preprocess.ts
index 6e386e744a..10bc0adea6 100644
--- a/packages/mermaid/src/preprocess.ts
+++ b/packages/mermaid/src/preprocess.ts
@@ -33,9 +33,7 @@ const processDirectives = (code: string) => {
const initDirective = utils.detectInit(code) ?? {};
const wrapDirectives = utils.detectDirective(code, 'wrap');
if (Array.isArray(wrapDirectives)) {
- initDirective.wrap = wrapDirectives.some(({ type }) => {
- type === 'wrap';
- });
+ initDirective.wrap = wrapDirectives.some(({ type }) => type === 'wrap');
} else if (wrapDirectives?.type === 'wrap') {
initDirective.wrap = true;
}
diff --git a/packages/mermaid/src/styles.spec.ts b/packages/mermaid/src/styles.spec.ts
index 698b2beafd..70e9e7ec54 100644
--- a/packages/mermaid/src/styles.spec.ts
+++ b/packages/mermaid/src/styles.spec.ts
@@ -31,7 +31,7 @@ import packet from './diagrams/packet/styles.js';
import block from './diagrams/block/styles.js';
import themes from './themes/index.js';
-async function checkValidStylisCSSStyleSheet(stylisString: string) {
+function checkValidStylisCSSStyleSheet(stylisString: string) {
const cssString = serialize(compile(`#my-svg-id{${stylisString}}`), stringify);
const errors = validate(cssString, 'this-file-was-created-by-tests.css') as Error[];
@@ -51,6 +51,7 @@ async function checkValidStylisCSSStyleSheet(stylisString: string) {
if (unexpectedErrors.length > 0) {
throw new Error(
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
`The given CSS string was invalid: ${errors}.\n\n` +
'Copy the below CSS into https://jigsaw.w3.org/css-validator/validator to help debug where the invalid CSS is:\n\n' +
`Original CSS value was ${cssString}`
@@ -75,7 +76,7 @@ describe('styles', () => {
const styles = getStyles(diagramType, '', getConfig().themeVariables);
- await checkValidStylisCSSStyleSheet(styles);
+ checkValidStylisCSSStyleSheet(styles);
});
/**
@@ -110,7 +111,7 @@ describe('styles', () => {
themes[themeId].getThemeVariables()
);
- await checkValidStylisCSSStyleSheet(styles);
+ checkValidStylisCSSStyleSheet(styles);
});
}
}
diff --git a/packages/mermaid/src/styles.ts b/packages/mermaid/src/styles.ts
index fde079450c..50d502bac5 100644
--- a/packages/mermaid/src/styles.ts
+++ b/packages/mermaid/src/styles.ts
@@ -17,8 +17,8 @@ const getStyles = (
} & FlowChartStyleOptions
) => {
let diagramStyles = '';
- if (type in themes && themes[type as keyof typeof themes]) {
- diagramStyles = themes[type as keyof typeof themes](options);
+ if (type in themes && themes[type]) {
+ diagramStyles = themes[type](options);
} else {
log.warn(`No theme found for ${type}`);
}
diff --git a/packages/mermaid/src/tests/MockedD3.ts b/packages/mermaid/src/tests/MockedD3.ts
index 2f00e4924d..35871f14e6 100644
--- a/packages/mermaid/src/tests/MockedD3.ts
+++ b/packages/mermaid/src/tests/MockedD3.ts
@@ -60,7 +60,7 @@ export class MockedD3 {
if (beforeSelector === undefined) {
this._children.push(newMock);
} else {
- const idOnly = beforeSelector[0] == '#' ? beforeSelector.substring(1) : beforeSelector;
+ const idOnly = beforeSelector.startsWith('#') ? beforeSelector.substring(1) : beforeSelector;
const foundIndex = this._children.findIndex((child) => child.id === idOnly);
if (foundIndex < 0) {
this._children.push(newMock);
diff --git a/packages/mermaid/src/themes/theme-base.js b/packages/mermaid/src/themes/theme-base.js
index dde3b9ecff..a92bd9e20d 100644
--- a/packages/mermaid/src/themes/theme-base.js
+++ b/packages/mermaid/src/themes/theme-base.js
@@ -1,9 +1,9 @@
-import { darken, lighten, adjust, invert, isDark, toRgba } from 'khroma';
-import { mkBorder } from './theme-helpers.js';
+import { adjust, darken, invert, isDark, lighten } from 'khroma';
import {
oldAttributeBackgroundColorEven,
oldAttributeBackgroundColorOdd,
} from './erDiagram-oldHardcodedValues.js';
+import { mkBorder } from './theme-helpers.js';
class Theme {
constructor() {
diff --git a/packages/mermaid/src/themes/theme-neutral.js b/packages/mermaid/src/themes/theme-neutral.js
index 4134a985b9..40963839e2 100644
--- a/packages/mermaid/src/themes/theme-neutral.js
+++ b/packages/mermaid/src/themes/theme-neutral.js
@@ -156,8 +156,8 @@ class Theme {
// Setup the label color for the set
this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? 'black' : this.labelTextColor);
- this['cScaleLabel0'] = this['cScaleLabel0'] || this.cScale1;
- this['cScaleLabel2'] = this['cScaleLabel2'] || this.cScale1;
+ this.cScaleLabel0 = this.cScaleLabel0 || this.cScale1;
+ this.cScaleLabel2 = this.cScaleLabel2 || this.cScale1;
for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor;
}
diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts
index f49b1c38c2..386c107389 100644
--- a/packages/mermaid/src/utils.ts
+++ b/packages/mermaid/src/utils.ts
@@ -177,11 +177,7 @@ export const detectDirective = function (
if (match.index === directiveRegex.lastIndex) {
directiveRegex.lastIndex++;
}
- if (
- (match && !type) ||
- (type && match[1] && match[1].match(type)) ||
- (type && match[2] && match[2].match(type))
- ) {
+ if ((match && !type) || (type && match[1]?.match(type)) || (type && match[2]?.match(type))) {
const type = match[1] ? match[1] : match[2];
const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;
result.push({ type, args });
@@ -777,7 +773,7 @@ export const entityDecode = function (html: string): string {
// Escape HTML before decoding for HTML Entities
html = escape(html).replace(/%26/g, '&').replace(/%23/g, '#').replace(/%3B/g, ';');
decoder.innerHTML = html;
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+
return unescape(decoder.textContent!);
};
diff --git a/packages/mermaid/src/utils/lineWithOffset.ts b/packages/mermaid/src/utils/lineWithOffset.ts
index af0cd3b46e..114dda2bd3 100644
--- a/packages/mermaid/src/utils/lineWithOffset.ts
+++ b/packages/mermaid/src/utils/lineWithOffset.ts
@@ -45,7 +45,12 @@ export const getLineFunctionsWithOffset = (
edge: Pick
) => {
return {
- x: function (d: Point | [number, number], i: number, data: (Point | [number, number])[]) {
+ x: function (
+ this: void,
+ d: Point | [number, number],
+ i: number,
+ data: (Point | [number, number])[]
+ ) {
let offset = 0;
if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {
// Handle first point
@@ -70,7 +75,12 @@ export const getLineFunctionsWithOffset = (
}
return pointTransformer(d).x + offset;
},
- y: function (d: Point | [number, number], i: number, data: (Point | [number, number])[]) {
+ y: function (
+ this: void,
+ d: Point | [number, number],
+ i: number,
+ data: (Point | [number, number])[]
+ ) {
// Same handling as X above
let offset = 0;
if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {
diff --git a/packages/mermaid/tsconfig.eslint.json b/packages/mermaid/tsconfig.eslint.json
new file mode 100644
index 0000000000..9df160d20a
--- /dev/null
+++ b/packages/mermaid/tsconfig.eslint.json
@@ -0,0 +1,13 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": ["./tsconfig.json"],
+ "compilerOptions": {
+ "noEmit": true
+ },
+ "include": [
+ "./src/**/*.spec.js",
+ "./src/**/*.spec.ts", // test files
+ "./scripts",
+ "./.lintstagedrc.mjs"
+ ]
+}
diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts
index f997634545..1511dd3909 100644
--- a/packages/parser/src/language/common/tokenBuilder.ts
+++ b/packages/parser/src/language/common/tokenBuilder.ts
@@ -20,6 +20,7 @@ export abstract class AbstractMermaidTokenBuilder extends DefaultTokenBuilder {
// to restrict users, they mustn't have any non-whitespace characters after the keyword.
tokenTypes.forEach((tokenType: TokenType): void => {
if (this.keywords.has(tokenType.name) && tokenType.PATTERN !== undefined) {
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + '(?:(?=%%)|(?!\\S))');
}
});
diff --git a/packages/parser/src/language/common/valueConverter.ts b/packages/parser/src/language/common/valueConverter.ts
index 624cc67a5e..740ef527f5 100644
--- a/packages/parser/src/language/common/valueConverter.ts
+++ b/packages/parser/src/language/common/valueConverter.ts
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/no-unused-vars */
import type { CstNode, GrammarAST, ValueType } from 'langium';
import { DefaultValueConverter } from 'langium';
diff --git a/packages/parser/src/language/pie/valueConverter.ts b/packages/parser/src/language/pie/valueConverter.ts
index b0ae18c0ba..6e312e1721 100644
--- a/packages/parser/src/language/pie/valueConverter.ts
+++ b/packages/parser/src/language/pie/valueConverter.ts
@@ -6,7 +6,7 @@ export class PieValueConverter extends AbstractMermaidValueConverter {
protected runCustomConverter(
rule: GrammarAST.AbstractRule,
input: string,
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
+
_cstNode: CstNode
): ValueType | undefined {
if (rule.name !== 'PIE_SECTION_LABEL') {
diff --git a/packages/parser/src/parse.ts b/packages/parser/src/parse.ts
index 577a1cea6f..992b965060 100644
--- a/packages/parser/src/parse.ts
+++ b/packages/parser/src/parse.ts
@@ -9,17 +9,17 @@ const initializers = {
info: async () => {
const { createInfoServices } = await import('./language/info/index.js');
const parser = createInfoServices().Info.parser.LangiumParser;
- parsers['info'] = parser;
+ parsers.info = parser;
},
packet: async () => {
const { createPacketServices } = await import('./language/packet/index.js');
const parser = createPacketServices().Packet.parser.LangiumParser;
- parsers['packet'] = parser;
+ parsers.packet = parser;
},
pie: async () => {
const { createPieServices } = await import('./language/pie/index.js');
const parser = createPieServices().Pie.parser.LangiumParser;
- parsers['pie'] = parser;
+ parsers.pie = parser;
},
} as const;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d3f1a8851e..093612e951 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,20 +15,20 @@ importers:
specifier: ^2.0.5
version: 2.0.5(cypress@13.7.3)
'@cspell/eslint-plugin':
- specifier: ^8.6.0
- version: 8.7.0(eslint@8.57.0)
+ specifier: ^8.8.4
+ version: 8.9.1(eslint@9.6.0)
'@cypress/code-coverage':
specifier: ^3.12.30
version: 3.12.39(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0(esbuild@0.21.5)))(cypress@13.7.3)(webpack@5.91.0(esbuild@0.21.5))
+ '@eslint/js':
+ specifier: ^9.4.0
+ version: 9.6.0
'@rollup/plugin-typescript':
specifier: ^11.1.6
version: 11.1.6(rollup@4.18.0)(tslib@2.6.2)(typescript@5.4.5)
'@types/cors':
specifier: ^2.8.17
version: 2.8.17
- '@types/eslint':
- specifier: ^8.56.6
- version: 8.56.10
'@types/express':
specifier: ^4.17.21
version: 4.17.21
@@ -50,12 +50,6 @@ importers:
'@types/rollup-plugin-visualizer':
specifier: ^4.2.4
version: 4.2.4
- '@typescript-eslint/eslint-plugin':
- specifier: ^7.3.1
- version: 7.6.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/parser':
- specifier: ^7.3.1
- version: 7.6.0(eslint@8.57.0)(typescript@5.4.5)
'@vitest/coverage-v8':
specifier: ^1.4.0
version: 1.5.3(vitest@1.5.3(@types/node@20.12.14)(@vitest/ui@1.5.3)(jsdom@24.0.0)(terser@5.31.1))
@@ -93,44 +87,47 @@ importers:
specifier: ^0.21.5
version: 0.21.5
eslint:
- specifier: ^8.57.0
- version: 8.57.0
+ specifier: ^9.4.0
+ version: 9.6.0
eslint-config-prettier:
specifier: ^9.1.0
- version: 9.1.0(eslint@8.57.0)
+ version: 9.1.0(eslint@9.6.0)
eslint-plugin-cypress:
- specifier: ^2.15.1
- version: 2.15.2(eslint@8.57.0)
+ specifier: ^3.3.0
+ version: 3.3.0(eslint@9.6.0)
eslint-plugin-html:
- specifier: ^8.0.0
+ specifier: ^8.1.1
version: 8.1.1
eslint-plugin-jest:
- specifier: ^27.9.0
- version: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.12.14))(typescript@5.4.5)
+ specifier: ^28.6.0
+ version: 28.6.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(jest@29.7.0(@types/node@20.12.14))(typescript@5.4.5)
eslint-plugin-jsdoc:
- specifier: ^48.2.1
- version: 48.2.15(eslint@8.57.0)
+ specifier: ^48.2.9
+ version: 48.2.15(eslint@9.6.0)
eslint-plugin-json:
- specifier: ^3.1.0
- version: 3.1.0
+ specifier: ^4.0.0
+ version: 4.0.0
eslint-plugin-lodash:
- specifier: ^7.4.0
- version: 7.4.0(eslint@8.57.0)
+ specifier: ^8.0.0
+ version: 8.0.0(eslint@9.6.0)
eslint-plugin-markdown:
- specifier: ^4.0.1
- version: 4.0.1(eslint@8.57.0)
+ specifier: ^5.0.0
+ version: 5.0.0(eslint@9.6.0)
eslint-plugin-no-only-tests:
specifier: ^3.1.0
version: 3.1.0
eslint-plugin-tsdoc:
- specifier: ^0.2.17
- version: 0.2.17
+ specifier: ^0.3.0
+ version: 0.3.0
eslint-plugin-unicorn:
- specifier: ^51.0.1
- version: 51.0.1(eslint@8.57.0)
+ specifier: ^53.0.0
+ version: 53.0.0(eslint@9.6.0)
express:
specifier: ^4.19.1
version: 4.19.2
+ globals:
+ specifier: ^15.4.0
+ version: 15.6.0
globby:
specifier: ^14.0.1
version: 14.0.1
@@ -186,8 +183,11 @@ importers:
specifier: ^4.7.1
version: 4.7.3
typescript:
- specifier: ~5.4.3
+ specifier: ~5.4.5
version: 5.4.5
+ typescript-eslint:
+ specifier: ^8.0.0-alpha.34
+ version: 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
vite:
specifier: ^5.2.3
version: 5.2.13(@types/node@20.12.14)(terser@5.31.1)
@@ -300,12 +300,6 @@ importers:
'@types/uuid':
specifier: ^9.0.8
version: 9.0.8
- '@typescript-eslint/eslint-plugin':
- specifier: ^7.3.1
- version: 7.6.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/parser':
- specifier: ^7.3.1
- version: 7.6.0(eslint@8.57.0)(typescript@5.4.5)
ajv:
specifier: ^8.12.0
version: 8.12.0
@@ -961,14 +955,6 @@ packages:
resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.22.20':
- resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.24.5':
- resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-validator-identifier@7.24.7':
resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
engines: {node: '>=6.9.0'}
@@ -1543,6 +1529,10 @@ packages:
resolution: {integrity: sha512-B5YQI7Dd9m0JHTmHgs7PiyP4BWXzl8ixpK+HGOwhxzh7GyfFt1Eo/gxMxBDX/9SaewEzeb2OjRpRKEFtEsto3A==}
engines: {node: '>=18'}
+ '@cspell/cspell-bundled-dicts@8.9.1':
+ resolution: {integrity: sha512-etkor/qXSSqyh6lbudEGdTami0DooIi2AlQbJPUWRfowzYJRSYWPUbyQSUkFdRhCHni2oLOFbWaraRthNlLD/A==}
+ engines: {node: '>=18'}
+
'@cspell/cspell-json-reporter@8.7.0':
resolution: {integrity: sha512-LTQPEvXvCqnc+ok9WXpSISZyt4/nGse9fVEM430g0BpGzKpt3RMx49B8uasvvnanzCuikaW9+wFLmwgvraERhA==}
engines: {node: '>=18'}
@@ -1551,30 +1541,55 @@ packages:
resolution: {integrity: sha512-ePqddIQ4arqPQgOkC146SkZxvZb9/jL7xIM5Igy2n3tiWTC5ijrX/mbHpPZ1VGcFck+1M0cJUuyhuJk+vMj3rg==}
engines: {node: '>=18'}
+ '@cspell/cspell-pipe@8.9.1':
+ resolution: {integrity: sha512-wH5Xu8W3aMEWFSpOczMtH/04clLMfDGdbYMYB7w6BeHI/LDW8DZaRhigOOhx9FRgVk/YIVbKKAKVgvFrfD5cEA==}
+ engines: {node: '>=18'}
+
'@cspell/cspell-resolver@8.7.0':
resolution: {integrity: sha512-grZwDFYqcBYQDaz4AkUtdyqc4UUH2J3/7yWVkBbYDPE+FQHa9ofFXzXxyjs56GJlPfi9ULpe5/Wz6uVLg8rQkQ==}
engines: {node: '>=18'}
+ '@cspell/cspell-resolver@8.9.1':
+ resolution: {integrity: sha512-Q2SOnIi2dnQ2zqPd+tcEYfom9qlsapGyLK4Mdx2Vv29MU2RDZ9VHFDncV6yo6O58gmlYl8sXtJsVceiHgwwlkQ==}
+ engines: {node: '>=18'}
+
'@cspell/cspell-service-bus@8.7.0':
resolution: {integrity: sha512-KW48iu0nTDzbedixc7iB7K7mlAZQ7QeMLuM/akxigOlvtOdVJrRa9Pfn44lwejts1ANb/IXil3GH8YylkVi76Q==}
engines: {node: '>=18'}
+ '@cspell/cspell-service-bus@8.9.1':
+ resolution: {integrity: sha512-dPKpqkglGnwvrW9mgbHIdimDQZH3iy8uT8gm3dEO//UahxMBdMpvtdbC3R9kesQCSagvYRVE7hwJvOktSAK+Vg==}
+ engines: {node: '>=18'}
+
'@cspell/cspell-types@8.7.0':
resolution: {integrity: sha512-Rb+LCE5I9JEb/LE8nSViVSF8z1CWv/z4mPBIG37VMa7aUx2gAQa6gJekNfpY9YZiMzx4Tv3gDujN80ytks4pGA==}
engines: {node: '>=18'}
+ '@cspell/cspell-types@8.9.1':
+ resolution: {integrity: sha512-Z/pTX2i+U5KwyCYRSw8BleJtw81jFifv91DDka4nqi2oyHJ3eEUljVovNOuZ3lotn/ArHdu4rY98s1w6Z69mYw==}
+ engines: {node: '>=18'}
+
'@cspell/dict-ada@4.0.2':
resolution: {integrity: sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==}
'@cspell/dict-aws@4.0.1':
resolution: {integrity: sha512-NXO+kTPQGqaaJKa4kO92NAXoqS+i99dQzf3/L1BxxWVSBS3/k1f3uhmqIh7Crb/n22W793lOm0D9x952BFga3Q==}
+ '@cspell/dict-aws@4.0.2':
+ resolution: {integrity: sha512-aNGHWSV7dRLTIn8WJemzLoMF62qOaiUQlgnsCwH5fRCD/00gsWCwg106pnbkmK4AyabyxzneOV4dfecDJWkSxw==}
+
'@cspell/dict-bash@4.1.3':
resolution: {integrity: sha512-tOdI3QVJDbQSwPjUkOiQFhYcu2eedmX/PtEpVWg0aFps/r6AyjUQINtTgpqMYnYuq8O1QUIQqnpx21aovcgZCw==}
'@cspell/dict-companies@3.0.31':
resolution: {integrity: sha512-hKVpV/lcGKP4/DpEPS8P4osPvFH/YVLJaDn9cBIOH6/HSmL5LbFgJNKpMGaYRbhm2FEX56MKE3yn/MNeNYuesQ==}
+ '@cspell/dict-companies@3.1.2':
+ resolution: {integrity: sha512-OwR5i1xbYuJX7FtHQySmTy3iJtPV1rZQ3jFCxFGwrA1xRQ4rtRcDQ+sTXBCIAoJHkXa84f9J3zsngOKmMGyS/w==}
+
+ '@cspell/dict-cpp@5.1.10':
+ resolution: {integrity: sha512-BmIF0sAz2BgGEOwzYIeEm9ALneDjd1tcTbFbo+A1Hcq3zOKP8yViSgxS9CEN30KOZIyph6Tldp531UPEpoEl0Q==}
+
'@cspell/dict-cpp@5.1.3':
resolution: {integrity: sha512-sqnriXRAInZH9W75C+APBh6dtben9filPqVbIsiRMUXGg+s02ekz0z6LbS7kXeJ5mD2qXoMLBrv13qH2eIwutQ==}
@@ -1593,6 +1608,9 @@ packages:
'@cspell/dict-data-science@1.0.11':
resolution: {integrity: sha512-TaHAZRVe0Zlcc3C23StZqqbzC0NrodRwoSAc8dis+5qLeLLnOCtagYQeROQvDlcDg3X/VVEO9Whh4W/z4PAmYQ==}
+ '@cspell/dict-data-science@2.0.1':
+ resolution: {integrity: sha512-xeutkzK0eBe+LFXOFU2kJeAYO6IuFUc1g7iRLr7HeCmlC4rsdGclwGHh61KmttL3+YHQytYStxaRBdGAXWC8Lw==}
+
'@cspell/dict-django@4.1.0':
resolution: {integrity: sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==}
@@ -1602,21 +1620,33 @@ packages:
'@cspell/dict-dotnet@5.0.0':
resolution: {integrity: sha512-EOwGd533v47aP5QYV8GlSSKkmM9Eq8P3G/eBzSpH3Nl2+IneDOYOBLEUraHuiCtnOkNsz0xtZHArYhAB2bHWAw==}
+ '@cspell/dict-dotnet@5.0.2':
+ resolution: {integrity: sha512-UD/pO2A2zia/YZJ8Kck/F6YyDSpCMq0YvItpd4YbtDVzPREfTZ48FjZsbYi4Jhzwfvc6o8R56JusAE58P+4sNQ==}
+
'@cspell/dict-elixir@4.0.3':
resolution: {integrity: sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==}
'@cspell/dict-en-common-misspellings@2.0.0':
resolution: {integrity: sha512-NOg8dlv37/YqLkCfBs5OXeJm/Wcfb/CzeOmOZJ2ZXRuxwsNuolb4TREUce0yAXRqMhawahY5TSDRJJBgKjBOdw==}
+ '@cspell/dict-en-common-misspellings@2.0.3':
+ resolution: {integrity: sha512-8nF1z9nUiSgMyikL66HTbDO7jCGtB24TxKBasXIBwkBKMDZgA2M883iXdeByy6m1JJUcCGFkSftVYp2W0bUgjw==}
+
'@cspell/dict-en-gb@1.1.33':
resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==}
'@cspell/dict-en_us@4.3.18':
resolution: {integrity: sha512-D8jGT7Zi3+e8zIpT0NqGKvvzehcvUETFlOA0NxcRStkw7H7mgouHxKFU+u7t3tvCoGNwh2gwjCqZQlK8ZXwQHw==}
+ '@cspell/dict-en_us@4.3.23':
+ resolution: {integrity: sha512-l0SoEQBsi3zDSl3OuL4/apBkxjuj4hLIg/oy6+gZ7LWh03rKdF6VNtSZNXWAmMY+pmb1cGA3ouleTiJIglbsIg==}
+
'@cspell/dict-filetypes@3.0.3':
resolution: {integrity: sha512-J9UP+qwwBLfOQ8Qg9tAsKtSY/WWmjj21uj6zXTI9hRLD1eG1uUOLcfVovAmtmVqUWziPSKMr87F6SXI3xmJXgw==}
+ '@cspell/dict-filetypes@3.0.4':
+ resolution: {integrity: sha512-IBi8eIVdykoGgIv5wQhOURi5lmCNJq0we6DvqKoPQJHthXbgsuO1qrHSiUVydMiQl/XvcnUWTMeAlVUlUClnVg==}
+
'@cspell/dict-fonts@4.0.0':
resolution: {integrity: sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q==}
@@ -1626,6 +1656,9 @@ packages:
'@cspell/dict-fullstack@3.1.5':
resolution: {integrity: sha512-6ppvo1dkXUZ3fbYn/wwzERxCa76RtDDl5Afzv2lijLoijGGUw5yYdLBKJnx8PJBGNLh829X352ftE7BElG4leA==}
+ '@cspell/dict-fullstack@3.1.8':
+ resolution: {integrity: sha512-YRlZupL7uqMCtEBK0bDP9BrcPnjDhz7m4GBqCc1EYqfXauHbLmDT8ELha7T/E7wsFKniHSjzwDZzhNXo2lusRQ==}
+
'@cspell/dict-gaming-terms@1.0.5':
resolution: {integrity: sha512-C3riccZDD3d9caJQQs1+MPfrUrQ+0KHdlj9iUR1QD92FgTOF6UxoBpvHUUZ9YSezslcmpFQK4xQQ5FUGS7uWfw==}
@@ -1635,6 +1668,12 @@ packages:
'@cspell/dict-golang@6.0.5':
resolution: {integrity: sha512-w4mEqGz4/wV+BBljLxduFNkMrd3rstBNDXmoX5kD4UTzIb4Sy0QybWCtg2iVT+R0KWiRRA56QKOvBsgXiddksA==}
+ '@cspell/dict-golang@6.0.9':
+ resolution: {integrity: sha512-etDt2WQauyEQDA+qPS5QtkYTb2I9l5IfQftAllVoB1aOrT6bxxpHvMEpJ0Hsn/vezxrCqa/BmtUbRxllIxIuSg==}
+
+ '@cspell/dict-google@1.0.1':
+ resolution: {integrity: sha512-dQr4M3n95uOhtloNSgB9tYYGXGGEGEykkFyRtfcp5pFuEecYUa0BSgtlGKx9RXVtJtKgR+yFT/a5uQSlt8WjqQ==}
+
'@cspell/dict-haskell@4.0.1':
resolution: {integrity: sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==}
@@ -1647,12 +1686,18 @@ packages:
'@cspell/dict-java@5.0.6':
resolution: {integrity: sha512-kdE4AHHHrixyZ5p6zyms1SLoYpaJarPxrz8Tveo6gddszBVVwIUZ+JkQE1bWNLK740GWzIXdkznpUfw1hP9nXw==}
+ '@cspell/dict-java@5.0.7':
+ resolution: {integrity: sha512-ejQ9iJXYIq7R09BScU2y5OUGrSqwcD+J5mHFOKbduuQ5s/Eh/duz45KOzykeMLI6KHPVxhBKpUPBWIsfewECpQ==}
+
'@cspell/dict-julia@1.0.1':
resolution: {integrity: sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ==}
'@cspell/dict-k8s@1.0.2':
resolution: {integrity: sha512-tLT7gZpNPnGa+IIFvK9SP1LrSpPpJ94a/DulzAPOb1Q2UBFwdpFd82UWhio0RNShduvKG/WiMZf/wGl98pn+VQ==}
+ '@cspell/dict-k8s@1.0.5':
+ resolution: {integrity: sha512-Cj+/ZV4S+MKlwfocSJZqe/2UAd/sY8YtlZjbK25VN1nCnrsKrBjfkX29vclwSj1U9aJg4Z9jw/uMjoaKu9ZrpQ==}
+
'@cspell/dict-latex@4.0.0':
resolution: {integrity: sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==}
@@ -1671,21 +1716,39 @@ packages:
'@cspell/dict-node@4.0.3':
resolution: {integrity: sha512-sFlUNI5kOogy49KtPg8SMQYirDGIAoKBO3+cDLIwD4MLdsWy1q0upc7pzGht3mrjuyMiPRUV14Bb0rkVLrxOhg==}
+ '@cspell/dict-node@5.0.1':
+ resolution: {integrity: sha512-lax/jGz9h3Dv83v8LHa5G0bf6wm8YVRMzbjJPG/9rp7cAGPtdrga+XANFq+B7bY5+jiSA3zvj10LUFCFjnnCCg==}
+
'@cspell/dict-npm@5.0.15':
resolution: {integrity: sha512-sX0X5YWNW54F4baW7b5JJB6705OCBIZtUqjOghlJNORS5No7QY1IX1zc5FxNNu4gsaCZITAmfMi4ityXEsEThA==}
+ '@cspell/dict-npm@5.0.16':
+ resolution: {integrity: sha512-ZWPnLAziEcSCvV0c8k9Qj88pfMu+wZwM5Qks87ShsfBgI8uLZ9tGHravA7gmjH1Gd7Bgxy2ulvXtSqIWPh1lew==}
+
'@cspell/dict-php@4.0.6':
resolution: {integrity: sha512-ySAXisf7twoVFZqBV2o/DKiCLIDTHNqfnj0EfH9OoOUR7HL3rb6zJkm0viLUFDO2G/8SyIi6YrN/6KX+Scjjjg==}
+ '@cspell/dict-php@4.0.8':
+ resolution: {integrity: sha512-TBw3won4MCBQ2wdu7kvgOCR3dY2Tb+LJHgDUpuquy3WnzGiSDJ4AVelrZdE1xu7mjFJUr4q48aB21YT5uQqPZA==}
+
'@cspell/dict-powershell@5.0.3':
resolution: {integrity: sha512-lEdzrcyau6mgzu1ie98GjOEegwVHvoaWtzQnm1ie4DyZgMr+N6D0Iyj1lzvtmt0snvsDFa5F2bsYzf3IMKcpcA==}
+ '@cspell/dict-powershell@5.0.4':
+ resolution: {integrity: sha512-eosDShapDgBWN9ULF7+sRNdUtzRnUdsfEdBSchDm8FZA4HOqxUSZy3b/cX/Rdw0Fnw0AKgk0kzgXw7tS6vwJMQ==}
+
'@cspell/dict-public-licenses@2.0.6':
resolution: {integrity: sha512-bHqpSpJvLCUcWxj1ov/Ki8WjmESpYwRpQlqfdchekOTc93Huhvjm/RXVN1R4fVf4Hspyem1QVkCGqAmjJMj6sw==}
+ '@cspell/dict-public-licenses@2.0.7':
+ resolution: {integrity: sha512-KlBXuGcN3LE7tQi/GEqKiDewWGGuopiAD0zRK1QilOx5Co8XAvs044gk4MNIQftc8r0nHeUI+irJKLGcR36DIQ==}
+
'@cspell/dict-python@4.1.11':
resolution: {integrity: sha512-XG+v3PumfzUW38huSbfT15Vqt3ihNb462ulfXifpQllPok5OWynhszCLCRQjQReV+dgz784ST4ggRxW452/kVg==}
+ '@cspell/dict-python@4.2.1':
+ resolution: {integrity: sha512-9X2jRgyM0cxBoFQRo4Zc8oacyWnXi+0/bMI5FGibZNZV4y/o9UoFEr6agjU260/cXHTjIdkX233nN7eb7dtyRg==}
+
'@cspell/dict-r@2.0.1':
resolution: {integrity: sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==}
@@ -1695,12 +1758,21 @@ packages:
'@cspell/dict-rust@4.0.2':
resolution: {integrity: sha512-RhziKDrklzOntxAbY3AvNR58wnFGIo3YS8+dNeLY36GFuWOvXDHFStYw5Pod4f/VXbO/+1tXtywCC4zWfB2p1w==}
+ '@cspell/dict-rust@4.0.4':
+ resolution: {integrity: sha512-v9/LcZknt/Xq7m1jdTWiQEtmkVVKdE1etAfGL2sgcWpZYewEa459HeWndNA0gfzQrpWX9sYay18mt7pqClJEdA==}
+
'@cspell/dict-scala@5.0.0':
resolution: {integrity: sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==}
+ '@cspell/dict-scala@5.0.2':
+ resolution: {integrity: sha512-v97ClgidZt99JUm7OjhQugDHmhx4U8fcgunHvD/BsXWjXNj4cTr0m0YjofyZoL44WpICsNuFV9F/sv9OM5HUEw==}
+
'@cspell/dict-software-terms@3.3.18':
resolution: {integrity: sha512-LJZGGMGqS8KzgXJrSMs3T+6GoqHG9z8Bc+rqLzLzbtoR3FbsMasE9U8oP2PmS3q7jJLFjQkzmg508DrcuZuo2g==}
+ '@cspell/dict-software-terms@3.4.8':
+ resolution: {integrity: sha512-r3gvmSGd8wZp4bbofTey/2Tu3gdBc5kxTRoFo1MaCh5vMLiBOSCLvyZgzr0DcMl8c5dxL7nFpNwbWZJxmKmtUA==}
+
'@cspell/dict-sql@2.1.3':
resolution: {integrity: sha512-SEyTNKJrjqD6PAzZ9WpdSu6P7wgdNtGV2RV8Kpuw1x6bV+YsSptuClYG+JSdRExBTE6LwIe1bTklejUp3ZP8TQ==}
@@ -1716,6 +1788,9 @@ packages:
'@cspell/dict-typescript@3.1.3':
resolution: {integrity: sha512-TdD789OWwOImH/IMyz/QRA6LJz7ScI/qbn1YOkcAW3AROvgbc0oKAxzp08+Xu8tj4GROrJ9UqZdh0t9xQCPkPg==}
+ '@cspell/dict-typescript@3.1.5':
+ resolution: {integrity: sha512-EkIwwNV/xqEoBPJml2S16RXj65h1kvly8dfDLgXerrKw6puybZdvAHerAph6/uPTYdtLcsPyJYkPt5ISOJYrtw==}
+
'@cspell/dict-vue@3.0.0':
resolution: {integrity: sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==}
@@ -1723,8 +1798,12 @@ packages:
resolution: {integrity: sha512-xlEPdiHVDu+4xYkvwjL9MgklxOi9XB+Pr1H9s3Ww9WEq+q6BA3xOHxLIU/k8mhqFTMZGFZRCsdy/EwMu6SyRhQ==}
engines: {node: '>=18.0'}
- '@cspell/eslint-plugin@8.7.0':
- resolution: {integrity: sha512-ZITI9ybL5vsOukUzMyyBc5eKndEag7Pe4Z19br2w92xyNCZtHeAoDzp1eo1OeRilT7zBXCdXEDzvvNiNAHhg9A==}
+ '@cspell/dynamic-import@8.9.1':
+ resolution: {integrity: sha512-ao4IDqQ8MyRqiB3NHA8R7ThRsuDLXdSCFm7Pvz8EqDnWaX3NAuClzgT3EoxJlw9pyyPQX3tW5Vg7ft3GSsBFUw==}
+ engines: {node: '>=18.0'}
+
+ '@cspell/eslint-plugin@8.9.1':
+ resolution: {integrity: sha512-S2j47UyzXrJ69zHw6E7fb24b+Mkk1tp8lh7VgaYJ1wjOhhW7eg/7SrO3csRt5XvOjcn12FAtOoMJ7aHcvV1wfA==}
engines: {node: '>=18'}
peerDependencies:
eslint: ^7 || ^8 || ^9
@@ -1733,6 +1812,14 @@ packages:
resolution: {integrity: sha512-0bo0WwDr2lzGoCP7vbpWbDpPyuOrHKK+218txnUpx6Pn1EDBLfcDQsiZED5B6zlpwgbGi6y3vc0rWtJbjKvwzg==}
engines: {node: '>=18'}
+ '@cspell/strong-weak-map@8.9.1':
+ resolution: {integrity: sha512-onD/UPJW7rBQrRDqYNvPUAoWoBp1G2g+mijAD7EkuseyAKTKlKz624rXpHUOTqI814owmhFMNSf2QyYy8gFM6Q==}
+ engines: {node: '>=18'}
+
+ '@cspell/url@8.9.1':
+ resolution: {integrity: sha512-2AncPKGq9fnytwnL7V4KfoSjiEU0m8tVDFerGiDMNmTMWiQ4zj0kTATai118XT1eBVKiyrAotYRLSrsuUo9U3g==}
+ engines: {node: '>=18.0'}
+
'@cypress/code-coverage@3.12.39':
resolution: {integrity: sha512-ja7I/GRmkSAW9e3O7pideWcNUEHao0WT6sRyXQEURoxkJUASJssJ7Kb/bd3eMYmkUCiD5CRFqWR5BGF4mWVaUw==}
peerDependencies:
@@ -2215,13 +2302,21 @@ packages:
resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/eslintrc@2.1.4':
- resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@eslint/config-array@0.17.0':
+ resolution: {integrity: sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@8.57.0':
- resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@eslint/eslintrc@3.1.0':
+ resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.6.0':
+ resolution: {integrity: sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.4':
+ resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fastify/ajv-compiler@1.1.0':
resolution: {integrity: sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==}
@@ -2270,18 +2365,13 @@ packages:
peerDependencies:
vue: ^3.2.0
- '@humanwhocodes/config-array@0.11.14':
- resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
- engines: {node: '>=10.10.0'}
- deprecated: Use @eslint/config-array instead
-
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
- '@humanwhocodes/object-schema@2.0.2':
- resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
- deprecated: Use @eslint/object-schema instead
+ '@humanwhocodes/retry@0.3.0':
+ resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==}
+ engines: {node: '>=18.18'}
'@iconify-json/carbon@1.1.36':
resolution: {integrity: sha512-NC3VcqLtwLZpi7+LeXj+99/byv+asrnCQxiDNCZV6hKr9WcNh6C25kJguJYfN+dV54kOkw78e+6PitQi2Bppnw==}
@@ -2513,11 +2603,11 @@ packages:
'@mdi/font@7.4.47':
resolution: {integrity: sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==}
- '@microsoft/tsdoc-config@0.16.2':
- resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
+ '@microsoft/tsdoc-config@0.17.0':
+ resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==}
- '@microsoft/tsdoc@0.14.2':
- resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
+ '@microsoft/tsdoc@0.15.0':
+ resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -3104,24 +3194,35 @@ packages:
typescript:
optional: true
- '@typescript-eslint/parser@7.6.0':
- resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==}
- engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/eslint-plugin@8.0.0-alpha.36':
+ resolution: {integrity: sha512-Zt9x8YkczT509hphDxgKUlgC/JMyf/49U6idIPgOdo9Z11/jV5MaphxeKTEGTM+Ztqtx+XxprPICDgZFZZLdfQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.56.0
+ '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- '@typescript-eslint/scope-manager@5.62.0':
- resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/parser@8.0.0-alpha.36':
+ resolution: {integrity: sha512-DruwS9XPHbNsswczBkVQovefdWE5rNl1WBgywV3Z9gbNAzezk4OFHYMmmKO9ELHWED8ylXZ02m0Nr1g4xRhs5A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
'@typescript-eslint/scope-manager@7.6.0':
resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==}
engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/scope-manager@8.0.0-alpha.36':
+ resolution: {integrity: sha512-uNpmffI+3Krh8k7lKQcs4XsrKO22eJUHRko+s6spnRc3i5FsZOZr2+VbmtJsliOraUKZJ275IqLVzyaCPO+gJA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@typescript-eslint/type-utils@7.6.0':
resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==}
engines: {node: ^18.18.0 || >=20.0.0}
@@ -3132,9 +3233,14 @@ packages:
typescript:
optional: true
- '@typescript-eslint/types@5.62.0':
- resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/type-utils@8.0.0-alpha.36':
+ resolution: {integrity: sha512-Xap1FaM08TJ11umNFAEd+tpSr9F4K/rs4LhnlGlkA7TugWKdrBBnUOmE+U/XVZRmPjA3KnJ/whNcq5bQf7++mw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
'@typescript-eslint/types@7.13.1':
resolution: {integrity: sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==}
@@ -3144,14 +3250,9 @@ packages:
resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==}
engines: {node: ^18.18.0 || >=20.0.0}
- '@typescript-eslint/typescript-estree@5.62.0':
- resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
+ '@typescript-eslint/types@8.0.0-alpha.36':
+ resolution: {integrity: sha512-D+w5uE8Y83K/P5VQZyKKi4pwTL2YkWOwtQOVJQI38Rp8f3pmY+Jmcps3wkSFSJK8wifTlvoHwwIBf1FsdCW/EA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@7.6.0':
resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==}
@@ -3162,11 +3263,14 @@ packages:
typescript:
optional: true
- '@typescript-eslint/utils@5.62.0':
- resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/typescript-estree@8.0.0-alpha.36':
+ resolution: {integrity: sha512-1K2kj/CyMCDQlXubWJYx4aP5sUSi4OWeD7Z2MAOsoO2/EbPtHxdepqneYt20oR8TO5FUcXz3cV5BNUVAMoH6qg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
'@typescript-eslint/utils@7.6.0':
resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==}
@@ -3174,16 +3278,19 @@ packages:
peerDependencies:
eslint: ^8.56.0
- '@typescript-eslint/visitor-keys@5.62.0':
- resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@typescript-eslint/utils@8.0.0-alpha.36':
+ resolution: {integrity: sha512-ITYdcfB6FSnGhrPpxBAB7/q/jvhfe1MTYgwvpLfTeqExQUTnSEiBlHS/oyFkTnxvLxUbCSiBbAKOv69FgGYnEA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
'@typescript-eslint/visitor-keys@7.6.0':
resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==}
engines: {node: ^18.18.0 || >=20.0.0}
- '@ungap/structured-clone@1.2.0':
- resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ '@typescript-eslint/visitor-keys@8.0.0-alpha.36':
+ resolution: {integrity: sha512-V1LYF9mdUeMl/6rtbhCpYGkXKlx+zKh1Y09kEPtitvMDjA3Sb17Ph5OCckVkQCet2GjxrMZtpn1bTobZa8eD0Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unocss/astro@0.59.4':
resolution: {integrity: sha512-DU3OR5MMR1Uvvec4/wB9EetDASHRg19Moy6z/MiIhn8JWJ0QzWYgSeJcfUX8exomMYv6WUEQJL+CyLI34Wmn8w==}
@@ -4303,9 +4410,6 @@ packages:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
- core-js-compat@3.36.0:
- resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==}
-
core-js-compat@3.37.1:
resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==}
@@ -4365,10 +4469,18 @@ packages:
resolution: {integrity: sha512-depsd01GbLBo71/tfRrL5iECWQLS4CjCxA9C01dVkFAJqVB0s+K9KLKjTlq5aHOhcvo9Z3dHV+bGQCf5/Q7bfw==}
engines: {node: '>=18'}
+ cspell-config-lib@8.9.1:
+ resolution: {integrity: sha512-gSXAazmeX+CCpFCsNQQqHRO/nn01kMnCoB0v+7AM0Bip2iDXRl+LmUEJGNcnFaiJG3liaZ8+S5/qCDbza010VQ==}
+ engines: {node: '>=18'}
+
cspell-dictionary@8.7.0:
resolution: {integrity: sha512-S6IpZSzIMxlOO/33NgCOuP0TPH2mZbw8d5CP44z5jajflloq8l74MeJLkeDzYfCRcm0Rtk0A5drBeMg+Ai34OA==}
engines: {node: '>=18'}
+ cspell-dictionary@8.9.1:
+ resolution: {integrity: sha512-sJy9gApLxJNE+YqWeulCTj3XC/ME4aacOHEl/SZ5bsaxkGx3KzBlzCMG7LfqUjOM8rwfBPsYO7zWPCiJQgxGPg==}
+ engines: {node: '>=18'}
+
cspell-gitignore@8.7.0:
resolution: {integrity: sha512-yvUZ86qyopUpDgn+YXP1qTpUe/lp65ZFvpMtw21lWHTFlg1OWKntr349EQU/5ben/K6koxk1FiElCBV7Lr4uFg==}
engines: {node: '>=18'}
@@ -4378,23 +4490,44 @@ packages:
resolution: {integrity: sha512-AMdfx0gvROA/aIL8t8b5Y5NtMgscGZELFj6WhCSZiQSuWRxXUKiLGGLUFjx2y0hgXN9LUYOo6aBjvhnxI/v71g==}
engines: {node: '>=18'}
+ cspell-glob@8.9.1:
+ resolution: {integrity: sha512-b60WfczgG3NgGp5pyS4NfwSu7FEF7AmkP1btJqj17UAWsm/idUdGdOgaZazZuPgQJbcQvOlpBQP0+SEi8Jo3QA==}
+ engines: {node: '>=18'}
+
cspell-grammar@8.7.0:
resolution: {integrity: sha512-SGcXc7322wU2WNRi7vtpToWDXTqZHhxqvR+aIXHT2kkxlMSWp3Rvfpshd0ckgY54nZtgw7R/JtKND2jeACRpwQ==}
engines: {node: '>=18'}
hasBin: true
+ cspell-grammar@8.9.1:
+ resolution: {integrity: sha512-BqaDp3Z+baLZyb3A5h/zWESsO7e8vUaOlrDt1RRVEnpboIUnj7iNkcFmDp3s9PTpBCURlgHHs8SR/+c49aKDGg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
cspell-io@8.7.0:
resolution: {integrity: sha512-o7OltyyvVkRG1gQrIqGpN5pUkHNnv6rvihb7Qu6cJ8jITinLGuWJuEQpgt0eF5yIr624jDbFwSzAxsFox8riQg==}
engines: {node: '>=18'}
+ cspell-io@8.9.1:
+ resolution: {integrity: sha512-O2F79Rzj28Mvmj4AQLkDWOXWaLnvkJhxPm/Yb3viKlbhwmL5BWUi0APbWA3dtyF+ImX1W27YrNFyvT/PGNZ5Dw==}
+ engines: {node: '>=18'}
+
cspell-lib@8.7.0:
resolution: {integrity: sha512-qDSHZGekwiDmouYRECTQokE+hgAuPqREm+Hb+G3DoIo3ZK5H47TtEUo8fNCw22XsKefcF8X28LiyoZwiYHVpSg==}
engines: {node: '>=18'}
+ cspell-lib@8.9.1:
+ resolution: {integrity: sha512-xrtoXvSjkMcwE1yUcyjiqLFPZiK0CNQjOKKS9PQaaK7ZBoERPQ7grz05uFCYdboSXt0FhlP8tC9E5oEt+xtGCA==}
+ engines: {node: '>=18'}
+
cspell-trie-lib@8.7.0:
resolution: {integrity: sha512-W3Nh2cO7gMV91r+hLqyTMgKlvRl4W5diKs5YiyOxjZumRkMBy42IzcNYtgIIacOxghklv96F5Bd1Vx/zY6ylGA==}
engines: {node: '>=18'}
+ cspell-trie-lib@8.9.1:
+ resolution: {integrity: sha512-rUED/lNlFcsRfkMal6+zLz7JW3/cV79KGhwxnwu1fjNS0nlLSAUGTTiAQBQSR+pU/UW+BTkmULHVuNh+DUN93w==}
+ engines: {node: '>=18'}
+
cspell@8.7.0:
resolution: {integrity: sha512-77nRPgLl240C6FK8RKVKo34lP15Lzp/6bk+SKYJFwUKKXlcgWXDis+Lw4JolA741/JgHtuxmhW1C8P7dCKjJ3w==}
engines: {node: '>=18'}
@@ -4791,10 +4924,6 @@ packages:
resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==}
engines: {node: '>=6'}
- doctrine@3.0.0:
- resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
- engines: {node: '>=6.0.0'}
-
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@@ -4890,6 +5019,10 @@ packages:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
+ env-paths@3.0.0:
+ resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
envinfo@7.10.0:
resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==}
engines: {node: '>=4'}
@@ -4995,21 +5128,21 @@ packages:
peerDependencies:
eslint: '>=7.0.0'
- eslint-plugin-cypress@2.15.2:
- resolution: {integrity: sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==}
+ eslint-plugin-cypress@3.3.0:
+ resolution: {integrity: sha512-HPHMPzYBIshzJM8wqgKSKHG2p/8R0Gbg4Pb3tcdC9WrmkuqxiKxSKbjunUrajhV5l7gCIFrh1P7C7GuBqH6YuQ==}
peerDependencies:
- eslint: '>= 3.2.1'
+ eslint: '>=7'
eslint-plugin-html@8.1.1:
resolution: {integrity: sha512-6qmlJsc40D2m3Dn9oEH+0PAOkJhxVu0f5sVItqpCE0YWgYnyP4xCjBc3UWTHaJcY9ARkWOLIIuXLq0ndRnQOHw==}
engines: {node: '>=16.0.0'}
- eslint-plugin-jest@27.9.0:
- resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ eslint-plugin-jest@28.6.0:
+ resolution: {integrity: sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==}
+ engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0}
peerDependencies:
- '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0
- eslint: ^7.0.0 || ^8.0.0
+ '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
jest: '*'
peerDependenciesMeta:
'@typescript-eslint/eslint-plugin':
@@ -5023,18 +5156,18 @@ packages:
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
- eslint-plugin-json@3.1.0:
- resolution: {integrity: sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==}
- engines: {node: '>=12.0'}
+ eslint-plugin-json@4.0.0:
+ resolution: {integrity: sha512-l/P3WTzl2HI8PbwsbDIrZ+6jvwQI4TGuz20ReJkG3Y+gZS5ZurTgx+gBmuLpOgiqMyDJWyJ7+GCjevWtNYQcUg==}
+ engines: {node: '>=18.0'}
- eslint-plugin-lodash@7.4.0:
- resolution: {integrity: sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A==}
+ eslint-plugin-lodash@8.0.0:
+ resolution: {integrity: sha512-7DA8485FolmWRzh+8t4S8Pzin2TTuWfb0ZW3j/2fYElgk82ZanFz8vDcvc4BBPceYdX1p/za+tkbO68maDBGGw==}
engines: {node: '>=10'}
peerDependencies:
- eslint: '>=2'
+ eslint: '>=9.0.0'
- eslint-plugin-markdown@4.0.1:
- resolution: {integrity: sha512-5/MnGvYU0i8MbHH5cg8S+Vl3DL+bqRNYshk1xUO86DilNBaxtTkhH+5FD0/yO03AmlI6+lfNFdk2yOw72EPzpA==}
+ eslint-plugin-markdown@5.0.0:
+ resolution: {integrity: sha512-kY2u9yDhzvfZ0kmRTsvgm3mTnvZgTSGIIPeHg3yesSx4R5CTCnITUjCPhzCD1MUhNcqHU5Tr6lzx+02EclVPbw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=8'
@@ -5043,12 +5176,12 @@ packages:
resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==}
engines: {node: '>=5.0.0'}
- eslint-plugin-tsdoc@0.2.17:
- resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==}
+ eslint-plugin-tsdoc@0.3.0:
+ resolution: {integrity: sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==}
- eslint-plugin-unicorn@51.0.1:
- resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==}
- engines: {node: '>=16'}
+ eslint-plugin-unicorn@53.0.0:
+ resolution: {integrity: sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==}
+ engines: {node: '>=18.18'}
peerDependencies:
eslint: '>=8.56.0'
@@ -5056,9 +5189,9 @@ packages:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
- eslint-scope@7.2.2:
- resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint-scope@8.0.1:
+ resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
@@ -5068,9 +5201,9 @@ packages:
resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@8.57.0:
- resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ eslint@9.6.0:
+ resolution: {integrity: sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
esniff@2.0.1:
@@ -5081,10 +5214,6 @@ packages:
resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- espree@9.6.1:
- resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
esprima@1.1.1:
resolution: {integrity: sha512-qxxB994/7NtERxgXdFgLHIs9M6bhLXc6qtUmWZ3L8+gTQ9qaoyki2887P2IqAYsoENyr8SUbTutStDniOHSDHg==}
engines: {node: '>=0.4.0'}
@@ -5287,10 +5416,6 @@ packages:
resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
engines: {node: '>=8'}
- file-entry-cache@6.0.1:
- resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
- engines: {node: ^10.12.0 || >=12.0.0}
-
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
@@ -5349,10 +5474,6 @@ packages:
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- flat-cache@3.2.0:
- resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
- engines: {node: ^10.12.0 || >=12.0.0}
-
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
@@ -5593,6 +5714,14 @@ packages:
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
engines: {node: '>=8'}
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globals@15.6.0:
+ resolution: {integrity: sha512-UzcJi88Hw//CurUIRa9Jxb0vgOCcuD/MNjwmXp633cyaRKkCWACkoqHCtfZv43b1kqXGg/fpOa8bwgacCeXsVg==}
+ engines: {node: '>=18'}
+
globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
@@ -5816,6 +5945,9 @@ packages:
import-meta-resolve@4.0.0:
resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
+ import-meta-resolve@4.1.0:
+ resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -7646,9 +7778,6 @@ packages:
resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
engines: {node: '>=10'}
- resolve@1.19.0:
- resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
-
resolve@1.22.4:
resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
hasBin: true
@@ -8349,18 +8478,9 @@ packages:
ts-toolbelt@6.15.5:
resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==}
- tslib@1.14.1:
- resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
-
tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
- tsutils@3.21.0:
- resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
- engines: {node: '>= 6'}
- peerDependencies:
- typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
-
tsx@4.7.3:
resolution: {integrity: sha512-+fQnMqIp/jxZEXLcj6WzYy9FhcS5/Dfk8y4AtzJ6ejKcKqmfTF8Gso/jtrzDggCF2zTU20gJa6n8XqPYwDAUYQ==}
engines: {node: '>=18.0.0'}
@@ -8446,6 +8566,15 @@ packages:
peerDependencies:
typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x
+ typescript-eslint@8.0.0-alpha.36:
+ resolution: {integrity: sha512-QPIwkUDMoTZmCCXcnyOfEJo3ymxfF8sSla7ZtNr1qqRY/wxMBe4htWDHj9y+iDOYsAusl37MPsBDKqyazacTVA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
typescript@5.4.5:
resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
engines: {node: '>=14.17'}
@@ -8740,9 +8869,6 @@ packages:
vscode-languageserver-textdocument@1.0.11:
resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==}
- vscode-languageserver-types@3.17.3:
- resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==}
-
vscode-languageserver-types@3.17.5:
resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
@@ -9679,7 +9805,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.24.4
'@babel/helper-validator-option': 7.23.5
- browserslist: 4.23.0
+ browserslist: 4.23.1
lru-cache: 5.1.1
semver: 6.3.1
@@ -9790,7 +9916,7 @@ snapshots:
'@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.24.5
'@babel/helper-split-export-declaration': 7.24.5
- '@babel/helper-validator-identifier': 7.24.5
+ '@babel/helper-validator-identifier': 7.24.7
'@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)':
dependencies:
@@ -9799,7 +9925,7 @@ snapshots:
'@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.24.5
'@babel/helper-split-export-declaration': 7.24.5
- '@babel/helper-validator-identifier': 7.24.5
+ '@babel/helper-validator-identifier': 7.24.7
'@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)':
dependencies:
@@ -9883,10 +10009,6 @@ snapshots:
'@babel/helper-string-parser@7.24.7': {}
- '@babel/helper-validator-identifier@7.22.20': {}
-
- '@babel/helper-validator-identifier@7.24.5': {}
-
'@babel/helper-validator-identifier@7.24.7': {}
'@babel/helper-validator-option@7.23.5': {}
@@ -10583,7 +10705,7 @@ snapshots:
'@babel/types@7.24.5':
dependencies:
'@babel/helper-string-parser': 7.24.1
- '@babel/helper-validator-identifier': 7.24.5
+ '@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
'@babel/types@7.24.7':
@@ -10677,28 +10799,99 @@ snapshots:
'@cspell/dict-typescript': 3.1.3
'@cspell/dict-vue': 3.0.0
+ '@cspell/cspell-bundled-dicts@8.9.1':
+ dependencies:
+ '@cspell/dict-ada': 4.0.2
+ '@cspell/dict-aws': 4.0.2
+ '@cspell/dict-bash': 4.1.3
+ '@cspell/dict-companies': 3.1.2
+ '@cspell/dict-cpp': 5.1.10
+ '@cspell/dict-cryptocurrencies': 5.0.0
+ '@cspell/dict-csharp': 4.0.2
+ '@cspell/dict-css': 4.0.12
+ '@cspell/dict-dart': 2.0.3
+ '@cspell/dict-django': 4.1.0
+ '@cspell/dict-docker': 1.1.7
+ '@cspell/dict-dotnet': 5.0.2
+ '@cspell/dict-elixir': 4.0.3
+ '@cspell/dict-en-common-misspellings': 2.0.3
+ '@cspell/dict-en-gb': 1.1.33
+ '@cspell/dict-en_us': 4.3.23
+ '@cspell/dict-filetypes': 3.0.4
+ '@cspell/dict-fonts': 4.0.0
+ '@cspell/dict-fsharp': 1.0.1
+ '@cspell/dict-fullstack': 3.1.8
+ '@cspell/dict-gaming-terms': 1.0.5
+ '@cspell/dict-git': 3.0.0
+ '@cspell/dict-golang': 6.0.9
+ '@cspell/dict-google': 1.0.1
+ '@cspell/dict-haskell': 4.0.1
+ '@cspell/dict-html': 4.0.5
+ '@cspell/dict-html-symbol-entities': 4.0.0
+ '@cspell/dict-java': 5.0.7
+ '@cspell/dict-julia': 1.0.1
+ '@cspell/dict-k8s': 1.0.5
+ '@cspell/dict-latex': 4.0.0
+ '@cspell/dict-lorem-ipsum': 4.0.0
+ '@cspell/dict-lua': 4.0.3
+ '@cspell/dict-makefile': 1.0.0
+ '@cspell/dict-monkeyc': 1.0.6
+ '@cspell/dict-node': 5.0.1
+ '@cspell/dict-npm': 5.0.16
+ '@cspell/dict-php': 4.0.8
+ '@cspell/dict-powershell': 5.0.4
+ '@cspell/dict-public-licenses': 2.0.7
+ '@cspell/dict-python': 4.2.1
+ '@cspell/dict-r': 2.0.1
+ '@cspell/dict-ruby': 5.0.2
+ '@cspell/dict-rust': 4.0.4
+ '@cspell/dict-scala': 5.0.2
+ '@cspell/dict-software-terms': 3.4.8
+ '@cspell/dict-sql': 2.1.3
+ '@cspell/dict-svelte': 1.0.2
+ '@cspell/dict-swift': 2.0.1
+ '@cspell/dict-terraform': 1.0.0
+ '@cspell/dict-typescript': 3.1.5
+ '@cspell/dict-vue': 3.0.0
+
'@cspell/cspell-json-reporter@8.7.0':
dependencies:
'@cspell/cspell-types': 8.7.0
'@cspell/cspell-pipe@8.7.0': {}
+ '@cspell/cspell-pipe@8.9.1': {}
+
'@cspell/cspell-resolver@8.7.0':
dependencies:
global-directory: 4.0.1
+ '@cspell/cspell-resolver@8.9.1':
+ dependencies:
+ global-directory: 4.0.1
+
'@cspell/cspell-service-bus@8.7.0': {}
+ '@cspell/cspell-service-bus@8.9.1': {}
+
'@cspell/cspell-types@8.7.0': {}
+ '@cspell/cspell-types@8.9.1': {}
+
'@cspell/dict-ada@4.0.2': {}
'@cspell/dict-aws@4.0.1': {}
+ '@cspell/dict-aws@4.0.2': {}
+
'@cspell/dict-bash@4.1.3': {}
'@cspell/dict-companies@3.0.31': {}
+ '@cspell/dict-companies@3.1.2': {}
+
+ '@cspell/dict-cpp@5.1.10': {}
+
'@cspell/dict-cpp@5.1.3': {}
'@cspell/dict-cryptocurrencies@5.0.0': {}
@@ -10711,34 +10904,50 @@ snapshots:
'@cspell/dict-data-science@1.0.11': {}
+ '@cspell/dict-data-science@2.0.1': {}
+
'@cspell/dict-django@4.1.0': {}
'@cspell/dict-docker@1.1.7': {}
'@cspell/dict-dotnet@5.0.0': {}
+ '@cspell/dict-dotnet@5.0.2': {}
+
'@cspell/dict-elixir@4.0.3': {}
'@cspell/dict-en-common-misspellings@2.0.0': {}
+ '@cspell/dict-en-common-misspellings@2.0.3': {}
+
'@cspell/dict-en-gb@1.1.33': {}
'@cspell/dict-en_us@4.3.18': {}
+ '@cspell/dict-en_us@4.3.23': {}
+
'@cspell/dict-filetypes@3.0.3': {}
+ '@cspell/dict-filetypes@3.0.4': {}
+
'@cspell/dict-fonts@4.0.0': {}
'@cspell/dict-fsharp@1.0.1': {}
'@cspell/dict-fullstack@3.1.5': {}
+ '@cspell/dict-fullstack@3.1.8': {}
+
'@cspell/dict-gaming-terms@1.0.5': {}
'@cspell/dict-git@3.0.0': {}
'@cspell/dict-golang@6.0.5': {}
+ '@cspell/dict-golang@6.0.9': {}
+
+ '@cspell/dict-google@1.0.1': {}
+
'@cspell/dict-haskell@4.0.1': {}
'@cspell/dict-html-symbol-entities@4.0.0': {}
@@ -10747,10 +10956,14 @@ snapshots:
'@cspell/dict-java@5.0.6': {}
+ '@cspell/dict-java@5.0.7': {}
+
'@cspell/dict-julia@1.0.1': {}
'@cspell/dict-k8s@1.0.2': {}
+ '@cspell/dict-k8s@1.0.5': {}
+
'@cspell/dict-latex@4.0.0': {}
'@cspell/dict-lorem-ipsum@4.0.0': {}
@@ -10763,28 +10976,48 @@ snapshots:
'@cspell/dict-node@4.0.3': {}
+ '@cspell/dict-node@5.0.1': {}
+
'@cspell/dict-npm@5.0.15': {}
+ '@cspell/dict-npm@5.0.16': {}
+
'@cspell/dict-php@4.0.6': {}
+ '@cspell/dict-php@4.0.8': {}
+
'@cspell/dict-powershell@5.0.3': {}
+ '@cspell/dict-powershell@5.0.4': {}
+
'@cspell/dict-public-licenses@2.0.6': {}
+ '@cspell/dict-public-licenses@2.0.7': {}
+
'@cspell/dict-python@4.1.11':
dependencies:
'@cspell/dict-data-science': 1.0.11
+ '@cspell/dict-python@4.2.1':
+ dependencies:
+ '@cspell/dict-data-science': 2.0.1
+
'@cspell/dict-r@2.0.1': {}
'@cspell/dict-ruby@5.0.2': {}
'@cspell/dict-rust@4.0.2': {}
+ '@cspell/dict-rust@4.0.4': {}
+
'@cspell/dict-scala@5.0.0': {}
+ '@cspell/dict-scala@5.0.2': {}
+
'@cspell/dict-software-terms@3.3.18': {}
+ '@cspell/dict-software-terms@3.4.8': {}
+
'@cspell/dict-sql@2.1.3': {}
'@cspell/dict-svelte@1.0.2': {}
@@ -10795,22 +11028,31 @@ snapshots:
'@cspell/dict-typescript@3.1.3': {}
+ '@cspell/dict-typescript@3.1.5': {}
+
'@cspell/dict-vue@3.0.0': {}
'@cspell/dynamic-import@8.7.0':
dependencies:
import-meta-resolve: 4.0.0
- '@cspell/eslint-plugin@8.7.0(eslint@8.57.0)':
+ '@cspell/dynamic-import@8.9.1':
dependencies:
- '@cspell/cspell-types': 8.7.0
- cspell-lib: 8.7.0
- eslint: 8.57.0
- estree-walker: 3.0.3
+ import-meta-resolve: 4.1.0
+
+ '@cspell/eslint-plugin@8.9.1(eslint@9.6.0)':
+ dependencies:
+ '@cspell/cspell-types': 8.9.1
+ cspell-lib: 8.9.1
+ eslint: 9.6.0
synckit: 0.9.0
'@cspell/strong-weak-map@8.7.0': {}
+ '@cspell/strong-weak-map@8.9.1': {}
+
+ '@cspell/url@8.9.1': {}
+
'@cypress/code-coverage@3.12.39(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0(esbuild@0.21.5)))(cypress@13.7.3)(webpack@5.91.0(esbuild@0.21.5))':
dependencies:
'@babel/core': 7.24.7
@@ -11117,19 +11359,27 @@ snapshots:
'@esbuild/win32-x64@0.21.5':
optional: true
- '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
+ '@eslint-community/eslint-utils@4.4.0(eslint@9.6.0)':
dependencies:
- eslint: 8.57.0
+ eslint: 9.6.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.10.0': {}
- '@eslint/eslintrc@2.1.4':
+ '@eslint/config-array@0.17.0':
+ dependencies:
+ '@eslint/object-schema': 2.1.4
+ debug: 4.3.5
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/eslintrc@3.1.0':
dependencies:
ajv: 6.12.6
- debug: 4.3.4(supports-color@8.1.1)
- espree: 9.6.1
- globals: 13.24.0
+ debug: 4.3.5
+ espree: 10.1.0
+ globals: 14.0.0
ignore: 5.3.1
import-fresh: 3.3.0
js-yaml: 4.1.0
@@ -11138,7 +11388,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@8.57.0': {}
+ '@eslint/js@9.6.0': {}
+
+ '@eslint/object-schema@2.1.4': {}
'@fastify/ajv-compiler@1.1.0':
dependencies:
@@ -11187,17 +11439,9 @@ snapshots:
'@tanstack/vue-virtual': 3.2.1(vue@3.4.21(typescript@5.4.5))
vue: 3.4.21(typescript@5.4.5)
- '@humanwhocodes/config-array@0.11.14':
- dependencies:
- '@humanwhocodes/object-schema': 2.0.2
- debug: 4.3.4(supports-color@8.1.1)
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
'@humanwhocodes/module-importer@1.0.1': {}
- '@humanwhocodes/object-schema@2.0.2': {}
+ '@humanwhocodes/retry@0.3.0': {}
'@iconify-json/carbon@1.1.36':
dependencies:
@@ -11501,14 +11745,14 @@ snapshots:
'@mdi/font@7.4.47': {}
- '@microsoft/tsdoc-config@0.16.2':
+ '@microsoft/tsdoc-config@0.17.0':
dependencies:
- '@microsoft/tsdoc': 0.14.2
- ajv: 6.12.6
+ '@microsoft/tsdoc': 0.15.0
+ ajv: 8.12.0
jju: 1.4.0
- resolve: 1.19.0
+ resolve: 1.22.8
- '@microsoft/tsdoc@0.14.2': {}
+ '@microsoft/tsdoc@0.15.0': {}
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -12108,86 +12352,119 @@ snapshots:
'@types/node': 20.12.14
optional: true
- '@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/regexpp': 4.10.0
- '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/parser': 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.6.0
- '@typescript-eslint/type-utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5)
- '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/type-utils': 7.6.0(eslint@9.6.0)(typescript@5.4.5)
+ '@typescript-eslint/utils': 7.6.0(eslint@9.6.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.6.0
- debug: 4.3.4(supports-color@8.1.1)
- eslint: 8.57.0
+ debug: 4.3.5
+ eslint: 9.6.0
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
- semver: 7.6.0
+ semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
+ optional: true
- '@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/eslint-plugin@8.0.0-alpha.36(@typescript-eslint/parser@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/scope-manager': 7.6.0
- '@typescript-eslint/types': 7.6.0
- '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5)
- '@typescript-eslint/visitor-keys': 7.6.0
- debug: 4.3.4(supports-color@8.1.1)
- eslint: 8.57.0
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
+ '@typescript-eslint/scope-manager': 8.0.0-alpha.36
+ '@typescript-eslint/type-utils': 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
+ '@typescript-eslint/utils': 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
+ '@typescript-eslint/visitor-keys': 8.0.0-alpha.36
+ eslint: 9.6.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ natural-compare: 1.4.0
+ ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@5.62.0':
+ '@typescript-eslint/parser@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/types': 5.62.0
- '@typescript-eslint/visitor-keys': 5.62.0
+ '@typescript-eslint/scope-manager': 8.0.0-alpha.36
+ '@typescript-eslint/types': 8.0.0-alpha.36
+ '@typescript-eslint/typescript-estree': 8.0.0-alpha.36(typescript@5.4.5)
+ '@typescript-eslint/visitor-keys': 8.0.0-alpha.36
+ debug: 4.3.5
+ eslint: 9.6.0
+ optionalDependencies:
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - supports-color
'@typescript-eslint/scope-manager@7.6.0':
dependencies:
'@typescript-eslint/types': 7.6.0
'@typescript-eslint/visitor-keys': 7.6.0
- '@typescript-eslint/type-utils@7.6.0(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/scope-manager@8.0.0-alpha.36':
+ dependencies:
+ '@typescript-eslint/types': 8.0.0-alpha.36
+ '@typescript-eslint/visitor-keys': 8.0.0-alpha.36
+
+ '@typescript-eslint/type-utils@7.6.0(eslint@9.6.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5)
- '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5)
- debug: 4.3.4(supports-color@8.1.1)
- eslint: 8.57.0
+ '@typescript-eslint/utils': 7.6.0(eslint@9.6.0)(typescript@5.4.5)
+ debug: 4.3.5
+ eslint: 9.6.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
+ optional: true
- '@typescript-eslint/types@5.62.0': {}
+ '@typescript-eslint/type-utils@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 8.0.0-alpha.36(typescript@5.4.5)
+ '@typescript-eslint/utils': 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
+ debug: 4.3.5
+ ts-api-utils: 1.3.0(typescript@5.4.5)
+ optionalDependencies:
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
'@typescript-eslint/types@7.13.1': {}
'@typescript-eslint/types@7.6.0': {}
- '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5)':
+ '@typescript-eslint/types@8.0.0-alpha.36': {}
+
+ '@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/types': 5.62.0
- '@typescript-eslint/visitor-keys': 5.62.0
+ '@typescript-eslint/types': 7.6.0
+ '@typescript-eslint/visitor-keys': 7.6.0
debug: 4.3.5
globby: 11.1.0
is-glob: 4.0.3
+ minimatch: 9.0.4
semver: 7.6.2
- tsutils: 3.21.0(typescript@5.4.5)
+ ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.5)':
+ '@typescript-eslint/typescript-estree@8.0.0-alpha.36(typescript@5.4.5)':
dependencies:
- '@typescript-eslint/types': 7.6.0
- '@typescript-eslint/visitor-keys': 7.6.0
- debug: 4.3.4(supports-color@8.1.1)
+ '@typescript-eslint/types': 8.0.0-alpha.36
+ '@typescript-eslint/visitor-keys': 8.0.0-alpha.36
+ debug: 4.3.5
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
@@ -12198,46 +12475,40 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/utils@7.6.0(eslint@9.6.0)(typescript@5.4.5)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
- '@typescript-eslint/scope-manager': 5.62.0
- '@typescript-eslint/types': 5.62.0
- '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5)
- eslint: 8.57.0
- eslint-scope: 5.1.1
+ '@typescript-eslint/scope-manager': 7.6.0
+ '@typescript-eslint/types': 7.6.0
+ '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5)
+ eslint: 9.6.0
semver: 7.6.2
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.5)':
+ '@typescript-eslint/utils@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@types/json-schema': 7.0.15
- '@types/semver': 7.5.8
- '@typescript-eslint/scope-manager': 7.6.0
- '@typescript-eslint/types': 7.6.0
- '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5)
- eslint: 8.57.0
- semver: 7.6.0
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0)
+ '@typescript-eslint/scope-manager': 8.0.0-alpha.36
+ '@typescript-eslint/types': 8.0.0-alpha.36
+ '@typescript-eslint/typescript-estree': 8.0.0-alpha.36(typescript@5.4.5)
+ eslint: 9.6.0
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/visitor-keys@5.62.0':
- dependencies:
- '@typescript-eslint/types': 5.62.0
- eslint-visitor-keys: 3.4.3
-
'@typescript-eslint/visitor-keys@7.6.0':
dependencies:
'@typescript-eslint/types': 7.6.0
eslint-visitor-keys: 3.4.3
- '@ungap/structured-clone@1.2.0': {}
+ '@typescript-eslint/visitor-keys@8.0.0-alpha.36':
+ dependencies:
+ '@typescript-eslint/types': 8.0.0-alpha.36
+ eslint-visitor-keys: 3.4.3
'@unocss/astro@0.59.4(rollup@2.79.1)(vite@5.2.13(@types/node@20.14.7)(terser@5.31.1))':
dependencies:
@@ -12805,10 +13076,6 @@ snapshots:
dependencies:
acorn: 8.11.3
- acorn-jsx@5.3.2(acorn@8.11.3):
- dependencies:
- acorn: 8.11.3
-
acorn-jsx@5.3.2(acorn@8.12.0):
dependencies:
acorn: 8.12.0
@@ -13593,10 +13860,6 @@ snapshots:
cookie@0.6.0: {}
- core-js-compat@3.36.0:
- dependencies:
- browserslist: 4.23.0
-
core-js-compat@3.37.1:
dependencies:
browserslist: 4.23.1
@@ -13681,6 +13944,12 @@ snapshots:
comment-json: 4.2.3
yaml: 2.4.5
+ cspell-config-lib@8.9.1:
+ dependencies:
+ '@cspell/cspell-types': 8.9.1
+ comment-json: 4.2.3
+ yaml: 2.4.5
+
cspell-dictionary@8.7.0:
dependencies:
'@cspell/cspell-pipe': 8.7.0
@@ -13689,6 +13958,14 @@ snapshots:
fast-equals: 5.0.1
gensequence: 7.0.0
+ cspell-dictionary@8.9.1:
+ dependencies:
+ '@cspell/cspell-pipe': 8.9.1
+ '@cspell/cspell-types': 8.9.1
+ cspell-trie-lib: 8.9.1
+ fast-equals: 5.0.1
+ gensequence: 7.0.0
+
cspell-gitignore@8.7.0:
dependencies:
cspell-glob: 8.7.0
@@ -13698,15 +13975,29 @@ snapshots:
dependencies:
micromatch: 4.0.7
+ cspell-glob@8.9.1:
+ dependencies:
+ micromatch: 4.0.7
+
cspell-grammar@8.7.0:
dependencies:
'@cspell/cspell-pipe': 8.7.0
'@cspell/cspell-types': 8.7.0
+ cspell-grammar@8.9.1:
+ dependencies:
+ '@cspell/cspell-pipe': 8.9.1
+ '@cspell/cspell-types': 8.9.1
+
cspell-io@8.7.0:
dependencies:
'@cspell/cspell-service-bus': 8.7.0
+ cspell-io@8.9.1:
+ dependencies:
+ '@cspell/cspell-service-bus': 8.9.1
+ '@cspell/url': 8.9.1
+
cspell-lib@8.7.0:
dependencies:
'@cspell/cspell-bundled-dicts': 8.7.0
@@ -13731,12 +14022,44 @@ snapshots:
vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8
+ cspell-lib@8.9.1:
+ dependencies:
+ '@cspell/cspell-bundled-dicts': 8.9.1
+ '@cspell/cspell-pipe': 8.9.1
+ '@cspell/cspell-resolver': 8.9.1
+ '@cspell/cspell-types': 8.9.1
+ '@cspell/dynamic-import': 8.9.1
+ '@cspell/strong-weak-map': 8.9.1
+ '@cspell/url': 8.9.1
+ clear-module: 4.1.2
+ comment-json: 4.2.3
+ cspell-config-lib: 8.9.1
+ cspell-dictionary: 8.9.1
+ cspell-glob: 8.9.1
+ cspell-grammar: 8.9.1
+ cspell-io: 8.9.1
+ cspell-trie-lib: 8.9.1
+ env-paths: 3.0.0
+ fast-equals: 5.0.1
+ gensequence: 7.0.0
+ import-fresh: 3.3.0
+ resolve-from: 5.0.0
+ vscode-languageserver-textdocument: 1.0.11
+ vscode-uri: 3.0.8
+ xdg-basedir: 5.1.0
+
cspell-trie-lib@8.7.0:
dependencies:
'@cspell/cspell-pipe': 8.7.0
'@cspell/cspell-types': 8.7.0
gensequence: 7.0.0
+ cspell-trie-lib@8.9.1:
+ dependencies:
+ '@cspell/cspell-pipe': 8.9.1
+ '@cspell/cspell-types': 8.9.1
+ gensequence: 7.0.0
+
cspell@8.7.0:
dependencies:
'@cspell/cspell-json-reporter': 8.7.0
@@ -14173,10 +14496,6 @@ snapshots:
dependencies:
'@leichtgewicht/ip-codec': 2.0.4
- doctrine@3.0.0:
- dependencies:
- esutils: 2.0.3
-
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
@@ -14260,6 +14579,8 @@ snapshots:
entities@4.5.0: {}
+ env-paths@3.0.0: {}
+
envinfo@7.10.0: {}
error-ex@1.3.2:
@@ -14466,77 +14787,77 @@ snapshots:
optionalDependencies:
source-map: 0.1.43
- eslint-config-prettier@9.1.0(eslint@8.57.0):
+ eslint-config-prettier@9.1.0(eslint@9.6.0):
dependencies:
- eslint: 8.57.0
+ eslint: 9.6.0
- eslint-plugin-cypress@2.15.2(eslint@8.57.0):
+ eslint-plugin-cypress@3.3.0(eslint@9.6.0):
dependencies:
- eslint: 8.57.0
+ eslint: 9.6.0
globals: 13.24.0
eslint-plugin-html@8.1.1:
dependencies:
htmlparser2: 9.1.0
- eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.12.14))(typescript@5.4.5):
+ eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(jest@29.7.0(@types/node@20.12.14))(typescript@5.4.5):
dependencies:
- '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5)
- eslint: 8.57.0
+ '@typescript-eslint/utils': 7.6.0(eslint@9.6.0)(typescript@5.4.5)
+ eslint: 9.6.0
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(typescript@5.4.5)
jest: 29.7.0(@types/node@20.12.14)
transitivePeerDependencies:
- supports-color
- typescript
- eslint-plugin-jsdoc@48.2.15(eslint@8.57.0):
+ eslint-plugin-jsdoc@48.2.15(eslint@9.6.0):
dependencies:
'@es-joy/jsdoccomment': 0.43.1
are-docs-informative: 0.0.2
comment-parser: 1.4.1
debug: 4.3.5
escape-string-regexp: 4.0.0
- eslint: 8.57.0
+ eslint: 9.6.0
esquery: 1.5.0
semver: 7.6.2
spdx-expression-parse: 4.0.0
transitivePeerDependencies:
- supports-color
- eslint-plugin-json@3.1.0:
+ eslint-plugin-json@4.0.0:
dependencies:
lodash: 4.17.21
vscode-json-languageservice: 4.2.1
- eslint-plugin-lodash@7.4.0(eslint@8.57.0):
+ eslint-plugin-lodash@8.0.0(eslint@9.6.0):
dependencies:
- eslint: 8.57.0
+ eslint: 9.6.0
lodash: 4.17.21
- eslint-plugin-markdown@4.0.1(eslint@8.57.0):
+ eslint-plugin-markdown@5.0.0(eslint@9.6.0):
dependencies:
- eslint: 8.57.0
+ eslint: 9.6.0
mdast-util-from-markdown: 0.8.5
transitivePeerDependencies:
- supports-color
eslint-plugin-no-only-tests@3.1.0: {}
- eslint-plugin-tsdoc@0.2.17:
+ eslint-plugin-tsdoc@0.3.0:
dependencies:
- '@microsoft/tsdoc': 0.14.2
- '@microsoft/tsdoc-config': 0.16.2
+ '@microsoft/tsdoc': 0.15.0
+ '@microsoft/tsdoc-config': 0.17.0
- eslint-plugin-unicorn@51.0.1(eslint@8.57.0):
+ eslint-plugin-unicorn@53.0.0(eslint@9.6.0):
dependencies:
- '@babel/helper-validator-identifier': 7.22.20
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
- '@eslint/eslintrc': 2.1.4
+ '@babel/helper-validator-identifier': 7.24.7
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0)
+ '@eslint/eslintrc': 3.1.0
ci-info: 4.0.0
clean-regexp: 1.0.0
- core-js-compat: 3.36.0
- eslint: 8.57.0
+ core-js-compat: 3.37.1
+ eslint: 9.6.0
esquery: 1.5.0
indent-string: 4.0.0
is-builtin-module: 3.2.1
@@ -14545,7 +14866,7 @@ snapshots:
read-pkg-up: 7.0.1
regexp-tree: 0.1.27
regjsparser: 0.10.0
- semver: 7.6.0
+ semver: 7.6.2
strip-indent: 3.0.0
transitivePeerDependencies:
- supports-color
@@ -14555,7 +14876,7 @@ snapshots:
esrecurse: 4.3.0
estraverse: 4.3.0
- eslint-scope@7.2.2:
+ eslint-scope@8.0.1:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
@@ -14564,38 +14885,34 @@ snapshots:
eslint-visitor-keys@4.0.0: {}
- eslint@8.57.0:
+ eslint@9.6.0:
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0)
'@eslint-community/regexpp': 4.10.0
- '@eslint/eslintrc': 2.1.4
- '@eslint/js': 8.57.0
- '@humanwhocodes/config-array': 0.11.14
+ '@eslint/config-array': 0.17.0
+ '@eslint/eslintrc': 3.1.0
+ '@eslint/js': 9.6.0
'@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.3.0
'@nodelib/fs.walk': 1.2.8
- '@ungap/structured-clone': 1.2.0
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
- debug: 4.3.4(supports-color@8.1.1)
- doctrine: 3.0.0
+ debug: 4.3.5
escape-string-regexp: 4.0.0
- eslint-scope: 7.2.2
- eslint-visitor-keys: 3.4.3
- espree: 9.6.1
+ eslint-scope: 8.0.1
+ eslint-visitor-keys: 4.0.0
+ espree: 10.1.0
esquery: 1.5.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
- file-entry-cache: 6.0.1
+ file-entry-cache: 8.0.0
find-up: 5.0.0
glob-parent: 6.0.2
- globals: 13.24.0
- graphemer: 1.4.0
ignore: 5.3.1
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
- js-yaml: 4.1.0
json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
lodash.merge: 4.6.2
@@ -14620,12 +14937,6 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.12.0)
eslint-visitor-keys: 4.0.0
- espree@9.6.1:
- dependencies:
- acorn: 8.11.3
- acorn-jsx: 5.3.2(acorn@8.11.3)
- eslint-visitor-keys: 3.4.3
-
esprima@1.1.1: {}
esprima@4.0.1: {}
@@ -14886,7 +15197,7 @@ snapshots:
proxy-addr: 2.0.7
rfdc: 1.4.1
secure-json-parse: 2.7.0
- semver: 7.5.4
+ semver: 7.6.2
tiny-lru: 8.0.2
transitivePeerDependencies:
- supports-color
@@ -14928,10 +15239,6 @@ snapshots:
dependencies:
escape-string-regexp: 1.0.5
- file-entry-cache@6.0.1:
- dependencies:
- flat-cache: 3.2.0
-
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
@@ -15009,12 +15316,6 @@ snapshots:
locate-path: 7.2.0
path-exists: 5.0.0
- flat-cache@3.2.0:
- dependencies:
- flatted: 3.3.1
- keyv: 4.5.4
- rimraf: 3.0.2
-
flat-cache@4.0.1:
dependencies:
flatted: 3.3.1
@@ -15238,6 +15539,10 @@ snapshots:
dependencies:
type-fest: 0.20.2
+ globals@14.0.0: {}
+
+ globals@15.6.0: {}
+
globalthis@1.0.4:
dependencies:
define-properties: 1.2.1
@@ -15501,6 +15806,8 @@ snapshots:
import-meta-resolve@4.0.0: {}
+ import-meta-resolve@4.1.0: {}
+
imurmurhash@0.1.4: {}
indent-string@4.0.0: {}
@@ -16333,7 +16640,7 @@ snapshots:
light-my-request@4.12.0:
dependencies:
- ajv: 8.12.0
+ ajv: 8.16.0
cookie: 0.5.0
process-warning: 1.0.0
set-cookie-parser: 2.6.0
@@ -17681,11 +17988,6 @@ snapshots:
resolve.exports@2.0.2: {}
- resolve@1.19.0:
- dependencies:
- is-core-module: 2.13.1
- path-parse: 1.0.7
-
resolve@1.22.4:
dependencies:
is-core-module: 2.13.0
@@ -18498,15 +18800,8 @@ snapshots:
ts-toolbelt@6.15.5: {}
- tslib@1.14.1: {}
-
tslib@2.6.2: {}
- tsutils@3.21.0(typescript@5.4.5):
- dependencies:
- tslib: 1.14.1
- typescript: 5.4.5
-
tsx@4.7.3:
dependencies:
esbuild: 0.19.12
@@ -18596,6 +18891,17 @@ snapshots:
shiki: 0.14.7
typescript: 5.4.5
+ typescript-eslint@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.0.0-alpha.36(@typescript-eslint/parser@8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5))(eslint@9.6.0)(typescript@5.4.5)
+ '@typescript-eslint/parser': 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
+ '@typescript-eslint/utils': 8.0.0-alpha.36(eslint@9.6.0)(typescript@5.4.5)
+ optionalDependencies:
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
+
typescript@5.4.5: {}
uc.micro@1.0.6: {}
@@ -18810,7 +19116,7 @@ snapshots:
vite-node@1.5.3(@types/node@20.12.14)(terser@5.31.1):
dependencies:
cac: 6.7.14
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.5
pathe: 1.1.2
picocolors: 1.0.0
vite: 5.2.13(@types/node@20.12.14)(terser@5.31.1)
@@ -18962,7 +19268,7 @@ snapshots:
dependencies:
jsonc-parser: 3.2.1
vscode-languageserver-textdocument: 1.0.11
- vscode-languageserver-types: 3.17.3
+ vscode-languageserver-types: 3.17.5
vscode-nls: 5.2.0
vscode-uri: 3.0.8
@@ -18975,8 +19281,6 @@ snapshots:
vscode-languageserver-textdocument@1.0.11: {}
- vscode-languageserver-types@3.17.3: {}
-
vscode-languageserver-types@3.17.5: {}
vscode-languageserver@9.0.1:
diff --git a/scripts/jison/lint.mts b/scripts/jison/lint.mts
index 596ce308b6..f52010e28c 100644
--- a/scripts/jison/lint.mts
+++ b/scripts/jison/lint.mts
@@ -6,8 +6,9 @@ import { ESLint } from 'eslint';
import jison from 'jison';
const linter = new ESLint({
- overrideConfig: { rules: { 'no-console': 'error' }, parser: '@typescript-eslint/parser' },
- useEslintrc: false,
+ // @ts-expect-error ESLint types are incorrect
+ overrideConfigFile: true,
+ overrideConfig: { rules: { 'no-console': 'error' } },
});
const lint = async (file: string): Promise => {
diff --git a/tests/webpack/src/index.js b/tests/webpack/src/index.js
index e667cfc5d0..dc5c253ba8 100644
--- a/tests/webpack/src/index.js
+++ b/tests/webpack/src/index.js
@@ -1,5 +1,5 @@
-/* eslint-disable @typescript-eslint/no-var-requires */
/* eslint-disable no-console */
+// eslint-disable-next-line @typescript-eslint/no-require-imports
const mermaid = require('mermaid');
import mindmap from '@mermaid-js/mermaid-mindmap';
diff --git a/tests/webpack/webpack.config.js b/tests/webpack/webpack.config.js
index 3c35a39228..2afc943743 100644
--- a/tests/webpack/webpack.config.js
+++ b/tests/webpack/webpack.config.js
@@ -1,4 +1,4 @@
-// eslint-disable-next-line @typescript-eslint/no-var-requires
+// eslint-disable-next-line @typescript-eslint/no-require-imports
const path = require('path');
module.exports = {
diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json
index 5fd73bf1f9..7b7934881a 100644
--- a/tsconfig.eslint.json
+++ b/tsconfig.eslint.json
@@ -3,16 +3,21 @@
"extends": "./tsconfig.json",
"compilerOptions": {
// ensure that nobody can accidentally use this config for a build
- "noEmit": true
+ "noEmit": true,
+ "allowJs": true
},
"include": [
- "packages",
- "tests",
- "scripts",
- "cypress",
- "__mocks__",
- "./.eslintrc.cjs",
- "./*",
- "demos/dev"
+ "./.build/*.ts",
+ "./.esbuild/*.ts",
+ "./.vite/*.ts",
+ "./cypress.config.ts",
+ "./tests",
+ "./scripts",
+ "./cypress",
+ "./__mocks__",
+ "./demos/dev",
+ "./vite.config.ts",
+ "./vitest.workspace.js",
+ "eslint.config.js"
]
}
diff --git a/tsconfig.json b/tsconfig.json
index 4cbf209a33..8e044caff5 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -103,5 +103,5 @@
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
- "include": ["./package.json"]
+ "exclude": ["node_modules", "dist", "coverage"]
}