From 49c5f3bb9ca9ecf7a793e3d0ad2be5828ce6a8ca Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Sun, 20 Aug 2023 18:48:03 +0300 Subject: [PATCH 01/38] feat(parser): create `pie` parser and export it --- packages/parser/langium-config.json | 5 + packages/parser/src/index.ts | 2 +- packages/parser/src/language/index.ts | 1 + packages/parser/src/language/pie/index.ts | 1 + packages/parser/src/language/pie/pie.langium | 20 ++ packages/parser/src/language/pie/pieModule.ts | 68 ++++ .../src/language/pie/pieTokenBuilder.ts | 23 ++ .../src/language/pie/pieValueConverter.ts | 50 +++ packages/parser/src/parse.ts | 12 +- packages/parser/tests/pie.test.ts | 294 ++++++++++++++++++ 10 files changed, 472 insertions(+), 4 deletions(-) create mode 100644 packages/parser/src/language/pie/index.ts create mode 100644 packages/parser/src/language/pie/pie.langium create mode 100644 packages/parser/src/language/pie/pieModule.ts create mode 100644 packages/parser/src/language/pie/pieTokenBuilder.ts create mode 100644 packages/parser/src/language/pie/pieValueConverter.ts create mode 100644 packages/parser/tests/pie.test.ts diff --git a/packages/parser/langium-config.json b/packages/parser/langium-config.json index 4ffaaf372..999df51b0 100644 --- a/packages/parser/langium-config.json +++ b/packages/parser/langium-config.json @@ -5,6 +5,11 @@ "id": "info", "grammar": "src/language/info/info.langium", "fileExtensions": [".mmd", ".mermaid"] + }, + { + "id": "pie", + "grammar": "src/language/pie/pie.langium", + "fileExtensions": [".mmd", ".mermaid"] } ], "mode": "production", diff --git a/packages/parser/src/index.ts b/packages/parser/src/index.ts index 9dded54fa..149e7a21d 100644 --- a/packages/parser/src/index.ts +++ b/packages/parser/src/index.ts @@ -1,3 +1,3 @@ -export type { Info } from './language/index.js'; +export type { Info, Pie, PieSection } from './language/index.js'; export type { DiagramAST } from './parse.js'; export { parse, MermaidParseError } from './parse.js'; diff --git a/packages/parser/src/language/index.ts b/packages/parser/src/language/index.ts index b6685a07f..4af6091de 100644 --- a/packages/parser/src/language/index.ts +++ b/packages/parser/src/language/index.ts @@ -4,3 +4,4 @@ export * from './generated/module.js'; export * from './common/index.js'; export * from './info/index.js'; +export * from './pie/index.js'; diff --git a/packages/parser/src/language/pie/index.ts b/packages/parser/src/language/pie/index.ts new file mode 100644 index 000000000..aa111ca70 --- /dev/null +++ b/packages/parser/src/language/pie/index.ts @@ -0,0 +1 @@ +export * from './pieModule.js'; diff --git a/packages/parser/src/language/pie/pie.langium b/packages/parser/src/language/pie/pie.langium new file mode 100644 index 000000000..7c66b702b --- /dev/null +++ b/packages/parser/src/language/pie/pie.langium @@ -0,0 +1,20 @@ +grammar Pie +import "../common/common"; + +entry Pie: + NEWLINE* + "pie" showData?="showData"? + ( + NEWLINE* TitleAndAccessibilities sections+=PieSection* + | NEWLINE+ sections+=PieSection+ + | NEWLINE* + ) +; + +PieSection: + label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE + NEWLINE+ +; + +terminal PIE_SECTION_LABEL: /"[^"]+"/; +terminal PIE_SECTION_VALUE returns number: /(0|[1-9][0-9]*)(\.[0-9]+)?/; diff --git a/packages/parser/src/language/pie/pieModule.ts b/packages/parser/src/language/pie/pieModule.ts new file mode 100644 index 000000000..ba6f550cc --- /dev/null +++ b/packages/parser/src/language/pie/pieModule.ts @@ -0,0 +1,68 @@ +import type { + DefaultSharedModuleContext, + LangiumServices, + LangiumSharedServices, + Module, + PartialLangiumServices, +} from 'langium'; +import { EmptyFileSystem, createDefaultModule, createDefaultSharedModule, inject } from 'langium'; + +import { MermaidGeneratedSharedModule, PieGeneratedModule } from '../generated/module.js'; +import { CommonLexer } from '../common/commonLexer.js'; +import { PieTokenBuilder } from './pieTokenBuilder.js'; +import { PieValueConverter } from './pieValueConverter.js'; + +/** + * Declaration of `Pie` services. + */ +type PieAddedServices = { + parser: { + Lexer: CommonLexer; + TokenBuilder: PieTokenBuilder; + ValueConverter: PieValueConverter; + }; +}; + +/** + * Union of Langium default services and `Pie` services. + */ +export type PieServices = LangiumServices & PieAddedServices; + +/** + * Dependency injection module that overrides Langium default services and + * contributes the declared `Pie` services. + */ +const PieModule: Module = { + parser: { + Lexer: (services) => new CommonLexer(services), + TokenBuilder: () => new PieTokenBuilder(), + ValueConverter: () => new PieValueConverter(), + }, +}; + +/** + * Create the full set of services required by Langium. + * + * First inject the shared services by merging two modules: + * - Langium default shared services + * - Services generated by langium-cli + * + * Then inject the language-specific services by merging three modules: + * - Langium default language-specific services + * - Services generated by langium-cli + * - Services specified in this file + * @param context - Optional module context with the LSP connection + * @returns An object wrapping the shared services and the language-specific services + */ +export function createPieServices(context: DefaultSharedModuleContext = EmptyFileSystem): { + shared: LangiumSharedServices; + Pie: PieServices; +} { + const shared: LangiumSharedServices = inject( + createDefaultSharedModule(context), + MermaidGeneratedSharedModule + ); + const Pie: PieServices = inject(createDefaultModule({ shared }), PieGeneratedModule, PieModule); + shared.ServiceRegistry.register(Pie); + return { shared, Pie }; +} diff --git a/packages/parser/src/language/pie/pieTokenBuilder.ts b/packages/parser/src/language/pie/pieTokenBuilder.ts new file mode 100644 index 000000000..2004ed50b --- /dev/null +++ b/packages/parser/src/language/pie/pieTokenBuilder.ts @@ -0,0 +1,23 @@ +import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium'; +import { DefaultTokenBuilder } from 'langium'; + +import type { TokenType } from '../chevrotainWrapper.js'; + +export class PieTokenBuilder extends DefaultTokenBuilder { + protected override buildKeywordTokens( + rules: Stream, + terminalTokens: TokenType[], + options?: TokenBuilderOptions + ): TokenType[] { + const tokenTypes: TokenType[] = super.buildKeywordTokens(rules, terminalTokens, options); + tokenTypes.forEach((tokenType: TokenType): void => { + if ( + (tokenType.name === 'pie' || tokenType.name === 'showData') && + tokenType.PATTERN !== undefined + ) { + tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + '(?!\\S)'); + } + }); + return tokenTypes; + } +} diff --git a/packages/parser/src/language/pie/pieValueConverter.ts b/packages/parser/src/language/pie/pieValueConverter.ts new file mode 100644 index 000000000..aa322cadd --- /dev/null +++ b/packages/parser/src/language/pie/pieValueConverter.ts @@ -0,0 +1,50 @@ +import type { CstNode, GrammarAST, ValueType } from 'langium'; +import { DefaultValueConverter } from 'langium'; + +import { CommonValueConverter } from '../common/commonValueConverters.js'; + +export class PieValueConverter extends DefaultValueConverter { + protected override runConverter( + rule: GrammarAST.AbstractRule, + input: string, + cstNode: CstNode + ): ValueType { + let value: ValueType | undefined = CommonValueConverter.customRunConverter( + rule, + input, + cstNode + ); + if (value === undefined) { + value = PieValueConverter.customRunConverter(rule, input, cstNode); + } + + if (value === undefined) { + return super.runConverter(rule, input, cstNode); + } else { + return value; + } + } + + /** + * A method contains convert logic to be used by class itself or `MermaidValueConverter`. + * + * @param rule - Parsed rule. + * @param input - Matched string. + * @param _cstNode - Node in the Concrete Syntax Tree (CST). + * @returns converted the value if it's pie rule or `null` if it's not. + */ + public static customRunConverter( + rule: GrammarAST.AbstractRule, + input: string, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _cstNode: CstNode + ): ValueType | undefined { + if (rule.name === 'PIE_SECTION_LABEL') { + return input + .replace(/"/g, '') + .trim() + .replaceAll(/[\t ]{2,}/gm, ' '); + } + return undefined; + } +} diff --git a/packages/parser/src/parse.ts b/packages/parser/src/parse.ts index 90358bbf1..6eadb69ab 100644 --- a/packages/parser/src/parse.ts +++ b/packages/parser/src/parse.ts @@ -1,8 +1,8 @@ import type { LangiumParser, ParseResult } from 'langium'; -import type { Info } from './index.js'; -import { createInfoServices } from './language/index.js'; +import type { Info, Pie } from './index.js'; +import { createInfoServices, createPieServices } from './language/index.js'; -export type DiagramAST = Info; +export type DiagramAST = Info | Pie; const parsers: Record = {}; @@ -13,8 +13,14 @@ const initializers = { const parser = createInfoServices().Info.parser.LangiumParser; parsers['info'] = parser; }, + pie: () => { + const parser = createPieServices().Pie.parser.LangiumParser; + parsers['pie'] = parser; + }, } as const; + export function parse(diagramType: 'info', text: string): Info; +export function parse(diagramType: 'pie', text: string): Pie; export function parse( diagramType: keyof typeof initializers, text: string diff --git a/packages/parser/tests/pie.test.ts b/packages/parser/tests/pie.test.ts new file mode 100644 index 000000000..27f73a627 --- /dev/null +++ b/packages/parser/tests/pie.test.ts @@ -0,0 +1,294 @@ +import { describe, expect, it } from 'vitest'; +import type { LangiumParser, ParseResult } from 'langium'; + +import type { PieServices } from '../src/language/index.js'; +import { Pie, createPieServices } from '../src/language/index.js'; + +const services: PieServices = createPieServices().Pie; +const parser: LangiumParser = services.parser.LangiumParser; +export function createPieTestServices(): { + services: PieServices; + parse: (input: string) => ParseResult; +} { + const parse = (input: string) => { + return parser.parse(input); + }; + + return { services, parse }; +} + +describe('pie', () => { + const { parse } = createPieTestServices(); + + it.each([ + `pie`, + ` pie `, + `\tpie\t`, + ` + \tpie + `, + ])('should handle regular pie', (context: string) => { + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + }); + + it.each([ + `pie showData`, + ` pie showData `, + `\tpie\tshowData\t`, + ` + pie\tshowData + `, + ])('should handle regular showData', (context: string) => { + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.showData).toBeTruthy(); + }); + + it.each([ + `pie title sample title`, + ` pie title sample title `, + `\tpie\ttitle sample title\t`, + `pie + \ttitle sample title + `, + ])('should handle regular pie + title in same line', (context: string) => { + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.title).toBe('sample title'); + }); + + it.each([ + `pie + title sample title`, + `pie + title sample title + `, + `pie + title sample title`, + `pie + title sample title + `, + ])('should handle regular pie + title in different line', (context: string) => { + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.title).toBe('sample title'); + }); + + it.each([ + `pie showData title sample title`, + `pie showData title sample title + `, + ])('should handle regular pie + showData + title', (context: string) => { + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.showData).toBeTruthy(); + expect(value.title).toBe('sample title'); + }); + + it.each([ + `pie showData + title sample title`, + `pie showData + title sample title + `, + `pie showData + title sample title`, + `pie showData + title sample title + `, + ])('should handle regular showData + title in different line', (context: string) => { + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.showData).toBeTruthy(); + expect(value.title).toBe('sample title'); + }); + + describe('sections', () => { + describe('normal', () => { + it.each([ + `pie + "GitHub":100 + "GitLab":50`, + `pie + "GitHub" : 100 + "GitLab" : 50`, + `pie + "GitHub"\t:\t100 + "GitLab"\t:\t50`, + `pie + \t"GitHub" \t : \t 100 + \t"GitLab" \t : \t 50 + `, + ])('should handle regular secions', (context: string) => { + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + + const section0 = value.sections[0]; + expect(section0?.label).toBe('GitHub'); + expect(section0?.value).toBe(100); + + const section1 = value.sections[1]; + expect(section1?.label).toBe('GitLab'); + expect(section1?.value).toBe(50); + }); + + it('should handle sections with showData', () => { + const context = `pie showData + "GitHub": 100 + "GitLab": 50`; + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.showData).toBeTruthy(); + + const section0 = value.sections[0]; + expect(section0?.label).toBe('GitHub'); + expect(section0?.value).toBe(100); + + const section1 = value.sections[1]; + expect(section1?.label).toBe('GitLab'); + expect(section1?.value).toBe(50); + }); + + it('should handle sections with title', () => { + const context = `pie title sample wow + "GitHub": 100 + "GitLab": 50`; + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.title).toBe('sample wow'); + + const section0 = value.sections[0]; + expect(section0?.label).toBe('GitHub'); + expect(section0?.value).toBe(100); + + const section1 = value.sections[1]; + expect(section1?.label).toBe('GitLab'); + expect(section1?.value).toBe(50); + }); + + it('should handle sections with accTitle', () => { + const context = `pie accTitle: sample wow + "GitHub": 100 + "GitLab": 50`; + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.accTitle).toBe('sample wow'); + + const section0 = value.sections[0]; + expect(section0?.label).toBe('GitHub'); + expect(section0?.value).toBe(100); + + const section1 = value.sections[1]; + expect(section1?.label).toBe('GitLab'); + expect(section1?.value).toBe(50); + }); + + it('should handle sections with single line accDescr', () => { + const context = `pie accDescr: sample wow + "GitHub": 100 + "GitLab": 50`; + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.accDescr).toBe('sample wow'); + + const section0 = value.sections[0]; + expect(section0?.label).toBe('GitHub'); + expect(section0?.value).toBe(100); + + const section1 = value.sections[1]; + expect(section1?.label).toBe('GitLab'); + expect(section1?.value).toBe(50); + }); + + it('should handle sections with multi line accDescr', () => { + const context = `pie accDescr { + sample wow + } + "GitHub": 100 + "GitLab": 50`; + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + expect(value.accDescr).toBe('sample wow'); + + const section0 = value.sections[0]; + expect(section0?.label).toBe('GitHub'); + expect(section0?.value).toBe(100); + + const section1 = value.sections[1]; + expect(section1?.label).toBe('GitLab'); + expect(section1?.value).toBe(50); + }); + }); + + describe('duplicate', () => { + it('should handle duplicate sections', () => { + const context = `pie + "GitHub": 100 + "GitHub": 50`; + const result = parse(context); + expect(result.parserErrors).toHaveLength(0); + expect(result.lexerErrors).toHaveLength(0); + + const value = result.value; + expect(value.$type).toBe(Pie); + + const section0 = value.sections[0]; + expect(section0?.label).toBe('GitHub'); + expect(section0?.value).toBe(100); + + const section1 = value.sections[1]; + expect(section1?.label).toBe('GitHub'); + expect(section1?.value).toBe(50); + }); + }); + }); +}); From 1c8e13b9c1ba064db90aa3095870d3d6acec9837 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais Date: Sun, 20 Aug 2023 19:49:02 +0300 Subject: [PATCH 02/38] feat: integrate `pir` parser into `mermaid` package --- .../mermaid/src/diagrams/pie/parser/pie.jison | 106 ------------------ packages/mermaid/src/diagrams/pie/pie.spec.ts | 11 +- packages/mermaid/src/diagrams/pie/pieDb.ts | 8 -- .../mermaid/src/diagrams/pie/pieDiagram.ts | 3 +- .../mermaid/src/diagrams/pie/pieParser.ts | 25 +++++ packages/mermaid/src/diagrams/pie/pieTypes.ts | 1 - 6 files changed, 28 insertions(+), 126 deletions(-) delete mode 100644 packages/mermaid/src/diagrams/pie/parser/pie.jison create mode 100644 packages/mermaid/src/diagrams/pie/pieParser.ts diff --git a/packages/mermaid/src/diagrams/pie/parser/pie.jison b/packages/mermaid/src/diagrams/pie/parser/pie.jison deleted file mode 100644 index e98638aa8..000000000 --- a/packages/mermaid/src/diagrams/pie/parser/pie.jison +++ /dev/null @@ -1,106 +0,0 @@ -/** mermaid - * https://knsv.github.io/mermaid - * (c) 2015 Knut Sveidqvist - * MIT license. - */ -%lex -%options case-insensitive - -%x string -%x title -%x open_directive -%x type_directive -%x arg_directive -%x close_directive -%x acc_title -%x acc_descr -%x acc_descr_multiline -%% -\%\%\{ { this.begin('open_directive'); return 'open_directive'; } -((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; } -":" { this.popState(); this.begin('arg_directive'); return ':'; } -\}\%\% { this.popState(); this.popState(); return 'close_directive'; } -((?:(?!\}\%\%).|\n)*) return 'arg_directive'; -\%\%(?!\{)[^\n]* /* skip comments */ -[^\}]\%\%[^\n]* /* skip comments */{ /*console.log('');*/ } -[\n\r]+ return 'NEWLINE'; -\%\%[^\n]* /* do nothing */ -[\s]+ /* ignore */ -title { this.begin("title");return 'title'; } -(?!\n|;|#)*[^\n]* { this.popState(); return "title_value"; } - -accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } -<acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } -accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } -<acc_descr>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_descr_value"; } -accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} -<acc_descr_multiline>[\}] { this.popState(); } -<acc_descr_multiline>[^\}]* return "acc_descr_multiline_value"; -["] { this.begin("string"); } -<string>["] { this.popState(); } -<string>[^"]* { return "txt"; } -"pie" return 'PIE'; -"showData" return 'showData'; -":"[\s]*[\d]+(?:\.[\d]+)? return "value"; -<<EOF>> return 'EOF'; - -/lex - -%start start - -%% /* language grammar */ - -start - : eol start - | directive start - | PIE document - | PIE showData document {yy.setShowData(true);} - ; - -document - : /* empty */ - | document line - ; - -line - : statement eol { $$ = $1 } - ; - -statement - : - | txt value { yy.addSection($1,yy.cleanupValue($2)); } - | title title_value { $$=$2.trim();yy.setDiagramTitle($$); } - | acc_title acc_title_value { $$=$2.trim();yy.setAccTitle($$); } - | acc_descr acc_descr_value { $$=$2.trim();yy.setAccDescription($$); } - | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); } | section {yy.addSection($1.substr(8));$$=$1.substr(8);} - | directive - ; - -directive - : openDirective typeDirective closeDirective - | openDirective typeDirective ':' argDirective closeDirective - ; - -eol - : NEWLINE - | ';' - | EOF - ; - -openDirective - : open_directive { yy.parseDirective('%%{', 'open_directive'); } - ; - -typeDirective - : type_directive { yy.parseDirective($1, 'type_directive'); } - ; - -argDirective - : arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); } - ; - -closeDirective - : close_directive { yy.parseDirective('}%%', 'close_directive', 'pie'); } - ; - -%% diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts index 7c8e0809a..b5aeda642 100644 --- a/packages/mermaid/src/diagrams/pie/pie.spec.ts +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -1,5 +1,4 @@ -// @ts-ignore: JISON doesn't support types -import { parser } from './parser/pie.jison'; +import { parser } from './pieParser.js'; import { DEFAULT_PIE_DB, db } from './pieDb.js'; import { setConfig } from '../../config.js'; @@ -8,13 +7,7 @@ setConfig({ }); describe('pie', () => { - beforeAll(() => { - parser.yy = db; - }); - - beforeEach(() => { - parser.yy.clear(); - }); + beforeEach(() => db.clear()); describe('parse', () => { it('should handle very simple pie', () => { diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index dbe50f08a..33a6c3ca1 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -51,13 +51,6 @@ const addSection = (label: string, value: number): void => { const getSections = (): Sections => sections; -const cleanupValue = (value: string): number => { - if (value.substring(0, 1) === ':') { - value = value.substring(1).trim(); - } - return Number(value.trim()); -}; - const setShowData = (toggle: boolean): void => { showData = toggle; }; @@ -78,7 +71,6 @@ export const db: PieDB = { addSection, getSections, - cleanupValue, setShowData, getShowData, }; diff --git a/packages/mermaid/src/diagrams/pie/pieDiagram.ts b/packages/mermaid/src/diagrams/pie/pieDiagram.ts index f0aa19b41..eb990e876 100644 --- a/packages/mermaid/src/diagrams/pie/pieDiagram.ts +++ b/packages/mermaid/src/diagrams/pie/pieDiagram.ts @@ -1,6 +1,5 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; -// @ts-ignore: JISON doesn't support types -import parser from './parser/pie.jison'; +import { parser } from './pieParser.js'; import { db } from './pieDb.js'; import styles from './pieStyles.js'; import { renderer } from './pieRenderer.js'; diff --git a/packages/mermaid/src/diagrams/pie/pieParser.ts b/packages/mermaid/src/diagrams/pie/pieParser.ts new file mode 100644 index 000000000..c4755f0b9 --- /dev/null +++ b/packages/mermaid/src/diagrams/pie/pieParser.ts @@ -0,0 +1,25 @@ +import type { Pie } from 'mermaid-parser'; +import { parse } from 'mermaid-parser'; + +import { log } from '../../logger.js'; +import type { ParserDefinition } from '../../diagram-api/types.js'; +import { populateCommonDb } from '../common/populateCommonDb.js'; +import type { PieDB } from './pieTypes.js'; +import { db } from './pieDb.js'; +import { PieSection } from 'mermaid-parser/src/index.js'; + +function populateDb(ast: Pie, db: PieDB) { + populateCommonDb(ast, db); + db.setShowData(ast.showData); + ast.sections.map((section: PieSection) => { + db.addSection(section.label, section.value); + }); +} + +export const parser: ParserDefinition = { + parse: (input: string): void => { + const ast: Pie = parse('pie', input); + log.debug(ast); + populateDb(ast, db); + }, +}; diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index 67fb1dca2..f8ba8441a 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -58,7 +58,6 @@ export interface PieDB extends DiagramDB { // diagram db addSection: (label: string, value: number) => void; getSections: () => Sections; - cleanupValue: (value: string) => number; setShowData: (toggle: boolean) => void; getShowData: () => boolean; } From 341db1327978cea684cda35f93ecd399bdb527b2 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sun, 20 Aug 2023 22:36:11 +0300 Subject: [PATCH 03/38] chore!: rename `D3Sections` type into `D3Section` --- .../mermaid/src/diagrams/pie/pieRenderer.ts | 30 +++++++++---------- packages/mermaid/src/diagrams/pie/pieTypes.ts | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts index 57dd4002b..d9287283a 100644 --- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts +++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts @@ -5,22 +5,22 @@ import { configureSvgSize } from '../../setupGraphViewbox.js'; import { getConfig } from '../../config.js'; import { cleanAndMerge, parseFontSize } from '../../utils.js'; import type { DrawDefinition, Group, SVG } from '../../diagram-api/types.js'; -import type { D3Sections, PieDB, Sections } from './pieTypes.js'; +import type { D3Section, PieDB, Sections } from './pieTypes.js'; import type { MermaidConfig, PieDiagramConfig } from '../../config.type.js'; import { selectSvgElement } from '../../rendering-util/selectSvgElement.js'; -const createPieArcs = (sections: Sections): d3.PieArcDatum<D3Sections>[] => { +const createPieArcs = (sections: Sections): d3.PieArcDatum<D3Section>[] => { // Compute the position of each group on the pie: - const pieData: D3Sections[] = Object.entries(sections).map( - (element: [string, number]): D3Sections => { + const pieData: D3Section[] = Object.entries(sections).map( + (element: [string, number]): D3Section => { return { label: element[0], value: element[1], }; } ); - const pie: d3.Pie<unknown, D3Sections> = d3pie<D3Sections>().value( - (d3Section: D3Sections): number => d3Section.value + const pie: d3.Pie<unknown, D3Section> = d3pie<D3Section>().value( + (d3Section: D3Section): number => d3Section.value ); return pie(pieData); }; @@ -63,13 +63,11 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => { const textPosition: number = pieConfig.textPosition; const radius: number = Math.min(width, height) / 2 - MARGIN; // Shape helper to build arcs: - const arcGenerator: d3.Arc<unknown, d3.PieArcDatum<D3Sections>> = arc< - d3.PieArcDatum<D3Sections> - >() + const arcGenerator: d3.Arc<unknown, d3.PieArcDatum<D3Section>> = arc<d3.PieArcDatum<D3Section>>() .innerRadius(0) .outerRadius(radius); - const labelArcGenerator: d3.Arc<unknown, d3.PieArcDatum<D3Sections>> = arc< - d3.PieArcDatum<D3Sections> + const labelArcGenerator: d3.Arc<unknown, d3.PieArcDatum<D3Section>> = arc< + d3.PieArcDatum<D3Section> >() .innerRadius(radius * textPosition) .outerRadius(radius * textPosition); @@ -82,7 +80,7 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => { .attr('class', 'pieOuterCircle'); const sections: Sections = db.getSections(); - const arcs: d3.PieArcDatum<D3Sections>[] = createPieArcs(sections); + const arcs: d3.PieArcDatum<D3Section>[] = createPieArcs(sections); const myGeneratedColors = [ themeVariables.pie1, @@ -108,7 +106,7 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => { .enter() .append('path') .attr('d', arcGenerator) - .attr('fill', (datum: d3.PieArcDatum<D3Sections>) => { + .attr('fill', (datum: d3.PieArcDatum<D3Section>) => { return color(datum.data.label); }) .attr('class', 'pieCircle'); @@ -124,10 +122,10 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => { .data(arcs) .enter() .append('text') - .text((datum: d3.PieArcDatum<D3Sections>): string => { + .text((datum: d3.PieArcDatum<D3Section>): string => { return ((datum.data.value / sum) * 100).toFixed(0) + '%'; }) - .attr('transform', (datum: d3.PieArcDatum<D3Sections>): string => { + .attr('transform', (datum: d3.PieArcDatum<D3Section>): string => { return 'translate(' + labelArcGenerator.centroid(datum) + ')'; }) .style('text-anchor', 'middle') @@ -167,7 +165,7 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => { .append('text') .attr('x', LEGEND_RECT_SIZE + LEGEND_SPACING) .attr('y', LEGEND_RECT_SIZE - LEGEND_SPACING) - .text((datum: d3.PieArcDatum<D3Sections>): string => { + .text((datum: d3.PieArcDatum<D3Section>): string => { const { label, value } = datum.data; if (db.getShowData()) { return `${label} [${value}]`; diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index f8ba8441a..dd7097e6f 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -36,7 +36,7 @@ export interface PieStyleOptions { export type Sections = Record<string, number>; -export interface D3Sections { +export interface D3Section { label: string; value: number; } From d0c36c0de3144be5d583a6f0a15736494992f7be Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sun, 20 Aug 2023 22:39:32 +0300 Subject: [PATCH 04/38] chore!: change `addSection` header into `D3Section` --- packages/mermaid/src/diagrams/pie/pieDb.ts | 7 ++----- packages/mermaid/src/diagrams/pie/pieParser.ts | 3 ++- packages/mermaid/src/diagrams/pie/pieTypes.ts | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieDb.ts b/packages/mermaid/src/diagrams/pie/pieDb.ts index 33a6c3ca1..35a58b7d9 100644 --- a/packages/mermaid/src/diagrams/pie/pieDb.ts +++ b/packages/mermaid/src/diagrams/pie/pieDb.ts @@ -1,7 +1,5 @@ import { log } from '../../logger.js'; import { parseDirective as _parseDirective } from '../../directiveUtils.js'; -import { getConfig as commonGetConfig } from '../../config.js'; -import { sanitizeText } from '../common/common.js'; import { setAccTitle, getAccTitle, @@ -12,7 +10,7 @@ import { clear as commonClear, } from '../../commonDb.js'; import type { ParseDirectiveDefinition } from '../../diagram-api/types.js'; -import type { PieFields, PieDB, Sections } from './pieTypes.js'; +import type { PieFields, PieDB, Sections, D3Section } from './pieTypes.js'; import type { RequiredDeep } from 'type-fest'; import type { PieDiagramConfig } from '../../config.type.js'; import DEFAULT_CONFIG from '../../defaultConfig.js'; @@ -41,8 +39,7 @@ const clear = (): void => { commonClear(); }; -const addSection = (label: string, value: number): void => { - label = sanitizeText(label, commonGetConfig()); +const addSection = ({ label, value }: D3Section): void => { if (sections[label] === undefined) { sections[label] = value; log.debug(`added new section: ${label}, with value: ${value}`); diff --git a/packages/mermaid/src/diagrams/pie/pieParser.ts b/packages/mermaid/src/diagrams/pie/pieParser.ts index c4755f0b9..8ef753d5d 100644 --- a/packages/mermaid/src/diagrams/pie/pieParser.ts +++ b/packages/mermaid/src/diagrams/pie/pieParser.ts @@ -12,7 +12,8 @@ function populateDb(ast: Pie, db: PieDB) { populateCommonDb(ast, db); db.setShowData(ast.showData); ast.sections.map((section: PieSection) => { - db.addSection(section.label, section.value); + const { label, value } = section; + db.addSection({ label, value }); }); } diff --git a/packages/mermaid/src/diagrams/pie/pieTypes.ts b/packages/mermaid/src/diagrams/pie/pieTypes.ts index dd7097e6f..4eb0c7f0f 100644 --- a/packages/mermaid/src/diagrams/pie/pieTypes.ts +++ b/packages/mermaid/src/diagrams/pie/pieTypes.ts @@ -56,7 +56,7 @@ export interface PieDB extends DiagramDB { getAccDescription: () => string; // diagram db - addSection: (label: string, value: number) => void; + addSection: ({ label, value }: D3Section) => void; getSections: () => Sections; setShowData: (toggle: boolean) => void; getShowData: () => boolean; From 146364aa6790f642cb67c0ecfb4b96da1d1d2216 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod <sidharthv96@gmail.com> Date: Mon, 28 Aug 2023 14:19:43 +0530 Subject: [PATCH 05/38] chore: Fix imports --- packages/mermaid/src/diagrams/pie/pieParser.ts | 3 +-- packages/parser/package.json | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieParser.ts b/packages/mermaid/src/diagrams/pie/pieParser.ts index 8ef753d5d..5832e3a15 100644 --- a/packages/mermaid/src/diagrams/pie/pieParser.ts +++ b/packages/mermaid/src/diagrams/pie/pieParser.ts @@ -1,4 +1,4 @@ -import type { Pie } from 'mermaid-parser'; +import type { Pie, PieSection } from 'mermaid-parser'; import { parse } from 'mermaid-parser'; import { log } from '../../logger.js'; @@ -6,7 +6,6 @@ import type { ParserDefinition } from '../../diagram-api/types.js'; import { populateCommonDb } from '../common/populateCommonDb.js'; import type { PieDB } from './pieTypes.js'; import { db } from './pieDb.js'; -import { PieSection } from 'mermaid-parser/src/index.js'; function populateDb(ast: Pie, db: PieDB) { populateCommonDb(ast, db); diff --git a/packages/parser/package.json b/packages/parser/package.json index 68c677c8e..8528fcf0e 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -12,7 +12,7 @@ "type": "module", "exports": { ".": { - "import": "./dist/mermaid-parser.esm.mjs", + "import": "./dist/mermaid-parser.core.mjs", "types": "./dist/src/index.d.ts" } }, From dff404a8c9d064f9b81ee67d5bb95fd1e273680a Mon Sep 17 00:00:00 2001 From: sidharthv96 <sidharthv96@users.noreply.github.com> Date: Mon, 28 Aug 2023 08:53:43 +0000 Subject: [PATCH 06/38] Update docs --- docs/community/code.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/community/code.md b/docs/community/code.md index 7f4b1e105..2736a07ba 100644 --- a/docs/community/code.md +++ b/docs/community/code.md @@ -156,7 +156,7 @@ We know it can sometimes be hard to code _and_ write user documentation. Our documentation is managed in `packages/mermaid/src/docs`. Details on how to edit is in the [Contributing Documentation](#contributing-documentation) section. -Create another issue specifically for the documentation.\ +Create another issue specifically for the documentation. You will need to help with the PR, but definitely ask for help if you feel stuck. When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work! From 23fc7c2c96ad9fe3157a23f36e458a0dd7394316 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Mon, 28 Aug 2023 12:11:12 +0300 Subject: [PATCH 07/38] Update packages/parser/src/language/pie/pieValueConverter.ts Co-authored-by: Sidharth Vinod <sidharthv96@gmail.com> --- packages/parser/src/language/pie/pieValueConverter.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/parser/src/language/pie/pieValueConverter.ts b/packages/parser/src/language/pie/pieValueConverter.ts index aa322cadd..df1e0e236 100644 --- a/packages/parser/src/language/pie/pieValueConverter.ts +++ b/packages/parser/src/language/pie/pieValueConverter.ts @@ -20,9 +20,8 @@ export class PieValueConverter extends DefaultValueConverter { if (value === undefined) { return super.runConverter(rule, input, cstNode); - } else { - return value; - } + } + return value; } /** From 5469a7eb71bda6cb66a1dea6624c5483fbf31f6f Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Mon, 28 Aug 2023 12:11:21 +0300 Subject: [PATCH 08/38] Update packages/mermaid/src/diagrams/pie/pieParser.ts Co-authored-by: Sidharth Vinod <sidharthv96@gmail.com> --- packages/mermaid/src/diagrams/pie/pieParser.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieParser.ts b/packages/mermaid/src/diagrams/pie/pieParser.ts index 5832e3a15..ac978a5a9 100644 --- a/packages/mermaid/src/diagrams/pie/pieParser.ts +++ b/packages/mermaid/src/diagrams/pie/pieParser.ts @@ -11,8 +11,7 @@ function populateDb(ast: Pie, db: PieDB) { populateCommonDb(ast, db); db.setShowData(ast.showData); ast.sections.map((section: PieSection) => { - const { label, value } = section; - db.addSection({ label, value }); + db.addSection(section); }); } From 795baedbb1329fd77c03cb91f1e043f180a9f0c2 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Mon, 28 Aug 2023 12:14:49 +0300 Subject: [PATCH 09/38] chore: run `pnpm lint:fix` --- packages/parser/src/language/pie/pieValueConverter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/parser/src/language/pie/pieValueConverter.ts b/packages/parser/src/language/pie/pieValueConverter.ts index df1e0e236..6e31709af 100644 --- a/packages/parser/src/language/pie/pieValueConverter.ts +++ b/packages/parser/src/language/pie/pieValueConverter.ts @@ -20,7 +20,7 @@ export class PieValueConverter extends DefaultValueConverter { if (value === undefined) { return super.runConverter(rule, input, cstNode); - } + } return value; } From 24d43849a06de963359210a0509ac2b3ec367f05 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Thu, 7 Sep 2023 00:00:38 +0300 Subject: [PATCH 10/38] chore: apply review suggestions * pref: optimize `common` rules and matchers * chore: rename diagrams services to short form * chore: sort imports --- .../parser/src/language/common/common.langium | 13 ++- .../src/language/common/commonMatcher.ts | 14 ---- .../language/common/commonValueConverters.ts | 74 ----------------- packages/parser/src/language/common/index.ts | 5 +- .../common/{commonLexer.ts => lexer.ts} | 0 .../parser/src/language/common/matcher.ts | 14 ++++ .../tokenBuilder.ts} | 14 ++-- .../src/language/common/valueConverter.ts | 82 +++++++++++++++++++ packages/parser/src/language/info/index.ts | 2 +- .../info/{infoModule.ts => module.ts} | 10 +-- .../parser/src/language/info/tokenBuilder.ts | 7 ++ packages/parser/src/language/pie/index.ts | 2 +- .../language/pie/{pieModule.ts => module.ts} | 10 +-- packages/parser/src/language/pie/pie.langium | 3 +- .../src/language/pie/pieTokenBuilder.ts | 23 ------ .../src/language/pie/pieValueConverter.ts | 49 ----------- .../parser/src/language/pie/tokenBuilder.ts | 7 ++ .../parser/src/language/pie/valueConverter.ts | 17 ++++ packages/parser/src/parse.ts | 1 + packages/parser/tests/info.test.ts | 2 +- packages/parser/tests/pie.test.ts | 2 +- packages/parser/tests/test-util.ts | 2 +- 22 files changed, 165 insertions(+), 188 deletions(-) delete mode 100644 packages/parser/src/language/common/commonMatcher.ts delete mode 100644 packages/parser/src/language/common/commonValueConverters.ts rename packages/parser/src/language/common/{commonLexer.ts => lexer.ts} (100%) create mode 100644 packages/parser/src/language/common/matcher.ts rename packages/parser/src/language/{info/infoTokenBuilder.ts => common/tokenBuilder.ts} (71%) create mode 100644 packages/parser/src/language/common/valueConverter.ts rename packages/parser/src/language/info/{infoModule.ts => module.ts} (86%) create mode 100644 packages/parser/src/language/info/tokenBuilder.ts rename packages/parser/src/language/pie/{pieModule.ts => module.ts} (85%) delete mode 100644 packages/parser/src/language/pie/pieTokenBuilder.ts delete mode 100644 packages/parser/src/language/pie/pieValueConverter.ts create mode 100644 packages/parser/src/language/pie/tokenBuilder.ts create mode 100644 packages/parser/src/language/pie/valueConverter.ts diff --git a/packages/parser/src/language/common/common.langium b/packages/parser/src/language/common/common.langium index 6a2af29e4..f1a695e49 100644 --- a/packages/parser/src/language/common/common.langium +++ b/packages/parser/src/language/common/common.langium @@ -1,14 +1,19 @@ +interface Common { + accDescr?: string; + accTitle?: string; + title?: string; +} + fragment TitleAndAccessibilities: ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) NEWLINE+)+ ; terminal NEWLINE: /\r?\n/; -terminal ACC_DESCR: /accDescr(?:[\t ]*:[\t ]*[^\n\r]*?(?=%%)|\s*{[^}]*})|accDescr(?:[\t ]*:[\t ]*[^\n\r]*|\s*{[^}]*})/; -terminal ACC_TITLE: /accTitle[\t ]*:[\t ]*[^\n\r]*?(?=%%)|accTitle[\t ]*:[\t ]*[^\n\r]*/; -terminal TITLE: /title(?:[\t ]+[^\n\r]*?|)(?=%%)|title(?:[\t ]+[^\n\r]*|)/; +terminal ACC_DESCR: /accDescr([\t ]*:[^\n\r]*(?=%%)|\s*{[^}]*})|accDescr([\t ]*:[^\n\r]*|\s*{[^}]*})/; +terminal ACC_TITLE: /accTitle[\t ]*:[^\n\r]*(?=%%)|accTitle[\t ]*:[^\n\r]*/; +terminal TITLE: /title([\t ][^\n\r]*|)(?=%%)|title([\t ][^\n\r]*|)/; hidden terminal WHITESPACE: /[\t ]+/; -// TODO: add YAML_COMMENT hidden rule without interfere actual grammar hidden terminal YAML: /---[\t ]*\r?\n[\S\s]*?---[\t ]*(?!.)/; hidden terminal DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%\s*/; hidden terminal SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/; diff --git a/packages/parser/src/language/common/commonMatcher.ts b/packages/parser/src/language/common/commonMatcher.ts deleted file mode 100644 index 36c9cbe92..000000000 --- a/packages/parser/src/language/common/commonMatcher.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Matches single and multiline accessible description - */ -export const accessibilityDescrRegex = /accDescr(?:[\t ]*:[\t ]*([^\n\r]*)|\s*{([^}]*)})/; - -/** - * Matches single line accessible title - */ -export const accessibilityTitleRegex = /accTitle[\t ]*:[\t ]*([^\n\r]*)/; - -/** - * Matches a single line title - */ -export const titleRegex = /title([\t ]+([^\n\r]*)|)/; diff --git a/packages/parser/src/language/common/commonValueConverters.ts b/packages/parser/src/language/common/commonValueConverters.ts deleted file mode 100644 index 228746c8a..000000000 --- a/packages/parser/src/language/common/commonValueConverters.ts +++ /dev/null @@ -1,74 +0,0 @@ -import type { CstNode, GrammarAST, ValueType } from 'langium'; -import { DefaultValueConverter } from 'langium'; - -import { accessibilityDescrRegex, accessibilityTitleRegex, titleRegex } from './commonMatcher.js'; - -export class CommonValueConverter extends DefaultValueConverter { - protected override runConverter( - rule: GrammarAST.AbstractRule, - input: string, - cstNode: CstNode - ): ValueType { - const value: ValueType | undefined = CommonValueConverter.customRunConverter( - rule, - input, - cstNode - ); - if (value === undefined) { - return super.runConverter(rule, input, cstNode); - } else { - return value; - } - } - - /** - * A method contains convert logic to be used by class itself or `MermaidValueConverter`. - * - * @param rule - Parsed rule. - * @param input - Matched string. - * @param _cstNode - Node in the Concrete Syntax Tree (CST). - * @returns converted the value if it's common rule or `undefined` if it's not. - */ - public static customRunConverter( - rule: GrammarAST.AbstractRule, - input: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _cstNode: CstNode - ): ValueType | undefined { - let regex: RegExp | undefined; - switch (rule.name) { - case 'ACC_DESCR': { - regex = new RegExp(accessibilityDescrRegex.source); - break; - } - case 'ACC_TITLE': { - regex = new RegExp(accessibilityTitleRegex.source); - break; - } - case 'TITLE': { - regex = new RegExp(titleRegex.source); - break; - } - } - if (regex === undefined) { - return undefined; - } - const match = regex.exec(input); - if (match === null) { - return undefined; - } - // single line title, accTitle, accDescr - if (match[1] !== undefined) { - return match[1].trim().replaceAll(/[\t ]{2,}/gm, ' '); - } - // multi line accDescr - if (match[2] !== undefined) { - return match[2] - .replaceAll(/^\s*/gm, '') - .replaceAll(/\s+$/gm, '') - .replaceAll(/[\t ]{2,}/gm, ' ') - .replaceAll(/[\n\r]{2,}/gm, '\n'); - } - return undefined; - } -} diff --git a/packages/parser/src/language/common/index.ts b/packages/parser/src/language/common/index.ts index 554e7902c..2ab5ebcd4 100644 --- a/packages/parser/src/language/common/index.ts +++ b/packages/parser/src/language/common/index.ts @@ -1,2 +1,3 @@ -export * from './commonLexer.js'; -export * from './commonValueConverters.js'; +export * from './lexer.js'; +export * from './tokenBuilder.js'; +export { MermaidValueConverter } from './valueConverter.js'; diff --git a/packages/parser/src/language/common/commonLexer.ts b/packages/parser/src/language/common/lexer.ts similarity index 100% rename from packages/parser/src/language/common/commonLexer.ts rename to packages/parser/src/language/common/lexer.ts diff --git a/packages/parser/src/language/common/matcher.ts b/packages/parser/src/language/common/matcher.ts new file mode 100644 index 000000000..cc9d607e1 --- /dev/null +++ b/packages/parser/src/language/common/matcher.ts @@ -0,0 +1,14 @@ +/** + * Matches single and multi line accessible description + */ +export const accessibilityDescrRegex = /accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/; + +/** + * Matches single line accessible title + */ +export const accessibilityTitleRegex = /accTitle[\t ]*:([^\n\r]*)/; + +/** + * Matches a single line title + */ +export const titleRegex = /title([\t ][^\n\r]*|)/; diff --git a/packages/parser/src/language/info/infoTokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts similarity index 71% rename from packages/parser/src/language/info/infoTokenBuilder.ts rename to packages/parser/src/language/common/tokenBuilder.ts index b71fa30ad..ef3d7e927 100644 --- a/packages/parser/src/language/info/infoTokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -3,7 +3,14 @@ import { DefaultTokenBuilder } from 'langium'; import type { TokenType } from '../chevrotainWrapper.js'; -export class InfoTokenBuilder extends DefaultTokenBuilder { +export class CommonTokenBuilder extends DefaultTokenBuilder { + private keywords: Set<string>; + + public constructor(keywords: string[]) { + super(); + this.keywords = new Set<string>(keywords); + } + protected override buildKeywordTokens( rules: Stream<GrammarAST.AbstractRule>, terminalTokens: TokenType[], @@ -12,10 +19,7 @@ export class InfoTokenBuilder extends DefaultTokenBuilder { const tokenTypes: TokenType[] = super.buildKeywordTokens(rules, terminalTokens, options); // to restrict users, they mustn't have any non-whitespace characters after the keyword. tokenTypes.forEach((tokenType: TokenType): void => { - if ( - (tokenType.name === 'info' || tokenType.name === 'showInfo') && - tokenType.PATTERN !== undefined - ) { + if (this.keywords.has(tokenType.name) && tokenType.PATTERN !== undefined) { 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 new file mode 100644 index 000000000..bc31ba714 --- /dev/null +++ b/packages/parser/src/language/common/valueConverter.ts @@ -0,0 +1,82 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import type { CstNode, GrammarAST, ValueType } from 'langium'; +import { DefaultValueConverter } from 'langium'; + +import { accessibilityDescrRegex, accessibilityTitleRegex, titleRegex } from './matcher.js'; + +const rulesRegexes: Record<string, RegExp> = { + ACC_DESCR: accessibilityDescrRegex, + ACC_TITLE: accessibilityTitleRegex, + TITLE: titleRegex, +}; + +export abstract class MermaidValueConverter extends DefaultValueConverter { + /** + * A method contains convert logic to be used by class. + * + * @param rule - Parsed rule. + * @param input - Matched string. + * @param cstNode - Node in the Concrete Syntax Tree (CST). + * @returns converted the value if it's available or `undefined` if it's not. + */ + protected abstract runCustomConverter( + rule: GrammarAST.AbstractRule, + input: string, + cstNode: CstNode + ): ValueType | undefined; + + protected override runConverter( + rule: GrammarAST.AbstractRule, + input: string, + cstNode: CstNode + ): ValueType { + let value: ValueType | undefined = this.runCommonConverter(rule, input, cstNode); + + if (value === undefined) { + value = this.runCustomConverter(rule, input, cstNode); + } + if (value === undefined) { + return super.runConverter(rule, input, cstNode); + } + + return value; + } + + private runCommonConverter( + rule: GrammarAST.AbstractRule, + input: string, + _cstNode: CstNode + ): ValueType | undefined { + const regex: RegExp | undefined = rulesRegexes[rule.name]; + if (regex === undefined) { + return undefined; + } + const match = regex.exec(input); + if (match === null) { + return undefined; + } + // single line title, accTitle, accDescr + if (match[1] !== undefined) { + return match[1].trim().replace(/[\t ]{2,}/gm, ' '); + } + // multi line accDescr + if (match[2] !== undefined) { + return match[2] + .replace(/^\s*/gm, '') + .replace(/\s+$/gm, '') + .replace(/[\t ]{2,}/gm, ' ') + .replace(/[\n\r]{2,}/gm, '\n'); + } + return undefined; + } +} + +export class CommonValueConverter extends MermaidValueConverter { + protected runCustomConverter( + _rule: GrammarAST.AbstractRule, + _input: string, + _cstNode: CstNode + ): ValueType | undefined { + return undefined; + } +} diff --git a/packages/parser/src/language/info/index.ts b/packages/parser/src/language/info/index.ts index 197952c4d..fd3c604b0 100644 --- a/packages/parser/src/language/info/index.ts +++ b/packages/parser/src/language/info/index.ts @@ -1 +1 @@ -export * from './infoModule.js'; +export * from './module.js'; diff --git a/packages/parser/src/language/info/infoModule.ts b/packages/parser/src/language/info/module.ts similarity index 86% rename from packages/parser/src/language/info/infoModule.ts rename to packages/parser/src/language/info/module.ts index 96dfd5a84..5d6b74e10 100644 --- a/packages/parser/src/language/info/infoModule.ts +++ b/packages/parser/src/language/info/module.ts @@ -7,10 +7,10 @@ import type { } from 'langium'; import { EmptyFileSystem, createDefaultModule, createDefaultSharedModule, inject } from 'langium'; -import { MermaidGeneratedSharedModule, InfoGeneratedModule } from '../generated/module.js'; -import { CommonLexer } from '../common/commonLexer.js'; -import { CommonValueConverter } from '../common/commonValueConverters.js'; -import { InfoTokenBuilder } from './infoTokenBuilder.js'; +import { CommonLexer } from '../common/lexer.js'; +import { CommonValueConverter } from '../common/valueConverter.js'; +import { InfoGeneratedModule, MermaidGeneratedSharedModule } from '../generated/module.js'; +import { InfoTokenBuilder } from './tokenBuilder.js'; /** * Declaration of `Info` services. @@ -34,7 +34,7 @@ export type InfoServices = LangiumServices & InfoAddedServices; */ export const InfoModule: Module<InfoServices, PartialLangiumServices & InfoAddedServices> = { parser: { - Lexer: (services) => new CommonLexer(services), + Lexer: (services: InfoServices) => new CommonLexer(services), TokenBuilder: () => new InfoTokenBuilder(), ValueConverter: () => new CommonValueConverter(), }, diff --git a/packages/parser/src/language/info/tokenBuilder.ts b/packages/parser/src/language/info/tokenBuilder.ts new file mode 100644 index 000000000..009d202ad --- /dev/null +++ b/packages/parser/src/language/info/tokenBuilder.ts @@ -0,0 +1,7 @@ +import { CommonTokenBuilder } from '../common/index.js'; + +export class InfoTokenBuilder extends CommonTokenBuilder { + public constructor() { + super(['info', 'showInfo']); + } +} diff --git a/packages/parser/src/language/pie/index.ts b/packages/parser/src/language/pie/index.ts index aa111ca70..fd3c604b0 100644 --- a/packages/parser/src/language/pie/index.ts +++ b/packages/parser/src/language/pie/index.ts @@ -1 +1 @@ -export * from './pieModule.js'; +export * from './module.js'; diff --git a/packages/parser/src/language/pie/pieModule.ts b/packages/parser/src/language/pie/module.ts similarity index 85% rename from packages/parser/src/language/pie/pieModule.ts rename to packages/parser/src/language/pie/module.ts index ba6f550cc..f22a1e548 100644 --- a/packages/parser/src/language/pie/pieModule.ts +++ b/packages/parser/src/language/pie/module.ts @@ -7,10 +7,10 @@ import type { } from 'langium'; import { EmptyFileSystem, createDefaultModule, createDefaultSharedModule, inject } from 'langium'; +import { CommonLexer } from '../common/lexer.js'; import { MermaidGeneratedSharedModule, PieGeneratedModule } from '../generated/module.js'; -import { CommonLexer } from '../common/commonLexer.js'; -import { PieTokenBuilder } from './pieTokenBuilder.js'; -import { PieValueConverter } from './pieValueConverter.js'; +import { PieTokenBuilder } from './tokenBuilder.js'; +import { PieValueConverter } from './valueConverter.js'; /** * Declaration of `Pie` services. @@ -32,9 +32,9 @@ export type PieServices = LangiumServices & PieAddedServices; * Dependency injection module that overrides Langium default services and * contributes the declared `Pie` services. */ -const PieModule: Module<PieServices, PartialLangiumServices & PieAddedServices> = { +export const PieModule: Module<PieServices, PartialLangiumServices & PieAddedServices> = { parser: { - Lexer: (services) => new CommonLexer(services), + Lexer: (services: PieServices) => new CommonLexer(services), TokenBuilder: () => new PieTokenBuilder(), ValueConverter: () => new PieValueConverter(), }, diff --git a/packages/parser/src/language/pie/pie.langium b/packages/parser/src/language/pie/pie.langium index 7c66b702b..a71e7f852 100644 --- a/packages/parser/src/language/pie/pie.langium +++ b/packages/parser/src/language/pie/pie.langium @@ -12,8 +12,7 @@ entry Pie: ; PieSection: - label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE - NEWLINE+ + label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE NEWLINE+ ; terminal PIE_SECTION_LABEL: /"[^"]+"/; diff --git a/packages/parser/src/language/pie/pieTokenBuilder.ts b/packages/parser/src/language/pie/pieTokenBuilder.ts deleted file mode 100644 index 2004ed50b..000000000 --- a/packages/parser/src/language/pie/pieTokenBuilder.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium'; -import { DefaultTokenBuilder } from 'langium'; - -import type { TokenType } from '../chevrotainWrapper.js'; - -export class PieTokenBuilder extends DefaultTokenBuilder { - protected override buildKeywordTokens( - rules: Stream<GrammarAST.AbstractRule>, - terminalTokens: TokenType[], - options?: TokenBuilderOptions - ): TokenType[] { - const tokenTypes: TokenType[] = super.buildKeywordTokens(rules, terminalTokens, options); - tokenTypes.forEach((tokenType: TokenType): void => { - if ( - (tokenType.name === 'pie' || tokenType.name === 'showData') && - tokenType.PATTERN !== undefined - ) { - tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + '(?!\\S)'); - } - }); - return tokenTypes; - } -} diff --git a/packages/parser/src/language/pie/pieValueConverter.ts b/packages/parser/src/language/pie/pieValueConverter.ts deleted file mode 100644 index 6e31709af..000000000 --- a/packages/parser/src/language/pie/pieValueConverter.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { CstNode, GrammarAST, ValueType } from 'langium'; -import { DefaultValueConverter } from 'langium'; - -import { CommonValueConverter } from '../common/commonValueConverters.js'; - -export class PieValueConverter extends DefaultValueConverter { - protected override runConverter( - rule: GrammarAST.AbstractRule, - input: string, - cstNode: CstNode - ): ValueType { - let value: ValueType | undefined = CommonValueConverter.customRunConverter( - rule, - input, - cstNode - ); - if (value === undefined) { - value = PieValueConverter.customRunConverter(rule, input, cstNode); - } - - if (value === undefined) { - return super.runConverter(rule, input, cstNode); - } - return value; - } - - /** - * A method contains convert logic to be used by class itself or `MermaidValueConverter`. - * - * @param rule - Parsed rule. - * @param input - Matched string. - * @param _cstNode - Node in the Concrete Syntax Tree (CST). - * @returns converted the value if it's pie rule or `null` if it's not. - */ - public static customRunConverter( - rule: GrammarAST.AbstractRule, - input: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _cstNode: CstNode - ): ValueType | undefined { - if (rule.name === 'PIE_SECTION_LABEL') { - return input - .replace(/"/g, '') - .trim() - .replaceAll(/[\t ]{2,}/gm, ' '); - } - return undefined; - } -} diff --git a/packages/parser/src/language/pie/tokenBuilder.ts b/packages/parser/src/language/pie/tokenBuilder.ts new file mode 100644 index 000000000..34113a988 --- /dev/null +++ b/packages/parser/src/language/pie/tokenBuilder.ts @@ -0,0 +1,7 @@ +import { CommonTokenBuilder } from '../common/index.js'; + +export class PieTokenBuilder extends CommonTokenBuilder { + public constructor() { + super(['pie', 'showData']); + } +} diff --git a/packages/parser/src/language/pie/valueConverter.ts b/packages/parser/src/language/pie/valueConverter.ts new file mode 100644 index 000000000..10b932f98 --- /dev/null +++ b/packages/parser/src/language/pie/valueConverter.ts @@ -0,0 +1,17 @@ +import type { CstNode, GrammarAST, ValueType } from 'langium'; + +import { MermaidValueConverter } from '../common/valueConverter.js'; + +export class PieValueConverter extends MermaidValueConverter { + 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') { + return undefined; + } + return input.replace(/"/g, '').trim(); + } +} diff --git a/packages/parser/src/parse.ts b/packages/parser/src/parse.ts index 6eadb69ab..7f743a7f3 100644 --- a/packages/parser/src/parse.ts +++ b/packages/parser/src/parse.ts @@ -1,4 +1,5 @@ import type { LangiumParser, ParseResult } from 'langium'; + import type { Info, Pie } from './index.js'; import { createInfoServices, createPieServices } from './language/index.js'; diff --git a/packages/parser/tests/info.test.ts b/packages/parser/tests/info.test.ts index df86ae16c..f2d2093d5 100644 --- a/packages/parser/tests/info.test.ts +++ b/packages/parser/tests/info.test.ts @@ -1,5 +1,5 @@ -import { describe, expect, it } from 'vitest'; import type { LangiumParser, ParseResult } from 'langium'; +import { describe, expect, it } from 'vitest'; import type { InfoServices } from '../src/language/index.js'; import { Info, createInfoServices } from '../src/language/index.js'; diff --git a/packages/parser/tests/pie.test.ts b/packages/parser/tests/pie.test.ts index 27f73a627..4b6ba6aae 100644 --- a/packages/parser/tests/pie.test.ts +++ b/packages/parser/tests/pie.test.ts @@ -1,5 +1,5 @@ -import { describe, expect, it } from 'vitest'; import type { LangiumParser, ParseResult } from 'langium'; +import { describe, expect, it } from 'vitest'; import type { PieServices } from '../src/language/index.js'; import { Pie, createPieServices } from '../src/language/index.js'; diff --git a/packages/parser/tests/test-util.ts b/packages/parser/tests/test-util.ts index 514e29cde..33d319112 100644 --- a/packages/parser/tests/test-util.ts +++ b/packages/parser/tests/test-util.ts @@ -1,5 +1,5 @@ -import { expect, vi } from 'vitest'; import type { ParseResult } from 'langium'; +import { expect, vi } from 'vitest'; const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => undefined); From 018440354f30eddee05f4a67219b15926a41fc0d Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:06:56 +0300 Subject: [PATCH 11/38] build(deps): remove `langium-cli` from `packages/parser` to use the one in root --- .build/langium-cli.d.ts | 9 --------- packages/parser/package.json | 3 --- pnpm-lock.yaml | 8 ++------ 3 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 .build/langium-cli.d.ts diff --git a/.build/langium-cli.d.ts b/.build/langium-cli.d.ts deleted file mode 100644 index a1cfe25f8..000000000 --- a/.build/langium-cli.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare module 'langium-cli' { - export interface GenerateOptions { - file?: string; - mode?: 'development' | 'production'; - watch?: boolean; - } - - export function generate(options: GenerateOptions): Promise<boolean>; -} diff --git a/packages/parser/package.json b/packages/parser/package.json index 8528fcf0e..181ac12ea 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -36,9 +36,6 @@ "dependencies": { "langium": "2.0.1" }, - "devDependencies": { - "langium-cli": "2.0.1" - }, "files": [ "dist/" ], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9e542291..ece77d4d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -476,7 +476,7 @@ importers: version: 0.16.0(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@7.0.0) vitepress: specifier: 1.0.0-rc.14 - version: 1.0.0-rc.14(@algolia/client-search@4.19.1)(@types/node@18.16.0)(search-insights@2.6.0) + version: 1.0.0-rc.14(@algolia/client-search@4.19.1)(@types/node@18.16.0)(search-insights@2.7.0) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -486,10 +486,6 @@ importers: langium: specifier: 2.0.1 version: 2.0.1 - devDependencies: - langium-cli: - specifier: 2.0.1 - version: 2.0.1 tests/webpack: dependencies: @@ -15775,7 +15771,7 @@ packages: - universal-cookie dev: true - /vitepress@1.0.0-rc.14(@algolia/client-search@4.19.1)(@types/node@18.16.0)(search-insights@2.6.0): + /vitepress@1.0.0-rc.14(@algolia/client-search@4.19.1)(@types/node@18.16.0)(search-insights@2.7.0): resolution: {integrity: sha512-yChIeXOAcNvVnSVjhziH1vte0uhKb00PuZf7KdIMfx3ixTMAz73Nn+6gREvCv0SdH+anteGUKz5eljv0ygcgGQ==} hasBin: true peerDependencies: From 6a4ad8af069c4d0dca77b12dd6eff160f10476a2 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:09:36 +0300 Subject: [PATCH 12/38] build(deps): update `langium` and `langium-cli` to `v2.1.0` --- package.json | 2 +- packages/parser/package.json | 2 +- pnpm-lock.yaml | 71 +++++++++++++++++++++--------------- 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index f551fc5d8..bec3aca3e 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "jison": "^0.4.18", "js-yaml": "^4.1.0", "jsdom": "^22.0.0", - "langium-cli": "2.0.1", + "langium-cli": "2.1.0", "lint-staged": "^13.2.1", "nyc": "^15.1.0", "path-browserify": "^1.0.1", diff --git a/packages/parser/package.json b/packages/parser/package.json index 181ac12ea..ce66a9a40 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -34,7 +34,7 @@ "ast" ], "dependencies": { - "langium": "2.0.1" + "langium": "2.1.0" }, "files": [ "dist/" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ece77d4d3..cc8c5879d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,8 +150,8 @@ importers: specifier: ^22.0.0 version: 22.0.0 langium-cli: - specifier: 2.0.1 - version: 2.0.1 + specifier: 2.1.0 + version: 2.1.0 lint-staged: specifier: ^13.2.1 version: 13.2.1 @@ -484,8 +484,8 @@ importers: packages/parser: dependencies: langium: - specifier: 2.0.1 - version: 2.0.1 + specifier: 2.1.0 + version: 2.1.0 tests/webpack: dependencies: @@ -6974,6 +6974,11 @@ packages: engines: {node: '>=14'} dev: true + /commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + dev: true + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -11438,36 +11443,36 @@ packages: engines: {node: '>=12'} dev: true - /langium-cli@2.0.1: - resolution: {integrity: sha512-dPPaHimIoCgELED4tvRGdU3i26tjWuyVwexXgPtTtTzp1MBdGCBLppLADXHkL8yFVdWM/PWlCq06YyqAT4eV3A==} + /langium-cli@2.1.0: + resolution: {integrity: sha512-Gbj4CvfAc1gP/6ihxikd2Je95j1FWjXZu8bbji2/t2vQ6kEP+vs9Fx7kSGOM0AbU/hjZfy6E35bJPOdwsiyqTA==} engines: {node: '>=16.0.0'} hasBin: true dependencies: chalk: 5.3.0 - commander: 10.0.1 + commander: 11.0.0 fs-extra: 11.1.1 jsonschema: 1.4.1 - langium: 2.0.1 - langium-railroad: 2.0.0 + langium: 2.1.0 + langium-railroad: 2.1.0 lodash: 4.17.21 dev: true - /langium-railroad@2.0.0: - resolution: {integrity: sha512-g6y8vPh4i7ll/Q4D9aFrjk4UgtkuzkE6WGfiTHJHTFlDwHoiKrPSIIBZO4wjEb3XUF9P5vIt7aRjerTy7Jgm0g==} + /langium-railroad@2.1.0: + resolution: {integrity: sha512-2IeAIUSTQzbDjNnJA+0ql8tyN/mhCSN4FS50Mo9LOtLj523qUEBwHflDmCiOGZzW9iZdni6NXJgh8nLqjhTlDw==} dependencies: - langium: 2.0.1 + langium: 2.1.0 railroad-diagrams: 1.0.0 dev: true - /langium@2.0.1: - resolution: {integrity: sha512-EGi8NNN/5zxcUL//sA4kqpV9YVOZfDngwkkSxsZ/zfx4Wjdg9von71rWIMCV6kW1M40kPOKF6e8oMTyWeX92fg==} + /langium@2.1.0: + resolution: {integrity: sha512-VDJNyJHfFkamwX+IGp2cLiVIsdOqeVwEZ7b95DWs1jcJmf5e47NGLsfb4aLb0mVrCTU4mvfghfoiTkOMVSdpqA==} engines: {node: '>=16.0.0'} dependencies: chevrotain: 11.0.3 chevrotain-allstar: 0.3.0(chevrotain@11.0.3) - vscode-languageserver: 8.0.2 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 /layout-base@1.0.2: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} @@ -15895,31 +15900,35 @@ packages: vscode-uri: 3.0.7 dev: true - /vscode-jsonrpc@8.0.2: - resolution: {integrity: sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==} + /vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} engines: {node: '>=14.0.0'} - /vscode-languageserver-protocol@3.17.2: - resolution: {integrity: sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==} + /vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} dependencies: - vscode-jsonrpc: 8.0.2 - vscode-languageserver-types: 3.17.2 + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + /vscode-languageserver-textdocument@1.0.11: + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} /vscode-languageserver-textdocument@1.0.8: resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} - - /vscode-languageserver-types@3.17.2: - resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==} + dev: true /vscode-languageserver-types@3.17.3: resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} dev: true - /vscode-languageserver@8.0.2: - resolution: {integrity: sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==} + /vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + /vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} hasBin: true dependencies: - vscode-languageserver-protocol: 3.17.2 + vscode-languageserver-protocol: 3.17.5 /vscode-nls@5.2.0: resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} @@ -15935,6 +15944,10 @@ packages: /vscode-uri@3.0.7: resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} + dev: true + + /vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} /vue-demi@0.14.5(vue@3.3.0): resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} From 55d7e9ec614d342f6d5d1f85d8509d2e8c1d5859 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:12:09 +0300 Subject: [PATCH 13/38] pref: remove `CommonLexer` and use `EOF` --- packages/parser/src/language/common/common.langium | 10 +++++++--- packages/parser/src/language/common/index.ts | 1 - packages/parser/src/language/common/lexer.ts | 8 -------- packages/parser/src/language/info/module.ts | 3 --- packages/parser/src/language/pie/module.ts | 3 --- packages/parser/src/language/pie/pie.langium | 2 +- 6 files changed, 8 insertions(+), 19 deletions(-) delete mode 100644 packages/parser/src/language/common/lexer.ts diff --git a/packages/parser/src/language/common/common.langium b/packages/parser/src/language/common/common.langium index f1a695e49..baf933e0f 100644 --- a/packages/parser/src/language/common/common.langium +++ b/packages/parser/src/language/common/common.langium @@ -5,7 +5,11 @@ interface Common { } fragment TitleAndAccessibilities: - ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) NEWLINE+)+ + ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) EOL)+ +; + +fragment EOL returns string: + NEWLINE+ | EOF ; terminal NEWLINE: /\r?\n/; @@ -14,6 +18,6 @@ terminal ACC_TITLE: /accTitle[\t ]*:[^\n\r]*(?=%%)|accTitle[\t ]*:[^\n\r]*/; terminal TITLE: /title([\t ][^\n\r]*|)(?=%%)|title([\t ][^\n\r]*|)/; hidden terminal WHITESPACE: /[\t ]+/; -hidden terminal YAML: /---[\t ]*\r?\n[\S\s]*?---[\t ]*(?!.)/; -hidden terminal DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%\s*/; +hidden terminal YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/; +hidden terminal DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/; hidden terminal SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/; diff --git a/packages/parser/src/language/common/index.ts b/packages/parser/src/language/common/index.ts index 2ab5ebcd4..e06a3a8eb 100644 --- a/packages/parser/src/language/common/index.ts +++ b/packages/parser/src/language/common/index.ts @@ -1,3 +1,2 @@ -export * from './lexer.js'; export * from './tokenBuilder.js'; export { MermaidValueConverter } from './valueConverter.js'; diff --git a/packages/parser/src/language/common/lexer.ts b/packages/parser/src/language/common/lexer.ts deleted file mode 100644 index e4f1272b2..000000000 --- a/packages/parser/src/language/common/lexer.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { LexerResult } from 'langium'; -import { DefaultLexer } from 'langium'; - -export class CommonLexer extends DefaultLexer { - public override tokenize(text: string): LexerResult { - return super.tokenize(text + '\n'); - } -} diff --git a/packages/parser/src/language/info/module.ts b/packages/parser/src/language/info/module.ts index 5d6b74e10..c25deb377 100644 --- a/packages/parser/src/language/info/module.ts +++ b/packages/parser/src/language/info/module.ts @@ -7,7 +7,6 @@ import type { } from 'langium'; import { EmptyFileSystem, createDefaultModule, createDefaultSharedModule, inject } from 'langium'; -import { CommonLexer } from '../common/lexer.js'; import { CommonValueConverter } from '../common/valueConverter.js'; import { InfoGeneratedModule, MermaidGeneratedSharedModule } from '../generated/module.js'; import { InfoTokenBuilder } from './tokenBuilder.js'; @@ -17,7 +16,6 @@ import { InfoTokenBuilder } from './tokenBuilder.js'; */ type InfoAddedServices = { parser: { - Lexer: CommonLexer; TokenBuilder: InfoTokenBuilder; ValueConverter: CommonValueConverter; }; @@ -34,7 +32,6 @@ export type InfoServices = LangiumServices & InfoAddedServices; */ export const InfoModule: Module<InfoServices, PartialLangiumServices & InfoAddedServices> = { parser: { - Lexer: (services: InfoServices) => new CommonLexer(services), TokenBuilder: () => new InfoTokenBuilder(), ValueConverter: () => new CommonValueConverter(), }, diff --git a/packages/parser/src/language/pie/module.ts b/packages/parser/src/language/pie/module.ts index f22a1e548..8777abc86 100644 --- a/packages/parser/src/language/pie/module.ts +++ b/packages/parser/src/language/pie/module.ts @@ -7,7 +7,6 @@ import type { } from 'langium'; import { EmptyFileSystem, createDefaultModule, createDefaultSharedModule, inject } from 'langium'; -import { CommonLexer } from '../common/lexer.js'; import { MermaidGeneratedSharedModule, PieGeneratedModule } from '../generated/module.js'; import { PieTokenBuilder } from './tokenBuilder.js'; import { PieValueConverter } from './valueConverter.js'; @@ -17,7 +16,6 @@ import { PieValueConverter } from './valueConverter.js'; */ type PieAddedServices = { parser: { - Lexer: CommonLexer; TokenBuilder: PieTokenBuilder; ValueConverter: PieValueConverter; }; @@ -34,7 +32,6 @@ export type PieServices = LangiumServices & PieAddedServices; */ export const PieModule: Module<PieServices, PartialLangiumServices & PieAddedServices> = { parser: { - Lexer: (services: PieServices) => new CommonLexer(services), TokenBuilder: () => new PieTokenBuilder(), ValueConverter: () => new PieValueConverter(), }, diff --git a/packages/parser/src/language/pie/pie.langium b/packages/parser/src/language/pie/pie.langium index a71e7f852..c1219722c 100644 --- a/packages/parser/src/language/pie/pie.langium +++ b/packages/parser/src/language/pie/pie.langium @@ -12,7 +12,7 @@ entry Pie: ; PieSection: - label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE NEWLINE+ + label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE EOF ; terminal PIE_SECTION_LABEL: /"[^"]+"/; From 7765afa7da5e78b7dd590682ed6c4d6aac503053 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:15:13 +0300 Subject: [PATCH 14/38] chore: allow comments to adjust keywords --- packages/parser/src/language/common/tokenBuilder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index 5a94d5d59..7e63efca3 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -20,7 +20,7 @@ export abstract class MermaidTokenBuilder 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) { - tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + '(?!\\S)'); + tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + '(?:(?=%%)|(?!\\S))'); } }); return tokenTypes; From fe2e46fe600c70b1f686bed66feada3ce82b359a Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:24:54 +0300 Subject: [PATCH 15/38] build(dev-deps): add `chevrotain` as a `devDependencies` --- packages/parser/package.json | 3 ++ .../parser/src/language/chevrotainWrapper.ts | 51 ------------------- .../src/language/common/tokenBuilder.ts | 2 +- pnpm-lock.yaml | 4 ++ 4 files changed, 8 insertions(+), 52 deletions(-) delete mode 100644 packages/parser/src/language/chevrotainWrapper.ts diff --git a/packages/parser/package.json b/packages/parser/package.json index ce66a9a40..6affa2ce6 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -41,5 +41,8 @@ ], "publishConfig": { "access": "public" + }, + "devDependencies": { + "chevrotain": "^11.0.3" } } diff --git a/packages/parser/src/language/chevrotainWrapper.ts b/packages/parser/src/language/chevrotainWrapper.ts deleted file mode 100644 index bde44a22e..000000000 --- a/packages/parser/src/language/chevrotainWrapper.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -type CustomPatternMatcherReturn = [string] & { payload?: any }; - -export type CustomPatternMatcherFunc = ( - text: string, - offset: number, - tokens: IToken[], - groups: { - [groupName: string]: IToken[]; - } -) => CustomPatternMatcherReturn | RegExpExecArray | null; - -interface ICustomPattern { - exec: CustomPatternMatcherFunc; -} - -type TokenPattern = RegExp | string | CustomPatternMatcherFunc | ICustomPattern; - -export interface IToken { - image: string; - startOffset: number; - startLine?: number; - startColumn?: number; - endOffset?: number; - endLine?: number; - endColumn?: number; - isInsertedInRecovery?: boolean; - tokenTypeIdx: number; - tokenType: TokenType; - payload?: any; -} - -export interface TokenType { - name: string; - GROUP?: string; - PATTERN?: TokenPattern; - LABEL?: string; - LONGER_ALT?: TokenType | TokenType[]; - POP_MODE?: boolean; - PUSH_MODE?: string; - LINE_BREAKS?: boolean; - CATEGORIES?: TokenType[]; - tokenTypeIdx?: number; - categoryMatches?: number[]; - categoryMatchesMap?: { - [tokType: number]: boolean; - }; - isParent?: boolean; - START_CHARS_HINT?: (string | number)[]; -} diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index 7e63efca3..c57cb0ec5 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -1,5 +1,5 @@ import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium'; -import type { TokenType } from '../chevrotainWrapper.js'; +import type { TokenType } from 'chevrotain'; import { DefaultTokenBuilder } from 'langium'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc8c5879d..79908ad61 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -486,6 +486,10 @@ importers: langium: specifier: 2.1.0 version: 2.1.0 + devDependencies: + chevrotain: + specifier: ^11.0.3 + version: 11.0.3 tests/webpack: dependencies: From 1cda37659e869929aa0c7a35a36d772886afca84 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:28:33 +0300 Subject: [PATCH 16/38] chore(parser): rearrange rules to make imported rules at the beginning --- .../parser/src/language/common/tokenBuilder.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index c57cb0ec5..f64063d56 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -1,5 +1,5 @@ import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium'; -import type { TokenType } from 'chevrotain'; +import type { TokenType, TokenVocabulary } from 'chevrotain'; import { DefaultTokenBuilder } from 'langium'; @@ -11,6 +11,14 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder { this.keywords = new Set<string>(keywords); } + public override buildTokens( + grammar: GrammarAST.Grammar, + options?: TokenBuilderOptions | undefined + ): TokenVocabulary { + this.rearrangeRules(grammar.rules); + return super.buildTokens(grammar, options); + } + protected override buildKeywordTokens( rules: Stream<GrammarAST.AbstractRule>, terminalTokens: TokenType[], @@ -25,4 +33,12 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder { }); return tokenTypes; } + + private rearrangeRules(rules: GrammarAST.AbstractRule[]): GrammarAST.AbstractRule[] { + const pivotIndex = rules.findIndex((rule) => rule.name === 'TitleAndAccessibilities'); + if (pivotIndex === -1) { + return rules; + } + return [...rules.slice(pivotIndex), ...rules.slice(0, pivotIndex)]; + } } From 922bb1452f9e0c63d0fa2323d849f150c3ea2461 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:35:01 +0300 Subject: [PATCH 17/38] test: update all parser test cases --- packages/parser/tests/info.test.ts | 37 ++--- packages/parser/tests/pie.test.ts | 211 ++++++++++------------------- packages/parser/tests/test-util.ts | 28 +++- 3 files changed, 113 insertions(+), 163 deletions(-) diff --git a/packages/parser/tests/info.test.ts b/packages/parser/tests/info.test.ts index f2d2093d5..09fc79c9a 100644 --- a/packages/parser/tests/info.test.ts +++ b/packages/parser/tests/info.test.ts @@ -1,26 +1,9 @@ -import type { LangiumParser, ParseResult } from 'langium'; import { describe, expect, it } from 'vitest'; -import type { InfoServices } from '../src/language/index.js'; -import { Info, createInfoServices } from '../src/language/index.js'; -import { noErrorsOrAlternatives } from './test-util.js'; - -const services: InfoServices = createInfoServices().Info; -const parser: LangiumParser = services.parser.LangiumParser; -function createInfoTestServices(): { - services: InfoServices; - parse: (input: string) => ParseResult<Info>; -} { - const parse = (input: string) => { - return parser.parse<Info>(input); - }; - - return { services, parse }; -} +import { Info } from '../src/language/index.js'; +import { expectNoErrorsOrAlternatives, infoParse as parse } from './test-util.js'; describe('info', () => { - const { parse } = createInfoTestServices(); - it.each([ `info`, ` @@ -32,26 +15,34 @@ describe('info', () => { `, ])('should handle empty info', (context: string) => { const result = parse(context); - noErrorsOrAlternatives(result); - + expectNoErrorsOrAlternatives(result); expect(result.value.$type).toBe(Info); }); it.each([ `info showInfo`, + `info showInfo + `, ` info showInfo`, `info + showInfo`, + `info showInfo `, ` info showInfo `, + ` + info + showInfo`, + ` + info showInfo + `, ])('should handle showInfo', (context: string) => { const result = parse(context); - noErrorsOrAlternatives(result); - + expectNoErrorsOrAlternatives(result); expect(result.value.$type).toBe(Info); }); }); diff --git a/packages/parser/tests/pie.test.ts b/packages/parser/tests/pie.test.ts index 4b6ba6aae..04f83c933 100644 --- a/packages/parser/tests/pie.test.ts +++ b/packages/parser/tests/pie.test.ts @@ -1,25 +1,9 @@ -import type { LangiumParser, ParseResult } from 'langium'; import { describe, expect, it } from 'vitest'; -import type { PieServices } from '../src/language/index.js'; -import { Pie, createPieServices } from '../src/language/index.js'; - -const services: PieServices = createPieServices().Pie; -const parser: LangiumParser = services.parser.LangiumParser; -export function createPieTestServices(): { - services: PieServices; - parse: (input: string) => ParseResult<Pie>; -} { - const parse = (input: string) => { - return parser.parse<Pie>(input); - }; - - return { services, parse }; -} +import { Pie } from '../src/language/index.js'; +import { expectNoErrorsOrAlternatives, pieParse as parse } from './test-util.js'; describe('pie', () => { - const { parse } = createPieTestServices(); - it.each([ `pie`, ` pie `, @@ -29,11 +13,8 @@ describe('pie', () => { `, ])('should handle regular pie', (context: string) => { const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); - - const value = result.value; - expect(value.$type).toBe(Pie); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); }); it.each([ @@ -45,12 +26,11 @@ describe('pie', () => { `, ])('should handle regular showData', (context: string) => { const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.showData).toBeTruthy(); + const { showData } = result.value; + expect(showData).toBeTruthy(); }); it.each([ @@ -62,12 +42,11 @@ describe('pie', () => { `, ])('should handle regular pie + title in same line', (context: string) => { const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.title).toBe('sample title'); + const { title } = result.value; + expect(title).toBe('sample title'); }); it.each([ @@ -83,12 +62,11 @@ describe('pie', () => { `, ])('should handle regular pie + title in different line', (context: string) => { const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.title).toBe('sample title'); + const { title } = result.value; + expect(title).toBe('sample title'); }); it.each([ @@ -97,13 +75,12 @@ describe('pie', () => { `, ])('should handle regular pie + showData + title', (context: string) => { const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.showData).toBeTruthy(); - expect(value.title).toBe('sample title'); + const { showData, title } = result.value; + expect(showData).toBeTruthy(); + expect(title).toBe('sample title'); }); it.each([ @@ -119,13 +96,12 @@ describe('pie', () => { `, ])('should handle regular showData + title in different line', (context: string) => { const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.showData).toBeTruthy(); - expect(value.title).toBe('sample title'); + const { showData, title } = result.value; + expect(showData).toBeTruthy(); + expect(title).toBe('sample title'); }); describe('sections', () => { @@ -146,19 +122,15 @@ describe('pie', () => { `, ])('should handle regular secions', (context: string) => { const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); + const { sections } = result.value; + expect(sections[0].label).toBe('GitHub'); + expect(sections[0].value).toBe(100); - const section0 = value.sections[0]; - expect(section0?.label).toBe('GitHub'); - expect(section0?.value).toBe(100); - - const section1 = value.sections[1]; - expect(section1?.label).toBe('GitLab'); - expect(section1?.value).toBe(50); + expect(sections[1].label).toBe('GitLab'); + expect(sections[1].value).toBe(50); }); it('should handle sections with showData', () => { @@ -166,20 +138,17 @@ describe('pie', () => { "GitHub": 100 "GitLab": 50`; const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.showData).toBeTruthy(); + const { showData, sections } = result.value; + expect(showData).toBeTruthy(); - const section0 = value.sections[0]; - expect(section0?.label).toBe('GitHub'); - expect(section0?.value).toBe(100); + expect(sections[0].label).toBe('GitHub'); + expect(sections[0].value).toBe(100); - const section1 = value.sections[1]; - expect(section1?.label).toBe('GitLab'); - expect(section1?.value).toBe(50); + expect(sections[1].label).toBe('GitLab'); + expect(sections[1].value).toBe(50); }); it('should handle sections with title', () => { @@ -187,20 +156,17 @@ describe('pie', () => { "GitHub": 100 "GitLab": 50`; const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.title).toBe('sample wow'); + const { title, sections } = result.value; + expect(title).toBe('sample wow'); - const section0 = value.sections[0]; - expect(section0?.label).toBe('GitHub'); - expect(section0?.value).toBe(100); + expect(sections[0].label).toBe('GitHub'); + expect(sections[0].value).toBe(100); - const section1 = value.sections[1]; - expect(section1?.label).toBe('GitLab'); - expect(section1?.value).toBe(50); + expect(sections[1].label).toBe('GitLab'); + expect(sections[1].value).toBe(50); }); it('should handle sections with accTitle', () => { @@ -208,20 +174,17 @@ describe('pie', () => { "GitHub": 100 "GitLab": 50`; const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.accTitle).toBe('sample wow'); + const { accTitle, sections } = result.value; + expect(accTitle).toBe('sample wow'); - const section0 = value.sections[0]; - expect(section0?.label).toBe('GitHub'); - expect(section0?.value).toBe(100); + expect(sections[0].label).toBe('GitHub'); + expect(sections[0].value).toBe(100); - const section1 = value.sections[1]; - expect(section1?.label).toBe('GitLab'); - expect(section1?.value).toBe(50); + expect(sections[1].label).toBe('GitLab'); + expect(sections[1].value).toBe(50); }); it('should handle sections with single line accDescr', () => { @@ -229,20 +192,17 @@ describe('pie', () => { "GitHub": 100 "GitLab": 50`; const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.accDescr).toBe('sample wow'); + const { accDescr, sections } = result.value; + expect(accDescr).toBe('sample wow'); - const section0 = value.sections[0]; - expect(section0?.label).toBe('GitHub'); - expect(section0?.value).toBe(100); + expect(sections[0].label).toBe('GitHub'); + expect(sections[0].value).toBe(100); - const section1 = value.sections[1]; - expect(section1?.label).toBe('GitLab'); - expect(section1?.value).toBe(50); + expect(sections[1].label).toBe('GitLab'); + expect(sections[1].value).toBe(50); }); it('should handle sections with multi line accDescr', () => { @@ -252,42 +212,17 @@ describe('pie', () => { "GitHub": 100 "GitLab": 50`; const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); + expectNoErrorsOrAlternatives(result); + expect(result.value.$type).toBe(Pie); - const value = result.value; - expect(value.$type).toBe(Pie); - expect(value.accDescr).toBe('sample wow'); + const { accDescr, sections } = result.value; + expect(accDescr).toBe('sample wow'); - const section0 = value.sections[0]; - expect(section0?.label).toBe('GitHub'); - expect(section0?.value).toBe(100); + expect(sections[0].label).toBe('GitHub'); + expect(sections[0].value).toBe(100); - const section1 = value.sections[1]; - expect(section1?.label).toBe('GitLab'); - expect(section1?.value).toBe(50); - }); - }); - - describe('duplicate', () => { - it('should handle duplicate sections', () => { - const context = `pie - "GitHub": 100 - "GitHub": 50`; - const result = parse(context); - expect(result.parserErrors).toHaveLength(0); - expect(result.lexerErrors).toHaveLength(0); - - const value = result.value; - expect(value.$type).toBe(Pie); - - const section0 = value.sections[0]; - expect(section0?.label).toBe('GitHub'); - expect(section0?.value).toBe(100); - - const section1 = value.sections[1]; - expect(section1?.label).toBe('GitHub'); - expect(section1?.value).toBe(50); + expect(sections[1].label).toBe('GitLab'); + expect(sections[1].value).toBe(50); }); }); }); diff --git a/packages/parser/tests/test-util.ts b/packages/parser/tests/test-util.ts index 33d319112..9bdec348a 100644 --- a/packages/parser/tests/test-util.ts +++ b/packages/parser/tests/test-util.ts @@ -1,5 +1,7 @@ -import type { ParseResult } from 'langium'; +import type { LangiumParser, ParseResult } from 'langium'; import { expect, vi } from 'vitest'; +import type { Info, InfoServices, Pie, PieServices } from '../src/language/index.js'; +import { createInfoServices, createPieServices } from '../src/language/index.js'; const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => undefined); @@ -9,10 +11,32 @@ const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => undefined) * * @param result - the result `parse` function. */ -export function noErrorsOrAlternatives(result: ParseResult) { +export function expectNoErrorsOrAlternatives(result: ParseResult) { expect(result.lexerErrors).toHaveLength(0); expect(result.parserErrors).toHaveLength(0); expect(consoleMock).not.toHaveBeenCalled(); consoleMock.mockReset(); } + +const infoServices: InfoServices = createInfoServices().Info; +const infoParser: LangiumParser = infoServices.parser.LangiumParser; +export function createInfoTestServices() { + const parse = (input: string) => { + return infoParser.parse<Info>(input); + }; + + return { services: infoServices, parse }; +} +export const infoParse = createInfoTestServices().parse; + +const pieServices: PieServices = createPieServices().Pie; +const pieParser: LangiumParser = pieServices.parser.LangiumParser; +export function createPieTestServices() { + const parse = (input: string) => { + return pieParser.parse<Pie>(input); + }; + + return { services: pieServices, parse }; +} +export const pieParse = createPieTestServices().parse; From 0a626917f8bb21655e1b4949a456daab8238f0e9 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:39:11 +0300 Subject: [PATCH 18/38] remove unnecessary lines --- packages/parser/src/index.ts | 3 +-- packages/parser/src/parse.ts | 7 ++----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/parser/src/index.ts b/packages/parser/src/index.ts index 149e7a21d..c4aa6c821 100644 --- a/packages/parser/src/index.ts +++ b/packages/parser/src/index.ts @@ -1,3 +1,2 @@ export type { Info, Pie, PieSection } from './language/index.js'; -export type { DiagramAST } from './parse.js'; -export { parse, MermaidParseError } from './parse.js'; +export * from './parse.js'; diff --git a/packages/parser/src/parse.ts b/packages/parser/src/parse.ts index 7f743a7f3..aeec983da 100644 --- a/packages/parser/src/parse.ts +++ b/packages/parser/src/parse.ts @@ -6,17 +6,14 @@ import { createInfoServices, createPieServices } from './language/index.js'; export type DiagramAST = Info | Pie; const parsers: Record<string, LangiumParser> = {}; - const initializers = { info: () => { // Will have to make parse async to use this. Can try later... // const { createInfoServices } = await import('./language/info/index.js'); - const parser = createInfoServices().Info.parser.LangiumParser; - parsers['info'] = parser; + parsers['info'] = createInfoServices().Info.parser.LangiumParser; }, pie: () => { - const parser = createPieServices().Pie.parser.LangiumParser; - parsers['pie'] = parser; + parsers['pie'] = createPieServices().Pie.parser.LangiumParser; }, } as const; From 58c7934dd85d12ac264a387c1a0bfbc003ef31bd Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 22:45:23 +0300 Subject: [PATCH 19/38] export necessary objects and types from `packages/parser` --- packages/parser/src/index.ts | 2 +- packages/parser/src/language/index.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/parser/src/index.ts b/packages/parser/src/index.ts index c4aa6c821..d966ef897 100644 --- a/packages/parser/src/index.ts +++ b/packages/parser/src/index.ts @@ -1,2 +1,2 @@ -export type { Info, Pie, PieSection } from './language/index.js'; +export * from './language/index.js'; export * from './parse.js'; diff --git a/packages/parser/src/language/index.ts b/packages/parser/src/language/index.ts index 4af6091de..2eea343e2 100644 --- a/packages/parser/src/language/index.ts +++ b/packages/parser/src/language/index.ts @@ -1,6 +1,9 @@ -export * from './generated/ast.js'; -export * from './generated/grammar.js'; -export * from './generated/module.js'; +export { Info, MermaidAstType, Pie, PieSection } from './generated/ast.js'; +export { + InfoGeneratedModule, + MermaidGeneratedSharedModule, + PieGeneratedModule, +} from './generated/module.js'; export * from './common/index.js'; export * from './info/index.js'; From 53ef5c51cca37c0e9182a3887a23b6865d97fd42 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 23:09:58 +0300 Subject: [PATCH 20/38] create `CommonTokenBuilder` --- packages/parser/src/language/common/index.ts | 2 +- packages/parser/src/language/common/tokenBuilder.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/parser/src/language/common/index.ts b/packages/parser/src/language/common/index.ts index e06a3a8eb..62fcad3dd 100644 --- a/packages/parser/src/language/common/index.ts +++ b/packages/parser/src/language/common/index.ts @@ -1,2 +1,2 @@ -export * from './tokenBuilder.js'; +export { MermaidTokenBuilder } from './tokenBuilder.js'; export { MermaidValueConverter } from './valueConverter.js'; diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index f64063d56..fe48fe4fb 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -42,3 +42,5 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder { return [...rules.slice(pivotIndex), ...rules.slice(0, pivotIndex)]; } } + +export class CommonTokenBuilder extends MermaidTokenBuilder {} From 5ef0527ebc55758e61e8b40c30054bf699137e83 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Fri, 3 Nov 2023 23:12:24 +0300 Subject: [PATCH 21/38] export all common `ValueConverter` and `TokenBuilder` and update imports --- packages/parser/src/language/common/index.ts | 4 ++-- packages/parser/src/language/info/module.ts | 2 +- packages/parser/src/language/pie/valueConverter.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/parser/src/language/common/index.ts b/packages/parser/src/language/common/index.ts index 62fcad3dd..92b69489e 100644 --- a/packages/parser/src/language/common/index.ts +++ b/packages/parser/src/language/common/index.ts @@ -1,2 +1,2 @@ -export { MermaidTokenBuilder } from './tokenBuilder.js'; -export { MermaidValueConverter } from './valueConverter.js'; +export * from './tokenBuilder.js'; +export * from './valueConverter.js'; diff --git a/packages/parser/src/language/info/module.ts b/packages/parser/src/language/info/module.ts index c25deb377..17f1fb4eb 100644 --- a/packages/parser/src/language/info/module.ts +++ b/packages/parser/src/language/info/module.ts @@ -7,7 +7,7 @@ import type { } from 'langium'; import { EmptyFileSystem, createDefaultModule, createDefaultSharedModule, inject } from 'langium'; -import { CommonValueConverter } from '../common/valueConverter.js'; +import { CommonValueConverter } from '../common/index.js'; import { InfoGeneratedModule, MermaidGeneratedSharedModule } from '../generated/module.js'; import { InfoTokenBuilder } from './tokenBuilder.js'; diff --git a/packages/parser/src/language/pie/valueConverter.ts b/packages/parser/src/language/pie/valueConverter.ts index 10b932f98..9215ef43c 100644 --- a/packages/parser/src/language/pie/valueConverter.ts +++ b/packages/parser/src/language/pie/valueConverter.ts @@ -1,6 +1,6 @@ import type { CstNode, GrammarAST, ValueType } from 'langium'; -import { MermaidValueConverter } from '../common/valueConverter.js'; +import { MermaidValueConverter } from '../common/index.js'; export class PieValueConverter extends MermaidValueConverter { protected runCustomConverter( From cf1880343bc9527d024a5c8e731163d13c2d7892 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sun, 5 Nov 2023 02:03:58 +0300 Subject: [PATCH 22/38] fix: make `rearrangeRules` update the array itself --- .../src/language/common/tokenBuilder.ts | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index fe48fe4fb..df1c3864a 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -34,12 +34,26 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder { return tokenTypes; } - private rearrangeRules(rules: GrammarAST.AbstractRule[]): GrammarAST.AbstractRule[] { - const pivotIndex = rules.findIndex((rule) => rule.name === 'TitleAndAccessibilities'); - if (pivotIndex === -1) { - return rules; + /** + * Reorders rules using a pivot rule. + * + * We use this function to reorder rules because imported rules are + * inserted at the end of the array. + * + * @param rules - the grammar rules. + */ + private rearrangeRules(rules: GrammarAST.AbstractRule[]): void { + const index = rules.findIndex((rule) => rule.name === 'TitleAndAccessibilities'); + if (index === -1) { + return; } - return [...rules.slice(pivotIndex), ...rules.slice(0, pivotIndex)]; + + const [item] = rules.splice(index, 1); + + rules.unshift(item); + + const itemsToMove = rules.splice(1, index); + rules.push(...itemsToMove); } } From c62be1bb4526b91729c78efb512e23aad1dfac88 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sun, 5 Nov 2023 02:08:36 +0300 Subject: [PATCH 23/38] export necessary functions and types from `packages/parser` --- packages/parser/src/language/index.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/parser/src/language/index.ts b/packages/parser/src/language/index.ts index 2eea343e2..087bdb6b8 100644 --- a/packages/parser/src/language/index.ts +++ b/packages/parser/src/language/index.ts @@ -1,4 +1,13 @@ -export { Info, MermaidAstType, Pie, PieSection } from './generated/ast.js'; +export { + Info, + MermaidAstType, + Pie, + PieSection, + isCommon, + isInfo, + isPie, + isPieSection, +} from './generated/ast.js'; export { InfoGeneratedModule, MermaidGeneratedSharedModule, From f01971b67c0d549bdc3d336ff2cebd49c0110e3d Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sun, 5 Nov 2023 02:11:04 +0300 Subject: [PATCH 24/38] switch to `NEWLINE+` instead of `EOF` until next release of `langium` --- packages/parser/src/language/common/common.langium | 2 +- packages/parser/src/language/pie/pie.langium | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/parser/src/language/common/common.langium b/packages/parser/src/language/common/common.langium index baf933e0f..0bf9666b8 100644 --- a/packages/parser/src/language/common/common.langium +++ b/packages/parser/src/language/common/common.langium @@ -5,7 +5,7 @@ interface Common { } fragment TitleAndAccessibilities: - ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) EOL)+ + ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) NEWLINE)+ ; fragment EOL returns string: diff --git a/packages/parser/src/language/pie/pie.langium b/packages/parser/src/language/pie/pie.langium index c1219722c..a71e7f852 100644 --- a/packages/parser/src/language/pie/pie.langium +++ b/packages/parser/src/language/pie/pie.langium @@ -12,7 +12,7 @@ entry Pie: ; PieSection: - label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE EOF + label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE NEWLINE+ ; terminal PIE_SECTION_LABEL: /"[^"]+"/; From cf22e3023722f2066719c2b708e2050f3820d104 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sun, 5 Nov 2023 13:07:08 +0300 Subject: [PATCH 25/38] rename abstract rules in common parser files --- packages/parser/src/language/common/tokenBuilder.ts | 4 ++-- packages/parser/src/language/common/valueConverter.ts | 6 +++--- packages/parser/src/language/info/tokenBuilder.ts | 4 ++-- packages/parser/src/language/pie/tokenBuilder.ts | 4 ++-- packages/parser/src/language/pie/valueConverter.ts | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index df1c3864a..d59249e19 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -3,7 +3,7 @@ import type { TokenType, TokenVocabulary } from 'chevrotain'; import { DefaultTokenBuilder } from 'langium'; -export abstract class MermaidTokenBuilder extends DefaultTokenBuilder { +export abstract class AbstractMermaidTokenBuilder extends DefaultTokenBuilder { private keywords: Set<string>; public constructor(keywords: string[]) { @@ -57,4 +57,4 @@ export abstract class MermaidTokenBuilder extends DefaultTokenBuilder { } } -export class CommonTokenBuilder extends MermaidTokenBuilder {} +export class CommonTokenBuilder extends AbstractMermaidTokenBuilder {} diff --git a/packages/parser/src/language/common/valueConverter.ts b/packages/parser/src/language/common/valueConverter.ts index bc31ba714..624cc67a5 100644 --- a/packages/parser/src/language/common/valueConverter.ts +++ b/packages/parser/src/language/common/valueConverter.ts @@ -10,7 +10,7 @@ const rulesRegexes: Record<string, RegExp> = { TITLE: titleRegex, }; -export abstract class MermaidValueConverter extends DefaultValueConverter { +export abstract class AbstractMermaidValueConverter extends DefaultValueConverter { /** * A method contains convert logic to be used by class. * @@ -71,8 +71,8 @@ export abstract class MermaidValueConverter extends DefaultValueConverter { } } -export class CommonValueConverter extends MermaidValueConverter { - protected runCustomConverter( +export class CommonValueConverter extends AbstractMermaidValueConverter { + protected override runCustomConverter( _rule: GrammarAST.AbstractRule, _input: string, _cstNode: CstNode diff --git a/packages/parser/src/language/info/tokenBuilder.ts b/packages/parser/src/language/info/tokenBuilder.ts index 311d372e4..69ad0e689 100644 --- a/packages/parser/src/language/info/tokenBuilder.ts +++ b/packages/parser/src/language/info/tokenBuilder.ts @@ -1,6 +1,6 @@ -import { MermaidTokenBuilder } from '../common/index.js'; +import { AbstractMermaidTokenBuilder } from '../common/index.js'; -export class InfoTokenBuilder extends MermaidTokenBuilder { +export class InfoTokenBuilder extends AbstractMermaidTokenBuilder { public constructor() { super(['info', 'showInfo']); } diff --git a/packages/parser/src/language/pie/tokenBuilder.ts b/packages/parser/src/language/pie/tokenBuilder.ts index b75cde187..85aecf96a 100644 --- a/packages/parser/src/language/pie/tokenBuilder.ts +++ b/packages/parser/src/language/pie/tokenBuilder.ts @@ -1,6 +1,6 @@ -import { MermaidTokenBuilder } from '../common/index.js'; +import { AbstractMermaidTokenBuilder } from '../common/index.js'; -export class PieTokenBuilder extends MermaidTokenBuilder { +export class PieTokenBuilder extends AbstractMermaidTokenBuilder { public constructor() { super(['pie', 'showData']); } diff --git a/packages/parser/src/language/pie/valueConverter.ts b/packages/parser/src/language/pie/valueConverter.ts index 9215ef43c..b0ae18c0b 100644 --- a/packages/parser/src/language/pie/valueConverter.ts +++ b/packages/parser/src/language/pie/valueConverter.ts @@ -1,8 +1,8 @@ import type { CstNode, GrammarAST, ValueType } from 'langium'; -import { MermaidValueConverter } from '../common/index.js'; +import { AbstractMermaidValueConverter } from '../common/index.js'; -export class PieValueConverter extends MermaidValueConverter { +export class PieValueConverter extends AbstractMermaidValueConverter { protected runCustomConverter( rule: GrammarAST.AbstractRule, input: string, From b83603488c27879085b8debb8f9b258180219d95 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Mon, 6 Nov 2023 19:00:31 +0300 Subject: [PATCH 26/38] build(deps): update `langium` to `v2.1.1` --- packages/parser/package.json | 8 ++++---- pnpm-lock.yaml | 22 +++++++++------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/packages/parser/package.json b/packages/parser/package.json index 6affa2ce6..dd228e529 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -34,15 +34,15 @@ "ast" ], "dependencies": { - "langium": "2.1.0" + "langium": "2.1.2" + }, + "devDependencies": { + "chevrotain": "^11.0.3" }, "files": [ "dist/" ], "publishConfig": { "access": "public" - }, - "devDependencies": { - "chevrotain": "^11.0.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 025037400..89b489988 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -484,8 +484,8 @@ importers: packages/parser: dependencies: langium: - specifier: 2.1.0 - version: 2.1.0 + specifier: 2.1.2 + version: 2.1.2 devDependencies: chevrotain: specifier: ^11.0.3 @@ -11534,7 +11534,7 @@ packages: commander: 11.0.0 fs-extra: 11.1.1 jsonschema: 1.4.1 - langium: 2.1.0 + langium: 2.1.2 langium-railroad: 2.1.0 lodash: 4.17.21 dev: true @@ -11542,12 +11542,12 @@ packages: /langium-railroad@2.1.0: resolution: {integrity: sha512-2IeAIUSTQzbDjNnJA+0ql8tyN/mhCSN4FS50Mo9LOtLj523qUEBwHflDmCiOGZzW9iZdni6NXJgh8nLqjhTlDw==} dependencies: - langium: 2.1.0 + langium: 2.1.2 railroad-diagrams: 1.0.0 dev: true - /langium@2.1.0: - resolution: {integrity: sha512-VDJNyJHfFkamwX+IGp2cLiVIsdOqeVwEZ7b95DWs1jcJmf5e47NGLsfb4aLb0mVrCTU4mvfghfoiTkOMVSdpqA==} + /langium@2.1.2: + resolution: {integrity: sha512-1NDUmhm111xs6NLh1DzQ9YPrOhL6JqJryY9igPIGrG0AbKKGmGf3fahAiY1MUChwIYSec6Fvoj+igwKzvGXQog==} engines: {node: '>=16.0.0'} dependencies: chevrotain: 11.0.3 @@ -16001,10 +16001,10 @@ packages: resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} dependencies: jsonc-parser: 3.2.0 - vscode-languageserver-textdocument: 1.0.8 - vscode-languageserver-types: 3.17.3 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 vscode-nls: 5.2.0 - vscode-uri: 3.0.7 + vscode-uri: 3.0.8 dev: true /vscode-jsonrpc@8.2.0: @@ -16024,10 +16024,6 @@ packages: resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} dev: true - /vscode-languageserver-types@3.17.3: - resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} - dev: true - /vscode-languageserver-types@3.17.5: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} From 6102285577d0c83ceee03f580f9214f8124dcdfc Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Mon, 6 Nov 2023 19:01:22 +0300 Subject: [PATCH 27/38] full switch to EOF --- packages/parser/src/language/common/common.langium | 2 +- packages/parser/src/language/pie/pie.langium | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/parser/src/language/common/common.langium b/packages/parser/src/language/common/common.langium index 0bf9666b8..baf933e0f 100644 --- a/packages/parser/src/language/common/common.langium +++ b/packages/parser/src/language/common/common.langium @@ -5,7 +5,7 @@ interface Common { } fragment TitleAndAccessibilities: - ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) NEWLINE)+ + ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) EOL)+ ; fragment EOL returns string: diff --git a/packages/parser/src/language/pie/pie.langium b/packages/parser/src/language/pie/pie.langium index a71e7f852..2bbf967e1 100644 --- a/packages/parser/src/language/pie/pie.langium +++ b/packages/parser/src/language/pie/pie.langium @@ -12,7 +12,7 @@ entry Pie: ; PieSection: - label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE NEWLINE+ + label=PIE_SECTION_LABEL ":" value=PIE_SECTION_VALUE EOL ; terminal PIE_SECTION_LABEL: /"[^"]+"/; From 1d88ac43cfed8a30fb81bf65640b2757aac5ddb8 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Mon, 6 Nov 2023 19:02:39 +0300 Subject: [PATCH 28/38] enhance `title`, `accTitle`, and `accDescr` regexes --- packages/parser/src/language/common/common.langium | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/parser/src/language/common/common.langium b/packages/parser/src/language/common/common.langium index baf933e0f..7989de193 100644 --- a/packages/parser/src/language/common/common.langium +++ b/packages/parser/src/language/common/common.langium @@ -13,9 +13,9 @@ fragment EOL returns string: ; terminal NEWLINE: /\r?\n/; -terminal ACC_DESCR: /accDescr([\t ]*:[^\n\r]*(?=%%)|\s*{[^}]*})|accDescr([\t ]*:[^\n\r]*|\s*{[^}]*})/; -terminal ACC_TITLE: /accTitle[\t ]*:[^\n\r]*(?=%%)|accTitle[\t ]*:[^\n\r]*/; -terminal TITLE: /title([\t ][^\n\r]*|)(?=%%)|title([\t ][^\n\r]*|)/; +terminal ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/; +terminal ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/; +terminal TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/; hidden terminal WHITESPACE: /[\t ]+/; hidden terminal YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/; From 692a7471c1f22d2642fe329287c773a59b91b640 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Wed, 15 Nov 2023 12:46:58 +0300 Subject: [PATCH 29/38] chore: apply review changes --- packages/mermaid/src/diagrams/pie/pieParser.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieParser.ts b/packages/mermaid/src/diagrams/pie/pieParser.ts index ac978a5a9..2acae4f1c 100644 --- a/packages/mermaid/src/diagrams/pie/pieParser.ts +++ b/packages/mermaid/src/diagrams/pie/pieParser.ts @@ -1,4 +1,4 @@ -import type { Pie, PieSection } from 'mermaid-parser'; +import type { Pie } from 'mermaid-parser'; import { parse } from 'mermaid-parser'; import { log } from '../../logger.js'; @@ -10,9 +10,7 @@ import { db } from './pieDb.js'; function populateDb(ast: Pie, db: PieDB) { populateCommonDb(ast, db); db.setShowData(ast.showData); - ast.sections.map((section: PieSection) => { - db.addSection(section); - }); + ast.sections.map(db.addSection); } export const parser: ParserDefinition = { From e86f09aaedce59af5c4edc890fcd1a11dc04432f Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Wed, 15 Nov 2023 12:48:16 +0300 Subject: [PATCH 30/38] Apply suggested style from code review Co-authored-by: Sidharth Vinod <sidharthv96@gmail.com> --- packages/mermaid/src/diagrams/pie/pieParser.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pieParser.ts b/packages/mermaid/src/diagrams/pie/pieParser.ts index 2acae4f1c..5935c1346 100644 --- a/packages/mermaid/src/diagrams/pie/pieParser.ts +++ b/packages/mermaid/src/diagrams/pie/pieParser.ts @@ -1,17 +1,16 @@ import type { Pie } from 'mermaid-parser'; import { parse } from 'mermaid-parser'; - import { log } from '../../logger.js'; import type { ParserDefinition } from '../../diagram-api/types.js'; import { populateCommonDb } from '../common/populateCommonDb.js'; import type { PieDB } from './pieTypes.js'; import { db } from './pieDb.js'; -function populateDb(ast: Pie, db: PieDB) { +const populateDb = (ast: Pie, db: PieDB) => { populateCommonDb(ast, db); db.setShowData(ast.showData); ast.sections.map(db.addSection); -} +}; export const parser: ParserDefinition = { parse: (input: string): void => { From f0d6789722ecb67ee671e3e1346395ce8e8ae386 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod <sidharthv96@gmail.com> Date: Thu, 16 Nov 2023 11:03:55 +0530 Subject: [PATCH 31/38] fix: Netlify build --- scripts/editor.bash | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/editor.bash b/scripts/editor.bash index cb0984583..421fdec74 100755 --- a/scripts/editor.bash +++ b/scripts/editor.bash @@ -13,8 +13,8 @@ mv package.tmp.json package.json popd pnpm run -r clean +pnpm build:esbuild pnpm build:types -pnpm build:mermaid # Clone the Mermaid Live Editor repository rm -rf mermaid-live-editor @@ -27,7 +27,8 @@ cd mermaid-live-editor npm install # Link local mermaid to live editor -npm link ../packages/mermaid +npm link ../packages/mermaid # Force Build the site npm run build -- --force + From 54a09ead95c9c7e2ecd4c364861f6fd0c2defcae Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sun, 31 Dec 2023 15:31:15 +0300 Subject: [PATCH 32/38] pref: remove `rearrangeRules` from `AbstractMermaidTokenBuilder` --- .../src/language/common/tokenBuilder.ts | 32 +------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/packages/parser/src/language/common/tokenBuilder.ts b/packages/parser/src/language/common/tokenBuilder.ts index d59249e19..f99763454 100644 --- a/packages/parser/src/language/common/tokenBuilder.ts +++ b/packages/parser/src/language/common/tokenBuilder.ts @@ -1,5 +1,5 @@ import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium'; -import type { TokenType, TokenVocabulary } from 'chevrotain'; +import type { TokenType } from 'chevrotain'; import { DefaultTokenBuilder } from 'langium'; @@ -11,14 +11,6 @@ export abstract class AbstractMermaidTokenBuilder extends DefaultTokenBuilder { this.keywords = new Set<string>(keywords); } - public override buildTokens( - grammar: GrammarAST.Grammar, - options?: TokenBuilderOptions | undefined - ): TokenVocabulary { - this.rearrangeRules(grammar.rules); - return super.buildTokens(grammar, options); - } - protected override buildKeywordTokens( rules: Stream<GrammarAST.AbstractRule>, terminalTokens: TokenType[], @@ -33,28 +25,6 @@ export abstract class AbstractMermaidTokenBuilder extends DefaultTokenBuilder { }); return tokenTypes; } - - /** - * Reorders rules using a pivot rule. - * - * We use this function to reorder rules because imported rules are - * inserted at the end of the array. - * - * @param rules - the grammar rules. - */ - private rearrangeRules(rules: GrammarAST.AbstractRule[]): void { - const index = rules.findIndex((rule) => rule.name === 'TitleAndAccessibilities'); - if (index === -1) { - return; - } - - const [item] = rules.splice(index, 1); - - rules.unshift(item); - - const itemsToMove = rules.splice(1, index); - rules.push(...itemsToMove); - } } export class CommonTokenBuilder extends AbstractMermaidTokenBuilder {} From 0dcca35ec29f2a95e0e6082ef3cf61c646a48287 Mon Sep 17 00:00:00 2001 From: Yokozuna59 <Yokozuna59@users.noreply.github.com> Date: Sat, 20 Jan 2024 11:14:58 +0000 Subject: [PATCH 33/38] Update docs --- docs/config/setup/interfaces/mermaidAPI.RenderResult.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md index aebd88b23..c468df243 100644 --- a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md +++ b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md @@ -14,6 +14,15 @@ • `Optional` **bindFunctions**: (`element`: `Element`) => `void` +Bind function to be called after the svg has been inserted into the DOM. +This is necessary for adding event listeners to the elements in the svg. + +```js +const { svg, bindFunctions } = mermaidAPI.render('id1', 'graph TD;A-->B'); +div.innerHTML = svg; +bindFunctions?.(div); // To call bindFunctions only if it's present. +``` + #### Type declaration ▸ (`element`): `void` From 16968eb38cf7067edd994c6b5a16236bbc46dd2e Mon Sep 17 00:00:00 2001 From: Sidharth Vinod <sidharthv96@gmail.com> Date: Tue, 23 Jan 2024 20:12:54 +0530 Subject: [PATCH 34/38] Fix lint --- packages/mermaid/src/docs/syntax/flowchart.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/docs/syntax/flowchart.md b/packages/mermaid/src/docs/syntax/flowchart.md index 95cc962c7..540f820f7 100644 --- a/packages/mermaid/src/docs/syntax/flowchart.md +++ b/packages/mermaid/src/docs/syntax/flowchart.md @@ -775,12 +775,13 @@ flowchart TD B-->E(A fa:fa-camera-retro perhaps?) ``` -Mermaid supports Font Awesome if the CSS is included on the website. -Mermaid does not have any restriction on the version of Font Awesome that can be used. +Mermaid supports Font Awesome if the CSS is included on the website. +Mermaid does not have any restriction on the version of Font Awesome that can be used. Please refer the [Official Font Awesome Documentation](https://fontawesome.com/start) on how to include it in your website. Adding this snippet in the `<head>` would add support for Font Awesome v6.5.1 + ```html <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" From 47a6ce43421cdd2fecda3de649e74e61439d0436 Mon Sep 17 00:00:00 2001 From: Yokozuna59 <Yokozuna59@users.noreply.github.com> Date: Sat, 20 Jan 2024 11:14:58 +0000 Subject: [PATCH 35/38] Update docs --- .../interfaces/mermaidAPI.RenderResult.md | 9 + pnpm-lock.yaml | 664 +++++++++--------- 2 files changed, 341 insertions(+), 332 deletions(-) diff --git a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md index aebd88b23..c468df243 100644 --- a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md +++ b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md @@ -14,6 +14,15 @@ • `Optional` **bindFunctions**: (`element`: `Element`) => `void` +Bind function to be called after the svg has been inserted into the DOM. +This is necessary for adding event listeners to the elements in the svg. + +```js +const { svg, bindFunctions } = mermaidAPI.render('id1', 'graph TD;A-->B'); +div.innerHTML = svg; +bindFunctions?.(div); // To call bindFunctions only if it's present. +``` + #### Type declaration ▸ (`element`): `void` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 949e5b8c4..9538d0d30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,7 +22,7 @@ importers: version: 6.31.3 '@cypress/code-coverage': specifier: ^3.10.7 - version: 3.12.18(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(cypress@12.17.4)(webpack@5.89.0) + version: 3.12.19(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(cypress@12.17.4)(webpack@5.90.0) '@rollup/plugin-typescript': specifier: ^11.1.1 version: 11.1.6(typescript@5.3.3) @@ -49,7 +49,7 @@ importers: version: 3.0.15 '@types/node': specifier: ^18.16.0 - version: 18.19.8 + version: 18.19.9 '@types/prettier': specifier: ^2.7.2 version: 2.7.3 @@ -58,10 +58,10 @@ importers: version: 4.2.3 '@typescript-eslint/eslint-plugin': specifier: ^6.7.2 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.7.2 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.1(eslint@8.56.0)(typescript@5.3.3) '@vitest/coverage-v8': specifier: ^0.34.0 version: 0.34.6(vitest@0.34.6) @@ -91,7 +91,7 @@ importers: version: 4.0.1(cypress@12.17.4)(jest@29.7.0) esbuild: specifier: ^0.19.0 - version: 0.19.11 + version: 0.19.12 eslint: specifier: ^8.47.0 version: 8.56.0 @@ -106,7 +106,7 @@ importers: version: 7.1.0 eslint-plugin-jest: specifier: ^27.2.1 - version: 27.6.3(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) + version: 27.6.3(@typescript-eslint/eslint-plugin@6.19.1)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3) eslint-plugin-jsdoc: specifier: ^46.0.0 version: 46.10.1(eslint@8.56.0) @@ -139,7 +139,7 @@ importers: version: 8.0.3 jest: specifier: ^29.5.0 - version: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + version: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) jison: specifier: ^0.4.18 version: 0.4.18 @@ -163,7 +163,7 @@ importers: version: 1.0.1 pnpm: specifier: ^8.6.8 - version: 8.14.1 + version: 8.14.3 prettier: specifier: ^2.8.8 version: 2.8.8 @@ -187,7 +187,7 @@ importers: version: 5.3.3 vite: specifier: ^4.4.12 - version: 4.5.2(@types/node@18.19.8) + version: 4.5.2(@types/node@18.19.9) vite-plugin-istanbul: specifier: ^4.1.0 version: 4.1.0(vite@4.5.2) @@ -356,7 +356,7 @@ importers: version: 2.0.3 type-fest: specifier: ^4.1.0 - version: 4.9.0 + version: 4.10.1 typedoc: specifier: ^0.25.0 version: 0.25.7(typescript@5.3.3) @@ -374,7 +374,7 @@ importers: version: 4.1.2 vitepress: specifier: ^1.0.0-alpha.72 - version: 1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.8)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3) + version: 1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.9)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3) vitepress-plugin-search: specifier: ^1.0.4-alpha.20 version: 1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.0.0-rc.39)(vue@3.4.15) @@ -442,7 +442,7 @@ importers: dependencies: '@zenuml/core': specifier: ^3.0.6 - version: 3.16.2(ts-node@10.9.2)(typescript@5.3.3) + version: 3.17.0(ts-node@10.9.2)(typescript@5.3.3) devDependencies: mermaid: specifier: workspace:^ @@ -465,7 +465,7 @@ importers: devDependencies: '@iconify-json/carbon': specifier: ^1.1.16 - version: 1.1.27 + version: 1.1.28 '@unocss/reset': specifier: ^0.58.0 version: 0.58.3 @@ -492,13 +492,13 @@ importers: version: 0.26.0(rollup@2.79.1)(vue@3.4.15) vite: specifier: ^4.4.12 - version: 4.5.2(@types/node@18.19.8) + version: 4.5.2(@types/node@18.19.9) vite-plugin-pwa: specifier: ^0.17.0 version: 0.17.4(vite@4.5.2)(workbox-build@7.0.0)(workbox-window@7.0.0) vitepress: specifier: 1.0.0-rc.39 - version: 1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.8)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3) + version: 1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.9)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -524,13 +524,13 @@ importers: devDependencies: webpack: specifier: ^5.88.2 - version: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) + version: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 - version: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.89.0) + version: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.90.0) webpack-dev-server: specifier: ^4.11.1 - version: 4.15.1(webpack-cli@4.10.0)(webpack@5.89.0) + version: 4.15.1(webpack-cli@4.10.0)(webpack@5.90.0) packages: @@ -872,7 +872,7 @@ packages: '@applitools/eg-frpc': 1.0.5 '@applitools/eg-socks5-proxy-server': 0.5.4 '@applitools/logger': 1.1.53 - dotenv: 16.3.2 + dotenv: 16.4.1 encoding: 0.1.13 fastify: 3.29.5 fastify-plugin: 3.0.1 @@ -2230,7 +2230,7 @@ packages: babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.7) babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.7) - core-js-compat: 3.35.0 + core-js-compat: 3.35.1 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -2448,7 +2448,7 @@ packages: lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@18.19.8)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@18.19.9)(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - '@swc/core' @@ -2541,7 +2541,7 @@ packages: '@cspell/dict-elixir': 4.0.3 '@cspell/dict-en-common-misspellings': 1.0.2 '@cspell/dict-en-gb': 1.1.33 - '@cspell/dict-en_us': 4.3.13 + '@cspell/dict-en_us': 4.3.14 '@cspell/dict-filetypes': 3.0.3 '@cspell/dict-fonts': 3.0.2 '@cspell/dict-fullstack': 3.1.5 @@ -2660,8 +2660,8 @@ packages: resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} dev: true - /@cspell/dict-en_us@4.3.13: - resolution: {integrity: sha512-T6lHiGCjloGNE0d8CogF+efJZPCAP8zdzn+KnlI0Bmjaz5nvG2LTX7CXl1zkOl1nYYev0FuIk9WJ9YPVRjcFbQ==} + /@cspell/dict-en_us@4.3.14: + resolution: {integrity: sha512-Od7vPVNN4td0Fild5BcCPikx+lBJ2L809zWeO3lThYHqtZXqsbaBNzfv9qlB1bXW199Ru461vu02CrklU1oD+Q==} dev: true /@cspell/dict-filetypes@3.0.3: @@ -2815,8 +2815,8 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@cypress/code-coverage@3.12.18(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(cypress@12.17.4)(webpack@5.89.0): - resolution: {integrity: sha512-RTOyCVr5CWaJ7cW1gOvlXSLDr0HNXZ7xSVfLSZEGsTODbaxeUV01Z1k93spnbVT7ri9UkxCEffPcsZsZi1oDng==} + /@cypress/code-coverage@3.12.19(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(cypress@12.17.4)(webpack@5.90.0): + resolution: {integrity: sha512-RNpgESArIwX2PG7k0KEb941eSYSBEGF1WB5NPeWrVJMX6KeAxj3Ki5aeYlFeV+wxoAJ+7gcF4s5xV18BQLCpjQ==} peerDependencies: '@babel/core': ^7.0.1 '@babel/preset-env': ^7.0.0 @@ -2826,8 +2826,8 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/preset-env': 7.23.8(@babel/core@7.23.7) - '@cypress/webpack-preprocessor': 6.0.1(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(webpack@5.89.0) - babel-loader: 9.1.3(@babel/core@7.23.7)(webpack@5.89.0) + '@cypress/webpack-preprocessor': 6.0.1(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(webpack@5.90.0) + babel-loader: 9.1.3(@babel/core@7.23.7)(webpack@5.90.0) chalk: 4.1.2 cypress: 12.17.4 dayjs: 1.11.10 @@ -2837,7 +2837,7 @@ packages: istanbul-lib-coverage: 3.2.2 js-yaml: 4.1.0 nyc: 15.1.0 - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -2866,7 +2866,7 @@ packages: uuid: 8.3.2 dev: true - /@cypress/webpack-preprocessor@6.0.1(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(webpack@5.89.0): + /@cypress/webpack-preprocessor@6.0.1(@babel/core@7.23.7)(@babel/preset-env@7.23.8)(babel-loader@9.1.3)(webpack@5.90.0): resolution: {integrity: sha512-WVNeFVSnFKxE3WZNRIriduTgqJRpevaiJIPlfqYTTzfXRD7X1Pv4woDE+G4caPV9bJqVKmVFiwzrXMRNeJxpxA==} peerDependencies: '@babel/core': ^7.0.1 @@ -2876,11 +2876,11 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/preset-env': 7.23.8(@babel/core@7.23.7) - babel-loader: 9.1.3(@babel/core@7.23.7)(webpack@5.89.0) + babel-loader: 9.1.3(@babel/core@7.23.7)(webpack@5.90.0) bluebird: 3.7.1 debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) transitivePeerDependencies: - supports-color dev: true @@ -2951,8 +2951,8 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true - /@esbuild/aix-ppc64@0.19.11: - resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -2969,8 +2969,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.11: - resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2987,8 +2987,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.11: - resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -3005,8 +3005,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.11: - resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -3023,8 +3023,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.11: - resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3041,8 +3041,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.11: - resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3059,8 +3059,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.11: - resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3077,8 +3077,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.11: - resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3095,8 +3095,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.11: - resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3113,8 +3113,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.11: - resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3131,8 +3131,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.11: - resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3149,8 +3149,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.11: - resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3167,8 +3167,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.11: - resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3185,8 +3185,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.11: - resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3203,8 +3203,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.11: - resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3221,8 +3221,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.11: - resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3239,8 +3239,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.11: - resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3257,8 +3257,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.11: - resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3275,8 +3275,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.11: - resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3293,8 +3293,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.11: - resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3311,8 +3311,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.11: - resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3329,8 +3329,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.11: - resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3347,8 +3347,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.11: - resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -3496,8 +3496,8 @@ packages: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true - /@iconify-json/carbon@1.1.27: - resolution: {integrity: sha512-tJVXv9+D9cjU5HcaY+8J0awv9AL/Mjo9MWR/fxHfHFPP/iokjPBEgq4jOBDGNe8W0k/BTrVI3zpgZjLoi6RNGg==} + /@iconify-json/carbon@1.1.28: + resolution: {integrity: sha512-tg+h0i+69JrIqUpQva2Mt611KdLMeCyibqS7lIqaMRXJgnalHtdqDcdZAKCSLb/hTbkJHyk0NCpQSYJ3f/v51w==} dependencies: '@iconify/types': 2.0.0 dev: true @@ -3506,8 +3506,8 @@ packages: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} dev: true - /@iconify/utils@2.1.15: - resolution: {integrity: sha512-8chdk3NhkYiqIVxPRBPN5wGnVYaTqc8XUagCNez84Ex7yK/oNrj1XINVn7zv+JljqZbF6r5B/bd1gRNlMSwYhg==} + /@iconify/utils@2.1.16: + resolution: {integrity: sha512-2q2POA+bg1iKFMT3ZAeS8+Lo2PcbTXH2QKdQ9XwxSyCUg+XHA0ZW7mBoW8v0cU/SgitnM2OheEouPw7mRwY+Bg==} dependencies: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.7 @@ -3551,7 +3551,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -3572,14 +3572,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3607,7 +3607,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 jest-mock: 29.7.0 dev: true @@ -3634,7 +3634,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.8 + '@types/node': 18.19.9 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3667,7 +3667,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.22 - '@types/node': 18.19.8 + '@types/node': 18.19.9 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -3755,7 +3755,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.8 + '@types/node': 18.19.9 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -3943,104 +3943,104 @@ packages: rollup: 2.79.1 dev: true - /@rollup/rollup-android-arm-eabi@4.9.5: - resolution: {integrity: sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==} + /@rollup/rollup-android-arm-eabi@4.9.6: + resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.9.5: - resolution: {integrity: sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==} + /@rollup/rollup-android-arm64@4.9.6: + resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.9.5: - resolution: {integrity: sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==} + /@rollup/rollup-darwin-arm64@4.9.6: + resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.9.5: - resolution: {integrity: sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==} + /@rollup/rollup-darwin-x64@4.9.6: + resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.5: - resolution: {integrity: sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==} + /@rollup/rollup-linux-arm-gnueabihf@4.9.6: + resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.5: - resolution: {integrity: sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==} + /@rollup/rollup-linux-arm64-gnu@4.9.6: + resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.5: - resolution: {integrity: sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==} + /@rollup/rollup-linux-arm64-musl@4.9.6: + resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.5: - resolution: {integrity: sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==} + /@rollup/rollup-linux-riscv64-gnu@4.9.6: + resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.5: - resolution: {integrity: sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==} + /@rollup/rollup-linux-x64-gnu@4.9.6: + resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.5: - resolution: {integrity: sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==} + /@rollup/rollup-linux-x64-musl@4.9.6: + resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.5: - resolution: {integrity: sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==} + /@rollup/rollup-win32-arm64-msvc@4.9.6: + resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.5: - resolution: {integrity: sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==} + /@rollup/rollup-win32-ia32-msvc@4.9.6: + resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.5: - resolution: {integrity: sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==} + /@rollup/rollup-win32-x64-msvc@4.9.6: + resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} cpu: [x64] os: [win32] requiresBuild: true @@ -4070,8 +4070,8 @@ packages: engines: {node: '>=10'} dev: true - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: true @@ -4079,7 +4079,7 @@ packages: /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 dev: true /@surma/rollup-plugin-off-main-thread@2.2.3: @@ -4165,13 +4165,13 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/braces@3.0.4: @@ -4183,7 +4183,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 18.19.8 + '@types/node': 18.19.9 '@types/responselike': 1.0.3 dev: true @@ -4201,19 +4201,19 @@ packages: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: '@types/express-serve-static-core': 4.17.41 - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/cytoscape@3.19.16: @@ -4451,7 +4451,7 @@ packages: /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -4478,20 +4478,20 @@ packages: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/glob@8.1.0: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/http-cache-semantics@4.0.4: @@ -4505,7 +4505,7 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -4531,7 +4531,7 @@ packages: /@types/jsdom@21.1.6: resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: true @@ -4543,7 +4543,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/linkify-it@3.0.5: @@ -4611,15 +4611,15 @@ packages: /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true - /@types/node@16.18.73: - resolution: {integrity: sha512-GaTgwUNzESSlX9uhTX2RQcwj2KBf/Wda+52TTtuMpgzR2Rvw7NNypQ8BJdc5Wk6osxZHcUZAKip5PtqWsUl31Q==} + /@types/node@16.18.75: + resolution: {integrity: sha512-+FSfZd5mpMDTcIK7bp2GueIcAespzR4FROOXnEst248c85vwthIEwtXYOLgVc/sI4ihE1K/7yO1lEiSgvwAOxA==} dev: true - /@types/node@18.19.8: - resolution: {integrity: sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==} + /@types/node@18.19.9: + resolution: {integrity: sha512-oZFKlC8l5YtzGQNT4zC2PiSSKzQVZ8bAwwd+EYdPLtyk0nSEq6O16SkK+rkkT2eflDAbormJgEF3QnH3oDrTSw==} dependencies: undici-types: 5.26.5 @@ -4652,13 +4652,13 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/retry@0.12.0: @@ -4668,7 +4668,7 @@ packages: /@types/rollup-plugin-visualizer@4.2.3: resolution: {integrity: sha512-eaAcHN/44KJ1uzLV7NYd6vTS3MsG7rev0eOJVpnsiNwNt/u8HFsOFr/71rZ4urR9il1r7FdZFP7Awky2sK7HAg==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 rollup: 2.79.1 dev: true @@ -4680,7 +4680,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/serve-index@1.9.4: @@ -4694,7 +4694,7 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/sinonjs__fake-timers@8.1.1: @@ -4708,7 +4708,7 @@ packages: /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/stack-utils@2.0.3: @@ -4740,13 +4740,13 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/ws@8.5.5: resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true /@types/yargs-parser@21.0.3: @@ -4763,7 +4763,7 @@ packages: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 dev: true optional: true @@ -4795,8 +4795,8 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -4807,11 +4807,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/type-utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 graphemer: 1.4.0 @@ -4844,8 +4844,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} + /@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -4854,10 +4854,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 typescript: 5.3.3 @@ -4873,12 +4873,12 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@6.19.0: - resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} + /@typescript-eslint/scope-manager@6.19.1: + resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 dev: true /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): @@ -4901,8 +4901,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} + /@typescript-eslint/type-utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -4911,8 +4911,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -4926,8 +4926,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@6.19.0: - resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} + /@typescript-eslint/types@6.19.1: + resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -4952,8 +4952,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): - resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} + /@typescript-eslint/typescript-estree@6.19.1(typescript@5.3.3): + resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -4961,8 +4961,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -4994,8 +4994,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} + /@typescript-eslint/utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -5003,9 +5003,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -5021,11 +5021,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.19.0: - resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} + /@typescript-eslint/visitor-keys@6.19.1: + resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/types': 6.19.1 eslint-visitor-keys: 3.4.3 dev: true @@ -5044,7 +5044,7 @@ packages: '@unocss/core': 0.58.3 '@unocss/reset': 0.58.3 '@unocss/vite': 0.58.3(rollup@2.79.1)(vite@4.5.2) - vite: 4.5.2(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) transitivePeerDependencies: - rollup dev: true @@ -5122,7 +5122,7 @@ packages: /@unocss/preset-icons@0.58.3: resolution: {integrity: sha512-SA4Eu4rOQ9+zUgIyK6RacS01ygm0PJWkqKlD8ccrBqEyZapqiU+vLL+v6X8YVjoZjR+5CVgcMD5Km7zEQgqXQw==} dependencies: - '@iconify/utils': 2.1.15 + '@iconify/utils': 2.1.16 '@unocss/core': 0.58.3 ofetch: 1.3.3 transitivePeerDependencies: @@ -5242,7 +5242,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.3.2 magic-string: 0.30.5 - vite: 4.5.2(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) transitivePeerDependencies: - rollup dev: true @@ -5262,7 +5262,7 @@ packages: vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.2(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) vue: 3.4.15(typescript@5.3.3) dev: true @@ -5273,7 +5273,7 @@ packages: vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.0.12(@types/node@18.19.8) + vite: 5.0.12(@types/node@18.19.9) vue: 3.4.15(typescript@5.3.3) dev: true @@ -5553,7 +5553,7 @@ packages: typescript: optional: true dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 got: 11.8.6 typescript: 5.3.3 dev: true @@ -5675,14 +5675,14 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.89.0): + /@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.90.0): resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.89.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.90.0) dev: true /@webpack-cli/info@1.5.0(webpack-cli@4.10.0): @@ -5691,7 +5691,7 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.11.0 - webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.89.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.90.0) dev: true /@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.15.1): @@ -5703,8 +5703,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.89.0) - webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.89.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.90.0) + webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.90.0) dev: true /@xmldom/xmldom@0.8.10: @@ -5720,8 +5720,8 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /@zenuml/core@3.16.2(ts-node@10.9.2)(typescript@5.3.3): - resolution: {integrity: sha512-/w4MC/NuXI8HgyH658zKGNsWZ9gA3Q+lpb8hrJD0/7Bwxtxue7dh+8qkXj64vHX0Wa7H04H6toNtDdZczuIsMQ==} + /@zenuml/core@3.17.0(ts-node@10.9.2)(typescript@5.3.3): + resolution: {integrity: sha512-MfxTLeCDXNyiuJH8qZyuMVM76wMx8dJ5hJFpzw7/RiPHp5AaWjVt8m4L2n/+RZaNaXlNEuNT7wiGmurM4qGRxg==} engines: {node: '>=12.0.0'} dependencies: '@headlessui-float/vue': 0.11.4(vue@3.4.15) @@ -6157,8 +6157,8 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: true - /axios@1.6.5(debug@4.3.4): - resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} + /axios@1.6.6(debug@4.3.4): + resolution: {integrity: sha512-XZLZDFfXKM9U/Y/B4nNynfCRUqNyVZ4sBC/n9GDRCkq9vd2mIvKjKKsbIh1WPmHmNbg6ND7cTBY3Y2+u1G3/2Q==} dependencies: follow-redirects: 1.15.5(debug@4.3.4) form-data: 4.0.0 @@ -6185,7 +6185,7 @@ packages: - supports-color dev: true - /babel-loader@9.1.3(@babel/core@7.23.7)(webpack@5.89.0): + /babel-loader@9.1.3(@babel/core@7.23.7)(webpack@5.90.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -6195,7 +6195,7 @@ packages: '@babel/core': 7.23.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) dev: true /babel-plugin-istanbul@6.1.1: @@ -6241,7 +6241,7 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) - core-js-compat: 3.35.0 + core-js-compat: 3.35.1 transitivePeerDependencies: - supports-color dev: true @@ -6407,8 +6407,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.640 + caniuse-lite: 1.0.30001580 + electron-to-chromium: 1.4.645 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -6550,8 +6550,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + /caniuse-lite@1.0.30001580: + resolution: {integrity: sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==} dev: true /caseless@0.12.0: @@ -7069,8 +7069,8 @@ packages: engines: {node: '>= 0.6'} dev: true - /core-js-compat@3.35.0: - resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} + /core-js-compat@3.35.1: + resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} dependencies: browserslist: 4.22.2 dev: true @@ -7114,7 +7114,7 @@ packages: dependencies: '@types/node': 20.5.1 cosmiconfig: 8.3.6(typescript@5.3.3) - ts-node: 10.9.2(@types/node@18.19.8)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@18.19.9)(typescript@5.3.3) typescript: 5.3.3 dev: true @@ -7177,7 +7177,7 @@ packages: p-map: 5.5.0 dev: true - /create-jest@29.7.0(@types/node@18.19.8)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@18.19.9)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7186,7 +7186,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -7397,7 +7397,7 @@ packages: dependencies: '@cypress/request': 2.88.12 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/node': 16.18.73 + '@types/node': 16.18.75 '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.8 arch: 2.2.0 @@ -7518,7 +7518,7 @@ packages: resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} engines: {node: '>=12'} dependencies: - delaunator: 5.0.0 + delaunator: 5.0.1 dev: false /d3-dispatch@3.0.1: @@ -7939,8 +7939,8 @@ packages: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} dev: true - /delaunator@5.0.0: - resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} + /delaunator@5.0.1: + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} dependencies: robust-predicates: 3.0.2 dev: false @@ -8074,8 +8074,8 @@ packages: is-obj: 2.0.0 dev: true - /dotenv@16.3.2: - resolution: {integrity: sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==} + /dotenv@16.4.1: + resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} engines: {node: '>=12'} dev: true @@ -8109,8 +8109,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.640: - resolution: {integrity: sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==} + /electron-to-chromium@1.4.645: + resolution: {integrity: sha512-EeS1oQDCmnYsRDRy2zTeC336a/4LZ6WKqvSaM1jLocEk5ZuyszkQtCpsqvuvaIXGOUjwtvF6LTcS8WueibXvSw==} dev: true /elkjs@0.8.2: @@ -8322,35 +8322,35 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true - /esbuild@0.19.11: - resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.11 - '@esbuild/android-arm': 0.19.11 - '@esbuild/android-arm64': 0.19.11 - '@esbuild/android-x64': 0.19.11 - '@esbuild/darwin-arm64': 0.19.11 - '@esbuild/darwin-x64': 0.19.11 - '@esbuild/freebsd-arm64': 0.19.11 - '@esbuild/freebsd-x64': 0.19.11 - '@esbuild/linux-arm': 0.19.11 - '@esbuild/linux-arm64': 0.19.11 - '@esbuild/linux-ia32': 0.19.11 - '@esbuild/linux-loong64': 0.19.11 - '@esbuild/linux-mips64el': 0.19.11 - '@esbuild/linux-ppc64': 0.19.11 - '@esbuild/linux-riscv64': 0.19.11 - '@esbuild/linux-s390x': 0.19.11 - '@esbuild/linux-x64': 0.19.11 - '@esbuild/netbsd-x64': 0.19.11 - '@esbuild/openbsd-x64': 0.19.11 - '@esbuild/sunos-x64': 0.19.11 - '@esbuild/win32-arm64': 0.19.11 - '@esbuild/win32-ia32': 0.19.11 - '@esbuild/win32-x64': 0.19.11 + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 dev: true /escalade@3.1.1: @@ -8418,7 +8418,7 @@ packages: htmlparser2: 8.0.2 dev: true - /eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3): + /eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@6.19.1)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3): resolution: {integrity: sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -8431,10 +8431,10 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 - jest: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + jest: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) transitivePeerDependencies: - supports-color - typescript @@ -10414,7 +10414,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -10435,7 +10435,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@18.19.8)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@18.19.9)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10449,10 +10449,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10463,7 +10463,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@18.19.8)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@18.19.9)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -10478,7 +10478,7 @@ packages: '@babel/core': 7.23.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 babel-jest: 29.7.0(@babel/core@7.23.7) chalk: 4.1.2 ci-info: 3.9.0 @@ -10498,7 +10498,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@18.19.8)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@18.19.9)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -10539,7 +10539,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -10555,7 +10555,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.8 + '@types/node': 18.19.9 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -10577,7 +10577,7 @@ packages: chalk: 1.1.3 get-stdin: 5.0.1 glur: 1.1.2 - jest: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + jest: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) lodash: 4.17.21 mkdirp: 0.5.6 pixelmatch: 5.3.0 @@ -10624,7 +10624,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 jest-util: 29.7.0 dev: true @@ -10679,7 +10679,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -10710,7 +10710,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -10762,7 +10762,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10787,7 +10787,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.19.8 + '@types/node': 18.19.9 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -10799,7 +10799,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -10808,7 +10808,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -10817,13 +10817,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@18.19.8)(ts-node@10.9.2): + /jest@29.7.0(@types/node@18.19.9)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10836,7 +10836,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.8)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@18.19.9)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -11032,8 +11032,8 @@ packages: hasBin: true dev: true - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true /jsonfile@4.0.0: @@ -12826,7 +12826,7 @@ packages: /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: - jsonc-parser: 3.2.0 + jsonc-parser: 3.2.1 mlly: 1.5.0 pathe: 1.1.2 dev: true @@ -12859,8 +12859,8 @@ packages: engines: {node: '>=12.13.0'} dev: true - /pnpm@8.14.1: - resolution: {integrity: sha512-hWxOzZfF0/MDVOvDc80y+zcnQpXEidstD2E6HmDwEMrfuxUDbVJfOgbewYl+QhmzxPbTvo8vYvsKNmvuaqp1Mw==} + /pnpm@8.14.3: + resolution: {integrity: sha512-w+2A61g74+K37zHrlri5z6oFA+XUTscXUUEgtRh7L5M3NukDjFGlojrVgnkLpB1Kt4RhjIn6fiNl9mZWhdYS7g==} engines: {node: '>=16.14'} hasBin: true dev: true @@ -12908,7 +12908,7 @@ packages: dependencies: lilconfig: 3.0.0 postcss: 8.4.33 - ts-node: 10.9.2(@types/node@18.19.8)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@18.19.9)(typescript@5.3.3) yaml: 2.3.4 dev: false @@ -13569,26 +13569,26 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.9.5: - resolution: {integrity: sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==} + /rollup@4.9.6: + resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.5 - '@rollup/rollup-android-arm64': 4.9.5 - '@rollup/rollup-darwin-arm64': 4.9.5 - '@rollup/rollup-darwin-x64': 4.9.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.5 - '@rollup/rollup-linux-arm64-gnu': 4.9.5 - '@rollup/rollup-linux-arm64-musl': 4.9.5 - '@rollup/rollup-linux-riscv64-gnu': 4.9.5 - '@rollup/rollup-linux-x64-gnu': 4.9.5 - '@rollup/rollup-linux-x64-musl': 4.9.5 - '@rollup/rollup-win32-arm64-msvc': 4.9.5 - '@rollup/rollup-win32-ia32-msvc': 4.9.5 - '@rollup/rollup-win32-x64-msvc': 4.9.5 + '@rollup/rollup-android-arm-eabi': 4.9.6 + '@rollup/rollup-android-arm64': 4.9.6 + '@rollup/rollup-darwin-arm64': 4.9.6 + '@rollup/rollup-darwin-x64': 4.9.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 + '@rollup/rollup-linux-arm64-gnu': 4.9.6 + '@rollup/rollup-linux-arm64-musl': 4.9.6 + '@rollup/rollup-linux-riscv64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-musl': 4.9.6 + '@rollup/rollup-win32-arm64-msvc': 4.9.6 + '@rollup/rollup-win32-ia32-msvc': 4.9.6 + '@rollup/rollup-win32-x64-msvc': 4.9.6 fsevents: 2.3.3 dev: true @@ -13864,7 +13864,7 @@ packages: resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} dependencies: ansi-sequence-parser: 1.1.1 - jsonc-parser: 3.2.0 + jsonc-parser: 3.2.1 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 dev: true @@ -14053,21 +14053,21 @@ packages: spdx-license-ids: 3.0.16 dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + /spdx-exceptions@2.4.0: + resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} dev: true /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.3.0 + spdx-exceptions: 2.4.0 spdx-license-ids: 3.0.16 dev: true /spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} dependencies: - spdx-exceptions: 2.3.0 + spdx-exceptions: 2.4.0 spdx-license-ids: 3.0.16 dev: true @@ -14486,7 +14486,7 @@ packages: iterm2-version: 4.2.0 dev: true - /terser-webpack-plugin@5.3.10(esbuild@0.19.11)(webpack@5.89.0): + /terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.90.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -14503,12 +14503,12 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.22 - esbuild: 0.19.11 + esbuild: 0.19.12 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.27.0 - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) dev: true /terser@5.27.0: @@ -14711,7 +14711,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: false - /ts-node@10.9.2(@types/node@18.19.8)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@18.19.9)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -14730,7 +14730,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.8 + '@types/node': 18.19.9 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -14768,7 +14768,7 @@ packages: engines: {node: '>=18.0.0'} hasBin: true dependencies: - esbuild: 0.19.11 + esbuild: 0.19.12 get-tsconfig: 4.7.2 optionalDependencies: fsevents: 2.3.3 @@ -14831,8 +14831,8 @@ packages: engines: {node: '>=10'} dev: true - /type-fest@4.9.0: - resolution: {integrity: sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==} + /type-fest@4.10.1: + resolution: {integrity: sha512-7ZnJYTp6uc04uYRISWtiX3DSKB/fxNQT0B5o1OUeCqiQiwF+JC9+rJiZIDrPrNCLLuTqyQmh4VdQqh/ZOkv9MQ==} engines: {node: '>=16'} dev: true @@ -15094,7 +15094,7 @@ packages: '@unocss/transformer-directives': 0.58.3 '@unocss/transformer-variant-group': 0.58.3 '@unocss/vite': 0.58.3(rollup@2.79.1)(vite@4.5.2) - vite: 4.5.2(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) transitivePeerDependencies: - postcss - rollup @@ -15255,7 +15255,7 @@ packages: vfile-message: 3.1.4 dev: true - /vite-node@0.34.6(@types/node@18.19.8): + /vite-node@0.34.6(@types/node@18.19.9): resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} engines: {node: '>=v14.18.0'} hasBin: true @@ -15265,7 +15265,7 @@ packages: mlly: 1.5.0 pathe: 1.1.2 picocolors: 1.0.0 - vite: 4.5.2(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) transitivePeerDependencies: - '@types/node' - less @@ -15286,7 +15286,7 @@ packages: istanbul-lib-instrument: 5.2.1 picocolors: 1.0.0 test-exclude: 6.0.0 - vite: 4.5.2(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) transitivePeerDependencies: - supports-color dev: true @@ -15302,14 +15302,14 @@ packages: debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 4.5.2(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) workbox-build: 7.0.0 workbox-window: 7.0.0 transitivePeerDependencies: - supports-color dev: true - /vite@4.5.2(@types/node@18.19.8): + /vite@4.5.2(@types/node@18.19.9): resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -15337,7 +15337,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 esbuild: 0.18.20 postcss: 8.4.33 rollup: 3.29.4 @@ -15345,7 +15345,7 @@ packages: fsevents: 2.3.3 dev: true - /vite@5.0.12(@types/node@18.19.8): + /vite@5.0.12(@types/node@18.19.9): resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -15373,10 +15373,10 @@ packages: terser: optional: true dependencies: - '@types/node': 18.19.8 - esbuild: 0.19.11 + '@types/node': 18.19.9 + esbuild: 0.19.12 postcss: 8.4.33 - rollup: 4.9.5 + rollup: 4.9.6 optionalDependencies: fsevents: 2.3.3 dev: true @@ -15394,11 +15394,11 @@ packages: flexsearch: 0.7.43 glob-to-regexp: 0.4.1 markdown-it: 13.0.2 - vitepress: 1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.8)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3) + vitepress: 1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.9)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3) vue: 3.4.15(typescript@5.3.3) dev: true - /vitepress@1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.8)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3): + /vitepress@1.0.0-rc.39(@algolia/client-search@4.22.1)(@types/node@18.19.9)(postcss@8.4.33)(search-insights@2.13.0)(typescript@5.3.3): resolution: {integrity: sha512-EcgoRlAAp37WOxUOYv45oxyhLrcy3Upey+mKpqW3ldsg6Ol4trPndRBk2GO0QiSvEKlb9BMerk49D/bFICN6kg==} hasBin: true peerDependencies: @@ -15424,7 +15424,7 @@ packages: shikiji: 0.9.19 shikiji-core: 0.9.19 shikiji-transformers: 0.9.19 - vite: 5.0.12(@types/node@18.19.8) + vite: 5.0.12(@types/node@18.19.9) vue: 3.4.15(typescript@5.3.3) transitivePeerDependencies: - '@algolia/client-search' @@ -15487,7 +15487,7 @@ packages: dependencies: '@types/chai': 4.3.11 '@types/chai-subset': 1.3.5 - '@types/node': 18.19.8 + '@types/node': 18.19.9 '@vitest/expect': 0.34.6 '@vitest/runner': 0.34.6 '@vitest/snapshot': 0.34.6 @@ -15508,8 +15508,8 @@ packages: strip-literal: 1.3.0 tinybench: 2.6.0 tinypool: 0.7.0 - vite: 4.5.2(@types/node@18.19.8) - vite-node: 0.34.6(@types/node@18.19.8) + vite: 4.5.2(@types/node@18.19.9) + vite-node: 0.34.6(@types/node@18.19.9) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -15524,7 +15524,7 @@ packages: /vscode-json-languageservice@4.2.1: resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} dependencies: - jsonc-parser: 3.2.0 + jsonc-parser: 3.2.1 vscode-languageserver-textdocument: 1.0.11 vscode-languageserver-types: 3.17.5 vscode-nls: 5.2.0 @@ -15633,7 +15633,7 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - axios: 1.6.5(debug@4.3.4) + axios: 1.6.6(debug@4.3.4) joi: 17.12.0 lodash: 4.17.21 minimist: 1.2.8 @@ -15671,7 +15671,7 @@ packages: resolution: {integrity: sha512-nCdJLxRnYvOMFqTEX7sqQtF/hV/Jgov0Y6ICeOm1DMTlZSRRDaUsBMlEAPkEwif9uBJYdM0znv8qzfX358AGqQ==} engines: {node: '>=12.0.0'} dependencies: - '@types/node': 18.19.8 + '@types/node': 18.19.9 '@wdio/config': 7.31.1(typescript@5.3.3) '@wdio/logger': 7.26.0 '@wdio/protocols': 7.27.0 @@ -15697,7 +15697,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.89.0): + /webpack-cli@4.10.0(webpack-dev-server@4.15.1)(webpack@5.90.0): resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==} engines: {node: '>=10.13.0'} hasBin: true @@ -15718,7 +15718,7 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.89.0) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.90.0) '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.15.1) colorette: 2.0.20 @@ -15728,12 +15728,12 @@ packages: import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) - webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.89.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) + webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.90.0) webpack-merge: 5.10.0 dev: true - /webpack-dev-middleware@5.3.3(webpack@5.89.0): + /webpack-dev-middleware@5.3.3(webpack@5.90.0): resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -15744,10 +15744,10 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) dev: true - /webpack-dev-server@4.15.1(webpack-cli@4.10.0)(webpack@5.89.0): + /webpack-dev-server@4.15.1(webpack-cli@4.10.0)(webpack@5.90.0): resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} engines: {node: '>= 12.13.0'} hasBin: true @@ -15788,9 +15788,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.89.0) - webpack-dev-middleware: 5.3.3(webpack@5.89.0) + webpack: 5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.90.0) + webpack-dev-middleware: 5.3.3(webpack@5.90.0) ws: 8.16.0 transitivePeerDependencies: - bufferutil @@ -15817,8 +15817,8 @@ packages: resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} dev: true - /webpack@5.89.0(esbuild@0.19.11)(webpack-cli@4.10.0): - resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} + /webpack@5.90.0(esbuild@0.19.12)(webpack-cli@4.10.0): + resolution: {integrity: sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -15848,9 +15848,9 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.19.11)(webpack@5.89.0) + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.90.0) watchpack: 2.4.0 - webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.89.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.90.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' From 191ea24e29d92931681b41632a931c16ac6cfae6 Mon Sep 17 00:00:00 2001 From: Reda Al Sulais <u.yokozuna@gmail.com> Date: Sat, 27 Jan 2024 20:57:05 +0300 Subject: [PATCH 36/38] make pie parser async --- packages/mermaid/src/diagrams/pie/pie.spec.ts | 42 +++++++++---------- .../mermaid/src/diagrams/pie/pieParser.ts | 4 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/mermaid/src/diagrams/pie/pie.spec.ts b/packages/mermaid/src/diagrams/pie/pie.spec.ts index fb0cbeec8..f68e80efd 100644 --- a/packages/mermaid/src/diagrams/pie/pie.spec.ts +++ b/packages/mermaid/src/diagrams/pie/pie.spec.ts @@ -10,8 +10,8 @@ describe('pie', () => { beforeEach(() => db.clear()); describe('parse', () => { - it('should handle very simple pie', () => { - parser.parse(`pie + it('should handle very simple pie', async () => { + await parser.parse(`pie "ash": 100 `); @@ -19,8 +19,8 @@ describe('pie', () => { expect(sections['ash']).toBe(100); }); - it('should handle simple pie', () => { - parser.parse(`pie + it('should handle simple pie', async () => { + await parser.parse(`pie "ash" : 60 "bat" : 40 `); @@ -30,8 +30,8 @@ describe('pie', () => { expect(sections['bat']).toBe(40); }); - it('should handle simple pie with showData', () => { - parser.parse(`pie showData + it('should handle simple pie with showData', async () => { + await parser.parse(`pie showData "ash" : 60 "bat" : 40 `); @@ -43,8 +43,8 @@ describe('pie', () => { expect(sections['bat']).toBe(40); }); - it('should handle simple pie with comments', () => { - parser.parse(`pie + it('should handle simple pie with comments', async () => { + await parser.parse(`pie %% comments "ash" : 60 "bat" : 40 @@ -55,8 +55,8 @@ describe('pie', () => { expect(sections['bat']).toBe(40); }); - it('should handle simple pie with a title', () => { - parser.parse(`pie title a 60/40 pie + it('should handle simple pie with a title', async () => { + await parser.parse(`pie title a 60/40 pie "ash" : 60 "bat" : 40 `); @@ -68,8 +68,8 @@ describe('pie', () => { expect(sections['bat']).toBe(40); }); - it('should handle simple pie with an acc title (accTitle)', () => { - parser.parse(`pie title a neat chart + it('should handle simple pie with an acc title (accTitle)', async () => { + await parser.parse(`pie title a neat chart accTitle: a neat acc title "ash" : 60 "bat" : 40 @@ -84,8 +84,8 @@ describe('pie', () => { expect(sections['bat']).toBe(40); }); - it('should handle simple pie with an acc description (accDescr)', () => { - parser.parse(`pie title a neat chart + it('should handle simple pie with an acc description (accDescr)', async () => { + await parser.parse(`pie title a neat chart accDescr: a neat description "ash" : 60 "bat" : 40 @@ -100,8 +100,8 @@ describe('pie', () => { expect(sections['bat']).toBe(40); }); - it('should handle simple pie with a multiline acc description (accDescr)', () => { - parser.parse(`pie title a neat chart + it('should handle simple pie with a multiline acc description (accDescr)', async () => { + await parser.parse(`pie title a neat chart accDescr { a neat description on multiple lines @@ -119,8 +119,8 @@ describe('pie', () => { expect(sections['bat']).toBe(40); }); - it('should handle simple pie with positive decimal', () => { - parser.parse(`pie + it('should handle simple pie with positive decimal', async () => { + await parser.parse(`pie "ash" : 60.67 "bat" : 40 `); @@ -131,12 +131,12 @@ describe('pie', () => { }); it('should handle simple pie with negative decimal', () => { - expect(() => { - parser.parse(`pie + expect(async () => { + await parser.parse(`pie "ash" : -60.67 "bat" : 40.12 `); - }).toThrowError(); + }).rejects.toThrowError(); }); }); diff --git a/packages/mermaid/src/diagrams/pie/pieParser.ts b/packages/mermaid/src/diagrams/pie/pieParser.ts index a958089ba..fbdc603d6 100644 --- a/packages/mermaid/src/diagrams/pie/pieParser.ts +++ b/packages/mermaid/src/diagrams/pie/pieParser.ts @@ -13,8 +13,8 @@ const populateDb = (ast: Pie, db: PieDB) => { }; export const parser: ParserDefinition = { - parse: (input: string): void => { - const ast: Pie = parse('pie', input); + parse: async (input: string): Promise<void> => { + const ast: Pie = await parse('pie', input); log.debug(ast); populateDb(ast, db); }, From 00423ed1524ce54f45867570f95d609963b34d8a Mon Sep 17 00:00:00 2001 From: Sidharth Vinod <sidharthv96@gmail.com> Date: Sun, 11 Feb 2024 20:05:08 +0530 Subject: [PATCH 37/38] Fix config --- packages/mermaid/src/config.type.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index a5cb190ba..fd6649032 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -152,7 +152,6 @@ export interface MermaidConfig { wrap?: boolean; fontSize?: number; } - /** * The object containing configurations specific for packet diagrams. * @@ -185,16 +184,6 @@ export interface PacketDiagramConfig extends BaseDiagramConfig { */ paddingY?: number; } - -/** - * The object containing configurations specific for block diagrams. - * - * This interface was referenced by `MermaidConfig`'s JSON-Schema - * via the `definition` "BlockDiagramConfig". - */ -export interface BlockDiagramConfig extends BaseDiagramConfig { - padding?: number; -} /** * This interface was referenced by `MermaidConfig`'s JSON-Schema * via the `definition` "BaseDiagramConfig". @@ -209,6 +198,15 @@ export interface BaseDiagramConfig { */ useMaxWidth?: boolean; } +/** + * The object containing configurations specific for block diagrams. + * + * This interface was referenced by `MermaidConfig`'s JSON-Schema + * via the `definition` "BlockDiagramConfig". + */ +export interface BlockDiagramConfig extends BaseDiagramConfig { + padding?: unknown; +} /** * The object containing configurations specific for c4 diagrams * From 25cd86feecaf99f355a353d34a3cc8d549110dd5 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod <sidharthv96@gmail.com> Date: Sun, 11 Feb 2024 20:26:43 +0530 Subject: [PATCH 38/38] Fix docs --- docs/config/setup/interfaces/mermaidAPI.RenderResult.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md index c468df243..aebd88b23 100644 --- a/docs/config/setup/interfaces/mermaidAPI.RenderResult.md +++ b/docs/config/setup/interfaces/mermaidAPI.RenderResult.md @@ -14,15 +14,6 @@ • `Optional` **bindFunctions**: (`element`: `Element`) => `void` -Bind function to be called after the svg has been inserted into the DOM. -This is necessary for adding event listeners to the elements in the svg. - -```js -const { svg, bindFunctions } = mermaidAPI.render('id1', 'graph TD;A-->B'); -div.innerHTML = svg; -bindFunctions?.(div); // To call bindFunctions only if it's present. -``` - #### Type declaration ▸ (`element`): `void`