From e3c426de8662dc0677da0e3f8c78563a4e1e582e Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Tue, 27 Aug 2024 08:37:39 -0700 Subject: [PATCH 001/492] Initial work on updating to new renderer --- cypress/platform/yari.html | 32 ++++ .../mermaid/src/diagrams/class/classDb.ts | 8 + .../src/diagrams/class/classDiagram-v2.ts | 2 +- .../class/classRenderer-v3-unified.ts | 87 +++++++++++ .../mermaid/src/diagrams/class/classTypes.ts | 18 +++ .../rendering-elements/nodes.js | 2 + .../rendering-elements/shapes/classBox.ts | 139 ++++++++++++++++++ 7 files changed, 287 insertions(+), 1 deletion(-) create mode 100644 cypress/platform/yari.html create mode 100644 packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts create mode 100644 packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts diff --git a/cypress/platform/yari.html b/cypress/platform/yari.html new file mode 100644 index 000000000..5031a1ed2 --- /dev/null +++ b/cypress/platform/yari.html @@ -0,0 +1,32 @@ + + +
+      classDiagram
+      class Square~Shape~{
+        int id
+        List~int~ position
+        setPoints(List~int~ points)
+        getPoints() List~int~
+      }
+
+Square : -List~string~ messages
+Square : +setMessages(List~string~ messages)
+Square : +getMessages() List~string~
+Square : +getDistanceMatrix() List~List~int~~
+    
+ +
classDiagram class Duck{ +String beakColor +swim() +quack() }
+ + + + diff --git a/packages/mermaid/src/diagrams/class/classDb.ts b/packages/mermaid/src/diagrams/class/classDb.ts index 1fec5c2dc..06046f882 100644 --- a/packages/mermaid/src/diagrams/class/classDb.ts +++ b/packages/mermaid/src/diagrams/class/classDb.ts @@ -80,6 +80,8 @@ export const addClass = function (_id: string) { id: name, type: type, label: name, + text: `${name}${type ? `<${type}>` : ''}`, + shape: 'classBox', cssClasses: [], methods: [], members: [], @@ -472,6 +474,11 @@ export const setCssStyle = function (id: string, styles: string[]) { } }; +export const getData = () => { + const config = getConfig(); + return { nodes: classes, edges: relations, other: {}, config, direction: getDirection() }; +}; + export default { setAccTitle, getAccTitle, @@ -509,4 +516,5 @@ export default { getNamespace, getNamespaces, setCssStyle, + getData, }; diff --git a/packages/mermaid/src/diagrams/class/classDiagram-v2.ts b/packages/mermaid/src/diagrams/class/classDiagram-v2.ts index ec5398d29..6a3747e41 100644 --- a/packages/mermaid/src/diagrams/class/classDiagram-v2.ts +++ b/packages/mermaid/src/diagrams/class/classDiagram-v2.ts @@ -3,7 +3,7 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; import parser from './parser/classDiagram.jison'; import db from './classDb.js'; import styles from './styles.js'; -import renderer from './classRenderer-v2.js'; +import renderer from './classRenderer-v3-unified.js'; export const diagram: DiagramDefinition = { parser, diff --git a/packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts b/packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts new file mode 100644 index 000000000..404a53c6c --- /dev/null +++ b/packages/mermaid/src/diagrams/class/classRenderer-v3-unified.ts @@ -0,0 +1,87 @@ +import { getConfig } from '../../diagram-api/diagramAPI.js'; +import type { DiagramStyleClassDef } from '../../diagram-api/types.js'; +import { log } from '../../logger.js'; +import { getDiagramElements } from '../../rendering-util/insertElementsForSize.js'; +import { render } from '../../rendering-util/render.js'; +import { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js'; +import type { LayoutData } from '../../rendering-util/types.js'; +import utils from '../../utils.js'; +// import { CSS_DIAGRAM, DEFAULT_NESTED_DOC_DIR } from './stateCommon.js'; + +/** + * Get the direction from the statement items. + * Look through all of the documents (docs) in the parsedItems + * Because is a _document_ direction, the default direction is not necessarily the same as the overall default _diagram_ direction. + * @param parsedItem - the parsed statement item to look through + * @param defaultDir - the direction to use if none is found + * @returns The direction to use + */ +export const getDir = (parsedItem: any, defaultDir = DEFAULT_NESTED_DOC_DIR) => { + if (!parsedItem.doc) { + return defaultDir; + } + + let dir = defaultDir; + + for (const parsedItemDoc of parsedItem.doc) { + if (parsedItemDoc.stmt === 'dir') { + dir = parsedItemDoc.value; + } + } + + return dir; +}; + +export const getClasses = function ( + text: string, + diagramObj: any +): Map { + // diagramObj.db.extract(diagramObj.db.getRootDocV2()); + return diagramObj.db.getClasses(); +}; + +export const draw = async function (text: string, id: string, _version: string, diag: any) { + log.info('REF0:'); + log.info('Drawing class diagram (v3)', id); + const { securityLevel, state: conf, layout } = getConfig(); + // Extracting the data from the parsed structure into a more usable form + // Not related to the refactoring, but this is the first step in the rendering process + // diag.db.extract(diag.db.getRootDocV2()); + + //const DIR = getDir(diag.db.getRootDocV2()); + + // The getData method provided in all supported diagrams is used to extract the data from the parsed structure + // into the Layout data format + const data4Layout = diag.db.getData() as LayoutData; + + // Create the root SVG - the element is the div containing the SVG element + const { element, svg } = getDiagramElements(id, securityLevel); + + data4Layout.type = diag.type; + data4Layout.layoutAlgorithm = layout; + + // TODO: Should we move these two to baseConfig? These types are not there in StateConfig. + + data4Layout.nodeSpacing = conf?.nodeSpacing || 50; + data4Layout.rankSpacing = conf?.rankSpacing || 50; + data4Layout.markers = ['barb']; + data4Layout.diagramId = id; + await render(data4Layout, svg, element); + const padding = 8; + utils.insertTitle( + element, + 'statediagramTitleText', + conf?.titleTopMargin ?? 25, + diag.db.getDiagramTitle() + ); + + const CSS_DIAGRAM = 'classDiagram'; + + setupViewPortForSVG(svg, padding, CSS_DIAGRAM, conf?.useMaxWidth ?? true); +}; + +export default { + getClasses, + draw, + getDir, +}; diff --git a/packages/mermaid/src/diagrams/class/classTypes.ts b/packages/mermaid/src/diagrams/class/classTypes.ts index f1955a224..cb3ba8325 100644 --- a/packages/mermaid/src/diagrams/class/classTypes.ts +++ b/packages/mermaid/src/diagrams/class/classTypes.ts @@ -5,6 +5,7 @@ export interface ClassNode { id: string; type: string; label: string; + text: string; cssClasses: string[]; methods: ClassMember[]; members: ClassMember[]; @@ -30,6 +31,7 @@ export class ClassMember { cssStyle!: string; memberType!: 'method' | 'attribute'; visibility!: Visibility; + text: string; /** * denote if static or to determine which css class to apply to the node * @defaultValue '' @@ -50,6 +52,7 @@ export class ClassMember { this.memberType = memberType; this.visibility = ''; this.classifier = ''; + this.text = ''; const sanitizedInput = sanitizeText(input, getConfig()); this.parseMember(sanitizedInput); } @@ -118,6 +121,21 @@ export class ClassMember { } this.classifier = potentialClassifier; + this.text = `${this.visibility}${this.id}${this.memberType === 'method' ? `(${this.parameters})${this.returnType ? ' : ' + this.returnType : ''}` : ''}`; //.replaceAll('~', '<'); + const combinedText = `${this.visibility}${this.id}${this.memberType === 'method' ? `(${this.parameters})${this.returnType ? ' : ' + this.returnType : ''}` : ''}`; + if (combinedText.includes('~')) { + let count = (combinedText.match(/~/g) ?? []).length; + + // Replace all '~' with '>' + let replacedRaw = combinedText.replaceAll('~', '>'); + + // Replace the first half of '>' with '<' + while (count > 0) { + replacedRaw = replacedRaw.replace('>', '<'); + count -= 2; // Each iteration replaces one '>' with '<', so reduce count by 2 + } + this.text = replacedRaw; + } } parseClassifier() { diff --git a/packages/mermaid/src/rendering-util/rendering-elements/nodes.js b/packages/mermaid/src/rendering-util/rendering-elements/nodes.js index 2f69a36bc..5b6ce08d5 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/nodes.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/nodes.js @@ -22,6 +22,7 @@ import { lean_left } from './shapes/leanLeft.js'; import { trapezoid } from './shapes/trapezoid.js'; import { inv_trapezoid } from './shapes/invertedTrapezoid.js'; import { labelRect } from './shapes/labelRect.js'; +import { classBox } from './shapes/classBox.js'; const shapes = { state, @@ -47,6 +48,7 @@ const shapes = { trapezoid, inv_trapezoid, labelRect, + classBox, }; const nodeElems = new Map(); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts new file mode 100644 index 000000000..86fb40a62 --- /dev/null +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts @@ -0,0 +1,139 @@ +import { getNodeClasses } from './util.js'; +import { getConfig } from '$root/diagram-api/diagramAPI.js'; +import { createText } from '../../createText.js'; +import { select } from 'd3'; +import type { Node } from '$root/rendering-util/types.d.ts'; +import { evaluate } from '$root/diagrams/common/common.js'; +import { calculateTextDimensions, calculateTextWidth } from '$root/utils.js'; +import { styles2String } from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js'; + +export const classBox = async (parent: SVGAElement, node: Node): Promise => { + const { labelStyles, nodeStyles } = styles2String(node); + node.labelStyle = labelStyles; + + const mainGroup = parent + .insert('g') + .attr('class', getNodeClasses(node)) + .attr('style', nodeStyles) + .attr('id', node.domId || node.id); + let labelGroup = null; + let membersGroup = null; + let methodsGroup = null; + + let labelGroupHeight = 0; + let membersGroupHeight = 0; + + const config = getConfig(); + + const PADDING = config.class.padding; + const GAP = PADDING; + + if (node.label) { + labelGroup = mainGroup.insert('g').attr('class', 'label-group'); + // TODO: Add Padding + await helper(labelGroup, node, 0); + const labelGroupBBox = labelGroup.node().getBBox(); + labelGroupHeight = labelGroupBBox.height; + } + + if (node.members) { + membersGroup = mainGroup.insert('g').attr('class', 'members-group'); + let yOffset = 0; + for (const member of node.members) { + await helper(membersGroup, member, yOffset); + yOffset += calculateTextDimensions(member.text, config).height; + } + membersGroupHeight = membersGroup.node().getBBox().height; + membersGroup.attr('transform', `translate(0, ${labelGroupHeight + GAP * 3})`); + } + + if (node.methods) { + methodsGroup = mainGroup.insert('g').attr('class', 'methods-group'); + let methodsYOffset = 0; + for (const method of node.methods) { + await helper(methodsGroup, method, methodsYOffset); + methodsYOffset += calculateTextDimensions(method.text, config).height; + } + // TODO: Update transform + methodsGroup.attr( + 'transform', + `translate(0, ${labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 5 : GAP * 3)})` + ); + } + + const mainGroupBBox = mainGroup.node().getBBox(); + const labelGroupBBox = labelGroup.node().getBBox(); + // Center label + labelGroup.attr( + 'transform', + `translate(${mainGroupBBox.width / 2 - labelGroupBBox.width / 2}, 0)` + ); + + // Insert the rectangle around the main group + mainGroup + .insert('rect', ':first-child') + .attr('class', 'basic label-container') + .attr('style', nodeStyles) + .attr('data-id', 'abc') + .attr('data-et', 'node') + .attr('x', mainGroupBBox.x - PADDING) + .attr('y', mainGroupBBox.y - PADDING) + .attr('width', mainGroupBBox.width + 2 * PADDING) + .attr('height', mainGroupBBox.height + 2 * PADDING); + + // Render separating lines. + if (node.label) { + mainGroup + .insert('line') + .attr('x1', 0 - PADDING) + .attr('y1', labelGroupHeight - GAP) + .attr('x2', mainGroupBBox.width + PADDING) + .attr('y2', labelGroupHeight - GAP) + .attr('class', 'divider'); + } + + if (node.members.length > 0 && node.methods.length > 0) { + mainGroup + .insert('line') + .attr('x1', 0 - PADDING) + .attr('y1', labelGroupHeight + membersGroupHeight + GAP * 2) + .attr('x2', mainGroupBBox.width + PADDING) + .attr('y2', labelGroupHeight + membersGroupHeight + GAP * 2) + .attr('class', 'divider'); + } + + return mainGroup; +}; + +const helper = async (parentGroup, node, yOffset) => { + const textEl = parentGroup.insert('g').attr('class', 'label').attr('style', node.labelStyle); + const textContent = node.text; + const config = getConfig(); + const text = await createText( + textEl, + textContent, + { + width: calculateTextWidth(textContent, config), + classes: 'markdown-node-label', + style: node.labelStyle, + useHtmlLabels: true, + }, + config + ); + + let bbox = text.getBBox(); + + if (evaluate(config.flowchart.htmlLabels)) { + const div = text.children[0]; + const dv = select(text); + + bbox = div.getBoundingClientRect(); + dv.attr('width', bbox.width); + dv.attr('height', bbox.height); + } + + textEl.attr('transform', 'translate(' + 0 + ', ' + (-bbox.height / 2 + yOffset) + ')'); + if (node.centerLabel) { + textEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')'); + } +}; From 27f7b615cc7faddc289b5abab204e48736524711 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 28 Aug 2024 10:50:13 -0700 Subject: [PATCH 002/492] Add more tests / samples --- cypress/platform/yari.html | 308 +++++++++++++++++++++++++++++++++++-- 1 file changed, 292 insertions(+), 16 deletions(-) diff --git a/cypress/platform/yari.html b/cypress/platform/yari.html index 5031a1ed2..4459aeb37 100644 --- a/cypress/platform/yari.html +++ b/cypress/platform/yari.html @@ -1,21 +1,261 @@ -
-      classDiagram
-      class Square~Shape~{
-        int id
-        List~int~ position
-        setPoints(List~int~ points)
-        getPoints() List~int~
-      }
-
-Square : -List~string~ messages
-Square : +setMessages(List~string~ messages)
-Square : +getMessages() List~string~
-Square : +getDistanceMatrix() List~List~int~~
-    
- -
classDiagram class Duck{ +String beakColor +swim() +quack() }
+

Class Nodes

+
+
+

Basic Class

+
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+        
+
+
+

Complex Class

+
+                classDiagram
+                class Square~Shape~{
+                  int id
+                  List~int~ position
+                  setPoints(List~int~ points)
+                  getPoints() List~int~
+                }
+          
+          Square : -List~string~ messages
+          Square : +setMessages(List~string~ messages)
+          Square : +getMessages() List~string~
+          Square : +getDistanceMatrix() List~List~int~~
+              
+
+
+

No Attributes

+
+          classDiagram
+          class Duck {
+            +swim()
+            +quack()
+          }
+        
+
+
+

No Methods

+
+          classDiagram
+          class Duck {
+            +String beakColor
+          }
+        
+
+
+

Only Class Name

+

Empty line as attribute

+
+          classDiagram
+          class Duck {
+            
+          }
+        
+
+
+

Visibility and Types

+

(Further tilde testing)

+
+ classDiagram class Duck{ ~interface~~~ +String beakColor #swim() ~quack()~~~ + -test()~~~~~~~ +deposit(amount) bool } +
+
+
+

Label

+
+          classDiagram
+          class Animal~test~["Animal with a label"]
+        
+
+
+

Link

+
+          classDiagram
+          class Shape
+          link Shape "https://www.github.com" "This is a tooltip for a link"
+        
+
+
+

Click

+
+          classDiagram
+          class Shape
+          click Shape href "https://www.github.com" "This is a tooltip for a link"
+        
+
+
+

Neutral Theme

+
+          ---
+          config:
+            theme: neutral
+          ---
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+        
+
+
+

Dark Theme

+
+          ---
+          config:
+            theme: dark
+          ---
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+        
+
+
+

Forest Theme

+
+          ---
+          config:
+            theme: forest
+          ---
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+        
+
+
+

Base Theme

+
+          ---
+          config:
+            theme: base
+          ---
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+        
+
+
+

Custom Theme

+
+          %%{
+            init: {
+              'theme': 'base',
+              'themeVariables': {
+                'primaryColor': '#BB2528',
+                'primaryTextColor': '#fff',
+                'primaryBorderColor': '#7C0000',
+                'lineColor': '#F8B229',
+                'secondaryColor': '#006100',
+                'tertiaryColor': '#fff'
+              }
+            }
+          }%%
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+        
+
+
+

Styling within Diagram

+
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+          style Duck fill:#f9f,stroke:#333,stroke-width:8px
+        
+
+
+

Styling with Class

+
+          classDiagram
+          class Duck {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+          class Duck:::styleClass
+        
+
+
+

Diagram Testing

+
+
+

Class Nodes Only

+
+          ---
+          title: Animal example
+          ---
+          classDiagram
+              Animal : +int age
+              Animal : +String gender
+              Animal: +isMammal()
+              Animal: +mate()
+              class Duck{
+                  +String beakColor
+                  +swim()
+                  +quack()
+              }
+              class Fish{
+                  -int sizeInFeet
+                  -canEat()
+              }
+              class Zebra{
+                  +bool is_wild
+                  +run()
+              }
+        
+
+
+

Class Nodes LR

+
+          ---
+          title: Animal example
+          ---
+          classDiagram
+              direction LR
+              Animal : +int age
+              Animal : +String gender
+              Animal: +isMammal()
+              Animal: +mate()
+              class Duck{
+                  +String beakColor
+                  +swim()
+                  +quack()
+              }
+              class Fish{
+                  -int sizeInFeet
+                  -canEat()
+              }
+              class Zebra{
+                  +bool is_wild
+                  +run()
+              }
+        
+
+
+ From 8745daa701d1e0a154bb90d657224389a843914e Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 28 Aug 2024 10:53:15 -0700 Subject: [PATCH 003/492] Add handling for escape type --- packages/mermaid/src/rendering-util/handle-markdown-text.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mermaid/src/rendering-util/handle-markdown-text.ts b/packages/mermaid/src/rendering-util/handle-markdown-text.ts index 4b6a04428..1bff5a977 100644 --- a/packages/mermaid/src/rendering-util/handle-markdown-text.ts +++ b/packages/mermaid/src/rendering-util/handle-markdown-text.ts @@ -85,6 +85,8 @@ export function markdownToHTML(markdown: string, { markdownAutoWrap }: MermaidCo return ''; } else if (node.type === 'html') { return `${node.text}`; + } else if (node.type === 'escape') { + return node.text; } return `Unsupported markdown: ${node.type}`; } From 191e4217fc3f968777cc17e734d494b4c56273ff Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 28 Aug 2024 10:54:09 -0700 Subject: [PATCH 004/492] Adjust classNode text when label is set --- packages/mermaid/src/diagrams/class/classDb.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mermaid/src/diagrams/class/classDb.ts b/packages/mermaid/src/diagrams/class/classDb.ts index 06046f882..32d007634 100644 --- a/packages/mermaid/src/diagrams/class/classDb.ts +++ b/packages/mermaid/src/diagrams/class/classDb.ts @@ -58,6 +58,8 @@ export const setClassLabel = function (_id: string, label: string) { const { className } = splitClassNameAndType(id); classes.get(className)!.label = label; + classes.get(className)!.text = + `${label}${classes.get(className)!.type ? `<${classes.get(className)!.type}>` : ''}`; }; /** From 20a58d6dbb1ba7b1296538717105d2bf80fc692b Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 28 Aug 2024 10:56:14 -0700 Subject: [PATCH 005/492] Add special handling to avoid markdown to HTML issues --- .../mermaid/src/diagrams/class/classTypes.ts | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/packages/mermaid/src/diagrams/class/classTypes.ts b/packages/mermaid/src/diagrams/class/classTypes.ts index cb3ba8325..4ac125fad 100644 --- a/packages/mermaid/src/diagrams/class/classTypes.ts +++ b/packages/mermaid/src/diagrams/class/classTypes.ts @@ -121,20 +121,45 @@ export class ClassMember { } this.classifier = potentialClassifier; - this.text = `${this.visibility}${this.id}${this.memberType === 'method' ? `(${this.parameters})${this.returnType ? ' : ' + this.returnType : ''}` : ''}`; //.replaceAll('~', '<'); + this.text = `${this.visibility}${this.id}${this.memberType === 'method' ? `(${this.parameters})${this.returnType ? ' : ' + this.returnType : ''}` : ''}`; const combinedText = `${this.visibility}${this.id}${this.memberType === 'method' ? `(${this.parameters})${this.returnType ? ' : ' + this.returnType : ''}` : ''}`; if (combinedText.includes('~')) { - let count = (combinedText.match(/~/g) ?? []).length; + const numOfTildes = (combinedText.substring(1).match(/~/g) ?? []).length; + let count = numOfTildes; + if (count !== 1) { + const odd = count % 2 > 0; - // Replace all '~' with '>' - let replacedRaw = combinedText.replaceAll('~', '>'); + // Replace all '~' with '>' + let replacedRaw = combinedText.substring(1).replaceAll('~', '>'); - // Replace the first half of '>' with '<' - while (count > 0) { - replacedRaw = replacedRaw.replace('>', '<'); - count -= 2; // Each iteration replaces one '>' with '<', so reduce count by 2 + // Replace the first half of '>' with '<' + while (count > 0) { + replacedRaw = replacedRaw.replace('>', '<'); + count -= 2; // Each iteration replaces one '>' with '<', so reduce count by 2 + } + if (odd) { + if (this.memberType === 'method') { + replacedRaw = replacedRaw.replace('<', '~'); + } else { + // Replace the middle occurrence of '<' with '~' + const ltOccurrences = replacedRaw.match(/</g) ?? []; + if (ltOccurrences.length > 1) { + let ltCount = 0; + + replacedRaw = replacedRaw.replace(/</g, (match) => { + ltCount++; + return ltCount === ltOccurrences.length ? '~' : match; + }); + } + } + } + this.text = this.text.charAt(0) + replacedRaw; + if (this.visibility === '~') { + this.text = this.text.replace('~', '\\~'); + } + } else if (count === 1 && this.visibility === '~') { + this.text = this.text.replace('~', '\\~'); } - this.text = replacedRaw; } } From 9ac20a5cb8a9bb75d786864e16f3a780f2b4c207 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 28 Aug 2024 11:00:31 -0700 Subject: [PATCH 006/492] Add styling compatibility to shape --- .../rendering-elements/shapes/classBox.ts | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts index 86fb40a62..fac9253b8 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/classBox.ts @@ -1,21 +1,18 @@ -import { getNodeClasses } from './util.js'; +import { getNodeClasses, updateNodeBounds } from './util.js'; import { getConfig } from '$root/diagram-api/diagramAPI.js'; import { createText } from '../../createText.js'; import { select } from 'd3'; import type { Node } from '$root/rendering-util/types.d.ts'; import { evaluate } from '$root/diagrams/common/common.js'; import { calculateTextDimensions, calculateTextWidth } from '$root/utils.js'; -import { styles2String } from '$root/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js'; export const classBox = async (parent: SVGAElement, node: Node): Promise => { - const { labelStyles, nodeStyles } = styles2String(node); - node.labelStyle = labelStyles; + const styles = node.styles.join(';'); const mainGroup = parent .insert('g') - .attr('class', getNodeClasses(node)) - .attr('style', nodeStyles) - .attr('id', node.domId || node.id); + .attr('class', getNodeClasses(node)) // 'styleClass' + .attr('id', node.domId ?? node.id); let labelGroup = null; let membersGroup = null; let methodsGroup = null; @@ -25,12 +22,11 @@ export const classBox = async (parent: SVGAElement, node: Node): Promise 0 || node.methods.length > 0)) { mainGroup .insert('line') .attr('x1', 0 - PADDING) @@ -102,6 +97,7 @@ export const classBox = async (parent: SVGAElement, node: Node): Promise Date: Wed, 28 Aug 2024 12:24:42 -0700 Subject: [PATCH 007/492] Add support for classifiers in text attribute --- packages/mermaid/src/diagrams/class/classTypes.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/mermaid/src/diagrams/class/classTypes.ts b/packages/mermaid/src/diagrams/class/classTypes.ts index 4ac125fad..adeae2aeb 100644 --- a/packages/mermaid/src/diagrams/class/classTypes.ts +++ b/packages/mermaid/src/diagrams/class/classTypes.ts @@ -161,6 +161,12 @@ export class ClassMember { this.text = this.text.replace('~', '\\~'); } } + + if (this.classifier === '$') { + this.text = `${this.text}`; + } else if (this.classifier === '*') { + this.text = `${this.text}`; + } } parseClassifier() { From 97186504b5543eac6ef19d8ab61d945a594bdd7f Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 28 Aug 2024 12:25:25 -0700 Subject: [PATCH 008/492] Add classifier test diagram --- cypress/platform/yari.html | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cypress/platform/yari.html b/cypress/platform/yari.html index 4459aeb37..0046813eb 100644 --- a/cypress/platform/yari.html +++ b/cypress/platform/yari.html @@ -64,10 +64,20 @@

Visibility and Types

(Further tilde testing)

- classDiagram class Duck{ ~interface~~~ +String beakColor #swim() ~quack()~~~ + classDiagram class Duck { ~interface~~~ +String beakColor #swim() ~quack()~~~ -test()~~~~~~~ +deposit(amount) bool }
+
+

Additional Classifiers

+

(* Abstract | $ Static)

+
+ classDiagram class Square~Shape~{ int id* List~int~ position* setPoints(List~int~ points)* + getPoints()* List~int~ } Square : -List~string~ messages* Square : + +setMessages(List~string~ messages)* Square : +getMessages()$ List~string~ Square : + +getDistanceMatrix() List~List~int~~ int$ +
+

Label


From b67c931f18e9942833ab08e433091c5645c516ea Mon Sep 17 00:00:00 2001
From: yari-dewalt 
Date: Wed, 28 Aug 2024 12:26:09 -0700
Subject: [PATCH 009/492] Update snapshot to include new data

---
 packages/mermaid/src/diagrams/class/classDiagram.spec.ts | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts
index 9804b325e..9def3ff1a 100644
--- a/packages/mermaid/src/diagrams/class/classDiagram.spec.ts
+++ b/packages/mermaid/src/diagrams/class/classDiagram.spec.ts
@@ -406,11 +406,14 @@ class C13["With Città foreign language"]
               "classifier": "",
               "id": "idCard : IdCard",
               "memberType": "attribute",
+              "text": "-idCard : IdCard",
               "visibility": "-",
             },
           ],
           "methods": [],
+          "shape": "classBox",
           "styles": [],
+          "text": "Student",
           "type": "",
         }
       `);

From b7790ba6b5cd862ace174725eda72b5eb5fd2eee Mon Sep 17 00:00:00 2001
From: yari-dewalt 
Date: Fri, 13 Sep 2024 12:40:59 -0700
Subject: [PATCH 010/492] Add diagrams for testing

---
 cypress/platform/yari.html | 264 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 259 insertions(+), 5 deletions(-)

diff --git a/cypress/platform/yari.html b/cypress/platform/yari.html
index 0046813eb..ec1ae90b4 100644
--- a/cypress/platform/yari.html
+++ b/cypress/platform/yari.html
@@ -13,6 +13,13 @@
           }
         
+
+

Basic Class

+
+          flowchart TD
+            Start --> Stop
+        
+

Complex Class

@@ -72,10 +79,10 @@
         

Additional Classifiers

(* Abstract | $ Static)

- classDiagram class Square~Shape~{ int id* List~int~ position* setPoints(List~int~ points)* - getPoints()* List~int~ } Square : -List~string~ messages* Square : + classDiagram class Square~Shape~ { int id* List~int~ position* setPoints(List~int~ + points)* getPoints()* List~int~ } Square : -List~string~ messages$ Square : +setMessages(List~string~ messages)* Square : +getMessages()$ List~string~ Square : - +getDistanceMatrix() List~List~int~~ int$ + +getDistanceMatrix() List~List~int~~$
@@ -85,6 +92,64 @@ class Animal~test~["Animal with a label"]
+
+

Spacing

+

(Fix ensures consistent spacing rules)

+

(No space or single space?)

+
+          classDiagram
+          class ClassName {
+          -attribute:type
+          -            attribute : type
+               test
+          
+          + GetAttribute() type                 
+          +     GetAttribute() type
+          }
+        
+
+
+

Annotation

+
+          classDiagram
+          class Shape
+          <<interface>> Shape
+          Shape : noOfVertices
+          Shape : draw()
+        
+
+
+

Long Class Name Text

+
+          classDiagram
+          class ThisIsATestForALongClassName {
+            <<interface>>
+            noOfLetters
+            delete()
+          }
+        
+
+
+

Long Annotation Text

+
+          classDiagram
+          class Shape
+          <<superlongannotationtext>> Shape
+          Shape : noOfVertices
+          Shape : draw()
+        
+
+
+

Long Member Text

+
+          classDiagram
+          class Shape
+          <<interface>> Shape
+          Shape : noOfVertices
+          Shape : longtexttestkeepgoingandgoing
+          Shape : draw()
+        
+

Link

@@ -101,6 +166,23 @@
           click Shape href "https://www.github.com" "This is a tooltip for a link"
         
+
+

Hand Drawn

+
+          ---
+          config:
+            look: handDrawn
+            htmlLabels: true
+          ---
+          classDiagram
+          class Hand {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+          style Hand fill:#f9f,stroke:#29f,stroke-width:2px
+        
+

Neutral Theme

@@ -198,7 +280,28 @@
         
-

Styling with Class

+

Styling with classDef Statement

+
+          classDiagram
+          class Duck:::bold {
+            +String beakColor
+            +swim()
+            +quack()
+          }
+
+          class Dog {
+            +int numTeeth
+            +bark()
+          }
+
+          cssClass "Duck,Dog" pink
+
+          classDef pink fill:#f9f
+          classDef bold stroke:#333,stroke-width:6px,color:#fff
+        
+
+
+

Styling with Class in Stylesheet

           classDiagram
           class Duck {
@@ -265,6 +368,156 @@
               }
         
+
+

Relations

+
+          classDiagram
+            classA <|-- classB
+            classC *-- classD
+            classE o-- classF
+            classG <-- classH
+            classI -- classJ
+            classK <.. classL
+            classM <|.. classN
+            classO .. classP
+        
+
+
+

Two Way Relation

+
+          classDiagram
+          class Animal {
+            int size
+            walk()
+          }
+          class Zebra {
+            int size
+            walk()
+          }
+            Animal o--|> Zebra
+
+        
+
+
+

Relations with Labels

+
+          classDiagram
+            classA <|-- classB : implements
+            classC *-- classD : composition
+            classE o-- classF : aggregation
+        
+
+
+

Cardinality / Multiplicity

+
+          classDiagram
+            Customer "1" --> "*" Ticket
+            Student "1" --> "1..*" Course
+            Galaxy --> "many" Star : Contains
+        
+
+
+

Complex Relations with Theme

+
+          ---
+          config:
+            theme: forest
+            look: handDrawn
+          ---
+          classDiagram
+            direction RL
+            class Student {
+              -idCard : IdCard
+            }
+            class IdCard{
+              -id : int
+              -name : string
+            }
+            class Bike{
+              -id : int
+              -name : string
+            }
+            Student "1" --o "1" IdCard : carries
+            Student "1" --o "1" Bike : rides
+        
+
+
+

Notes

+
+          classDiagram
+            note "This is a general note"
+            note for MyClass "This is a note for a class"
+            class MyClass
+        
+
+
+

Namespaces

+
+          classDiagram
+            namespace BaseShapes {
+                class Triangle
+                class Rectangle {
+                  double width
+                  double height
+                }
+            }
+        
+
+
+

Full Example

+
+          ---
+          title: Animal example
+          ---
+          classDiagram
+              note "From Duck till Zebra"
+              Animal <|--|> Duck
+              note for Duck "can fly\ncan swim\ncan dive\ncan help in debugging"
+              Animal <|-- Fish
+              Animal <|--|> Zebra
+              Animal : +int age
+              Animal : +String gender
+              Animal: +isMammal()
+              Animal: +mate()
+              class Duck{
+                  +String beakColor
+                  +swim()
+                  +quack()
+              }
+              class Fish{
+                  -int sizeInFeet
+                  -canEat()
+              }
+              class Zebra{
+                  +bool is_wild
+                  +run()
+              }
+        
+
+
+

Full Example

+
+          ---
+            config:
+              theme: forest
+              look: handDrawn
+          ---
+          classDiagram
+          note for Outside "Note testing"
+          namespace Test {
+              class Outside
+          }
+          namespace BaseShapes {
+              class Triangle
+              class Rectangle {
+                double width
+                double height
+              }
+          }
+          Outside <|--|> Rectangle
+          style Triangle fill:#f9f,stroke:#333,stroke-width:4px
+        
+
+ + + From df110e5e11bd38cf60249ede91287c8667749fa6 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Tue, 8 Oct 2024 11:47:08 -0700 Subject: [PATCH 048/492] Add default class to nodes and fix styles --- packages/mermaid/src/diagrams/er/erDb.ts | 2 +- packages/mermaid/src/diagrams/er/styles.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/diagrams/er/erDb.ts b/packages/mermaid/src/diagrams/er/erDb.ts index c8ea3136c..ef0b5382d 100644 --- a/packages/mermaid/src/diagrams/er/erDb.ts +++ b/packages/mermaid/src/diagrams/er/erDb.ts @@ -45,7 +45,7 @@ const addEntity = function (name: string, alias = ''): EntityNode { alias, shape: 'erBox', look: getConfig().look || 'default', - cssClasses: [], + cssClasses: ['default'], cssStyles: [], }); log.info('Added new entity :', name); diff --git a/packages/mermaid/src/diagrams/er/styles.js b/packages/mermaid/src/diagrams/er/styles.js index 45a9dd7ec..ae4bc38f1 100644 --- a/packages/mermaid/src/diagrams/er/styles.js +++ b/packages/mermaid/src/diagrams/er/styles.js @@ -36,8 +36,8 @@ const getStyles = (options) => .node rect, .node circle, .node ellipse, - .node polygon, - .node path { + .node polygon + { fill: ${options.mainBkg}; stroke: ${options.nodeBorder}; stroke-width: 1px; From 290c678dc72660a75daab505943a1a33ffb538e7 Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Thu, 10 Oct 2024 08:23:58 -0700 Subject: [PATCH 049/492] Adding ticket handling --- .build/jsonSchema.ts | 1 + .cspell/mermaid-terms.txt | 1 + cypress/platform/knsv2.html | 22 ++-- packages/mermaid/src/config.type.ts | 12 +++ packages/mermaid/src/defaultConfig.ts | 6 ++ .../src/diagrams/kanban/kanban.spec.ts | 86 +++++++++++++++ .../mermaid/src/diagrams/kanban/kanbanDb.ts | 67 +++++++++--- .../src/diagrams/kanban/kanbanRenderer.ts | 100 +++-------------- .../src/diagrams/kanban/kanbanTypes.ts | 8 +- .../src/diagrams/kanban/parser/kanban.jison | 47 +++++++- .../mermaid/src/diagrams/kanban/styles.ts | 11 +- .../rendering-elements/shapes/kanbanItem.ts | 102 ++++++++++++++++-- .../rendering-elements/shapes/util.js | 52 ++++++++- packages/mermaid/src/rendering-util/types.ts | 8 ++ .../mermaid/src/schemas/config.schema.yaml | 19 ++++ packages/mermaid/src/types.ts | 1 + 16 files changed, 415 insertions(+), 128 deletions(-) diff --git a/.build/jsonSchema.ts b/.build/jsonSchema.ts index 50b9ff097..7a700c1e2 100644 --- a/.build/jsonSchema.ts +++ b/.build/jsonSchema.ts @@ -19,6 +19,7 @@ const MERMAID_CONFIG_DIAGRAM_KEYS = [ 'xyChart', 'requirement', 'mindmap', + 'kanban', 'timeline', 'gitGraph', 'c4', diff --git a/.cspell/mermaid-terms.txt b/.cspell/mermaid-terms.txt index 8551bd196..cb6db41de 100644 --- a/.cspell/mermaid-terms.txt +++ b/.cspell/mermaid-terms.txt @@ -12,6 +12,7 @@ gantt gitgraph gzipped handDrawn +kanban knsv Knut marginx diff --git a/cypress/platform/knsv2.html b/cypress/platform/knsv2.html index a22c81eba..62a48855a 100644 --- a/cypress/platform/knsv2.html +++ b/cypress/platform/knsv2.html @@ -84,19 +84,27 @@
+---
+config:
+  kanban:
+    ticketBaseUrl: 'https://mermaidchart.atlassian.net/browse/#TICKET#'
+---
 kanban
   id1[Todo]
-    id2[Create JISON]
-    id3[Update DB function]
-    id4[Create parsing tests]
-    id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes.]
-    id66[last item]
+    docs[Create Documentation]
+    docs[Create Blog about the new diagram]
   id7[In progress]
-    id8[Design grammar]
   id9[Ready for deploy]
   id10[Ready for test]
-    id5[define getData]
   id11[Done]
+    id6[Create renderer so that it works in all cases. We also add som extra text here for testing purposes. And some more just for the extra flare.]
+    id8[Design grammar]@{ assigned: 'knsv' }
+    id5[define getData]
+    id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: MC-2036, priority: 'Very High'}
+    id3[Update DB function]@{ ticket: MC-2037, assigned: knsv, priority: 'High' }
+    id4[Create parsing tests]@{ ticket: MC-2038, assigned: 'K.Sveidqvist', priority: 'High' }
+    id66[last item]@{ priority: 'Very Low', assigned: 'knsv' }
+
   id12[Can't reproduce]
     
@@ -41,7 +45,7 @@ onMounted(() => { > {{ taglines[index].label }} From bb97fdbd1e539f9585a613844b06b6593d09e44d Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Tue, 22 Oct 2024 21:30:56 +0900 Subject: [PATCH 086/492] refactor: use `parseFontSize()` Handle `NaN` values by using `parseFontSize()`. Suggested-by: https://github.com/mermaid-js/mermaid/pull/5974#discussion_r1810570967 --- .../src/rendering-util/rendering-elements/shapes/util.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts index fcae715d8..883129e9a 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts @@ -2,8 +2,9 @@ import { createText } from '../../createText.js'; import type { Node } from '../../types.js'; import { getConfig } from '../../../diagram-api/diagramAPI.js'; import { select } from 'd3'; +import defaultConfig from '../../../defaultConfig.js'; import { evaluate, sanitizeText } from '../../../diagrams/common/common.js'; -import { decodeEntities, handleUndefinedAttr } from '../../../utils.js'; +import { decodeEntities, handleUndefinedAttr, parseFontSize } from '../../../utils.js'; import type { D3Selection, Point } from '../../../types.js'; export const labelHelper = async ( @@ -77,10 +78,7 @@ export const labelHelper = async ( ? getConfig().fontSize : window.getComputedStyle(document.body).fontSize; const enlargingFactor = 5; - const parsedBodyFontSize = - typeof bodyFontSize === 'number' - ? bodyFontSize - : parseInt(bodyFontSize ?? '', 10); + const [parsedBodyFontSize = defaultConfig.fontSize] = parseFontSize(bodyFontSize); const width = parsedBodyFontSize * enlargingFactor + 'px'; img.style.minWidth = width; img.style.maxWidth = width; From f8746bee0454b01378726d04f9c65bbc3974eb3a Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Tue, 22 Oct 2024 21:47:22 +0900 Subject: [PATCH 087/492] refactor: move `MaybePromise` type to src/types.ts Suggested-by: https://github.com/mermaid-js/mermaid/pull/5974#discussion_r1810562136 Co-authored-by: Sidharth Vinod --- .../src/rendering-util/rendering-elements/shapes.ts | 3 +-- packages/mermaid/src/types.ts | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts index acda544e2..89beb85e0 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts @@ -1,5 +1,5 @@ import type { Entries } from 'type-fest'; -import type { D3Selection } from '../../types.js'; +import type { D3Selection, MaybePromise } from '../../types.js'; import type { Node, ShapeRenderOptions } from '../types.js'; import { anchor } from './shapes/anchor.js'; import { bowTieRect } from './shapes/bowTieRect.js'; @@ -58,7 +58,6 @@ import { waveEdgedRectangle } from './shapes/waveEdgedRectangle.js'; import { waveRectangle } from './shapes/waveRectangle.js'; import { windowPane } from './shapes/windowPane.js'; -type MaybePromise = T | Promise; type ShapeHandler = ( parent: D3Selection, node: Node, diff --git a/packages/mermaid/src/types.ts b/packages/mermaid/src/types.ts index 891071b10..891231772 100644 --- a/packages/mermaid/src/types.ts +++ b/packages/mermaid/src/types.ts @@ -94,3 +94,10 @@ export interface RenderResult { */ bindFunctions?: (element: Element) => void; } + +/** + * Can be converted back to `T` by awaiting/`Awaited`. + * + * This is useful for function types that may be either synchronous or asynchronous. + */ +export type MaybePromise = T | Promise; From 2771b14f65ed3b847ada623f81bd377488fa7a0f Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 23 Oct 2024 12:00:21 -0700 Subject: [PATCH 088/492] Update tests --- .../rendering/erDiagram-unified.spec.js | 638 ++++++++++++++++ .../rendering/erDiagram-v3.spec.js | 697 ------------------ .../src/diagrams/er/parser/erDiagram.spec.js | 34 +- 3 files changed, 666 insertions(+), 703 deletions(-) create mode 100644 cypress/integration/rendering/erDiagram-unified.spec.js delete mode 100644 cypress/integration/rendering/erDiagram-v3.spec.js diff --git a/cypress/integration/rendering/erDiagram-unified.spec.js b/cypress/integration/rendering/erDiagram-unified.spec.js new file mode 100644 index 000000000..f6a25933e --- /dev/null +++ b/cypress/integration/rendering/erDiagram-unified.spec.js @@ -0,0 +1,638 @@ +import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts'; + +const testOptions = [ + { description: '', options: { logLevel: 1 } }, + { description: 'ELK: ', options: { logLevel: 1, layout: 'elk' } }, + { description: 'HD: ', options: { logLevel: 1, look: 'handDrawn' } }, +]; + +describe('Entity Relationship Diagram Unified', () => { + testOptions.forEach(({ description, options }) => { + it(`${description}should render a simple ER diagram`, () => { + imgSnapshotTest( + ` + erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + `, + options + ); + }); + + it(`${description}should render a simple ER diagram without htmlLabels`, () => { + imgSnapshotTest( + ` + erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render an ER diagram with a recursive relationship`, () => { + imgSnapshotTest( + ` + erDiagram + CUSTOMER ||..o{ CUSTOMER : refers + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + `, + options + ); + }); + + it(`${description}should render an ER diagram with multiple relationships between the same two entities`, () => { + imgSnapshotTest( + ` + erDiagram + CUSTOMER ||--|{ ADDRESS : "invoiced at" + CUSTOMER ||--|{ ADDRESS : "receives goods at" + `, + options + ); + }); + + it(`${description}should render a cyclical ER diagram`, () => { + imgSnapshotTest( + ` + erDiagram + A ||--|{ B : likes + B ||--|{ C : likes + C ||--|{ A : likes + `, + options + ); + }); + + it(`${description}should render a not-so-simple ER diagram`, () => { + imgSnapshotTest( + ` + erDiagram + CUSTOMER }|..|{ DELIVERY-ADDRESS : has + CUSTOMER ||--o{ ORDER : places + CUSTOMER ||--o{ INVOICE : "liable for" + DELIVERY-ADDRESS ||--o{ ORDER : receives + INVOICE ||--|{ ORDER : covers + ORDER ||--|{ ORDER-ITEM : includes + PRODUCT-CATEGORY ||--|{ PRODUCT : contains + PRODUCT ||--o{ ORDER-ITEM : "ordered in" + `, + options + ); + }); + + it(`${description}should render a not-so-simple ER diagram without htmlLabels`, () => { + imgSnapshotTest( + ` + erDiagram + CUSTOMER }|..|{ DELIVERY-ADDRESS : has + CUSTOMER ||--o{ ORDER : places + CUSTOMER ||--o{ INVOICE : "liable for" + DELIVERY-ADDRESS ||--o{ ORDER : receives + INVOICE ||--|{ ORDER : covers + ORDER ||--|{ ORDER-ITEM : includes + PRODUCT-CATEGORY ||--|{ PRODUCT : contains + PRODUCT ||--o{ ORDER-ITEM : "ordered in" + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render multiple ER diagrams`, () => { + imgSnapshotTest( + [ + ` + erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + `, + ` + erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + `, + ], + options + ); + }); + + it(`${description}should render an ER diagram with blank or empty labels`, () => { + imgSnapshotTest( + ` + erDiagram + BOOK }|..|{ AUTHOR : "" + BOOK }|..|{ GENRE : " " + AUTHOR }|..|{ GENRE : " " + `, + options + ); + }); + + it(`${description}should render entities that have no relationships`, () => { + renderGraph( + ` + erDiagram + DEAD_PARROT + HERMIT + RECLUSE + SOCIALITE }o--o{ SOCIALITE : "interacts with" + RECLUSE }o--o{ SOCIALITE : avoids + `, + options + ); + }); + + it(`${description}should render entities with and without attributes`, () => { + renderGraph( + ` + erDiagram + BOOK { string title } + AUTHOR }|..|{ BOOK : writes + BOOK { float price } + `, + options + ); + }); + + it(`${description}should render entities with generic and array attributes`, () => { + renderGraph( + ` + erDiagram + BOOK { + string title + string[] authors + type~T~ type + } + `, + options + ); + }); + + it(`${description}should render entities with generic and array attributes without htmlLabels`, () => { + renderGraph( + ` + erDiagram + BOOK { + string title + string[] authors + type~T~ type + } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities with length in attributes type`, () => { + renderGraph( + ` + erDiagram + CLUSTER { + varchar(99) name + string(255) description + } + `, + options + ); + }); + + it(`${description}should render entities with length in attributes type without htmlLabels`, () => { + renderGraph( + ` + erDiagram + CLUSTER { + varchar(99) name + string(255) description + } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities and attributes with big and small entity names`, () => { + renderGraph( + ` + erDiagram + PRIVATE_FINANCIAL_INSTITUTION { + string name + int turnover + } + PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs + EMPLOYEE { bool officer_of_firm } + `, + options + ); + }); + + it(`${description}should render entities and attributes with big and small entity names without htmlLabels`, () => { + renderGraph( + ` + erDiagram + PRIVATE_FINANCIAL_INSTITUTION { + string name + int turnover + } + PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs + EMPLOYEE { bool officer_of_firm } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities with attributes that begin with asterisk`, () => { + imgSnapshotTest( + ` + erDiagram + BOOK { + int *id + string name + varchar(99) summary + } + BOOK }o..o{ STORE : soldBy + STORE { + int *id + string name + varchar(50) address + } + `, + options + ); + }); + + it(`${description}should render entities with attributes that begin with asterisk without htmlLabels`, () => { + imgSnapshotTest( + ` + erDiagram + BOOK { + int *id + string name + varchar(99) summary + } + BOOK }o..o{ STORE : soldBy + STORE { + int *id + string name + varchar(50) address + } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities with keys`, () => { + renderGraph( + ` + erDiagram + AUTHOR_WITH_LONG_ENTITY_NAME { + string name PK + } + AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes + BOOK { + float price + string author FK + string title PK + } + `, + options + ); + }); + + it(`${description}should render entities with keys without htmlLabels`, () => { + renderGraph( + ` + erDiagram + AUTHOR_WITH_LONG_ENTITY_NAME { + string name PK + } + AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes + BOOK { + float price + string author FK + string title PK + } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities with comments`, () => { + renderGraph( + ` + erDiagram + AUTHOR_WITH_LONG_ENTITY_NAME { + string name "comment" + } + AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes + BOOK { + string author + string title "author comment" + float price "price comment" + } + `, + options + ); + }); + + it(`${description}should render entities with comments without htmlLabels`, () => { + renderGraph( + ` + erDiagram + AUTHOR_WITH_LONG_ENTITY_NAME { + string name "comment" + } + AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes + BOOK { + string author + string title "author comment" + float price "price comment" + } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities with keys and comments`, () => { + renderGraph( + ` + erDiagram + AUTHOR_WITH_LONG_ENTITY_NAME { + string name PK "comment" + } + AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes + BOOK { + string description + float price "price comment" + string title PK "title comment" + string author FK + } + `, + options + ); + }); + + it(`${description}should render entities with keys and comments without htmlLabels`, () => { + renderGraph( + ` + erDiagram + AUTHOR_WITH_LONG_ENTITY_NAME { + string name PK "comment" + } + AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes + BOOK { + string description + float price "price comment" + string title PK "title comment" + string author FK + } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities with aliases`, () => { + renderGraph( + ` + erDiagram + T1 one or zero to one or more T2 : test + T2 one or many optionally to zero or one T3 : test + T3 zero or more to zero or many T4 : test + T4 many(0) to many(1) T5 : test + T5 many optionally to one T6 : test + T6 only one optionally to only one T1 : test + T4 0+ to 1+ T6 : test + T1 1 to 1 T3 : test + `, + options + ); + }); + + it(`${description}should render a simple ER diagram with a title`, () => { + imgSnapshotTest( + `--- + title: simple ER diagram + --- + erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ LINE-ITEM : contains + `, + options + ); + }); + + it(`${description}should render entities with entity name aliases`, () => { + imgSnapshotTest( + ` + erDiagram + p[Person] { + varchar(64) firstName + varchar(64) lastName + } + c["Customer Account"] { + varchar(128) email + } + p ||--o| c : has + `, + options + ); + }); + + it(`${description}should render relationship labels with line breaks`, () => { + imgSnapshotTest( + ` + erDiagram + p[Person] { + string firstName + string lastName + } + a["Customer Account"] { + string email + } + + b["Customer Account Secondary"] { + string email + } + + c["Customer Account Tertiary"] { + string email + } + + d["Customer Account Nth"] { + string email + } + + p ||--o| a : "has
one" + p ||--o| b : "has
one
two" + p ||--o| c : "has
one
two
three" + p ||--o| d : "has
one
two
three
...
Nth" + `, + options + ); + }); + + it(`${description}should render an ER diagram with unicode text`, () => { + imgSnapshotTest( + ` + erDiagram + _**testẽζ➕Ø😀㌕ぼ**_ { + *__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***" + *string(99)~T~~~~~~* firstName "Only __99__
characters are a
llowed dsfsdfsdfsdfs" + string last*Name* + string __phone__ UK + int _age_ + } + `, + options + ); + }); + + it(`${description}should render an ER diagram with unicode text without htmlLabels`, () => { + imgSnapshotTest( + ` + erDiagram + _**testẽζ➕Ø😀㌕ぼ**_ { + *__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***" + *string(99)~T~~~~~~* firstName "Only __99__
characters are a
llowed dsfsdfsdfsdfs" + string last*Name* + string __phone__ UK + int _age_ + } + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render an ER diagram with relationships with unicode text`, () => { + imgSnapshotTest( + ` + erDiagram + person[😀] { + string *first*Name + string _**last**Name_ + } + a["*Customer Account*"] { + **string** ema*i*l + } + person ||--o| a : __hẽ😀__ + `, + options + ); + }); + + it(`${description}should render an ER diagram with relationships with unicode text without htmlLabels`, () => { + imgSnapshotTest( + ` + erDiagram + person[😀] { + string *first*Name + string _**last**Name_ + } + a["*Customer Account*"] { + **string** ema*i*l + } + person ||--o| a : __hẽ😀__ + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render an ER diagram with TB direction`, () => { + imgSnapshotTest( + ` + erDiagram + direction TB + CAR ||--|{ NAMED-DRIVER : allows + PERSON ||..o{ NAMED-DRIVER : is + `, + options + ); + }); + + it(`${description}should render an ER diagram with BT direction`, () => { + imgSnapshotTest( + ` + erDiagram + direction BT + CAR ||--|{ NAMED-DRIVER : allows + PERSON ||..o{ NAMED-DRIVER : is + `, + options + ); + }); + + it(`${description}should render an ER diagram with LR direction`, () => { + imgSnapshotTest( + ` + erDiagram + direction LR + CAR ||--|{ NAMED-DRIVER : allows + PERSON ||..o{ NAMED-DRIVER : is + `, + options + ); + }); + + it(`${description}should render an ER diagram with RL direction`, () => { + imgSnapshotTest( + ` + erDiagram + direction RL + CAR ||--|{ NAMED-DRIVER : allows + PERSON ||..o{ NAMED-DRIVER : is + `, + options + ); + }); + + it(`${description}should render entities with styles applied from style statement`, () => { + imgSnapshotTest( + ` + erDiagram + c[CUSTOMER] + p[PERSON] + style c,p fill:#f9f,stroke:blue, color:grey, font-size:24px,font-weight:bold + `, + options + ); + }); + + it(`${description}should render entities with styles applied from style statement without htmlLabels`, () => { + imgSnapshotTest( + ` + erDiagram + c[CUSTOMER] + p[PERSON] + style c,p fill:#f9f,stroke:blue, color:grey, font-size:24px,font-weight:bold + `, + { ...options, htmlLabels: false } + ); + }); + + it(`${description}should render entities with styles applied from class statement`, () => { + imgSnapshotTest( + ` + erDiagram + c[CUSTOMER] + p[PERSON]:::blue + classDef bold font-size:24px, font-weight: bold + classDef blue stroke:lightblue, color: #0000FF + class c,p bold + `, + options + ); + }); + + it(`${description}should render entities with styles applied from class statement without htmlLabels`, () => { + imgSnapshotTest( + ` + erDiagram + c[CUSTOMER] + p[PERSON]:::blue + classDef bold font-size:24px, font-weight: bold + classDef blue stroke:lightblue, color: #0000FF + class c,p bold + `, + { ...options, htmlLabels: false } + ); + }); + }); +}); diff --git a/cypress/integration/rendering/erDiagram-v3.spec.js b/cypress/integration/rendering/erDiagram-v3.spec.js deleted file mode 100644 index ab4cbdbd4..000000000 --- a/cypress/integration/rendering/erDiagram-v3.spec.js +++ /dev/null @@ -1,697 +0,0 @@ -import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts'; - -describe('Entity Relationship Diagram', () => { - it('should render a simple ER diagram', () => { - imgSnapshotTest( - ` - erDiagram - CUSTOMER ||--o{ ORDER : places - ORDER ||--|{ LINE-ITEM : contains - `, - { logLevel: 1 } - ); - }); - - it('should render a simple ER diagram without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - CUSTOMER ||--o{ ORDER : places - ORDER ||--|{ LINE-ITEM : contains - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render an ER diagram with a recursive relationship', () => { - imgSnapshotTest( - ` - erDiagram - CUSTOMER ||..o{ CUSTOMER : refers - CUSTOMER ||--o{ ORDER : places - ORDER ||--|{ LINE-ITEM : contains - `, - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with multiple relationships between the same two entities', () => { - imgSnapshotTest( - ` - erDiagram - CUSTOMER ||--|{ ADDRESS : "invoiced at" - CUSTOMER ||--|{ ADDRESS : "receives goods at" - `, - { logLevel: 1 } - ); - }); - - it('should render a cyclical ER diagram', () => { - imgSnapshotTest( - ` - erDiagram - A ||--|{ B : likes - B ||--|{ C : likes - C ||--|{ A : likes - `, - { logLevel: 1 } - ); - }); - - it('should render a not-so-simple ER diagram', () => { - imgSnapshotTest( - ` - erDiagram - CUSTOMER }|..|{ DELIVERY-ADDRESS : has - CUSTOMER ||--o{ ORDER : places - CUSTOMER ||--o{ INVOICE : "liable for" - DELIVERY-ADDRESS ||--o{ ORDER : receives - INVOICE ||--|{ ORDER : covers - ORDER ||--|{ ORDER-ITEM : includes - PRODUCT-CATEGORY ||--|{ PRODUCT : contains - PRODUCT ||--o{ ORDER-ITEM : "ordered in" - `, - { logLevel: 1 } - ); - }); - - it('should render a not-so-simple ER diagram without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - CUSTOMER }|..|{ DELIVERY-ADDRESS : has - CUSTOMER ||--o{ ORDER : places - CUSTOMER ||--o{ INVOICE : "liable for" - DELIVERY-ADDRESS ||--o{ ORDER : receives - INVOICE ||--|{ ORDER : covers - ORDER ||--|{ ORDER-ITEM : includes - PRODUCT-CATEGORY ||--|{ PRODUCT : contains - PRODUCT ||--o{ ORDER-ITEM : "ordered in" - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render multiple ER diagrams', () => { - imgSnapshotTest( - [ - ` - erDiagram - CUSTOMER ||--o{ ORDER : places - ORDER ||--|{ LINE-ITEM : contains - `, - ` - erDiagram - CUSTOMER ||--o{ ORDER : places - ORDER ||--|{ LINE-ITEM : contains - `, - ], - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with blank or empty labels', () => { - imgSnapshotTest( - ` - erDiagram - BOOK }|..|{ AUTHOR : "" - BOOK }|..|{ GENRE : " " - AUTHOR }|..|{ GENRE : " " - `, - { logLevel: 1 } - ); - }); - - it('should render entities that have no relationships', () => { - renderGraph( - ` - erDiagram - DEAD_PARROT - HERMIT - RECLUSE - SOCIALITE }o--o{ SOCIALITE : "interacts with" - RECLUSE }o--o{ SOCIALITE : avoids - `, - { logLevel: 1 } - ); - }); - - it('should render entities with and without attributes', () => { - renderGraph( - ` - erDiagram - BOOK { string title } - AUTHOR }|..|{ BOOK : writes - BOOK { float price } - `, - { logLevel: 1 } - ); - }); - - it('should render entities with generic and array attributes', () => { - renderGraph( - ` - erDiagram - BOOK { - string title - string[] authors - type~T~ type - } - `, - { logLevel: 1 } - ); - }); - - it('should render entities with generic and array attributes without htmlLabels', () => { - renderGraph( - ` - erDiagram - BOOK { - string title - string[] authors - type~T~ type - } - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with length in attributes type', () => { - renderGraph( - ` - erDiagram - CLUSTER { - varchar(99) name - string(255) description - } - `, - { logLevel: 1 } - ); - }); - - it('should render entities with length in attributes type without htmlLabels', () => { - renderGraph( - ` - erDiagram - CLUSTER { - varchar(99) name - string(255) description - } - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities and attributes with big and small entity names', () => { - renderGraph( - ` - erDiagram - PRIVATE_FINANCIAL_INSTITUTION { - string name - int turnover - } - PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs - EMPLOYEE { bool officer_of_firm } - `, - { logLevel: 1 } - ); - }); - - it('should render entities and attributes with big and small entity names without htmlLabels', () => { - renderGraph( - ` - erDiagram - PRIVATE_FINANCIAL_INSTITUTION { - string name - int turnover - } - PRIVATE_FINANCIAL_INSTITUTION ||..|{ EMPLOYEE : employs - EMPLOYEE { bool officer_of_firm } - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with attributes that begin with asterisk', () => { - imgSnapshotTest( - ` - erDiagram - BOOK { - int *id - string name - varchar(99) summary - } - BOOK }o..o{ STORE : soldBy - STORE { - int *id - string name - varchar(50) address - } - `, - { loglevel: 1 } - ); - }); - - it('should render entities with attributes that begin with asterisk without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - BOOK { - int *id - string name - varchar(99) summary - } - BOOK }o..o{ STORE : soldBy - STORE { - int *id - string name - varchar(50) address - } - `, - { loglevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with keys', () => { - renderGraph( - ` - erDiagram - AUTHOR_WITH_LONG_ENTITY_NAME { - string name PK - } - AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes - BOOK { - float price - string author FK - string title PK - } - `, - { logLevel: 1 } - ); - }); - - it('should render entities with keys without htmlLabels', () => { - renderGraph( - ` - erDiagram - AUTHOR_WITH_LONG_ENTITY_NAME { - string name PK - } - AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes - BOOK { - float price - string author FK - string title PK - } - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with comments', () => { - renderGraph( - ` - erDiagram - AUTHOR_WITH_LONG_ENTITY_NAME { - string name "comment" - } - AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes - BOOK { - string author - string title "author comment" - float price "price comment" - } - `, - { logLevel: 1 } - ); - }); - - it('should render entities with comments without htmlLabels', () => { - renderGraph( - ` - erDiagram - AUTHOR_WITH_LONG_ENTITY_NAME { - string name "comment" - } - AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes - BOOK { - string author - string title "author comment" - float price "price comment" - } - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with keys and comments', () => { - renderGraph( - ` - erDiagram - AUTHOR_WITH_LONG_ENTITY_NAME { - string name PK "comment" - } - AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes - BOOK { - string description - float price "price comment" - string title PK "title comment" - string author FK - } - `, - { logLevel: 1 } - ); - }); - - it('should render entities with keys and comments without htmlLabels', () => { - renderGraph( - ` - erDiagram - AUTHOR_WITH_LONG_ENTITY_NAME { - string name PK "comment" - } - AUTHOR_WITH_LONG_ENTITY_NAME }|..|{ BOOK : writes - BOOK { - string description - float price "price comment" - string title PK "title comment" - string author FK - } - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with aliases', () => { - renderGraph( - ` - erDiagram - T1 one or zero to one or more T2 : test - T2 one or many optionally to zero or one T3 : test - T3 zero or more to zero or many T4 : test - T4 many(0) to many(1) T5 : test - T5 many optionally to one T6 : test - T6 only one optionally to only one T1 : test - T4 0+ to 1+ T6 : test - T1 1 to 1 T3 : test - `, - { logLevel: 1 } - ); - }); - - it('1433: should render a simple ER diagram with a title', () => { - imgSnapshotTest( - `--- -title: simple ER diagram ---- -erDiagram -CUSTOMER ||--o{ ORDER : places -ORDER ||--|{ LINE-ITEM : contains -`, - {} - ); - }); - - it('should render entities with entity name aliases', () => { - imgSnapshotTest( - ` - erDiagram - p[Person] { - varchar(64) firstName - varchar(64) lastName - } - c["Customer Account"] { - varchar(128) email - } - p ||--o| c : has - `, - { logLevel: 1 } - ); - }); - - it('should render relationship labels with line breaks', () => { - imgSnapshotTest( - ` - erDiagram - p[Person] { - string firstName - string lastName - } - a["Customer Account"] { - string email - } - - b["Customer Account Secondary"] { - string email - } - - c["Customer Account Tertiary"] { - string email - } - - d["Customer Account Nth"] { - string email - } - - p ||--o| a : "has
one" - p ||--o| b : "has
one
two" - p ||--o| c : "has
one
two
three" - p ||--o| d : "has
one
two
three
...
Nth" - `, - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with unicode text', () => { - imgSnapshotTest( - ` - erDiagram - _**testẽζ➕Ø😀㌕ぼ**_ { - *__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***" - *string(99)~T~~~~~~* firstName "Only __99__
characters are a
llowed dsfsdfsdfsdfs" - string last*Name* - string __phone__ UK - int _age_ - } - `, - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with unicode text without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - _**testẽζ➕Ø😀㌕ぼ**_ { - *__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***" - *string(99)~T~~~~~~* firstName "Only __99__
characters are a
llowed dsfsdfsdfsdfs" - string last*Name* - string __phone__ UK - int _age_ - } - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render an ER diagram with relationships with unicode text', () => { - imgSnapshotTest( - ` - erDiagram - person[😀] { - string *first*Name - string _**last**Name_ - } - a["*Customer Account*"] { - **string** ema*i*l - } - person ||--o| a : __hẽ😀__ - `, - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with relationships with unicode text without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - person[😀] { - string *first*Name - string _**last**Name_ - } - a["*Customer Account*"] { - **string** ema*i*l - } - person ||--o| a : __hẽ😀__ - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render an ER diagram with TB direction', () => { - imgSnapshotTest( - ` - erDiagram - direction TB - CAR ||--|{ NAMED-DRIVER : allows - PERSON ||..o{ NAMED-DRIVER : is - `, - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with BT direction', () => { - imgSnapshotTest( - ` - erDiagram - direction BT - CAR ||--|{ NAMED-DRIVER : allows - PERSON ||..o{ NAMED-DRIVER : is - `, - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with LR direction', () => { - imgSnapshotTest( - ` - erDiagram - direction LR - CAR ||--|{ NAMED-DRIVER : allows - PERSON ||..o{ NAMED-DRIVER : is - `, - { logLevel: 1 } - ); - }); - - it('should render an ER diagram with RL direction', () => { - imgSnapshotTest( - ` - erDiagram - direction RL - CAR ||--|{ NAMED-DRIVER : allows - PERSON ||..o{ NAMED-DRIVER : is - `, - { logLevel: 1 } - ); - }); - - it('should render entities with styles applied from style statement', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON] - style c,p fill:#f9f,stroke:blue, color:grey, font-size:24px,font-weight:bold - `, - { logLevel: 1 } - ); - }); - - it('should render entities with styles applied from style statement without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON] - style c,p fill:#f9f,stroke:blue, color:grey, font-size:24px,font-weight:bold - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with styles applied from class statement', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON]:::blue - classDef bold font-size:24px, font-weight: bold - classDef blue stroke:lightblue, color: #0000FF - class c,p bold - `, - { logLevel: 1 } - ); - }); - - it('should render entities with styles applied from class statement without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON]:::blue - classDef bold font-size:24px, font-weight: bold - classDef blue stroke:lightblue, color: #0000FF - class c,p bold - `, - { logLevel: 1, htmlLabels: false } - ); - }); - - it('should render entities with the handDrawn look', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON] - `, - { logLevel: 1, look: 'handDrawn' } - ); - }); - - it('should render entities with the handDrawn look without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON] - `, - { logLevel: 1, look: 'handDrawn', htmlLabels: false } - ); - }); - - it('should render entities with the handDrawn look and styles applied', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON]:::blue - classDef bold font-size:24px, font-weight: bold - classDef blue stroke:black, fill:lightblue, color: #0000FF - class c,p bold - `, - { logLevel: 1, look: 'handDrawn' } - ); - }); - - it('should render entities with the handDrawn look and styles applied without htmlLabels', () => { - imgSnapshotTest( - ` - erDiagram - c[CUSTOMER] - p[PERSON]:::blue - classDef bold font-size:24px, font-weight: bold - classDef blue stroke:black, fill:lightblue, color: #0000FF - class c,p bold - `, - { logLevel: 1, look: 'handDrawn', htmlLabels: false } - ); - }); - - it('should render a not-so-simple ER diagram using elk', () => { - imgSnapshotTest( - ` - erDiagram - CUSTOMER }|..|{ DELIVERY-ADDRESS : has - CUSTOMER ||--o{ ORDER : places - CUSTOMER ||--o{ INVOICE : "liable for" - DELIVERY-ADDRESS ||--o{ ORDER : receives - INVOICE ||--|{ ORDER : covers - ORDER ||--|{ ORDER-ITEM : includes - PRODUCT-CATEGORY ||--|{ PRODUCT : contains - PRODUCT ||--o{ ORDER-ITEM : "ordered in" - `, - { logLevel: 1, layout: 'elk' } - ); - }); -}); diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js index aad485aea..6527862dc 100644 --- a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js +++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js @@ -766,7 +766,10 @@ describe('when parsing ER diagram it...', function () { it('should be possible to apply a style to an entity', function () { const entityName = 'CUSTOMER'; - erDiagram.parser.parse(`erDiagram\n${entityName}\nstyle ${entityName} color:red`); + erDiagram.parser.parse(`erDiagram + ${entityName} + style ${entityName} color:red + `); expect(erDb.getEntity(entityName).cssStyles).toEqual(['color:red']); }); @@ -774,7 +777,10 @@ describe('when parsing ER diagram it...', function () { it('should be possible to apply multiple styles to an entity at the same time', function () { const entityName = 'CUSTOMER'; erDiagram.parser.parse( - `erDiagram\n${entityName}\nstyle ${entityName} color:red,stroke:blue,fill:#f9f` + `erDiagram + ${entityName} + style ${entityName} color:red,stroke:blue,fill:#f9f + ` ); expect(erDb.getEntity(entityName).cssStyles).toEqual(['color:red', 'stroke:blue', 'fill:#f9f']); @@ -783,7 +789,11 @@ describe('when parsing ER diagram it...', function () { it('should be possible to apply multiple separately defined styles', function () { const entityName = 'CUSTOMER'; erDiagram.parser.parse( - `erDiagram\n${entityName}\nstyle ${entityName} color:red\nstyle ${entityName} fill:#f9f` + `erDiagram + ${entityName} + style ${entityName} color:red + style ${entityName} fill:#f9f + ` ); expect(erDb.getEntity(entityName).cssStyles).toEqual(['color:red', 'fill:#f9f']); @@ -823,7 +833,11 @@ describe('when parsing ER diagram it...', function () { const firstEntity = 'ENTITY1'; const secondEntity = 'ENTITY2'; erDiagram.parser.parse( - `erDiagram\n${firstEntity}\n${secondEntity}\nclassDef default fill:#f9f` + `erDiagram + ${firstEntity} + ${secondEntity} + classDef default fill:#f9f + ` ); const expectedOutput = new Map([ @@ -845,7 +859,11 @@ describe('when parsing ER diagram it...', function () { it('should be possible to define a class with styles', function () { const className = 'myClass'; const styles = 'fill:#f9f, stroke: red, color: pink'; - erDiagram.parser.parse(`erDiagram\nclassDef ${className} ${styles}`); + erDiagram.parser.parse( + `erDiagram + classDef ${className} ${styles} + ` + ); const expectedOutput = new Map([ [ @@ -865,7 +883,11 @@ describe('when parsing ER diagram it...', function () { const firstClass = 'firstClass'; const secondClass = 'secondClass'; const styles = 'fill:#f9f, stroke: red, color: pink'; - erDiagram.parser.parse(`erDiagram\nclassDef ${firstClass},${secondClass} ${styles}`); + erDiagram.parser.parse( + `erDiagram + classDef ${firstClass},${secondClass} ${styles} + ` + ); const expectedOutput = new Map([ [ From 39a6c308fbded10ac3d5c2e4201672f59bfc2891 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Wed, 23 Oct 2024 12:01:08 -0700 Subject: [PATCH 089/492] Fix conflict with style statements --- .../src/diagrams/er/parser/erDiagram.jison | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.jison b/packages/mermaid/src/diagrams/er/parser/erDiagram.jison index 668595f43..2b59309fb 100644 --- a/packages/mermaid/src/diagrams/er/parser/erDiagram.jison +++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.jison @@ -5,6 +5,7 @@ %x acc_title %x acc_descr %x acc_descr_multiline +%x style %% accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } @@ -41,8 +42,13 @@ accDescr\s*"{"\s* { this.begin("acc_descr_multili "[" return 'SQS'; "]" return 'SQE'; -"style" return 'STYLE'; -"classDef" return 'CLASSDEF'; +"style" { this.begin("style"); return 'STYLE'; } + -
----
-config:
-  layout: elk
----
+    
       flowchart LR
-      subgraph S2
-      subgraph s1["APA"]
-      D{"Use the editor"}
-      end
-
-
-      D -- Mermaid js --> I{"fa:fa-code Text"}
-            D --> I
-            D --> I
-
-      end
+        A --> B
     
+      flowchart LR
+        A e1@==> B
+        e1@{ animate: true}
+    
+
+flowchart LR
+  A e1@--> B
+  classDef animate stroke-width:2,stroke-dasharray:10\,8,stroke-dashoffset:-180,animation: edge-animation-frame 6s linear infinite, stroke-linecap: round
+  class e1 animate
+    
+

infinite

+
+flowchart LR
+  A e1@--> B
+  classDef animate stroke-dasharray: 9\,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;
+  class e1 animate
+    
+

Mermaid - edge-animation-slow

+
+flowchart LR
+  A e1@--> B
+e1@{ animation: fast}
+    
+

Mermaid - edge-animation-fast

+
+flowchart LR
+  A e1@--> B
+  classDef animate stroke-dasharray: 1000,stroke-dashoffset: 1000,animation: dash 10s linear;
+  class e1 edge-animation-fast
+    
+ +
+
+info    
+
 ---
 config:
   layout: elk
@@ -131,7 +168,7 @@ config:
       end
       end
     
-
+    
 ---
 config:
   layout: elk
@@ -144,7 +181,7 @@ config:
       D-->I
       D-->I
     
-
+    
 ---
 config:
   layout: elk
@@ -183,7 +220,7 @@ flowchart LR
     n8@{ shape: rect}
 
     
-
+    
 ---
 config:
   layout: elk
@@ -199,7 +236,7 @@ flowchart LR
 
 
     
-
+    
 ---
 config:
   layout: elk
@@ -208,7 +245,7 @@ flowchart LR
     A{A} --> B & C
 
-
+    
 ---
 config:
   layout: elk
@@ -220,7 +257,7 @@ flowchart LR
     end
 
-
+    
 ---
 config:
   layout: elk
diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
index 1dbc789c9..ccb8a8e94 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts
+++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
@@ -24,7 +24,7 @@ import type {
   FlowLink,
   FlowVertexTypeParam,
 } from './types.js';
-import type { NodeMetaData } from '../../types.js';
+import type { NodeMetaData, EdgeMetaData } from '../../types.js';
 
 const MERMAID_DOM_ID_PREFIX = 'flowchart-';
 let vertexCounter = 0;
@@ -71,12 +71,38 @@ export const addVertex = function (
   classes: string[],
   dir: string,
   props = {},
-  shapeData: any
+  metadata: any
 ) {
-  // console.log('addVertex', id, shapeData);
   if (!id || id.trim().length === 0) {
     return;
   }
+  // Extract the metadata from the shapeData, the syntax for adding metadata for nodes and edges is the same
+  // so at this point we don't know if it's a node or an edge, but we can still extract the metadata
+  let doc;
+  if (metadata !== undefined) {
+    let yamlData;
+    // detect if shapeData contains a newline character
+    if (!metadata.includes('\n')) {
+      yamlData = '{\n' + metadata + '\n}';
+    } else {
+      yamlData = metadata + '\n';
+    }
+    doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData;
+  }
+
+  // Check if this is an edge
+  const edge = edges.find((e) => e.id === id);
+  if (edge) {
+    const edgeDoc = doc as EdgeMetaData;
+    if (edgeDoc?.animate) {
+      edge.animate = edgeDoc.animate;
+    }
+    if (edgeDoc?.animation) {
+      edge.animation = edgeDoc.animation;
+    }
+    return;
+  }
+
   let txt;
 
   let vertex = vertices.get(id);
@@ -128,19 +154,7 @@ export const addVertex = function (
     Object.assign(vertex.props, props);
   }
 
-  if (shapeData !== undefined) {
-    let yamlData;
-    // detect if shapeData contains a newline character
-    // console.log('shapeData', shapeData);
-    if (!shapeData.includes('\n')) {
-      // console.log('yamlData shapeData has no new lines', shapeData);
-      yamlData = '{\n' + shapeData + '\n}';
-    } else {
-      // console.log('yamlData shapeData has new lines', shapeData);
-      yamlData = shapeData + '\n';
-    }
-    // console.log('yamlData', yamlData);
-    const doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData;
+  if (doc !== undefined) {
     if (doc.shape) {
       if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes('_')) {
         throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`);
@@ -187,11 +201,18 @@ export const addVertex = function (
  * Function called by parser when a link/edge definition has been found
  *
  */
-export const addSingleLink = function (_start: string, _end: string, type: any) {
+export const addSingleLink = function (_start: string, _end: string, type: any, id?: string) {
   const start = _start;
   const end = _end;
 
-  const edge: FlowEdge = { start: start, end: end, type: undefined, text: '', labelType: 'text' };
+  const edge: FlowEdge = {
+    start: start,
+    end: end,
+    type: undefined,
+    text: '',
+    labelType: 'text',
+    classes: [],
+  };
   log.info('abc78 Got edge...', edge);
   const linkTextObj = type.text;
 
@@ -210,6 +231,9 @@ export const addSingleLink = function (_start: string, _end: string, type: any)
     edge.stroke = type.stroke;
     edge.length = type.length > 10 ? 10 : type.length;
   }
+  if (id) {
+    edge.id = id;
+  }
 
   if (edges.length < (config.maxEdges ?? 500)) {
     log.info('Pushing edge...');
@@ -225,11 +249,17 @@ You have to call mermaid.initialize.`
   }
 };
 
-export const addLink = function (_start: string[], _end: string[], type: unknown) {
-  log.info('addLink', _start, _end, type);
+export const addLink = function (_start: string[], _end: string[], linkData: unknown) {
+  const id =
+    linkData && typeof linkData === 'object' && 'id' in linkData
+      ? linkData.id?.replace('@', '')
+      : undefined;
+
+  log.info('addLink', _start, _end, id);
+
   for (const start of _start) {
     for (const end of _end) {
-      addSingleLink(start, end, type);
+      addSingleLink(start, end, linkData, id);
     }
   }
 };
@@ -282,7 +312,13 @@ export const updateLink = function (positions: ('default' | number)[], style: st
   });
 };
 
-export const addClass = function (ids: string, style: string[]) {
+export const addClass = function (ids: string, _style: string[]) {
+  const style = _style
+    .join()
+    .replace(/\\,/g, '§§§')
+    .replace(/,/g, ';')
+    .replace(/§§§/g, ',')
+    .split(';');
   ids.split(',').forEach(function (id) {
     let classNode = classes.get(id);
     if (classNode === undefined) {
@@ -337,6 +373,10 @@ export const setClass = function (ids: string, className: string) {
     if (vertex) {
       vertex.classes.push(className);
     }
+    const edge = edges.find((e) => e.id === id);
+    if (edge) {
+      edge.classes.push(className);
+    }
     const subGraph = subGraphLookup.get(id);
     if (subGraph) {
       subGraph.classes.push(className);
@@ -997,7 +1037,7 @@ export const getData = () => {
       styles.push(...rawEdge.style);
     }
     const edge: Edge = {
-      id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: 'L' }),
+      id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: 'L' }, rawEdge.id),
       start: rawEdge.start,
       end: rawEdge.end,
       type: rawEdge.type ?? 'normal',
@@ -1009,14 +1049,20 @@ export const getData = () => {
         rawEdge?.stroke === 'invisible'
           ? ''
           : 'edge-thickness-normal edge-pattern-solid flowchart-link',
-      arrowTypeStart: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeStart,
-      arrowTypeEnd: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeEnd,
+      arrowTypeStart:
+        rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open' ? 'none' : arrowTypeStart,
+      arrowTypeEnd:
+        rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open' ? 'none' : arrowTypeEnd,
       arrowheadStyle: 'fill: #333',
+      cssCompiledStyles: getCompiledStyles(rawEdge.classes),
       labelStyle: styles,
       style: styles,
       pattern: rawEdge.stroke,
       look: config.look,
+      animate: rawEdge.animate,
+      animation: rawEdge.animation,
     };
+
     edges.push(edge);
   });
 
diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js
index 4ae289bad..5682c9bed 100644
--- a/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js
+++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js
@@ -39,6 +39,27 @@ const doubleEndedEdges = [
   { edgeStart: '<==', edgeEnd: '==>', stroke: 'thick', type: 'double_arrow_point' },
   { edgeStart: '<-.', edgeEnd: '.->', stroke: 'dotted', type: 'double_arrow_point' },
 ];
+const regularEdges = [
+  { edgeStart: '--', edgeEnd: '--x', stroke: 'normal', type: 'arrow_cross' },
+  { edgeStart: '==', edgeEnd: '==x', stroke: 'thick', type: 'arrow_cross' },
+  { edgeStart: '-.', edgeEnd: '.-x', stroke: 'dotted', type: 'arrow_cross' },
+  { edgeStart: '--', edgeEnd: '--o', stroke: 'normal', type: 'arrow_circle' },
+  { edgeStart: '==', edgeEnd: '==o', stroke: 'thick', type: 'arrow_circle' },
+  { edgeStart: '-.', edgeEnd: '.-o', stroke: 'dotted', type: 'arrow_circle' },
+  { edgeStart: '--', edgeEnd: '-->', stroke: 'normal', type: 'arrow_point' },
+  { edgeStart: '==', edgeEnd: '==>', stroke: 'thick', type: 'arrow_point' },
+  { edgeStart: '-.', edgeEnd: '.->', stroke: 'dotted', type: 'arrow_point' },
+
+  { edgeStart: '--', edgeEnd: '----x', stroke: 'normal', type: 'arrow_cross' },
+  { edgeStart: '==', edgeEnd: '====x', stroke: 'thick', type: 'arrow_cross' },
+  { edgeStart: '-.', edgeEnd: '...-x', stroke: 'dotted', type: 'arrow_cross' },
+  { edgeStart: '--', edgeEnd: '----o', stroke: 'normal', type: 'arrow_circle' },
+  { edgeStart: '==', edgeEnd: '====o', stroke: 'thick', type: 'arrow_circle' },
+  { edgeStart: '-.', edgeEnd: '...-o', stroke: 'dotted', type: 'arrow_circle' },
+  { edgeStart: '--', edgeEnd: '---->', stroke: 'normal', type: 'arrow_point' },
+  { edgeStart: '==', edgeEnd: '====>', stroke: 'thick', type: 'arrow_point' },
+  { edgeStart: '-.', edgeEnd: '...->', stroke: 'dotted', type: 'arrow_point' },
+];
 
 describe('[Edges] when parsing', () => {
   beforeEach(function () {
@@ -67,6 +88,74 @@ describe('[Edges] when parsing', () => {
     expect(edges[0].type).toBe('arrow_circle');
   });
 
+  describe('edges with ids', function () {
+    describe('open ended edges with ids and labels', function () {
+      regularEdges.forEach((edgeType) => {
+        it(`should handle ${edgeType.stroke} ${edgeType.type} with no text`, function () {
+          const res = flow.parser.parse(
+            `flowchart TD;\nA e1@${edgeType.edgeStart}${edgeType.edgeEnd} B;`
+          );
+          const vert = flow.parser.yy.getVertices();
+          const edges = flow.parser.yy.getEdges();
+          expect(vert.get('A').id).toBe('A');
+          expect(vert.get('B').id).toBe('B');
+          expect(edges.length).toBe(1);
+          expect(edges[0].id).toBe('e1');
+          expect(edges[0].start).toBe('A');
+          expect(edges[0].end).toBe('B');
+          expect(edges[0].type).toBe(`${edgeType.type}`);
+          expect(edges[0].text).toBe('');
+          expect(edges[0].stroke).toBe(`${edgeType.stroke}`);
+        });
+        it(`should handle ${edgeType.stroke} ${edgeType.type} with text`, function () {
+          const res = flow.parser.parse(
+            `flowchart TD;\nA e1@${edgeType.edgeStart}${edgeType.edgeEnd} B;`
+          );
+          const vert = flow.parser.yy.getVertices();
+          const edges = flow.parser.yy.getEdges();
+          expect(vert.get('A').id).toBe('A');
+          expect(vert.get('B').id).toBe('B');
+          expect(edges.length).toBe(1);
+          expect(edges[0].id).toBe('e1');
+          expect(edges[0].start).toBe('A');
+          expect(edges[0].end).toBe('B');
+          expect(edges[0].type).toBe(`${edgeType.type}`);
+          expect(edges[0].text).toBe('');
+          expect(edges[0].stroke).toBe(`${edgeType.stroke}`);
+        });
+      });
+      it('should handle normal edges where you also have a node with metadata', function () {
+        const res = flow.parser.parse(`flowchart LR
+A id1@-->B
+A@{ shape: 'rect' }
+`);
+        const edges = flow.parser.yy.getEdges();
+
+        expect(edges[0].id).toBe('id1');
+      });
+    });
+    describe('double ended edges with ids and labels', function () {
+      doubleEndedEdges.forEach((edgeType) => {
+        it(`should handle ${edgeType.stroke} ${edgeType.type} with  text`, function () {
+          const res = flow.parser.parse(
+            `flowchart TD;\nA e1@${edgeType.edgeStart} label ${edgeType.edgeEnd} B;`
+          );
+          const vert = flow.parser.yy.getVertices();
+          const edges = flow.parser.yy.getEdges();
+          expect(vert.get('A').id).toBe('A');
+          expect(vert.get('B').id).toBe('B');
+          expect(edges.length).toBe(1);
+          expect(edges[0].id).toBe('e1');
+          expect(edges[0].start).toBe('A');
+          expect(edges[0].end).toBe('B');
+          expect(edges[0].type).toBe(`${edgeType.type}`);
+          expect(edges[0].text).toBe('label');
+          expect(edges[0].stroke).toBe(`${edgeType.stroke}`);
+        });
+      });
+    });
+  });
+
   describe('edges', function () {
     doubleEndedEdges.forEach((edgeType) => {
       it(`should handle ${edgeType.stroke} ${edgeType.type} with no text`, function () {
diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow.jison b/packages/mermaid/src/diagrams/flowchart/parser/flow.jison
index b3df82fa5..fbd30fa9e 100644
--- a/packages/mermaid/src/diagrams/flowchart/parser/flow.jison
+++ b/packages/mermaid/src/diagrams/flowchart/parser/flow.jison
@@ -141,6 +141,7 @@ that id.
 .*direction\s+RL[^\n]*       return 'direction_rl';
 .*direction\s+LR[^\n]*       return 'direction_lr';
 
+[^\s]+\@(?=[^\{])               { return 'LINK_ID'; }
 [0-9]+                       return 'NUM';
 \#                           return 'BRKT';
 ":::"                        return 'STYLE_SEPARATOR';
@@ -201,7 +202,9 @@ that id.
 "*"                   return 'MULT';
 "#"                   return 'BRKT';
 "&"                   return 'AMP';
-([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|\-(?=[^\>\-\.])|=(?!=))+  return 'NODE_STRING';
+([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|\-(?=[^\>\-\.])|=(?!=))+  {
+    return 'NODE_STRING';
+}
 "-"                   return 'MINUS'
 [\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|
 [\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|
@@ -361,7 +364,7 @@ spaceList
 
 statement
     : vertexStatement separator
-    { /* console.warn('finat vs', $vertexStatement.nodes); */ $$=$vertexStatement.nodes}
+    { $$=$vertexStatement.nodes}
     | styleStatement separator
     {$$=[];}
     | linkStyleStatement separator
@@ -472,6 +475,8 @@ link: linkStatement arrowText
     {$$ = $linkStatement;}
     | START_LINK edgeText LINK
         {var inf = yy.destructLink($LINK, $START_LINK); $$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length,"text":$edgeText};}
+    | LINK_ID START_LINK edgeText LINK
+        {var inf = yy.destructLink($LINK, $START_LINK); $$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length,"text":$edgeText, "id": $LINK_ID};}
     ;
 
 edgeText: edgeTextToken
@@ -487,6 +492,8 @@ edgeText: edgeTextToken
 
 linkStatement: LINK
         {var inf = yy.destructLink($LINK);$$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length};}
+    | LINK_ID LINK
+        {var inf = yy.destructLink($LINK);$$ = {"type":inf.type,"stroke":inf.stroke,"length":inf.length, "id": $LINK_ID};}
         ;
 
 arrowText:
diff --git a/packages/mermaid/src/diagrams/flowchart/types.ts b/packages/mermaid/src/diagrams/flowchart/types.ts
index b2c5cf620..00acb6751 100644
--- a/packages/mermaid/src/diagrams/flowchart/types.ts
+++ b/packages/mermaid/src/diagrams/flowchart/types.ts
@@ -62,6 +62,10 @@ export interface FlowEdge {
   length?: number;
   text: string;
   labelType: 'text';
+  classes: string[];
+  id?: string;
+  animation?: 'fast' | 'slow';
+  animate?: boolean;
 }
 
 export interface FlowClass {
diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edges.js b/packages/mermaid/src/rendering-util/rendering-elements/edges.js
index a6a7a55f7..2581d342f 100644
--- a/packages/mermaid/src/rendering-util/rendering-elements/edges.js
+++ b/packages/mermaid/src/rendering-util/rendering-elements/edges.js
@@ -9,6 +9,7 @@ import { curveBasis, line, select } from 'd3';
 import rough from 'roughjs';
 import createLabel from './createLabel.js';
 import { addEdgeMarkers } from './edgeMarker.ts';
+import { isLabelStyle } from './shapes/handDrawnShapeStyles.js';
 
 const edgeLabels = new Map();
 const terminalLabels = new Map();
@@ -429,6 +430,14 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod
   const tail = startNode;
   var head = endNode;
 
+  const edgeClassStyles = [];
+  for (const key in edge.cssCompiledStyles) {
+    if (isLabelStyle(key)) {
+      continue;
+    }
+    edgeClassStyles.push(edge.cssCompiledStyles[key]);
+  }
+
   if (head.intersect && tail.intersect) {
     points = points.slice(1, edge.points.length - 1);
     points.unshift(tail.intersect(points[0]));
@@ -521,12 +530,27 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod
     svgPath.attr('d', d);
     elem.node().appendChild(svgPath.node());
   } else {
+    const stylesFromClasses = edgeClassStyles.join(';');
+    const styles = edge.edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '';
+    let animationClass = '';
+    if (edge.animate) {
+      animationClass = ' edge-animation-fast';
+    }
+    if (edge.animation) {
+      animationClass = ' edge-animation-' + edge.animation;
+    }
     svgPath = elem
       .append('path')
       .attr('d', linePath)
       .attr('id', edge.id)
-      .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : ''))
-      .attr('style', edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '');
+      .attr(
+        'class',
+        ' ' +
+          strokeClasses +
+          (edge.classes ? ' ' + edge.classes : '') +
+          (animationClass ? animationClass : '')
+      )
+      .attr('style', stylesFromClasses + ';' + styles);
   }
 
   // DEBUG code, DO NOT REMOVE
diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts
index 80e2a4423..4ac6b2ddd 100644
--- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts
+++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts
@@ -32,7 +32,28 @@ export const styles2Map = (styles: string[]) => {
   });
   return styleMap;
 };
-
+export const isLabelStyle = (key: string) => {
+  return (
+    key === 'color' ||
+    key === 'font-size' ||
+    key === 'font-family' ||
+    key === 'font-weight' ||
+    key === 'font-style' ||
+    key === 'text-decoration' ||
+    key === 'text-align' ||
+    key === 'text-transform' ||
+    key === 'line-height' ||
+    key === 'letter-spacing' ||
+    key === 'word-spacing' ||
+    key === 'text-shadow' ||
+    key === 'text-overflow' ||
+    key === 'white-space' ||
+    key === 'word-wrap' ||
+    key === 'word-break' ||
+    key === 'overflow-wrap' ||
+    key === 'hyphens'
+  );
+};
 export const styles2String = (node: Node) => {
   const { stylesArray } = compileStyles(node);
   const labelStyles: string[] = [];
@@ -42,26 +63,7 @@ export const styles2String = (node: Node) => {
 
   stylesArray.forEach((style) => {
     const key = style[0];
-    if (
-      key === 'color' ||
-      key === 'font-size' ||
-      key === 'font-family' ||
-      key === 'font-weight' ||
-      key === 'font-style' ||
-      key === 'text-decoration' ||
-      key === 'text-align' ||
-      key === 'text-transform' ||
-      key === 'line-height' ||
-      key === 'letter-spacing' ||
-      key === 'word-spacing' ||
-      key === 'text-shadow' ||
-      key === 'text-overflow' ||
-      key === 'white-space' ||
-      key === 'word-wrap' ||
-      key === 'word-break' ||
-      key === 'overflow-wrap' ||
-      key === 'hyphens'
-    ) {
+    if (isLabelStyle(key)) {
       labelStyles.push(style.join(':') + ' !important');
     } else {
       nodeStyles.push(style.join(':') + ' !important');
diff --git a/packages/mermaid/src/rendering-util/types.ts b/packages/mermaid/src/rendering-util/types.ts
index 86cfd50b3..d64594218 100644
--- a/packages/mermaid/src/rendering-util/types.ts
+++ b/packages/mermaid/src/rendering-util/types.ts
@@ -101,6 +101,7 @@ export interface Edge {
   arrowheadStyle?: string;
   arrowTypeEnd?: string;
   arrowTypeStart?: string;
+  cssCompiledStyles?: string[];
   // Flowchart specific properties
   defaultInterpolate?: string;
   end?: string;
diff --git a/packages/mermaid/src/styles.ts b/packages/mermaid/src/styles.ts
index 78b514c40..2cb11f146 100644
--- a/packages/mermaid/src/styles.ts
+++ b/packages/mermaid/src/styles.ts
@@ -27,7 +27,28 @@ const getStyles = (
     font-size: ${options.fontSize};
     fill: ${options.textColor}
   }
-
+  @keyframes edge-animation-frame {
+    from {
+      stroke-dashoffset: 0;
+    }
+  }
+  @keyframes dash {
+    to {
+      stroke-dashoffset: 0;
+    }
+  }
+  & .edge-animation-slow {
+    stroke-dasharray: 9,5 !important;
+    stroke-dashoffset: 900;
+    animation: dash 50s linear infinite;
+    stroke-linecap: round;
+  }
+  & .edge-animation-fast {
+    stroke-dasharray: 9,5 !important;
+    stroke-dashoffset: 900;
+    animation: dash 20s linear infinite;
+    stroke-linecap: round;
+  }
   /* Classes common for multiple diagrams */
 
   & .error-icon {
diff --git a/packages/mermaid/src/types.ts b/packages/mermaid/src/types.ts
index 5587ca3f4..fdccae677 100644
--- a/packages/mermaid/src/types.ts
+++ b/packages/mermaid/src/types.ts
@@ -12,6 +12,11 @@ export interface NodeMetaData {
   assigned?: string;
   ticket?: string;
 }
+
+export interface EdgeMetaData {
+  animation?: 'fast' | 'slow';
+  animate?: boolean;
+}
 import type { MermaidConfig } from './config.type.js';
 
 export interface Point {
diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts
index c1d674834..68b5e2889 100644
--- a/packages/mermaid/src/utils.ts
+++ b/packages/mermaid/src/utils.ts
@@ -937,8 +937,12 @@ export const getEdgeId = (
     counter?: number;
     prefix?: string;
     suffix?: string;
-  }
+  },
+  id?: string
 ) => {
+  if (id) {
+    return id;
+  }
   return `${prefix ? `${prefix}_` : ''}${from}_${to}_${counter}${suffix ? `_${suffix}` : ''}`;
 };
 

From c153d0455fdc89abd49f61d117a64aac1f3748b0 Mon Sep 17 00:00:00 2001
From: Knut Sveidqvist 
Date: Tue, 17 Dec 2024 16:28:38 +0100
Subject: [PATCH 165/492] #5574 Fixed issue linkStyles

---
 packages/mermaid/src/diagrams/flowchart/flowDb.ts           | 3 ---
 .../mermaid/src/rendering-util/rendering-elements/edges.js  | 6 +++---
 2 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
index ccb8a8e94..ffe46d398 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts
+++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
@@ -297,9 +297,6 @@ export const updateLink = function (positions: ('default' | number)[], style: st
     if (pos === 'default') {
       edges.defaultStyle = style;
     } else {
-      // if (utils.isSubstringInArray('fill', style) === -1) {
-      //   style.push('fill:none');
-      // }
       edges[pos].style = style;
       // if edges[pos].style does have fill not set, set it to none
       if (
diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edges.js b/packages/mermaid/src/rendering-util/rendering-elements/edges.js
index 2581d342f..649686c0c 100644
--- a/packages/mermaid/src/rendering-util/rendering-elements/edges.js
+++ b/packages/mermaid/src/rendering-util/rendering-elements/edges.js
@@ -429,7 +429,6 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod
   let pointsHasChanged = false;
   const tail = startNode;
   var head = endNode;
-
   const edgeClassStyles = [];
   for (const key in edge.cssCompiledStyles) {
     if (isLabelStyle(key)) {
@@ -510,6 +509,7 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod
   let svgPath;
   let linePath = lineFunction(lineData);
   const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style];
+
   if (edge.look === 'handDrawn') {
     const rc = rough.svg(elem);
     Object.assign([], lineData);
@@ -531,7 +531,7 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod
     elem.node().appendChild(svgPath.node());
   } else {
     const stylesFromClasses = edgeClassStyles.join(';');
-    const styles = edge.edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '';
+    const styles = edgeStyles ? edgeStyles.reduce((acc, style) => acc + style + ';', '') : '';
     let animationClass = '';
     if (edge.animate) {
       animationClass = ' edge-animation-fast';
@@ -550,7 +550,7 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod
           (edge.classes ? ' ' + edge.classes : '') +
           (animationClass ? animationClass : '')
       )
-      .attr('style', stylesFromClasses + ';' + styles);
+      .attr('style', stylesFromClasses ? stylesFromClasses + ';' + styles + ';' : styles);
   }
 
   // DEBUG code, DO NOT REMOVE

From 323b07a2e4255b8339a29a919634ce2e7b7322bf Mon Sep 17 00:00:00 2001
From: Knut Sveidqvist 
Date: Wed, 18 Dec 2024 11:56:48 +0100
Subject: [PATCH 166/492] Typescript fix and updating documentation

---
 .../setup/interfaces/mermaid.LayoutData.md    |  6 +-
 .../setup/interfaces/mermaid.ParseOptions.md  |  2 +-
 .../setup/interfaces/mermaid.ParseResult.md   |  4 +-
 .../setup/interfaces/mermaid.RenderResult.md  |  6 +-
 docs/syntax/flowchart.md                      | 85 +++++++++++++++++++
 .../mermaid/src/diagrams/flowchart/flowDb.ts  | 18 +++-
 packages/mermaid/src/docs/syntax/flowchart.md | 61 +++++++++++++
 packages/mermaid/src/rendering-util/types.ts  |  2 +
 8 files changed, 171 insertions(+), 13 deletions(-)

diff --git a/docs/config/setup/interfaces/mermaid.LayoutData.md b/docs/config/setup/interfaces/mermaid.LayoutData.md
index 5616e1c9a..552a16a8d 100644
--- a/docs/config/setup/interfaces/mermaid.LayoutData.md
+++ b/docs/config/setup/interfaces/mermaid.LayoutData.md
@@ -20,7 +20,7 @@
 
 #### Defined in
 
-[packages/mermaid/src/rendering-util/types.ts:144](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L144)
+[packages/mermaid/src/rendering-util/types.ts:147](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L147)
 
 ---
 
@@ -30,7 +30,7 @@
 
 #### Defined in
 
-[packages/mermaid/src/rendering-util/types.ts:143](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L143)
+[packages/mermaid/src/rendering-util/types.ts:146](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L146)
 
 ---
 
@@ -40,4 +40,4 @@
 
 #### Defined in
 
-[packages/mermaid/src/rendering-util/types.ts:142](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L142)
+[packages/mermaid/src/rendering-util/types.ts:145](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/rendering-util/types.ts#L145)
diff --git a/docs/config/setup/interfaces/mermaid.ParseOptions.md b/docs/config/setup/interfaces/mermaid.ParseOptions.md
index 717e35565..bac54b8ca 100644
--- a/docs/config/setup/interfaces/mermaid.ParseOptions.md
+++ b/docs/config/setup/interfaces/mermaid.ParseOptions.md
@@ -19,4 +19,4 @@ The `parseError` function will not be called.
 
 #### Defined in
 
-[packages/mermaid/src/types.ts:59](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L59)
+[packages/mermaid/src/types.ts:64](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L64)
diff --git a/docs/config/setup/interfaces/mermaid.ParseResult.md b/docs/config/setup/interfaces/mermaid.ParseResult.md
index 9f90b6dd4..e2eb5df50 100644
--- a/docs/config/setup/interfaces/mermaid.ParseResult.md
+++ b/docs/config/setup/interfaces/mermaid.ParseResult.md
@@ -18,7 +18,7 @@ The config passed as YAML frontmatter or directives
 
 #### Defined in
 
-[packages/mermaid/src/types.ts:70](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L70)
+[packages/mermaid/src/types.ts:75](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L75)
 
 ---
 
@@ -30,4 +30,4 @@ The diagram type, e.g. 'flowchart', 'sequence', etc.
 
 #### Defined in
 
-[packages/mermaid/src/types.ts:66](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L66)
+[packages/mermaid/src/types.ts:71](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L71)
diff --git a/docs/config/setup/interfaces/mermaid.RenderResult.md b/docs/config/setup/interfaces/mermaid.RenderResult.md
index f882b7af4..cce7f6928 100644
--- a/docs/config/setup/interfaces/mermaid.RenderResult.md
+++ b/docs/config/setup/interfaces/mermaid.RenderResult.md
@@ -39,7 +39,7 @@ bindFunctions?.(div); // To call bindFunctions only if it's present.
 
 #### Defined in
 
-[packages/mermaid/src/types.ts:98](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L98)
+[packages/mermaid/src/types.ts:103](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L103)
 
 ---
 
@@ -51,7 +51,7 @@ The diagram type, e.g. 'flowchart', 'sequence', etc.
 
 #### Defined in
 
-[packages/mermaid/src/types.ts:88](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L88)
+[packages/mermaid/src/types.ts:93](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L93)
 
 ---
 
@@ -63,4 +63,4 @@ The svg code for the rendered graph.
 
 #### Defined in
 
-[packages/mermaid/src/types.ts:84](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L84)
+[packages/mermaid/src/types.ts:89](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/types.ts#L89)
diff --git a/docs/syntax/flowchart.md b/docs/syntax/flowchart.md
index 3837e77de..fefa12e02 100644
--- a/docs/syntax/flowchart.md
+++ b/docs/syntax/flowchart.md
@@ -1183,6 +1183,91 @@ flowchart TB
     B --> D
 ```
 
+### Attaching an ID to Edges
+
+Mermaid now supports assigning IDs to edges, similar to how IDs and metadata can be attached to nodes. This feature lays the groundwork for more advanced styling, classes, and animation capabilities on edges.
+
+**Syntax:**
+
+To give an edge an ID, prepend the edge syntax with the ID followed by an `@` character. For example:
+
+```mermaid-example
+flowchart LR
+  A e1@–> B
+```
+
+```mermaid
+flowchart LR
+  A e1@–> B
+```
+
+In this example, `e1` is the ID of the edge connecting `A` to `B`. You can then use this ID in later definitions or style statements, just like with nodes.
+
+### Turning an Animation On
+
+Once you have assigned an ID to an edge, you can turn on animations for that edge by defining the edge’s properties:
+
+```mermaid-example
+flowchart LR
+  A e1@==> B
+  e1@{ animate: true }
+```
+
+```mermaid
+flowchart LR
+  A e1@==> B
+  e1@{ animate: true }
+```
+
+This tells Mermaid that the edge `e1` should be animated.
+
+### Selecting Type of Animation
+
+In the initial version, two animation speeds are supported: `fast` and `slow`. Selecting a specific animation type is a shorthand for enabling animation and setting the animation speed in one go.
+
+**Examples:**
+
+```mermaid-example
+flowchart LR
+  A e1@–> B
+  e1@{ animation: fast }
+```
+
+```mermaid
+flowchart LR
+  A e1@–> B
+  e1@{ animation: fast }
+```
+
+This is equivalent to `{ animate: true, animation: fast }`.
+
+### Using classDef Statements for Animations
+
+You can also animate edges by assigning a class to them and then defining animation properties in a `classDef` statement. For example:
+
+```mermaid-example
+flowchart LR
+  A e1@–> B
+  classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;
+  class e1 animate
+```
+
+```mermaid
+flowchart LR
+  A e1@–> B
+  classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;
+  class e1 animate
+```
+
+In this snippet:
+
+- `e1@-->` creates an edge with ID `e1`.
+- `classDef animate` defines a class named `animate` with styling and animation properties.
+- `class e1 animate` applies the `animate` class to the edge `e1`.
+
+**Note on Escaping Commas:**
+When setting the `stroke-dasharray` property, remember to escape commas as `\,` since commas are used as delimiters in Mermaid’s style definitions.
+
 ## New arrow types
 
 There are new types of arrows supported:
diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
index ffe46d398..931347a4d 100644
--- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts
+++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts
@@ -249,11 +249,21 @@ You have to call mermaid.initialize.`
   }
 };
 
+interface LinkData {
+  id: string;
+}
+
+function isLinkData(value: unknown): value is LinkData {
+  return (
+    value !== null &&
+    typeof value === 'object' &&
+    'id' in value &&
+    typeof (value as LinkData).id === 'string'
+  );
+}
+
 export const addLink = function (_start: string[], _end: string[], linkData: unknown) {
-  const id =
-    linkData && typeof linkData === 'object' && 'id' in linkData
-      ? linkData.id?.replace('@', '')
-      : undefined;
+  const id = isLinkData(linkData) ? linkData.id.replace('@', '') : undefined;
 
   log.info('addLink', _start, _end, id);
 
diff --git a/packages/mermaid/src/docs/syntax/flowchart.md b/packages/mermaid/src/docs/syntax/flowchart.md
index 829b71c2d..6c9db197a 100644
--- a/packages/mermaid/src/docs/syntax/flowchart.md
+++ b/packages/mermaid/src/docs/syntax/flowchart.md
@@ -711,6 +711,67 @@ flowchart TB
     B --> D
 ```
 
+### Attaching an ID to Edges
+
+Mermaid now supports assigning IDs to edges, similar to how IDs and metadata can be attached to nodes. This feature lays the groundwork for more advanced styling, classes, and animation capabilities on edges.
+
+**Syntax:**
+
+To give an edge an ID, prepend the edge syntax with the ID followed by an `@` character. For example:
+
+```mermaid
+flowchart LR
+  A e1@–> B
+```
+
+In this example, `e1` is the ID of the edge connecting `A` to `B`. You can then use this ID in later definitions or style statements, just like with nodes.
+
+### Turning an Animation On
+
+Once you have assigned an ID to an edge, you can turn on animations for that edge by defining the edge’s properties:
+
+```mermaid
+flowchart LR
+  A e1@==> B
+  e1@{ animate: true }
+```
+
+This tells Mermaid that the edge `e1` should be animated.
+
+### Selecting Type of Animation
+
+In the initial version, two animation speeds are supported: `fast` and `slow`. Selecting a specific animation type is a shorthand for enabling animation and setting the animation speed in one go.
+
+**Examples:**
+
+```mermaid
+flowchart LR
+  A e1@–> B
+  e1@{ animation: fast }
+```
+
+This is equivalent to `{ animate: true, animation: fast }`.
+
+### Using classDef Statements for Animations
+
+You can also animate edges by assigning a class to them and then defining animation properties in a `classDef` statement. For example:
+
+```mermaid
+flowchart LR
+  A e1@–> B
+  classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;
+  class e1 animate
+```
+
+In this snippet:
+
+- `e1@-->` creates an edge with ID `e1`.
+- `classDef animate` defines a class named `animate` with styling and animation properties.
+- `class e1 animate` applies the `animate` class to the edge `e1`.
+
+**Note on Escaping Commas:**
+When setting the `stroke-dasharray` property, remember to escape commas as `\,` since commas are used as delimiters in Mermaid’s style definitions.
+
 ## New arrow types
 
 There are new types of arrows supported:
diff --git a/packages/mermaid/src/rendering-util/types.ts b/packages/mermaid/src/rendering-util/types.ts
index d64594218..1f84c66c3 100644
--- a/packages/mermaid/src/rendering-util/types.ts
+++ b/packages/mermaid/src/rendering-util/types.ts
@@ -96,6 +96,8 @@ export interface Edge {
   label?: string;
   classes?: string;
   style?: string[];
+  animate?: boolean;
+  animation?: 'fast' | 'slow';
   // Properties common to both Flowchart and State Diagram edges
   arrowhead?: string;
   arrowheadStyle?: string;

From ec0d9c389aa6018043187654044c1e0b5aa4f600 Mon Sep 17 00:00:00 2001
From: Knut Sveidqvist 
Date: Wed, 18 Dec 2024 11:59:39 +0100
Subject: [PATCH 167/492] Adding changeset

---
 .changeset/many-brooms-promise.md | 5 +++++
 1 file changed, 5 insertions(+)
 create mode 100644 .changeset/many-brooms-promise.md

diff --git a/.changeset/many-brooms-promise.md b/.changeset/many-brooms-promise.md
new file mode 100644
index 000000000..fec442b34
--- /dev/null
+++ b/.changeset/many-brooms-promise.md
@@ -0,0 +1,5 @@
+---
+'mermaid': minor
+---
+
+Adding support for animation of flowchart edges

From fa6f3e5fff461ae194eb0e71c2427887a9b0971a Mon Sep 17 00:00:00 2001
From: Steph <35910788+huynhicode@users.noreply.github.com>
Date: Thu, 19 Dec 2024 13:53:06 -0800
Subject: [PATCH 168/492] update Discord links

---
 .github/ISSUE_TEMPLATE/config.yml                            | 2 +-
 README.md                                                    | 4 ++--
 README.zh-CN.md                                              | 4 ++--
 docs/community/intro.md                                      | 4 ++--
 docs/ecosystem/integrations-create.md                        | 2 +-
 docs/intro/index.md                                          | 2 +-
 packages/mermaid/src/docs/.vitepress/components/HomePage.vue | 2 +-
 packages/mermaid/src/docs/.vitepress/config.ts               | 2 +-
 packages/mermaid/src/docs/community/intro.md                 | 4 ++--
 packages/mermaid/src/docs/ecosystem/integrations-create.md   | 2 +-
 packages/mermaid/src/docs/intro/index.md                     | 2 +-
 11 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 6be6f3b5d..b7313b621 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -4,7 +4,7 @@ contact_links:
     url: https://github.com/mermaid-js/mermaid/discussions
     about: Ask the Community questions or share your own graphs in our discussions.
   - name: Discord
-    url: https://discord.gg/AgrbSrBer3
+    url: https://discord.gg/sKeNQX4Wtj
     about: Join our Community on Discord for Help and a casual chat.
   - name: Documentation
     url: https://mermaid.js.org
diff --git a/README.md b/README.md
index 456747132..2345feb8d 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Generate diagrams from markdown-like text.
 Live Editor!
 

- 📖 Documentation | 🚀 Getting Started | 🌐 CDN | 🙌 Join Us + 📖 Documentation | 🚀 Getting Started | 🌐 CDN | 🙌 Join Us

简体中文 @@ -33,7 +33,7 @@ Try Live Editor previews of future releases: 实时编辑器!

- 📖 文档 | 🚀 入门 | 🌐 CDN | 🙌 加入我们 + 📖 文档 | 🚀 入门 | 🌐 CDN | 🙌 加入我们

English @@ -34,7 +34,7 @@ Mermaid [![Coverage Status](https://codecov.io/github/mermaid-js/mermaid/branch/develop/graph/badge.svg)](https://app.codecov.io/github/mermaid-js/mermaid/tree/develop) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM Downloads](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) -[![Join our Discord!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=discord&label=discord)](https://discord.gg/AgrbSrBer3) +[![Join our Discord!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=discord&label=discord)](https://discord.gg/sKeNQX4Wtj) [![Twitter Follow](https://img.shields.io/badge/Social-mermaidjs__-blue?style=social&logo=X)](https://twitter.com/mermaidjs_) diff --git a/docs/community/intro.md b/docs/community/intro.md index e14c84696..6b1430572 100644 --- a/docs/community/intro.md +++ b/docs/community/intro.md @@ -43,7 +43,7 @@ Where to start: - You could work on a new feature! [These](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Development%22+label%3A%22Type%3A+Enhancement%22+label%3A%22Status%3A+Approved%22+) are some ideas! - You could confirm the bugs in [these issues](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Status%3A+Triage%22++label%3A%22Type%3A+Bug+%2F+Error%22). -[You can join our Discord server if you want closer contact!](https://discord.gg/AgrbSrBer3) +[You can join our Discord server if you want closer contact!](https://discord.gg/sKeNQX4Wtj) ## A Question Or a Suggestion? @@ -55,6 +55,6 @@ If you have faced a vulnerability [report it to us](./security.md). Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there. -[You can join our Discord server if you want closer contact!](https://discord.gg/AgrbSrBer3) +[You can join our Discord server if you want closer contact!](https://discord.gg/sKeNQX4Wtj) ![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) diff --git a/docs/ecosystem/integrations-create.md b/docs/ecosystem/integrations-create.md index f5e938d4d..921368406 100644 --- a/docs/ecosystem/integrations-create.md +++ b/docs/ecosystem/integrations-create.md @@ -24,7 +24,7 @@ Currently pending [IANA](https://www.iana.org/) recognition. ### Mermaid Discord workspace -We would love to see what you create with Mermaid. Please share your creations with us in our [Discord](https://discord.gg/AgrbSrBer3) server [#showcase](https://discord.com/channels/1079455296289788015/1079502635054399649) channel. +We would love to see what you create with Mermaid. Please share your creations with us in our [Discord](https://discord.gg/sKeNQX4Wtj) server [#showcase](https://discord.com/channels/1079455296289788015/1079502635054399649) channel. ### Add to Mermaid Ecosystem diff --git a/docs/intro/index.md b/docs/intro/index.md index 5a71b45a4..baaacd78a 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -22,7 +22,7 @@ It is a JavaScript based diagramming and charting tool that renders Markdown-ins [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) -[![Join our Discord!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=discord&label=discord)](https://discord.gg/AgrbSrBer3) +[![Join our Discord!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=discord&label=discord)](https://discord.gg/sKeNQX4Wtj) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) diff --git a/packages/mermaid/src/docs/.vitepress/components/HomePage.vue b/packages/mermaid/src/docs/.vitepress/components/HomePage.vue index 5006ed022..5dc50ee0e 100644 --- a/packages/mermaid/src/docs/.vitepress/components/HomePage.vue +++ b/packages/mermaid/src/docs/.vitepress/components/HomePage.vue @@ -16,7 +16,7 @@ import { teamMembers } from '../contributors';


- Join the community + Join the community and get involved!

diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts index 8a0225c56..a40b50fed 100644 --- a/packages/mermaid/src/docs/.vitepress/config.ts +++ b/packages/mermaid/src/docs/.vitepress/config.ts @@ -58,7 +58,7 @@ export default defineConfig({ { icon: 'github', link: 'https://github.com/mermaid-js/mermaid' }, { icon: 'discord', - link: 'https://discord.gg/AgrbSrBer3', + link: 'https://discord.gg/sKeNQX4Wtj', }, { icon: { diff --git a/packages/mermaid/src/docs/community/intro.md b/packages/mermaid/src/docs/community/intro.md index a83b96380..45a23b1da 100644 --- a/packages/mermaid/src/docs/community/intro.md +++ b/packages/mermaid/src/docs/community/intro.md @@ -39,7 +39,7 @@ Where to start: - You could work on a new feature! [These](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Development%22+label%3A%22Type%3A+Enhancement%22+label%3A%22Status%3A+Approved%22+) are some ideas! - You could confirm the bugs in [these issues](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Status%3A+Triage%22++label%3A%22Type%3A+Bug+%2F+Error%22). -[You can join our Discord server if you want closer contact!](https://discord.gg/AgrbSrBer3) +[You can join our Discord server if you want closer contact!](https://discord.gg/sKeNQX4Wtj) ## A Question Or a Suggestion? @@ -53,6 +53,6 @@ If you have faced a vulnerability [report it to us](./security.md). Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there. -[You can join our Discord server if you want closer contact!](https://discord.gg/AgrbSrBer3) +[You can join our Discord server if you want closer contact!](https://discord.gg/sKeNQX4Wtj) ![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif) diff --git a/packages/mermaid/src/docs/ecosystem/integrations-create.md b/packages/mermaid/src/docs/ecosystem/integrations-create.md index b14c43ec2..0341f1bf8 100644 --- a/packages/mermaid/src/docs/ecosystem/integrations-create.md +++ b/packages/mermaid/src/docs/ecosystem/integrations-create.md @@ -18,7 +18,7 @@ Currently pending [IANA](https://www.iana.org/) recognition. ### Mermaid Discord workspace -We would love to see what you create with Mermaid. Please share your creations with us in our [Discord](https://discord.gg/AgrbSrBer3) server [#showcase](https://discord.com/channels/1079455296289788015/1079502635054399649) channel. +We would love to see what you create with Mermaid. Please share your creations with us in our [Discord](https://discord.gg/sKeNQX4Wtj) server [#showcase](https://discord.com/channels/1079455296289788015/1079502635054399649) channel. ### Add to Mermaid Ecosystem diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index 627efdaa1..652d6bad0 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -16,7 +16,7 @@ It is a JavaScript based diagramming and charting tool that renders Markdown-ins [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) -[![Join our Discord!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=discord&label=discord)](https://discord.gg/AgrbSrBer3) +[![Join our Discord!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=discord&label=discord)](https://discord.gg/sKeNQX4Wtj) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_) From 9ef6090c8c70832e747b60b88aff9e7c557138fd Mon Sep 17 00:00:00 2001 From: Saurabh Gore Date: Tue, 31 Dec 2024 17:40:52 +0530 Subject: [PATCH 169/492] convert flowDb to class. --- .../src/diagrams/flowchart/flowDb.spec.ts | 7 +- .../mermaid/src/diagrams/flowchart/flowDb.ts | 1921 ++++++++--------- .../src/diagrams/flowchart/flowDiagram.ts | 8 +- .../flowchart/flowRenderer-v3-unified.ts | 3 +- .../flowchart/parser/flow-arrows.spec.js | 4 +- .../flowchart/parser/flow-comments.spec.js | 4 +- .../flowchart/parser/flow-direction.spec.js | 4 +- .../flowchart/parser/flow-edges.spec.js | 4 +- .../flowchart/parser/flow-huge.spec.js | 4 +- .../parser/flow-interactions.spec.js | 4 +- .../flowchart/parser/flow-lines.spec.js | 4 +- .../flowchart/parser/flow-md-string.spec.js | 4 +- .../flowchart/parser/flow-node-data.spec.js | 4 +- .../flowchart/parser/flow-singlenode.spec.js | 4 +- .../flowchart/parser/flow-style.spec.js | 4 +- .../flowchart/parser/flow-text.spec.js | 4 +- .../parser/flow-vertice-chaining.spec.js | 4 +- .../diagrams/flowchart/parser/flow.spec.js | 4 +- .../flowchart/parser/subgraph.spec.js | 4 +- 19 files changed, 991 insertions(+), 1008 deletions(-) diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts index 5983bf04c..841a9d9fe 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.spec.ts @@ -1,9 +1,11 @@ -import flowDb from './flowDb.js'; +import { FlowDb } from './flowDb.js'; import type { FlowSubGraph } from './types.js'; describe('flow db subgraphs', () => { + let flowDb: FlowDb; let subgraphs: FlowSubGraph[]; beforeEach(() => { + flowDb = new FlowDb(); subgraphs = [ { nodes: ['a', 'b', 'c', 'e'] }, { nodes: ['f', 'g', 'h'] }, @@ -44,8 +46,9 @@ describe('flow db subgraphs', () => { }); describe('flow db addClass', () => { + let flowDb: FlowDb; beforeEach(() => { - flowDb.clear(); + flowDb = new FlowDb(); }); it('should detect many classes', () => { flowDb.addClass('a,b', ['stroke-width: 8px']); diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts index 1dbc789c9..8b88fc723 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts @@ -27,1037 +27,1016 @@ import type { import type { NodeMetaData } from '../../types.js'; const MERMAID_DOM_ID_PREFIX = 'flowchart-'; -let vertexCounter = 0; -let config = getConfig(); -let vertices = new Map(); -let edges: FlowEdge[] & { defaultInterpolate?: string; defaultStyle?: string[] } = []; -let classes = new Map(); -let subGraphs: FlowSubGraph[] = []; -let subGraphLookup = new Map(); -let tooltips = new Map(); -let subCount = 0; -let firstGraphFlag = true; -let direction: string; -let version: string; // As in graph +export class FlowDb { + private vertexCounter = 0; + private config = getConfig(); + private vertices = new Map(); + private edges: FlowEdge[] & { defaultInterpolate?: string; defaultStyle?: string[] } = []; + private classes = new Map(); + private subGraphs: FlowSubGraph[] = []; + private subGraphLookup = new Map(); + private tooltips = new Map(); + private subCount = 0; + private firstGraphFlag = true; + private direction: string | undefined; -// Functions to be run after graph rendering -let funs: ((element: Element) => void)[] = []; // cspell:ignore funs + private version: string | undefined; // As in graph -const sanitizeText = (txt: string) => common.sanitizeText(txt, config); + private secCount = -1; + private posCrossRef: number[] = []; -/** - * Function to lookup domId from id in the graph definition. - * - * @param id - id of the node - */ -export const lookUpDomId = function (id: string) { - for (const vertex of vertices.values()) { - if (vertex.id === id) { - return vertex.domId; + // Functions to be run after graph rendering + private funs: ((element: Element) => void)[] = []; // cspell:ignore funs + + constructor() { + this.funs.push(this.setupToolTips); + this.clear(); + this.setGen('gen-2'); + } + + private sanitizeText = (txt: string) => common.sanitizeText(txt, this.config); + + /** + * Function to lookup domId from id in the graph definition. + * + * @param id - id of the node + */ + public lookUpDomId = (id: string) => { + for (const vertex of this.vertices.values()) { + if (vertex.id === id) { + return vertex.domId; + } } - } - return id; -}; + return id; + }; -/** - * Function called by parser when a node definition has been found - */ -export const addVertex = function ( - id: string, - textObj: FlowText, - type: FlowVertexTypeParam, - style: string[], - classes: string[], - dir: string, - props = {}, - shapeData: any -) { - // console.log('addVertex', id, shapeData); - if (!id || id.trim().length === 0) { - return; - } - let txt; - - let vertex = vertices.get(id); - if (vertex === undefined) { - vertex = { - id, - labelType: 'text', - domId: MERMAID_DOM_ID_PREFIX + id + '-' + vertexCounter, - styles: [], - classes: [], - }; - vertices.set(id, vertex); - } - vertexCounter++; - - if (textObj !== undefined) { - config = getConfig(); - txt = sanitizeText(textObj.text.trim()); - vertex.labelType = textObj.type; - // strip quotes if string starts and ends with a quote - if (txt.startsWith('"') && txt.endsWith('"')) { - txt = txt.substring(1, txt.length - 1); + /** + * Function called by parser when a node definition has been found + */ + public addVertex = ( + id: string, + textObj: FlowText, + type: FlowVertexTypeParam, + style: string[], + classes: string[], + dir: string, + props = {}, + shapeData: any + ) => { + // console.log('addVertex', id, shapeData); + if (!id || id.trim().length === 0) { + return; } - vertex.text = txt; - } else { - if (vertex.text === undefined) { - vertex.text = id; - } - } - if (type !== undefined) { - vertex.type = type; - } - if (style !== undefined && style !== null) { - style.forEach(function (s) { - vertex.styles.push(s); - }); - } - if (classes !== undefined && classes !== null) { - classes.forEach(function (s) { - vertex.classes.push(s); - }); - } - if (dir !== undefined) { - vertex.dir = dir; - } - if (vertex.props === undefined) { - vertex.props = props; - } else if (props !== undefined) { - Object.assign(vertex.props, props); - } + let txt; - if (shapeData !== undefined) { - let yamlData; - // detect if shapeData contains a newline character - // console.log('shapeData', shapeData); - if (!shapeData.includes('\n')) { - // console.log('yamlData shapeData has no new lines', shapeData); - yamlData = '{\n' + shapeData + '\n}'; + let vertex = this.vertices.get(id); + if (vertex === undefined) { + vertex = { + id, + labelType: 'text', + domId: MERMAID_DOM_ID_PREFIX + id + '-' + this.vertexCounter, + styles: [], + classes: [], + }; + this.vertices.set(id, vertex); + } + this.vertexCounter++; + + if (textObj !== undefined) { + this.config = getConfig(); + txt = this.sanitizeText(textObj.text.trim()); + vertex.labelType = textObj.type; + // strip quotes if string starts and ends with a quote + if (txt.startsWith('"') && txt.endsWith('"')) { + txt = txt.substring(1, txt.length - 1); + } + vertex.text = txt; } else { - // console.log('yamlData shapeData has new lines', shapeData); - yamlData = shapeData + '\n'; - } - // console.log('yamlData', yamlData); - const doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData; - if (doc.shape) { - if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes('_')) { - throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`); - } else if (!isValidShape(doc.shape)) { - throw new Error(`No such shape: ${doc.shape}.`); - } - vertex.type = doc?.shape; - } - - if (doc?.label) { - vertex.text = doc?.label; - } - if (doc?.icon) { - vertex.icon = doc?.icon; - if (!doc.label?.trim() && vertex.text === id) { - vertex.text = ''; + if (vertex.text === undefined) { + vertex.text = id; } } - if (doc?.form) { - vertex.form = doc?.form; + if (type !== undefined) { + vertex.type = type; } - if (doc?.pos) { - vertex.pos = doc?.pos; + if (style !== undefined && style !== null) { + style.forEach((s) => { + vertex.styles.push(s); + }); } - if (doc?.img) { - vertex.img = doc?.img; - if (!doc.label?.trim() && vertex.text === id) { - vertex.text = ''; + if (classes !== undefined && classes !== null) { + classes.forEach((s) => { + vertex.classes.push(s); + }); + } + if (dir !== undefined) { + vertex.dir = dir; + } + if (vertex.props === undefined) { + vertex.props = props; + } else if (props !== undefined) { + Object.assign(vertex.props, props); + } + + if (shapeData !== undefined) { + let yamlData; + // detect if shapeData contains a newline character + // console.log('shapeData', shapeData); + if (!shapeData.includes('\n')) { + // console.log('yamlData shapeData has no new lines', shapeData); + yamlData = '{\n' + shapeData + '\n}'; + } else { + // console.log('yamlData shapeData has new lines', shapeData); + yamlData = shapeData + '\n'; + } + // console.log('yamlData', yamlData); + const doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData; + if (doc.shape) { + if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes('_')) { + throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`); + } else if (!isValidShape(doc.shape)) { + throw new Error(`No such shape: ${doc.shape}.`); + } + vertex.type = doc?.shape; + } + + if (doc?.label) { + vertex.text = doc?.label; + } + if (doc?.icon) { + vertex.icon = doc?.icon; + if (!doc.label?.trim() && vertex.text === id) { + vertex.text = ''; + } + } + if (doc?.form) { + vertex.form = doc?.form; + } + if (doc?.pos) { + vertex.pos = doc?.pos; + } + if (doc?.img) { + vertex.img = doc?.img; + if (!doc.label?.trim() && vertex.text === id) { + vertex.text = ''; + } + } + if (doc?.constraint) { + vertex.constraint = doc.constraint; + } + if (doc.w) { + vertex.assetWidth = Number(doc.w); + } + if (doc.h) { + vertex.assetHeight = Number(doc.h); } } - if (doc?.constraint) { - vertex.constraint = doc.constraint; + }; + + /** + * Function called by parser when a link/edge definition has been found + * + */ + private addSingleLink = (_start: string, _end: string, type: any) => { + const start = _start; + const end = _end; + + const edge: FlowEdge = { start: start, end: end, type: undefined, text: '', labelType: 'text' }; + log.info('abc78 Got edge...', edge); + const linkTextObj = type.text; + + if (linkTextObj !== undefined) { + edge.text = this.sanitizeText(linkTextObj.text.trim()); + + // strip quotes if string starts and ends with a quote + if (edge.text.startsWith('"') && edge.text.endsWith('"')) { + edge.text = edge.text.substring(1, edge.text.length - 1); + } + edge.labelType = linkTextObj.type; } - if (doc.w) { - vertex.assetWidth = Number(doc.w); + + if (type !== undefined) { + edge.type = type.type; + edge.stroke = type.stroke; + edge.length = type.length > 10 ? 10 : type.length; } - if (doc.h) { - vertex.assetHeight = Number(doc.h); - } - } -}; -/** - * Function called by parser when a link/edge definition has been found - * - */ -export const addSingleLink = function (_start: string, _end: string, type: any) { - const start = _start; - const end = _end; - - const edge: FlowEdge = { start: start, end: end, type: undefined, text: '', labelType: 'text' }; - log.info('abc78 Got edge...', edge); - const linkTextObj = type.text; - - if (linkTextObj !== undefined) { - edge.text = sanitizeText(linkTextObj.text.trim()); - - // strip quotes if string starts and ends with a quote - if (edge.text.startsWith('"') && edge.text.endsWith('"')) { - edge.text = edge.text.substring(1, edge.text.length - 1); - } - edge.labelType = linkTextObj.type; - } - - if (type !== undefined) { - edge.type = type.type; - edge.stroke = type.stroke; - edge.length = type.length > 10 ? 10 : type.length; - } - - if (edges.length < (config.maxEdges ?? 500)) { - log.info('Pushing edge...'); - edges.push(edge); - } else { - throw new Error( - `Edge limit exceeded. ${edges.length} edges found, but the limit is ${config.maxEdges}. + if (this.edges.length < (this.config.maxEdges ?? 500)) { + log.info('Pushing edge...'); + this.edges.push(edge); + } else { + throw new Error( + `Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. Initialize mermaid with maxEdges set to a higher number to allow more edges. You cannot set this config via configuration inside the diagram as it is a secure config. You have to call mermaid.initialize.` - ); - } -}; - -export const addLink = function (_start: string[], _end: string[], type: unknown) { - log.info('addLink', _start, _end, type); - for (const start of _start) { - for (const end of _end) { - addSingleLink(start, end, type); - } - } -}; - -/** - * Updates a link's line interpolation algorithm - * - */ -export const updateLinkInterpolate = function ( - positions: ('default' | number)[], - interpolate: string -) { - positions.forEach(function (pos) { - if (pos === 'default') { - edges.defaultInterpolate = interpolate; - } else { - edges[pos].interpolate = interpolate; - } - }); -}; - -/** - * Updates a link with a style - * - */ -export const updateLink = function (positions: ('default' | number)[], style: string[]) { - positions.forEach(function (pos) { - if (typeof pos === 'number' && pos >= edges.length) { - throw new Error( - `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${ - edges.length - 1 - }. (Help: Ensure that the index is within the range of existing edges.)` ); } - if (pos === 'default') { - edges.defaultStyle = style; - } else { - // if (utils.isSubstringInArray('fill', style) === -1) { - // style.push('fill:none'); - // } - edges[pos].style = style; - // if edges[pos].style does have fill not set, set it to none - if ( - (edges[pos]?.style?.length ?? 0) > 0 && - !edges[pos]?.style?.some((s) => s?.startsWith('fill')) - ) { - edges[pos]?.style?.push('fill:none'); + }; + + public addLink = (_start: string[], _end: string[], type: unknown) => { + log.info('addLink', _start, _end, type); + for (const start of _start) { + for (const end of _end) { + this.addSingleLink(start, end, type); } } - }); -}; + }; -export const addClass = function (ids: string, style: string[]) { - ids.split(',').forEach(function (id) { - let classNode = classes.get(id); - if (classNode === undefined) { - classNode = { id, styles: [], textStyles: [] }; - classes.set(id, classNode); - } - - if (style !== undefined && style !== null) { - style.forEach(function (s) { - if (/color/.exec(s)) { - const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); - classNode.textStyles.push(newStyle); - } - classNode.styles.push(s); - }); - } - }); -}; - -/** - * Called by parser when a graph definition is found, stores the direction of the chart. - * - */ -export const setDirection = function (dir: string) { - direction = dir; - if (/.*/.exec(direction)) { - direction = 'LR'; - } - if (/.*v/.exec(direction)) { - direction = 'TB'; - } - if (direction === 'TD') { - direction = 'TB'; - } -}; - -/** - * Called by parser when a special node is found, e.g. a clickable element. - * - * @param ids - Comma separated list of ids - * @param className - Class to add - */ -export const setClass = function (ids: string, className: string) { - for (const id of ids.split(',')) { - const vertex = vertices.get(id); - if (vertex) { - vertex.classes.push(className); - } - const subGraph = subGraphLookup.get(id); - if (subGraph) { - subGraph.classes.push(className); - } - } -}; - -const setTooltip = function (ids: string, tooltip: string) { - if (tooltip === undefined) { - return; - } - tooltip = sanitizeText(tooltip); - for (const id of ids.split(',')) { - tooltips.set(version === 'gen-1' ? lookUpDomId(id) : id, tooltip); - } -}; - -const setClickFun = function (id: string, functionName: string, functionArgs: string) { - const domId = lookUpDomId(id); - // if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; - if (getConfig().securityLevel !== 'loose') { - return; - } - if (functionName === undefined) { - return; - } - let argList: string[] = []; - if (typeof functionArgs === 'string') { - /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ - argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); - for (let i = 0; i < argList.length; i++) { - let item = argList[i].trim(); - /* Removes all double quotes at the start and end of an argument */ - /* This preserves all starting and ending whitespace inside */ - if (item.startsWith('"') && item.endsWith('"')) { - item = item.substr(1, item.length - 2); + /** + * Updates a link's line interpolation algorithm + * + */ + public updateLinkInterpolate = (positions: ('default' | number)[], interpolate: string) => { + positions.forEach((pos) => { + if (pos === 'default') { + this.edges.defaultInterpolate = interpolate; + } else { + this.edges[pos].interpolate = interpolate; } - argList[i] = item; - } - } + }); + }; - /* if no arguments passed into callback, default to passing in id */ - if (argList.length === 0) { - argList.push(id); - } - - const vertex = vertices.get(id); - if (vertex) { - vertex.haveCallback = true; - funs.push(function () { - const elem = document.querySelector(`[id="${domId}"]`); - if (elem !== null) { - elem.addEventListener( - 'click', - function () { - utils.runFunc(functionName, ...argList); - }, - false + /** + * Updates a link with a style + * + */ + public updateLink = (positions: ('default' | number)[], style: string[]) => { + positions.forEach((pos) => { + if (typeof pos === 'number' && pos >= this.edges.length) { + throw new Error( + `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${ + this.edges.length - 1 + }. (Help: Ensure that the index is within the range of existing edges.)` ); } - }); - } -}; - -/** - * Called by parser when a link is found. Adds the URL to the vertex data. - * - * @param ids - Comma separated list of ids - * @param linkStr - URL to create a link for - * @param target - Target attribute for the link - */ -export const setLink = function (ids: string, linkStr: string, target: string) { - ids.split(',').forEach(function (id) { - const vertex = vertices.get(id); - if (vertex !== undefined) { - vertex.link = utils.formatUrl(linkStr, config); - vertex.linkTarget = target; - } - }); - setClass(ids, 'clickable'); -}; - -export const getTooltip = function (id: string) { - return tooltips.get(id); -}; - -/** - * Called by parser when a click definition is found. Registers an event handler. - * - * @param ids - Comma separated list of ids - * @param functionName - Function to be called on click - * @param functionArgs - Arguments to be passed to the function - */ -export const setClickEvent = function (ids: string, functionName: string, functionArgs: string) { - ids.split(',').forEach(function (id) { - setClickFun(id, functionName, functionArgs); - }); - setClass(ids, 'clickable'); -}; - -export const bindFunctions = function (element: Element) { - funs.forEach(function (fun) { - fun(element); - }); -}; -export const getDirection = function () { - return direction.trim(); -}; -/** - * Retrieval function for fetching the found nodes after parsing has completed. - * - */ -export const getVertices = function () { - return vertices; -}; - -/** - * Retrieval function for fetching the found links after parsing has completed. - * - */ -export const getEdges = function () { - return edges; -}; - -/** - * Retrieval function for fetching the found class definitions after parsing has completed. - * - */ -export const getClasses = function () { - return classes; -}; - -const setupToolTips = function (element: Element) { - let tooltipElem = select('.mermaidTooltip'); - // @ts-ignore TODO: fix this - if ((tooltipElem._groups || tooltipElem)[0][0] === null) { - // @ts-ignore TODO: fix this - tooltipElem = select('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0); - } - - const svg = select(element).select('svg'); - - const nodes = svg.selectAll('g.node'); - nodes - .on('mouseover', function () { - const el = select(this); - const title = el.attr('title'); - - // Don't try to draw a tooltip if no data is provided - if (title === null) { - return; - } - const rect = (this as Element)?.getBoundingClientRect(); - - tooltipElem.transition().duration(200).style('opacity', '.9'); - tooltipElem - .text(el.attr('title')) - .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') - .style('top', window.scrollY + rect.bottom + 'px'); - tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
')); - el.classed('hover', true); - }) - .on('mouseout', function () { - tooltipElem.transition().duration(500).style('opacity', 0); - const el = select(this); - el.classed('hover', false); - }); -}; -funs.push(setupToolTips); - -/** - * Clears the internal graph db so that a new graph can be parsed. - * - */ -export const clear = function (ver = 'gen-1') { - vertices = new Map(); - classes = new Map(); - edges = []; - funs = [setupToolTips]; - subGraphs = []; - subGraphLookup = new Map(); - subCount = 0; - tooltips = new Map(); - firstGraphFlag = true; - version = ver; - config = getConfig(); - commonClear(); -}; - -export const setGen = (ver: string) => { - version = ver || 'gen-2'; -}; - -export const defaultStyle = function () { - return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; -}; - -export const addSubGraph = function ( - _id: { text: string }, - list: string[], - _title: { text: string; type: string } -) { - let id: string | undefined = _id.text.trim(); - let title = _title.text; - if (_id === _title && /\s/.exec(_title.text)) { - id = undefined; - } - - function uniq(a: any[]) { - const prims: any = { boolean: {}, number: {}, string: {} }; - const objs: any[] = []; - - let dir; // = undefined; direction.trim(); - const nodeList = a.filter(function (item) { - const type = typeof item; - if (item.stmt && item.stmt === 'dir') { - dir = item.value; - return false; - } - if (item.trim() === '') { - return false; - } - if (type in prims) { - return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); + if (pos === 'default') { + this.edges.defaultStyle = style; } else { - return objs.includes(item) ? false : objs.push(item); + // if (utils.isSubstringInArray('fill', style) === -1) { + // style.push('fill:none'); + // } + this.edges[pos].style = style; + // if edges[pos].style does have fill not set, set it to none + if ( + (this.edges[pos]?.style?.length ?? 0) > 0 && + !this.edges[pos]?.style?.some((s) => s?.startsWith('fill')) + ) { + this.edges[pos]?.style?.push('fill:none'); + } } }); - return { nodeList, dir }; - } - - const { nodeList, dir } = uniq(list.flat()); - if (version === 'gen-1') { - for (let i = 0; i < nodeList.length; i++) { - nodeList[i] = lookUpDomId(nodeList[i]); - } - } - - id = id ?? 'subGraph' + subCount; - title = title || ''; - title = sanitizeText(title); - subCount = subCount + 1; - const subGraph = { - id: id, - nodes: nodeList, - title: title.trim(), - classes: [], - dir, - labelType: _title.type, }; - log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir); + public addClass = (ids: string, style: string[]) => { + ids.split(',').forEach((id) => { + let classNode = this.classes.get(id); + if (classNode === undefined) { + classNode = { id, styles: [], textStyles: [] }; + this.classes.set(id, classNode); + } - // Remove the members in the new subgraph if they already belong to another subgraph - subGraph.nodes = makeUniq(subGraph, subGraphs).nodes; - subGraphs.push(subGraph); - subGraphLookup.set(id, subGraph); - return id; -}; + if (style !== undefined && style !== null) { + style.forEach((s) => { + if (/color/.exec(s)) { + const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); + classNode.textStyles.push(newStyle); + } + classNode.styles.push(s); + }); + } + }); + }; -const getPosForId = function (id: string) { - for (const [i, subGraph] of subGraphs.entries()) { - if (subGraph.id === id) { - return i; + /** + * Called by parser when a graph definition is found, stores the direction of the chart. + * + */ + public setDirection = (dir: string) => { + this.direction = dir; + if (/.* 2000) { + if (/.*\^/.exec(this.direction)) { + this.direction = 'BT'; + } + if (/.*>/.exec(this.direction)) { + this.direction = 'LR'; + } + if (/.*v/.exec(this.direction)) { + this.direction = 'TB'; + } + if (this.direction === 'TD') { + this.direction = 'TB'; + } + }; + + /** + * Called by parser when a special node is found, e.g. a clickable element. + * + * @param ids - Comma separated list of ids + * @param className - Class to add + */ + public setClass = (ids: string, className: string) => { + for (const id of ids.split(',')) { + const vertex = this.vertices.get(id); + if (vertex) { + vertex.classes.push(className); + } + const subGraph = this.subGraphLookup.get(id); + if (subGraph) { + subGraph.classes.push(className); + } + } + }; + + public setTooltip = (ids: string, tooltip: string) => { + if (tooltip === undefined) { + return; + } + tooltip = this.sanitizeText(tooltip); + for (const id of ids.split(',')) { + this.tooltips.set(this.version === 'gen-1' ? this.lookUpDomId(id) : id, tooltip); + } + }; + + private setClickFun = (id: string, functionName: string, functionArgs: string) => { + const domId = this.lookUpDomId(id); + // if (_id[0].match(/\d/)) id = MERMAID_DOM_ID_PREFIX + id; + if (getConfig().securityLevel !== 'loose') { + return; + } + if (functionName === undefined) { + return; + } + let argList: string[] = []; + if (typeof functionArgs === 'string') { + /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ + argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); + for (let i = 0; i < argList.length; i++) { + let item = argList[i].trim(); + /* Removes all double quotes at the start and end of an argument */ + /* This preserves all starting and ending whitespace inside */ + if (item.startsWith('"') && item.endsWith('"')) { + item = item.substr(1, item.length - 2); + } + argList[i] = item; + } + } + + /* if no arguments passed into callback, default to passing in id */ + if (argList.length === 0) { + argList.push(id); + } + + const vertex = this.vertices.get(id); + if (vertex) { + vertex.haveCallback = true; + this.funs.push(() => { + const elem = document.querySelector(`[id="${domId}"]`); + if (elem !== null) { + elem.addEventListener( + 'click', + () => { + utils.runFunc(functionName, ...argList); + }, + false + ); + } + }); + } + }; + + /** + * Called by parser when a link is found. Adds the URL to the vertex data. + * + * @param ids - Comma separated list of ids + * @param linkStr - URL to create a link for + * @param target - Target attribute for the link + */ + public setLink = (ids: string, linkStr: string, target: string) => { + ids.split(',').forEach((id) => { + const vertex = this.vertices.get(id); + if (vertex !== undefined) { + vertex.link = utils.formatUrl(linkStr, this.config); + vertex.linkTarget = target; + } + }); + this.setClass(ids, 'clickable'); + }; + + public getTooltip = (id: string) => { + return this.tooltips.get(id); + }; + + /** + * Called by parser when a click definition is found. Registers an event handler. + * + * @param ids - Comma separated list of ids + * @param functionName - Function to be called on click + * @param functionArgs - Arguments to be passed to the function + */ + public setClickEvent = (ids: string, functionName: string, functionArgs: string) => { + ids.split(',').forEach((id) => { + this.setClickFun(id, functionName, functionArgs); + }); + this.setClass(ids, 'clickable'); + }; + + public bindFunctions = (element: Element) => { + this.funs.forEach((fun) => { + fun(element); + }); + }; + public getDirection = () => { + return this.direction?.trim(); + }; + /** + * Retrieval function for fetching the found nodes after parsing has completed. + * + */ + public getVertices = () => { + return this.vertices; + }; + + /** + * Retrieval function for fetching the found links after parsing has completed. + * + */ + public getEdges = () => { + return this.edges; + }; + + /** + * Retrieval function for fetching the found class definitions after parsing has completed. + * + */ + public getClasses = () => { + return this.classes; + }; + + private setupToolTips = (element: Element) => { + let tooltipElem = select('.mermaidTooltip'); + // @ts-ignore TODO: fix this + if ((tooltipElem._groups || tooltipElem)[0][0] === null) { + // @ts-ignore TODO: fix this + tooltipElem = select('body') + .append('div') + .attr('class', 'mermaidTooltip') + .style('opacity', 0); + } + + const svg = select(element).select('svg'); + + const nodes = svg.selectAll('g.node'); + nodes + .on('mouseover', (e: MouseEvent) => { + const el = select(e.currentTarget as Element); + const title = el.attr('title'); + + // Don't try to draw a tooltip if no data is provided + if (title === null) { + return; + } + const rect = (e.currentTarget as Element)?.getBoundingClientRect(); + + tooltipElem.transition().duration(200).style('opacity', '.9'); + tooltipElem + .text(el.attr('title')) + .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px') + .style('top', window.scrollY + rect.bottom + 'px'); + tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, '
')); + el.classed('hover', true); + }) + .on('mouseout', (e: MouseEvent) => { + tooltipElem.transition().duration(500).style('opacity', 0); + const el = select(e.currentTarget as Element); + el.classed('hover', false); + }); + }; + + /** + * Clears the internal graph db so that a new graph can be parsed. + * + */ + public clear = (ver = 'gen-1') => { + this.vertices = new Map(); + this.classes = new Map(); + this.edges = []; + this.funs = [this.setupToolTips]; + this.subGraphs = []; + this.subGraphLookup = new Map(); + this.subCount = 0; + this.tooltips = new Map(); + this.firstGraphFlag = true; + this.version = ver; + this.config = getConfig(); + commonClear(); + }; + + public setGen = (ver: string) => { + this.version = ver || 'gen-2'; + }; + + public defaultStyle = () => { + return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; + }; + + public addSubGraph = ( + _id: { text: string }, + list: string[], + _title: { text: string; type: string } + ) => { + let id: string | undefined = _id.text.trim(); + let title = _title.text; + if (_id === _title && /\s/.exec(_title.text)) { + id = undefined; + } + + const uniq = (a: any[]) => { + const prims: any = { boolean: {}, number: {}, string: {} }; + const objs: any[] = []; + + let dir; // = undefined; direction.trim(); + const nodeList = a.filter(function (item) { + const type = typeof item; + if (item.stmt && item.stmt === 'dir') { + dir = item.value; + return false; + } + if (item.trim() === '') { + return false; + } + if (type in prims) { + return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); + } else { + return objs.includes(item) ? false : objs.push(item); + } + }); + return { nodeList, dir }; + }; + + const { nodeList, dir } = uniq(list.flat()); + if (this.version === 'gen-1') { + for (let i = 0; i < nodeList.length; i++) { + nodeList[i] = this.lookUpDomId(nodeList[i]); + } + } + + id = id ?? 'subGraph' + this.subCount; + title = title || ''; + title = this.sanitizeText(title); + this.subCount = this.subCount + 1; + const subGraph = { + id: id, + nodes: nodeList, + title: title.trim(), + classes: [], + dir, + labelType: _title.type, + }; + + log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir); + + // Remove the members in the new subgraph if they already belong to another subgraph + subGraph.nodes = this.makeUniq(subGraph, this.subGraphs).nodes; + this.subGraphs.push(subGraph); + this.subGraphLookup.set(id, subGraph); + return id; + }; + + private getPosForId = (id: string) => { + for (const [i, subGraph] of this.subGraphs.entries()) { + if (subGraph.id === id) { + return i; + } + } + return -1; + }; + + private indexNodes2 = (id: string, pos: number): { result: boolean; count: number } => { + const nodes = this.subGraphs[pos].nodes; + this.secCount = this.secCount + 1; + if (this.secCount > 2000) { + return { + result: false, + count: 0, + }; + } + this.posCrossRef[this.secCount] = pos; + // Check if match + if (this.subGraphs[pos].id === id) { + return { + result: true, + count: 0, + }; + } + + let count = 0; + let posCount = 1; + while (count < nodes.length) { + const childPos = this.getPosForId(nodes[count]); + // Ignore regular nodes (pos will be -1) + if (childPos >= 0) { + const res = this.indexNodes2(id, childPos); + if (res.result) { + return { + result: true, + count: posCount + res.count, + }; + } else { + posCount = posCount + res.count; + } + } + count = count + 1; + } + return { result: false, - count: 0, + count: posCount, }; - } - posCrossRef[secCount] = pos; - // Check if match - if (subGraphs[pos].id === id) { - return { - result: true, - count: 0, - }; - } - - let count = 0; - let posCount = 1; - while (count < nodes.length) { - const childPos = getPosForId(nodes[count]); - // Ignore regular nodes (pos will be -1) - if (childPos >= 0) { - const res = indexNodes2(id, childPos); - if (res.result) { - return { - result: true, - count: posCount + res.count, - }; - } else { - posCount = posCount + res.count; - } - } - count = count + 1; - } - - return { - result: false, - count: posCount, }; -}; -export const getDepthFirstPos = function (pos: number) { - return posCrossRef[pos]; -}; -export const indexNodes = function () { - secCount = -1; - if (subGraphs.length > 0) { - indexNodes2('none', subGraphs.length - 1); - } -}; - -export const getSubGraphs = function () { - return subGraphs; -}; - -export const firstGraph = () => { - if (firstGraphFlag) { - firstGraphFlag = false; - return true; - } - return false; -}; - -const destructStartLink = (_str: string): FlowLink => { - let str = _str.trim(); - let type = 'arrow_open'; - - switch (str[0]) { - case '<': - type = 'arrow_point'; - str = str.slice(1); - break; - case 'x': - type = 'arrow_cross'; - str = str.slice(1); - break; - case 'o': - type = 'arrow_circle'; - str = str.slice(1); - break; - } - - let stroke = 'normal'; - - if (str.includes('=')) { - stroke = 'thick'; - } - - if (str.includes('.')) { - stroke = 'dotted'; - } - - return { type, stroke }; -}; - -const countChar = (char: string, str: string) => { - const length = str.length; - let count = 0; - for (let i = 0; i < length; ++i) { - if (str[i] === char) { - ++count; + public getDepthFirstPos = (pos: number) => { + return this.posCrossRef[pos]; + }; + public indexNodes = () => { + this.secCount = -1; + if (this.subGraphs.length > 0) { + this.indexNodes2('none', this.subGraphs.length - 1); } - } - return count; -}; + }; -const destructEndLink = (_str: string) => { - const str = _str.trim(); - let line = str.slice(0, -1); - let type = 'arrow_open'; + public getSubGraphs = () => { + return this.subGraphs; + }; - switch (str.slice(-1)) { - case 'x': - type = 'arrow_cross'; - if (str.startsWith('x')) { - type = 'double_' + type; - line = line.slice(1); - } - break; - case '>': - type = 'arrow_point'; - if (str.startsWith('<')) { - type = 'double_' + type; - line = line.slice(1); - } - break; - case 'o': - type = 'arrow_circle'; - if (str.startsWith('o')) { - type = 'double_' + type; - line = line.slice(1); - } - break; - } + public firstGraph = () => { + if (this.firstGraphFlag) { + this.firstGraphFlag = false; + return true; + } + return false; + }; - let stroke = 'normal'; - let length = line.length - 1; + private destructStartLink = (_str: string): FlowLink => { + let str = _str.trim(); + let type = 'arrow_open'; - if (line.startsWith('=')) { - stroke = 'thick'; - } - - if (line.startsWith('~')) { - stroke = 'invisible'; - } - - const dots = countChar('.', line); - - if (dots) { - stroke = 'dotted'; - length = dots; - } - - return { type, stroke, length }; -}; - -export const destructLink = (_str: string, _startStr: string) => { - const info = destructEndLink(_str); - let startInfo; - if (_startStr) { - startInfo = destructStartLink(_startStr); - - if (startInfo.stroke !== info.stroke) { - return { type: 'INVALID', stroke: 'INVALID' }; + switch (str[0]) { + case '<': + type = 'arrow_point'; + str = str.slice(1); + break; + case 'x': + type = 'arrow_cross'; + str = str.slice(1); + break; + case 'o': + type = 'arrow_circle'; + str = str.slice(1); + break; } - if (startInfo.type === 'arrow_open') { - // -- xyz --> - take arrow type from ending - startInfo.type = info.type; - } else { - // x-- xyz --> - not supported - if (startInfo.type !== info.type) { + let stroke = 'normal'; + + if (str.includes('=')) { + stroke = 'thick'; + } + + if (str.includes('.')) { + stroke = 'dotted'; + } + + return { type, stroke }; + }; + + private countChar = (char: string, str: string) => { + const length = str.length; + let count = 0; + for (let i = 0; i < length; ++i) { + if (str[i] === char) { + ++count; + } + } + return count; + }; + + private destructEndLink = (_str: string) => { + const str = _str.trim(); + let line = str.slice(0, -1); + let type = 'arrow_open'; + + switch (str.slice(-1)) { + case 'x': + type = 'arrow_cross'; + if (str.startsWith('x')) { + type = 'double_' + type; + line = line.slice(1); + } + break; + case '>': + type = 'arrow_point'; + if (str.startsWith('<')) { + type = 'double_' + type; + line = line.slice(1); + } + break; + case 'o': + type = 'arrow_circle'; + if (str.startsWith('o')) { + type = 'double_' + type; + line = line.slice(1); + } + break; + } + + let stroke = 'normal'; + let length = line.length - 1; + + if (line.startsWith('=')) { + stroke = 'thick'; + } + + if (line.startsWith('~')) { + stroke = 'invisible'; + } + + const dots = this.countChar('.', line); + + if (dots) { + stroke = 'dotted'; + length = dots; + } + + return { type, stroke, length }; + }; + + public destructLink = (_str: string, _startStr: string) => { + const info = this.destructEndLink(_str); + let startInfo; + if (_startStr) { + startInfo = this.destructStartLink(_startStr); + + if (startInfo.stroke !== info.stroke) { return { type: 'INVALID', stroke: 'INVALID' }; } - startInfo.type = 'double_' + startInfo.type; + if (startInfo.type === 'arrow_open') { + // -- xyz --> - take arrow type from ending + startInfo.type = info.type; + } else { + // x-- xyz --> - not supported + if (startInfo.type !== info.type) { + return { type: 'INVALID', stroke: 'INVALID' }; + } + + startInfo.type = 'double_' + startInfo.type; + } + + if (startInfo.type === 'double_arrow') { + startInfo.type = 'double_arrow_point'; + } + + startInfo.length = info.length; + return startInfo; } - if (startInfo.type === 'double_arrow') { - startInfo.type = 'double_arrow_point'; + return info; + }; + + // Todo optimizer this by caching existing nodes + public exists = (allSgs: FlowSubGraph[], _id: string) => { + for (const sg of allSgs) { + if (sg.nodes.includes(_id)) { + return true; + } } - - startInfo.length = info.length; - return startInfo; - } - - return info; -}; - -// Todo optimizer this by caching existing nodes -const exists = (allSgs: FlowSubGraph[], _id: string) => { - for (const sg of allSgs) { - if (sg.nodes.includes(_id)) { - return true; - } - } - return false; -}; -/** - * Deletes an id from all subgraphs - * - */ -const makeUniq = (sg: FlowSubGraph, allSubgraphs: FlowSubGraph[]) => { - const res: string[] = []; - sg.nodes.forEach((_id, pos) => { - if (!exists(allSubgraphs, _id)) { - res.push(sg.nodes[pos]); - } - }); - return { nodes: res }; -}; - -export const lex = { - firstGraph, -}; - -const getTypeFromVertex = (vertex: FlowVertex): ShapeID => { - if (vertex.img) { - return 'imageSquare'; - } - if (vertex.icon) { - if (vertex.form === 'circle') { - return 'iconCircle'; - } - if (vertex.form === 'square') { - return 'iconSquare'; - } - if (vertex.form === 'rounded') { - return 'iconRounded'; - } - return 'icon'; - } - switch (vertex.type) { - case 'square': - case undefined: - return 'squareRect'; - case 'round': - return 'roundedRect'; - case 'ellipse': - // @ts-expect-error -- Ellipses are broken, see https://github.com/mermaid-js/mermaid/issues/5976 - return 'ellipse'; - default: - return vertex.type; - } -}; - -const findNode = (nodes: Node[], id: string) => nodes.find((node) => node.id === id); -const destructEdgeType = (type: string | undefined) => { - let arrowTypeStart = 'none'; - let arrowTypeEnd = 'arrow_point'; - switch (type) { - case 'arrow_point': - case 'arrow_circle': - case 'arrow_cross': - arrowTypeEnd = type; - break; - - case 'double_arrow_point': - case 'double_arrow_circle': - case 'double_arrow_cross': - arrowTypeStart = type.replace('double_', ''); - arrowTypeEnd = arrowTypeStart; - break; - } - return { arrowTypeStart, arrowTypeEnd }; -}; - -const addNodeFromVertex = ( - vertex: FlowVertex, - nodes: Node[], - parentDB: Map, - subGraphDB: Map, - config: any, - look: string -) => { - const parentId = parentDB.get(vertex.id); - const isGroup = subGraphDB.get(vertex.id) ?? false; - - const node = findNode(nodes, vertex.id); - if (node) { - node.cssStyles = vertex.styles; - node.cssCompiledStyles = getCompiledStyles(vertex.classes); - node.cssClasses = vertex.classes.join(' '); - } else { - const baseNode = { - id: vertex.id, - label: vertex.text, - labelStyle: '', - parentId, - padding: config.flowchart?.padding || 8, - cssStyles: vertex.styles, - cssCompiledStyles: getCompiledStyles(['default', 'node', ...vertex.classes]), - cssClasses: 'default ' + vertex.classes.join(' '), - dir: vertex.dir, - domId: vertex.domId, - look, - link: vertex.link, - linkTarget: vertex.linkTarget, - tooltip: getTooltip(vertex.id), - icon: vertex.icon, - pos: vertex.pos, - img: vertex.img, - assetWidth: vertex.assetWidth, - assetHeight: vertex.assetHeight, - constraint: vertex.constraint, - }; - if (isGroup) { - nodes.push({ - ...baseNode, - isGroup: true, - shape: 'rect', - }); - } else { - nodes.push({ - ...baseNode, - isGroup: false, - shape: getTypeFromVertex(vertex), - }); - } - } -}; - -function getCompiledStyles(classDefs: string[]) { - let compiledStyles: string[] = []; - for (const customClass of classDefs) { - const cssClass = classes.get(customClass); - if (cssClass?.styles) { - compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim()); - } - if (cssClass?.textStyles) { - compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim()); - } - } - return compiledStyles; -} - -export const getData = () => { - const config = getConfig(); - const nodes: Node[] = []; - const edges: Edge[] = []; - - const subGraphs = getSubGraphs(); - const parentDB = new Map(); - const subGraphDB = new Map(); - - // Setup the subgraph data for adding nodes - for (let i = subGraphs.length - 1; i >= 0; i--) { - const subGraph = subGraphs[i]; - if (subGraph.nodes.length > 0) { - subGraphDB.set(subGraph.id, true); - } - for (const id of subGraph.nodes) { - parentDB.set(id, subGraph.id); - } - } - - // Data is setup, add the nodes - for (let i = subGraphs.length - 1; i >= 0; i--) { - const subGraph = subGraphs[i]; - nodes.push({ - id: subGraph.id, - label: subGraph.title, - labelStyle: '', - parentId: parentDB.get(subGraph.id), - padding: 8, - cssCompiledStyles: getCompiledStyles(subGraph.classes), - cssClasses: subGraph.classes.join(' '), - shape: 'rect', - dir: subGraph.dir, - isGroup: true, - look: config.look, + return false; + }; + /** + * Deletes an id from all subgraphs + * + */ + public makeUniq = (sg: FlowSubGraph, allSubgraphs: FlowSubGraph[]) => { + const res: string[] = []; + sg.nodes.forEach((_id, pos) => { + if (!this.exists(allSubgraphs, _id)) { + res.push(sg.nodes[pos]); + } }); - } + return { nodes: res }; + }; - const n = getVertices(); - n.forEach((vertex) => { - addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || 'classic'); - }); + public lex = { + firstGraph: this.firstGraph, + }; - const e = getEdges(); - e.forEach((rawEdge, index) => { - const { arrowTypeStart, arrowTypeEnd } = destructEdgeType(rawEdge.type); - const styles = [...(e.defaultStyle ?? [])]; - - if (rawEdge.style) { - styles.push(...rawEdge.style); + private getTypeFromVertex = (vertex: FlowVertex): ShapeID => { + if (vertex.img) { + return 'imageSquare'; } - const edge: Edge = { - id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: 'L' }), - start: rawEdge.start, - end: rawEdge.end, - type: rawEdge.type ?? 'normal', - label: rawEdge.text, - labelpos: 'c', - thickness: rawEdge.stroke, - minlen: rawEdge.length, - classes: - rawEdge?.stroke === 'invisible' - ? '' - : 'edge-thickness-normal edge-pattern-solid flowchart-link', - arrowTypeStart: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeStart, - arrowTypeEnd: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeEnd, - arrowheadStyle: 'fill: #333', - labelStyle: styles, - style: styles, - pattern: rawEdge.stroke, - look: config.look, - }; - edges.push(edge); - }); + if (vertex.icon) { + if (vertex.form === 'circle') { + return 'iconCircle'; + } + if (vertex.form === 'square') { + return 'iconSquare'; + } + if (vertex.form === 'rounded') { + return 'iconRounded'; + } + return 'icon'; + } + switch (vertex.type) { + case 'square': + case undefined: + return 'squareRect'; + case 'round': + return 'roundedRect'; + case 'ellipse': + // @ts-expect-error -- Ellipses are broken, see https://github.com/mermaid-js/mermaid/issues/5976 + return 'ellipse'; + default: + return vertex.type; + } + }; - return { nodes, edges, other: {}, config }; -}; + private findNode = (nodes: Node[], id: string) => nodes.find((node) => node.id === id); + private destructEdgeType = (type: string | undefined) => { + let arrowTypeStart = 'none'; + let arrowTypeEnd = 'arrow_point'; + switch (type) { + case 'arrow_point': + case 'arrow_circle': + case 'arrow_cross': + arrowTypeEnd = type; + break; -export default { - defaultConfig: () => defaultConfig.flowchart, - setAccTitle, - getAccTitle, - getAccDescription, - getData, - setAccDescription, - addVertex, - lookUpDomId, - addLink, - updateLinkInterpolate, - updateLink, - addClass, - setDirection, - setClass, - setTooltip, - getTooltip, - setClickEvent, - setLink, - bindFunctions, - getDirection, - getVertices, - getEdges, - getClasses, - clear, - setGen, - defaultStyle, - addSubGraph, - getDepthFirstPos, - indexNodes, - getSubGraphs, - destructLink, - lex, - exists, - makeUniq, - setDiagramTitle, - getDiagramTitle, -}; + case 'double_arrow_point': + case 'double_arrow_circle': + case 'double_arrow_cross': + arrowTypeStart = type.replace('double_', ''); + arrowTypeEnd = arrowTypeStart; + break; + } + return { arrowTypeStart, arrowTypeEnd }; + }; + + private addNodeFromVertex = ( + vertex: FlowVertex, + nodes: Node[], + parentDB: Map, + subGraphDB: Map, + config: any, + look: string + ) => { + const parentId = parentDB.get(vertex.id); + const isGroup = subGraphDB.get(vertex.id) ?? false; + + const node = this.findNode(nodes, vertex.id); + if (node) { + node.cssStyles = vertex.styles; + node.cssCompiledStyles = this.getCompiledStyles(vertex.classes); + node.cssClasses = vertex.classes.join(' '); + } else { + const baseNode = { + id: vertex.id, + label: vertex.text, + labelStyle: '', + parentId, + padding: config.flowchart?.padding || 8, + cssStyles: vertex.styles, + cssCompiledStyles: this.getCompiledStyles(['default', 'node', ...vertex.classes]), + cssClasses: 'default ' + vertex.classes.join(' '), + dir: vertex.dir, + domId: vertex.domId, + look, + link: vertex.link, + linkTarget: vertex.linkTarget, + tooltip: this.getTooltip(vertex.id), + icon: vertex.icon, + pos: vertex.pos, + img: vertex.img, + assetWidth: vertex.assetWidth, + assetHeight: vertex.assetHeight, + constraint: vertex.constraint, + }; + if (isGroup) { + nodes.push({ + ...baseNode, + isGroup: true, + shape: 'rect', + }); + } else { + nodes.push({ + ...baseNode, + isGroup: false, + shape: this.getTypeFromVertex(vertex), + }); + } + } + }; + + private getCompiledStyles = (classDefs: string[]) => { + let compiledStyles: string[] = []; + for (const customClass of classDefs) { + const cssClass = this.classes.get(customClass); + if (cssClass?.styles) { + compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim()); + } + if (cssClass?.textStyles) { + compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim()); + } + } + return compiledStyles; + }; + + public getData = () => { + const config = getConfig(); + const nodes: Node[] = []; + const edges: Edge[] = []; + + const subGraphs = this.getSubGraphs(); + const parentDB = new Map(); + const subGraphDB = new Map(); + + // Setup the subgraph data for adding nodes + for (let i = subGraphs.length - 1; i >= 0; i--) { + const subGraph = subGraphs[i]; + if (subGraph.nodes.length > 0) { + subGraphDB.set(subGraph.id, true); + } + for (const id of subGraph.nodes) { + parentDB.set(id, subGraph.id); + } + } + + // Data is setup, add the nodes + for (let i = subGraphs.length - 1; i >= 0; i--) { + const subGraph = subGraphs[i]; + nodes.push({ + id: subGraph.id, + label: subGraph.title, + labelStyle: '', + parentId: parentDB.get(subGraph.id), + padding: 8, + cssCompiledStyles: this.getCompiledStyles(subGraph.classes), + cssClasses: subGraph.classes.join(' '), + shape: 'rect', + dir: subGraph.dir, + isGroup: true, + look: config.look, + }); + } + + const n = this.getVertices(); + n.forEach((vertex) => { + this.addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || 'classic'); + }); + + const e = this.getEdges(); + e.forEach((rawEdge, index) => { + const { arrowTypeStart, arrowTypeEnd } = this.destructEdgeType(rawEdge.type); + const styles = [...(e.defaultStyle ?? [])]; + + if (rawEdge.style) { + styles.push(...rawEdge.style); + } + const edge: Edge = { + id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: 'L' }), + start: rawEdge.start, + end: rawEdge.end, + type: rawEdge.type ?? 'normal', + label: rawEdge.text, + labelpos: 'c', + thickness: rawEdge.stroke, + minlen: rawEdge.length, + classes: + rawEdge?.stroke === 'invisible' + ? '' + : 'edge-thickness-normal edge-pattern-solid flowchart-link', + arrowTypeStart: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeStart, + arrowTypeEnd: rawEdge?.stroke === 'invisible' ? 'none' : arrowTypeEnd, + arrowheadStyle: 'fill: #333', + labelStyle: styles, + style: styles, + pattern: rawEdge.stroke, + look: config.look, + }; + edges.push(edge); + }); + + return { nodes, edges, other: {}, config }; + }; + + public defaultConfig = () => defaultConfig.flowchart; + public setAccTitle = setAccTitle; + public setAccDescription = setAccDescription; + public setDiagramTitle = setDiagramTitle; + public getAccTitle = getAccTitle; + public getAccDescription = getAccDescription; + public getDiagramTitle = getDiagramTitle; +} diff --git a/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts b/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts index 67cdf918f..059125201 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDiagram.ts @@ -1,6 +1,6 @@ import type { MermaidConfig } from '../../config.type.js'; import { setConfig } from '../../diagram-api/diagramAPI.js'; -import flowDb from './flowDb.js'; +import { FlowDb } from './flowDb.js'; import renderer from './flowRenderer-v3-unified.js'; // @ts-ignore: JISON doesn't support types import flowParser from './parser/flow.jison'; @@ -8,7 +8,9 @@ import flowStyles from './styles.js'; export const diagram = { parser: flowParser, - db: flowDb, + get db() { + return new FlowDb(); + }, renderer, styles: flowStyles, init: (cnf: MermaidConfig) => { @@ -20,7 +22,5 @@ export const diagram = { } cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; setConfig({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } }); - flowDb.clear(); - flowDb.setGen('gen-2'); }, }; diff --git a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts index 6cc15258d..f4c0b9e0e 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowRenderer-v3-unified.ts @@ -7,7 +7,6 @@ import { getRegisteredLayoutAlgorithm, render } from '../../rendering-util/rende import { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js'; import type { LayoutData } from '../../rendering-util/types.js'; import utils from '../../utils.js'; -import { getDirection } from './flowDb.js'; export const getClasses = function ( text: string, @@ -37,7 +36,7 @@ export const draw = async function (text: string, id: string, _version: string, log.debug('Data: ', data4Layout); // Create the root SVG const svg = getDiagramElement(id, securityLevel); - const direction = getDirection(); + const direction = diag.db.getDirection(); data4Layout.type = diag.type; data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js index e89398ab4..e4fec241f 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-arrows.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('[Arrows] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js index 9c2a740af..673f11f89 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-comments.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; import { cleanupComments } from '../../../diagram-api/comments.js'; @@ -9,7 +9,7 @@ setConfig({ describe('[Comments] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js index ce6b0b0c4..9598e7303 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-direction.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('when parsing directions', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js index 4ae289bad..ed6f53276 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-edges.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -42,7 +42,7 @@ const doubleEndedEdges = [ describe('[Edges] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js index 8931c6ee1..6f2ce0fd7 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-huge.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('[Text] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js index cb3f48cca..9e16ff837 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-interactions.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; import { vi } from 'vitest'; @@ -9,7 +9,9 @@ setConfig({ }); describe('[Interactions] when parsing', () => { + let flowDb; beforeEach(function () { + flowDb = new FlowDb(); flow.parser.yy = flowDb; flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js index ec157e646..25f248532 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-lines.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('[Lines] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js index 55e749a22..0b3f18e40 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-md-string.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('parsing a flow chart with markdown strings', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js index 1669cfada..74eb64e59 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-node-data.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('when parsing directions', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js index f6ed123d7..550f9c9fd 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-singlenode.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -31,7 +31,7 @@ const specialChars = ['#', ':', '0', '&', ',', '*', '.', '\\', 'v', '-', '/', '_ describe('[Singlenodes] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js index 22fd48a33..775fb01f3 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-style.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('[Style] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js index 3754766f4..a2d069f90 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-text.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('[Text] when parsing', () => { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js index a5b6a2b6d..6e855a3d5 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow-vertice-chaining.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('when parsing flowcharts', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js index 8081c8fe4..41ed5ee52 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/flow.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { cleanupComments } from '../../../diagram-api/comments.js'; import { setConfig } from '../../../config.js'; @@ -9,7 +9,7 @@ setConfig({ describe('parsing a flow chart', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js b/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js index 12b2e4a39..a3a65ecbb 100644 --- a/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js +++ b/packages/mermaid/src/diagrams/flowchart/parser/subgraph.spec.js @@ -1,4 +1,4 @@ -import flowDb from '../flowDb.js'; +import { FlowDb } from '../flowDb.js'; import flow from './flow.jison'; import { setConfig } from '../../../config.js'; @@ -8,7 +8,7 @@ setConfig({ describe('when parsing subgraphs', function () { beforeEach(function () { - flow.parser.yy = flowDb; + flow.parser.yy = new FlowDb(); flow.parser.yy.clear(); flow.parser.yy.setGen('gen-2'); }); From 0695893e30d2dc21725e7d10a49e5a7ddea8d346 Mon Sep 17 00:00:00 2001 From: Saurabh Gore Date: Fri, 3 Jan 2025 11:30:21 +0530 Subject: [PATCH 170/492] Added test cases --- packages/mermaid/src/mermaidAPI.spec.ts | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts index 5bd1b1dfc..54db4ed17 100644 --- a/packages/mermaid/src/mermaidAPI.spec.ts +++ b/packages/mermaid/src/mermaidAPI.spec.ts @@ -832,5 +832,41 @@ graph TD;A--x|text including URL space|B;`) expect(diagram).toBeInstanceOf(Diagram); expect(diagram.type).toBe('flowchart-v2'); }); + + it('should not fuckup db when rendering different diagrams', async () => { + const flwoDiagram1 = await mermaidAPI.getDiagramFromText( + `flowchart LR + %% This is a comment A -- text --> B{node} + A -- text --> B -- text2 --> C` + ); + const flwoDiagram2 = await mermaidAPI.getDiagramFromText( + `flowchart LR + %% This is a comment A -- text --> B{node} + A -- text --> B -- text2 --> C` + ); + // Since flowDiagram will return new Db object each time, we can compare the db to be different. + expect(flwoDiagram1.db).not.toBe(flwoDiagram2.db); + + const classDiagram1 = await mermaidAPI.getDiagramFromText( + `stateDiagram + [*] --> Still + Still --> [*] + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]` + ); + const classDiagram2 = await mermaidAPI.getDiagramFromText( + `stateDiagram + [*] --> Still + Still --> [*] + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]` + ); + // Since sequenceDiagram will return same Db object each time, we can compare the db to be same. + expect(classDiagram1.db).toBe(classDiagram2.db); + }); }); }); From f5bae98098de984bb177b7fbd4cf802447155ae7 Mon Sep 17 00:00:00 2001 From: Saurabh Gore Date: Fri, 3 Jan 2025 14:55:20 +0530 Subject: [PATCH 171/492] Set generation to gen-2 in clear --- cypress/platform/saurabh.html | 63 +++++-------------- .../mermaid/src/diagrams/flowchart/flowDb.ts | 2 +- 2 files changed, 16 insertions(+), 49 deletions(-) diff --git a/cypress/platform/saurabh.html b/cypress/platform/saurabh.html index 89b314e68..cdb711fb7 100644 --- a/cypress/platform/saurabh.html +++ b/cypress/platform/saurabh.html @@ -62,56 +62,23 @@
-      flowchart LR
-      A@{ icon: "fa:window-minimize", form: circle }
-      E@{ icon: "fa:window-minimize", form: circle }
-      B@{ icon: "fa:bell", form: circle }
-      B2@{ icon: "fa:bell", form: circle }
-      C@{ icon: "fa:address-book",  form: square  }
-      D@{ icon: "fa:star-half",  form: square  }
-      A --> E
-      B --> B2
-
+      flowchart
+          A --> A
+          subgraph B
+            B1 --> B1
+          end
+          subgraph C
+            subgraph C1
+              C2 --> C2
+              subgraph D
+                D1 --> D1
+              end
+              D --> D
+            end
+            C1 --> C1
+          end
 
     
-
-      flowchart TB
-       A --test2--> B2@{ icon: "fa:bell", form: "rounded", label: "B2 aiduaid uyawduad uaduabd uyduadb", pos: "b" }
-       B2 --test--> C
-       D --> B2 --> E
-       style B2 fill:#f9f,stroke:#333,stroke-width:4px
-  
-
-      flowchart BT
-       A --test2--> B2@{ icon: "fa:bell", form: "square", label: "B2", pos: "t", h: 40, w: 30 }
-       B2 --test--> C
-       D --> B2 --> E
-  
-
-      flowchart BT
-       A --test2--> B2@{ icon: "fa:bell", label: "B2 awiugdawu uydgayuiwd wuydguy", pos: "b", h: 40, w: 30 }
-       B2 --test--> C
-  
-
-      flowchart BT
-       A --test2--> B2@{ icon: "fa:bell", label: "B2 dawuygd ayuwgd uy", pos: "t", h: 40, w: 30 }
-       B2 --test--> C
-  
-
-      flowchart TB
-       A --> B2@{ icon: "fa:bell", form: "circle", label: "test augfuyfavf ydvaubfuac", pos: "t", w: 200, h: 100 } --> C
-  
-
-      flowchart TB
-       A --> B2@{ icon: "fa:bell", form: "circle", label: "test augfuyfavf ydvaubfuac", pos: "b", w: 200, h: 100 } --> C
-       D --> B2 --> E
-  
From fdb8ae5b5357d1e2a1940d628917be99dc447c1f Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Mon, 27 Jan 2025 16:16:43 +0530 Subject: [PATCH 262/492] Set custom font family for legend in user diagrams. --- packages/mermaid/src/diagrams/user-journey/styles.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mermaid/src/diagrams/user-journey/styles.js b/packages/mermaid/src/diagrams/user-journey/styles.js index 9cdbcd12e..391f64b87 100644 --- a/packages/mermaid/src/diagrams/user-journey/styles.js +++ b/packages/mermaid/src/diagrams/user-journey/styles.js @@ -13,6 +13,8 @@ const getStyles = (options) => .legend { fill: ${options.textColor}; + font-family: ${options.fontFamily}; + font-size: ${options.textSize}; } .label text { From 5e9c887385466a35a74295d94f25065bcee9f14d Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Mon, 27 Jan 2025 16:30:35 +0530 Subject: [PATCH 263/492] Fixed unit tests. --- packages/mermaid/src/diagrams/user-journey/styles.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/user-journey/styles.js b/packages/mermaid/src/diagrams/user-journey/styles.js index 391f64b87..a0528294f 100644 --- a/packages/mermaid/src/diagrams/user-journey/styles.js +++ b/packages/mermaid/src/diagrams/user-journey/styles.js @@ -14,7 +14,6 @@ const getStyles = (options) => .legend { fill: ${options.textColor}; font-family: ${options.fontFamily}; - font-size: ${options.textSize}; } .label text { From 47d4d56fa61f29252e5eb2fc475ad7c531a922fa Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 07:14:10 -0800 Subject: [PATCH 264/492] Remove -unified from renderer file name --- packages/mermaid/src/diagrams/requirement/requirementDiagram.ts | 2 +- .../{requirementRenderer-unified.ts => requirementRenderer.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/mermaid/src/diagrams/requirement/{requirementRenderer-unified.ts => requirementRenderer.ts} (100%) diff --git a/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts b/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts index 5fb4c3fc7..619f5b052 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts +++ b/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts @@ -3,7 +3,7 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; import parser from './parser/requirementDiagram.jison'; import db from './requirementDb.js'; import styles from './styles.js'; -import renderer from './requirementRenderer-unified.js'; +import renderer from './requirementRenderer.js'; export const diagram: DiagramDefinition = { parser, diff --git a/packages/mermaid/src/diagrams/requirement/requirementRenderer-unified.ts b/packages/mermaid/src/diagrams/requirement/requirementRenderer.ts similarity index 100% rename from packages/mermaid/src/diagrams/requirement/requirementRenderer-unified.ts rename to packages/mermaid/src/diagrams/requirement/requirementRenderer.ts From 97788df7e3a30f91ae3a3251fe30188d70732a7a Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 08:21:52 -0800 Subject: [PATCH 265/492] Change variable casing --- .../rendering-elements/shapes/requirementBox.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts index 3e0a310e6..da28f5db2 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts @@ -19,8 +19,8 @@ export async function requirementBox( const requirementNode = node as unknown as Requirement; const elementNode = node as unknown as Element; const config = getConfig().requirement; - const PADDING = 20; - const GAP = 20; + const padding = 20; + const gap = 20; const isRequirementNode = 'verifyMethod' in node; const classes = getNodeClasses(node); @@ -49,7 +49,7 @@ export async function requirementBox( accumulativeHeight, node.labelStyle ); - accumulativeHeight += nameHeight + GAP; + accumulativeHeight += nameHeight + gap; // Requirement if (isRequirementNode) { @@ -99,7 +99,7 @@ export async function requirementBox( } const totalWidth = Math.max( - (shapeSvg.node()?.getBBox().width ?? 200) + PADDING, + (shapeSvg.node()?.getBBox().width ?? 200) + padding, config?.rect_min_width ?? 200 ); const totalHeight = totalWidth; @@ -141,22 +141,22 @@ export async function requirementBox( } const newTranslateY = translateY - totalHeight / 2; - let newTranslateX = x + PADDING / 2; + let newTranslateX = x + padding / 2; // Keep type and name labels centered. if (i === 0 || i === 1) { newTranslateX = translateX; } // Set the updated transform attribute - text.attr('transform', `translate(${newTranslateX}, ${newTranslateY + PADDING})`); + text.attr('transform', `translate(${newTranslateX}, ${newTranslateY + padding})`); }); // Insert divider line const roughLine = rc.line( x, - y + typeHeight + nameHeight + GAP, + y + typeHeight + nameHeight + gap, x + totalWidth, - y + typeHeight + nameHeight + GAP, + y + typeHeight + nameHeight + gap, options ); const dividerLine = shapeSvg.insert(() => roughLine); From 9609aced140eabda0ea800afff511217ba7dacfc Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 09:21:34 -0800 Subject: [PATCH 266/492] Update requirementDb to class to encapsulate data --- .../src/diagrams/requirement/requirementDb.ts | 580 +++++++++--------- .../requirement/requirementDiagram.ts | 6 +- 2 files changed, 298 insertions(+), 288 deletions(-) diff --git a/packages/mermaid/src/diagrams/requirement/requirementDb.ts b/packages/mermaid/src/diagrams/requirement/requirementDb.ts index 76787fd8f..972c5e44e 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementDb.ts +++ b/packages/mermaid/src/diagrams/requirement/requirementDb.ts @@ -1,4 +1,5 @@ import { getConfig } from '../../diagram-api/diagramAPI.js'; +import type { DiagramDB } from '../../diagram-api/types.js'; import { log } from '../../logger.js'; import type { Node, Edge } from '../../rendering-util/types.js'; @@ -22,320 +23,327 @@ import type { VerifyType, } from './types.js'; -const RequirementType = { - REQUIREMENT: 'Requirement', - FUNCTIONAL_REQUIREMENT: 'Functional Requirement', - INTERFACE_REQUIREMENT: 'Interface Requirement', - PERFORMANCE_REQUIREMENT: 'Performance Requirement', - PHYSICAL_REQUIREMENT: 'Physical Requirement', - DESIGN_CONSTRAINT: 'Design Constraint', -}; +export class RequirementDB implements DiagramDB { + private relations: Relation[] = []; + private latestRequirement: Requirement = this.getInitialRequirement(); + private requirements = new Map(); + private latestElement: Element = this.getInitialElement(); + private elements = new Map(); + private classes = new Map(); + private direction = 'TB'; -const RiskLevel = { - LOW_RISK: 'Low', - MED_RISK: 'Medium', - HIGH_RISK: 'High', -}; + private RequirementType = { + REQUIREMENT: 'Requirement', + FUNCTIONAL_REQUIREMENT: 'Functional Requirement', + INTERFACE_REQUIREMENT: 'Interface Requirement', + PERFORMANCE_REQUIREMENT: 'Performance Requirement', + PHYSICAL_REQUIREMENT: 'Physical Requirement', + DESIGN_CONSTRAINT: 'Design Constraint', + }; -const VerifyType = { - VERIFY_ANALYSIS: 'Analysis', - VERIFY_DEMONSTRATION: 'Demonstration', - VERIFY_INSPECTION: 'Inspection', - VERIFY_TEST: 'Test', -}; + private RiskLevel = { + LOW_RISK: 'Low', + MED_RISK: 'Medium', + HIGH_RISK: 'High', + }; -const Relationships = { - CONTAINS: 'contains', - COPIES: 'copies', - DERIVES: 'derives', - SATISFIES: 'satisfies', - VERIFIES: 'verifies', - REFINES: 'refines', - TRACES: 'traces', -}; + private VerifyType = { + VERIFY_ANALYSIS: 'Analysis', + VERIFY_DEMONSTRATION: 'Demonstration', + VERIFY_INSPECTION: 'Inspection', + VERIFY_TEST: 'Test', + }; -let direction = 'TB'; -const getDirection = () => direction; -const setDirection = (dir: string) => { - direction = dir; -}; + private Relationships = { + CONTAINS: 'contains', + COPIES: 'copies', + DERIVES: 'derives', + SATISFIES: 'satisfies', + VERIFIES: 'verifies', + REFINES: 'refines', + TRACES: 'traces', + }; -const getInitialRequirement = (): Requirement => ({ - requirementId: '', - text: '', - risk: '' as RiskLevel, - verifyMethod: '' as VerifyType, - name: '', - type: '' as RequirementType, - cssStyles: [], - classes: ['default'], -}); + constructor() { + this.clear(); -const getInitialElement = (): Element => ({ - name: '', - type: '', - docRef: '', - cssStyles: [], - classes: ['default'], -}); + // Needed for JISON since it only supports direct properties + this.setDirection = this.setDirection.bind(this); + this.addRequirement = this.addRequirement.bind(this); + this.setNewReqId = this.setNewReqId.bind(this); + this.setNewReqRisk = this.setNewReqRisk.bind(this); + this.setNewReqText = this.setNewReqText.bind(this); + this.setNewReqVerifyMethod = this.setNewReqVerifyMethod.bind(this); + this.addElement = this.addElement.bind(this); + this.setNewElementType = this.setNewElementType.bind(this); + this.setNewElementDocRef = this.setNewElementDocRef.bind(this); + this.addRelationship = this.addRelationship.bind(this); + this.setCssStyle = this.setCssStyle.bind(this); + this.setClass = this.setClass.bind(this); + this.defineClass = this.defineClass.bind(this); + this.setAccTitle = this.setAccTitle.bind(this); + this.setAccDescription = this.setAccDescription.bind(this); + } -// Update initial declarations -let relations: Relation[] = []; -let latestRequirement: Requirement = getInitialRequirement(); -let requirements = new Map(); -let latestElement: Element = getInitialElement(); -let elements = new Map(); -let classes = new Map(); + public getDirection() { + return this.direction; + } + public setDirection(dir: string) { + this.direction = dir; + } -// Add reset functions -const resetLatestRequirement = () => { - latestRequirement = getInitialRequirement(); -}; + private resetLatestRequirement() { + this.latestRequirement = this.getInitialRequirement(); + } -const resetLatestElement = () => { - latestElement = getInitialElement(); -}; + private resetLatestElement() { + this.latestElement = this.getInitialElement(); + } -const addRequirement = (name: string, type: RequirementType) => { - if (!requirements.has(name)) { - requirements.set(name, { - name, - type, - requirementId: latestRequirement.requirementId, - text: latestRequirement.text, - risk: latestRequirement.risk, - verifyMethod: latestRequirement.verifyMethod, + private getInitialRequirement(): Requirement { + return { + requirementId: '', + text: '', + risk: '' as RiskLevel, + verifyMethod: '' as VerifyType, + name: '', + type: '' as RequirementType, cssStyles: [], classes: ['default'], - }); + }; } - resetLatestRequirement(); - return requirements.get(name); -}; - -const getRequirements = () => requirements; - -const setNewReqId = (id: string) => { - if (latestRequirement !== undefined) { - latestRequirement.requirementId = id; - } -}; - -const setNewReqText = (text: string) => { - if (latestRequirement !== undefined) { - latestRequirement.text = text; - } -}; - -const setNewReqRisk = (risk: RiskLevel) => { - if (latestRequirement !== undefined) { - latestRequirement.risk = risk; - } -}; - -const setNewReqVerifyMethod = (verifyMethod: VerifyType) => { - if (latestRequirement !== undefined) { - latestRequirement.verifyMethod = verifyMethod; - } -}; - -const addElement = (name: string) => { - if (!elements.has(name)) { - elements.set(name, { - name, - type: latestElement.type, - docRef: latestElement.docRef, + private getInitialElement(): Element { + return { + name: '', + type: '', + docRef: '', cssStyles: [], classes: ['default'], - }); - log.info('Added new element: ', name); + }; } - resetLatestElement(); - return elements.get(name); -}; - -const getElements = () => elements; - -const setNewElementType = (type: string) => { - if (latestElement !== undefined) { - latestElement.type = type; - } -}; - -const setNewElementDocRef = (docRef: string) => { - if (latestElement !== undefined) { - latestElement.docRef = docRef; - } -}; - -const addRelationship = (type: RelationshipType, src: string, dst: string) => { - relations.push({ - type, - src, - dst, - }); -}; - -const getRelationships = () => relations; - -const clear = () => { - relations = []; - resetLatestRequirement(); - requirements = new Map(); - resetLatestElement(); - elements = new Map(); - classes = new Map(); - commonClear(); -}; - -export const setCssStyle = function (ids: string[], styles: string[]) { - for (const id of ids) { - const node = requirements.get(id) ?? elements.get(id); - if (!styles || !node) { - return; - } - for (const s of styles) { - if (s.includes(',')) { - node.cssStyles.push(...s.split(',')); - } else { - node.cssStyles.push(s); - } - } - } -}; - -export const setClass = function (ids: string[], classNames: string[]) { - for (const id of ids) { - const node = requirements.get(id) ?? elements.get(id); - if (node) { - for (const _class of classNames) { - node.classes.push(_class); - const styles = classes.get(_class)?.styles; - if (styles) { - node.cssStyles.push(...styles); - } - } - } - } -}; - -export const defineClass = function (ids: string[], style: string[]) { - for (const id of ids) { - let styleClass = classes.get(id); - if (styleClass === undefined) { - styleClass = { id, styles: [], textStyles: [] }; - classes.set(id, styleClass); - } - - if (style) { - style.forEach(function (s) { - if (/color/.exec(s)) { - const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); - styleClass.textStyles.push(newStyle); - } - styleClass.styles.push(s); + public addRequirement(name: string, type: RequirementType) { + if (!this.requirements.has(name)) { + this.requirements.set(name, { + name, + type, + requirementId: this.latestRequirement.requirementId, + text: this.latestRequirement.text, + risk: this.latestRequirement.risk, + verifyMethod: this.latestRequirement.verifyMethod, + cssStyles: [], + classes: ['default'], }); } + this.resetLatestRequirement(); - requirements.forEach((value) => { - if (value.classes.includes(id)) { - value.cssStyles.push(...style.flatMap((s) => s.split(','))); - } - }); - elements.forEach((value) => { - if (value.classes.includes(id)) { - value.cssStyles.push(...style.flatMap((s) => s.split(','))); - } + return this.requirements.get(name); + } + + public getRequirements() { + return this.requirements; + } + + public setNewReqId(id: string) { + if (this.latestRequirement !== undefined) { + this.latestRequirement.requirementId = id; + } + } + + public setNewReqText(text: string) { + if (this.latestRequirement !== undefined) { + this.latestRequirement.text = text; + } + } + + public setNewReqRisk(risk: RiskLevel) { + if (this.latestRequirement !== undefined) { + this.latestRequirement.risk = risk; + } + } + + public setNewReqVerifyMethod(verifyMethod: VerifyType) { + if (this.latestRequirement !== undefined) { + this.latestRequirement.verifyMethod = verifyMethod; + } + } + + public addElement(name: string) { + if (!this.elements.has(name)) { + this.elements.set(name, { + name, + type: this.latestElement.type, + docRef: this.latestElement.docRef, + cssStyles: [], + classes: ['default'], + }); + log.info('Added new element: ', name); + } + this.resetLatestElement(); + + return this.elements.get(name); + } + + public getElements() { + return this.elements; + } + + public setNewElementType(type: string) { + if (this.latestElement !== undefined) { + this.latestElement.type = type; + } + } + + public setNewElementDocRef(docRef: string) { + if (this.latestElement !== undefined) { + this.latestElement.docRef = docRef; + } + } + + public addRelationship(type: RelationshipType, src: string, dst: string) { + this.relations.push({ + type, + src, + dst, }); } -}; -export const getClasses = () => { - return classes; -}; - -const getData = () => { - const config = getConfig(); - const nodes: Node[] = []; - const edges: Edge[] = []; - for (const requirement of requirements.values()) { - const node = requirement as unknown as Node; - node.id = requirement.name; - node.cssStyles = requirement.cssStyles; - node.cssClasses = requirement.classes.join(' '); - node.shape = 'requirementBox'; - node.look = config.look; - nodes.push(node); + public getRelationships() { + return this.relations; } - for (const element of elements.values()) { - const node = element as unknown as Node; - node.shape = 'requirementBox'; - node.look = config.look; - node.id = element.name; - node.cssStyles = element.cssStyles; - node.cssClasses = element.classes.join(' '); - - nodes.push(node); + public clear() { + this.relations = []; + this.resetLatestRequirement(); + this.requirements = new Map(); + this.resetLatestElement(); + this.elements = new Map(); + this.classes = new Map(); + commonClear(); } - for (const relation of relations) { - let counter = 0; - const isContains = relation.type === Relationships.CONTAINS; - const edge: Edge = { - id: `${relation.src}-${relation.dst}-${counter}`, - start: requirements.get(relation.src)?.name ?? elements.get(relation.src)?.name, - end: requirements.get(relation.dst)?.name ?? elements.get(relation.dst)?.name, - label: `<<${relation.type}>>`, - classes: 'relationshipLine', - style: ['fill:none', isContains ? '' : 'stroke-dasharray: 10,7'], - labelpos: 'c', - thickness: 'normal', - type: 'normal', - pattern: isContains ? 'normal' : 'dashed', - arrowTypeEnd: isContains ? 'requirement_contains' : 'requirement_arrow', - look: config.look, - }; - - edges.push(edge); - counter++; + public setCssStyle(ids: string[], styles: string[]) { + for (const id of ids) { + const node = this.requirements.get(id) ?? this.elements.get(id); + if (!styles || !node) { + return; + } + for (const s of styles) { + if (s.includes(',')) { + node.cssStyles.push(...s.split(',')); + } else { + node.cssStyles.push(s); + } + } + } } - return { nodes, edges, other: {}, config, direction: getDirection() }; -}; + public setClass(ids: string[], classNames: string[]) { + for (const id of ids) { + const node = this.requirements.get(id) ?? this.elements.get(id); + if (node) { + for (const _class of classNames) { + node.classes.push(_class); + const styles = this.classes.get(_class)?.styles; + if (styles) { + node.cssStyles.push(...styles); + } + } + } + } + } -export default { - Relationships, - RequirementType, - RiskLevel, - VerifyType, - getConfig: () => getConfig().requirement, - addRequirement, - getRequirements, - setNewReqId, - setNewReqText, - setNewReqRisk, - setNewReqVerifyMethod, - setAccTitle, - getAccTitle, - setAccDescription, - getAccDescription, - setDiagramTitle, - getDiagramTitle, - getDirection, - setDirection, - addElement, - getElements, - setNewElementType, - setNewElementDocRef, - addRelationship, - getRelationships, - clear, - setCssStyle, - setClass, - defineClass, - getClasses, - getData, -}; + public defineClass(ids: string[], style: string[]) { + for (const id of ids) { + let styleClass = this.classes.get(id); + if (styleClass === undefined) { + styleClass = { id, styles: [], textStyles: [] }; + this.classes.set(id, styleClass); + } + + if (style) { + style.forEach(function (s) { + if (/color/.exec(s)) { + const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill'); + styleClass.textStyles.push(newStyle); + } + styleClass.styles.push(s); + }); + } + + this.requirements.forEach((value) => { + if (value.classes.includes(id)) { + value.cssStyles.push(...style.flatMap((s) => s.split(','))); + } + }); + this.elements.forEach((value) => { + if (value.classes.includes(id)) { + value.cssStyles.push(...style.flatMap((s) => s.split(','))); + } + }); + } + } + + public getClasses() { + return this.classes; + } + + public getData() { + const config = getConfig(); + const nodes: Node[] = []; + const edges: Edge[] = []; + for (const requirement of this.requirements.values()) { + const node = requirement as unknown as Node; + node.id = requirement.name; + node.cssStyles = requirement.cssStyles; + node.cssClasses = requirement.classes.join(' '); + node.shape = 'requirementBox'; + node.look = config.look; + nodes.push(node); + } + + for (const element of this.elements.values()) { + const node = element as unknown as Node; + node.shape = 'requirementBox'; + node.look = config.look; + node.id = element.name; + node.cssStyles = element.cssStyles; + node.cssClasses = element.classes.join(' '); + + nodes.push(node); + } + + for (const relation of this.relations) { + let counter = 0; + const isContains = relation.type === this.Relationships.CONTAINS; + const edge: Edge = { + id: `${relation.src}-${relation.dst}-${counter}`, + start: this.requirements.get(relation.src)?.name ?? this.elements.get(relation.src)?.name, + end: this.requirements.get(relation.dst)?.name ?? this.elements.get(relation.dst)?.name, + label: `<<${relation.type}>>`, + classes: 'relationshipLine', + style: ['fill:none', isContains ? '' : 'stroke-dasharray: 10,7'], + labelpos: 'c', + thickness: 'normal', + type: 'normal', + pattern: isContains ? 'normal' : 'dashed', + arrowTypeEnd: isContains ? 'requirement_contains' : 'requirement_arrow', + look: config.look, + }; + + edges.push(edge); + counter++; + } + + return { nodes, edges, other: {}, config, direction: this.getDirection() }; + } + + public setAccTitle = setAccTitle; + public getAccTitle = getAccTitle; + public setAccDescription = setAccDescription; + public getAccDescription = getAccDescription; + public setDiagramTitle = setDiagramTitle; + public getDiagramTitle = getDiagramTitle; + public getConfig = () => getConfig().class; +} diff --git a/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts b/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts index 619f5b052..246d91197 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts +++ b/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts @@ -1,13 +1,15 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; // @ts-ignore: JISON doesn't support types import parser from './parser/requirementDiagram.jison'; -import db from './requirementDb.js'; +import { RequirementDB } from './requirementDb.js'; import styles from './styles.js'; import renderer from './requirementRenderer.js'; export const diagram: DiagramDefinition = { parser, - db, + get db() { + return new RequirementDB(); + }, renderer, styles, }; From 523286bbcba2129d4ab89da98a3d30ecf5887b69 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 09:29:51 -0800 Subject: [PATCH 267/492] Update test file to work with new Db --- .../mermaid/src/diagrams/requirement/requirementDb.spec.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/diagrams/requirement/requirementDb.spec.ts b/packages/mermaid/src/diagrams/requirement/requirementDb.spec.ts index da6684ca1..715d4d053 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementDb.spec.ts +++ b/packages/mermaid/src/diagrams/requirement/requirementDb.spec.ts @@ -1,8 +1,9 @@ -import requirementDb from './requirementDb.js'; +import { RequirementDB } from './requirementDb.js'; import { describe, it, expect } from 'vitest'; -import type { RelationshipType } from './types.js'; +import type { Relation, RelationshipType } from './types.js'; describe('requirementDb', () => { + const requirementDb = new RequirementDB(); beforeEach(() => { requirementDb.clear(); }); @@ -23,7 +24,7 @@ describe('requirementDb', () => { requirementDb.addRelationship('contains' as RelationshipType, 'src', 'dst'); const relationships = requirementDb.getRelationships(); const relationship = relationships.find( - (r) => r.type === 'contains' && r.src === 'src' && r.dst === 'dst' + (r: Relation) => r.type === 'contains' && r.src === 'src' && r.dst === 'dst' ); expect(relationship).toBeDefined(); }); From a3f35f63677c03f813ce92bd2369fc5dfc3fda88 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 09:40:09 -0800 Subject: [PATCH 268/492] Fix parser test file --- .../src/diagrams/requirement/parser/requirementDiagram.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/requirement/parser/requirementDiagram.spec.js b/packages/mermaid/src/diagrams/requirement/parser/requirementDiagram.spec.js index 743543f28..5875e143d 100644 --- a/packages/mermaid/src/diagrams/requirement/parser/requirementDiagram.spec.js +++ b/packages/mermaid/src/diagrams/requirement/parser/requirementDiagram.spec.js @@ -1,5 +1,5 @@ import { setConfig } from '../../../config.js'; -import requirementDb from '../requirementDb.js'; +import { RequirementDB } from '../requirementDb.js'; import reqDiagram from './requirementDiagram.jison'; setConfig({ @@ -7,6 +7,7 @@ setConfig({ }); describe('when parsing requirement diagram it...', function () { + const requirementDb = new RequirementDB(); beforeEach(function () { reqDiagram.parser.yy = requirementDb; reqDiagram.parser.yy.clear(); From 40686f198cc22c5cede51fb8235a87b880fd8622 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 18:01:00 +0000 Subject: [PATCH 269/492] [autofix.ci] apply automated fixes --- .../mermaid/src/rendering-util/rendering-elements/shapes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts index 4cb1fa144..e44cae87b 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes.ts @@ -477,7 +477,7 @@ const generateShapeMap = () => { // class diagram classBox, - + // er diagram erBox, } as const; From aeec4b7f778539b90f70ef47018d9ab901a83fa7 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 10:28:59 -0800 Subject: [PATCH 270/492] Fix non-htmlLabels not being centered --- .../src/rendering-util/rendering-elements/shapes/erBox.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts index 5dcda944d..0815ab6c5 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts @@ -59,6 +59,13 @@ export async function erBox(parent: D3Selection node.width = config.er!.minEntityWidth; } const shapeSvg = await drawRect(parent, node, options); + + // drawRect doesn't center non-htmlLabels correctly as of now, so translate label + if (!evaluate(config.htmlLabels)) { + const textElement = shapeSvg.select('text'); + const bbox = (textElement.node() as SVGTextElement)?.getBBox(); + textElement.attr('transform', `translate(${-bbox.width / 2}, 0)`); + } return shapeSvg; } From 1a9a9f43e690950af9ca0801a2b329d0a239dc65 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 10:31:47 -0800 Subject: [PATCH 271/492] Update erDb to use class to wrap data --- packages/mermaid/src/diagrams/er/erDb.ts | 412 +++++++++--------- packages/mermaid/src/diagrams/er/erDiagram.ts | 6 +- .../src/diagrams/er/erRenderer-unified.ts | 3 +- .../src/diagrams/er/parser/erDiagram.spec.js | 3 +- 4 files changed, 218 insertions(+), 206 deletions(-) diff --git a/packages/mermaid/src/diagrams/er/erDb.ts b/packages/mermaid/src/diagrams/er/erDb.ts index 7a1e2f025..5e9ba20b6 100644 --- a/packages/mermaid/src/diagrams/er/erDb.ts +++ b/packages/mermaid/src/diagrams/er/erDb.ts @@ -2,7 +2,6 @@ import { log } from '../../logger.js'; import { getConfig } from '../../diagram-api/diagramAPI.js'; import type { Edge, Node } from '../../rendering-util/types.js'; import type { EntityNode, Attribute, Relationship, EntityClass, RelSpec } from './erTypes.js'; - import { setAccTitle, getAccTitle, @@ -13,228 +12,239 @@ import { getDiagramTitle, } from '../common/commonDb.js'; import { getEdgeId } from '../../utils.js'; +import type { DiagramDB } from '../../diagram-api/types.js'; -let entities = new Map(); -let relationships: Relationship[] = []; -let classes = new Map(); -let direction = 'TB'; +export class ErDB implements DiagramDB { + private entities = new Map(); + private relationships: Relationship[] = []; + private classes = new Map(); + private direction = 'TB'; -const Cardinality = { - ZERO_OR_ONE: 'ZERO_OR_ONE', - ZERO_OR_MORE: 'ZERO_OR_MORE', - ONE_OR_MORE: 'ONE_OR_MORE', - ONLY_ONE: 'ONLY_ONE', - MD_PARENT: 'MD_PARENT', -}; - -const Identification = { - NON_IDENTIFYING: 'NON_IDENTIFYING', - IDENTIFYING: 'IDENTIFYING', -}; -/** - * Add entity - * @param name - The name of the entity - * @param alias - The alias of the entity - */ -const addEntity = function (name: string, alias = ''): EntityNode { - if (!entities.has(name)) { - entities.set(name, { - id: `entity-${name}-${entities.size}`, - label: name, - attributes: [], - alias, - shape: 'erBox', - look: getConfig().look || 'default', - cssClasses: 'default', - cssStyles: [], - }); - log.info('Added new entity :', name); - } else if (!entities.get(name)?.alias && alias) { - entities.get(name)!.alias = alias; - log.info(`Add alias '${alias}' to entity '${name}'`); - } - - return entities.get(name)!; -}; - -const getEntity = function (name: string) { - return entities.get(name); -}; - -const getEntities = () => entities; - -const getClasses = () => classes; - -const addAttributes = function (entityName: string, attribs: Attribute[]) { - const entity = addEntity(entityName); // May do nothing (if entity has already been added) - - // Process attribs in reverse order due to effect of recursive construction (last attribute is first) - let i; - for (i = attribs.length - 1; i >= 0; i--) { - if (!attribs[i].keys) { - attribs[i].keys = []; - } - if (!attribs[i].comment) { - attribs[i].comment = ''; - } - entity.attributes.push(attribs[i]); - log.debug('Added attribute ', attribs[i].name); - } -}; - -/** - * Add a relationship - * - * @param entA - The first entity in the relationship - * @param rolA - The role played by the first entity in relation to the second - * @param entB - The second entity in the relationship - * @param rSpec - The details of the relationship between the two entities - */ -const addRelationship = function (entA: string, rolA: string, entB: string, rSpec: RelSpec) { - const entityA = entities.get(entA); - const entityB = entities.get(entB); - if (!entityA || !entityB) { - return; - } - - const rel = { - entityA: entityA.id, - roleA: rolA, - entityB: entityB.id, - relSpec: rSpec, + private Cardinality = { + ZERO_OR_ONE: 'ZERO_OR_ONE', + ZERO_OR_MORE: 'ZERO_OR_MORE', + ONE_OR_MORE: 'ONE_OR_MORE', + ONLY_ONE: 'ONLY_ONE', + MD_PARENT: 'MD_PARENT', }; - relationships.push(rel); - log.debug('Added new relationship :', rel); -}; + private Identification = { + NON_IDENTIFYING: 'NON_IDENTIFYING', + IDENTIFYING: 'IDENTIFYING', + }; -const getRelationships = () => relationships; + constructor() { + this.clear(); + this.addEntity = this.addEntity.bind(this); + this.addAttributes = this.addAttributes.bind(this); + this.addRelationship = this.addRelationship.bind(this); + this.setDirection = this.setDirection.bind(this); + this.addCssStyles = this.addCssStyles.bind(this); + this.addClass = this.addClass.bind(this); + this.setClass = this.setClass.bind(this); + this.setAccTitle = this.setAccTitle.bind(this); + this.setAccDescription = this.setAccDescription.bind(this); + } -export const getDirection = () => direction; -const setDirection = (dir: string) => { - direction = dir; -}; + /** + * Add entity + * @param name - The name of the entity + * @param alias - The alias of the entity + */ + public addEntity(name: string, alias = ''): EntityNode { + if (!this.entities.has(name)) { + this.entities.set(name, { + id: `entity-${name}-${this.entities.size}`, + label: name, + attributes: [], + alias, + shape: 'erBox', + look: getConfig().look ?? 'default', + cssClasses: 'default', + cssStyles: [], + }); + log.info('Added new entity :', name); + } else if (!this.entities.get(name)?.alias && alias) { + this.entities.get(name)!.alias = alias; + log.info(`Add alias '${alias}' to entity '${name}'`); + } -const clear = function () { - entities = new Map(); - classes = new Map(); - relationships = []; - commonClear(); -}; + return this.entities.get(name)!; + } -export const getData = function () { - const nodes: Node[] = []; - const edges: Edge[] = []; - const config = getConfig(); + public getEntity(name: string) { + return this.entities.get(name); + } - for (const entityKey of entities.keys()) { - const entityNode = entities.get(entityKey); - if (entityNode) { - entityNode.cssCompiledStyles = getCompiledStyles(entityNode.cssClasses!.split(' ')); - nodes.push(entityNode as unknown as Node); + public getEntities() { + return this.entities; + } + + public getClasses() { + return this.classes; + } + + public addAttributes(entityName: string, attribs: Attribute[]) { + const entity = this.addEntity(entityName); // May do nothing (if entity has already been added) + + // Process attribs in reverse order due to effect of recursive construction (last attribute is first) + let i; + for (i = attribs.length - 1; i >= 0; i--) { + if (!attribs[i].keys) { + attribs[i].keys = []; + } + if (!attribs[i].comment) { + attribs[i].comment = ''; + } + entity.attributes.push(attribs[i]); + log.debug('Added attribute ', attribs[i].name); } } - let count = 0; - for (const relationship of relationships) { - const edge: Edge = { - id: getEdgeId(relationship.entityA, relationship.entityB, { prefix: 'id', counter: count++ }), - type: 'normal', - start: relationship.entityA, - end: relationship.entityB, - label: relationship.roleA, - labelpos: 'c', - thickness: 'normal', - classes: 'relationshipLine', - arrowTypeStart: relationship.relSpec.cardB.toLowerCase(), - arrowTypeEnd: relationship.relSpec.cardA.toLowerCase(), - pattern: relationship.relSpec.relType == 'IDENTIFYING' ? 'solid' : 'dashed', - look: config.look, - }; - edges.push(edge); - } - return { nodes, edges, other: {}, config, direction: 'TB' }; -}; - -export const addCssStyles = function (ids: string[], styles: string[]) { - for (const id of ids) { - const entity = entities.get(id); - if (!styles || !entity) { + /** + * Add a relationship + * + * @param entA - The first entity in the relationship + * @param rolA - The role played by the first entity in relation to the second + * @param entB - The second entity in the relationship + * @param rSpec - The details of the relationship between the two entities + */ + public addRelationship(entA: string, rolA: string, entB: string, rSpec: RelSpec) { + const entityA = this.entities.get(entA); + const entityB = this.entities.get(entB); + if (!entityA || !entityB) { return; } - for (const style of styles) { - entity.cssStyles!.push(style); - } + + const rel = { + entityA: entityA.id, + roleA: rolA, + entityB: entityB.id, + relSpec: rSpec, + }; + + this.relationships.push(rel); + log.debug('Added new relationship :', rel); } -}; -export const addClass = function (ids: string[], style: string[]) { - ids.forEach(function (id) { - let classNode = classes.get(id); - if (classNode === undefined) { - classNode = { id, styles: [], textStyles: [] }; - classes.set(id, classNode); + public getRelationships() { + return this.relationships; + } + + public getDirection() { + return this.direction; + } + + public setDirection(dir: string) { + this.direction = dir; + } + + private getCompiledStyles(classDefs: string[]) { + let compiledStyles: string[] = []; + for (const customClass of classDefs) { + const cssClass = this.classes.get(customClass); + if (cssClass?.styles) { + compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim()); + } + if (cssClass?.textStyles) { + compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim()); + } } + return compiledStyles; + } - if (style) { - style.forEach(function (s) { - if (/color/.exec(s)) { - const newStyle = s.replace('fill', 'bgFill'); - classNode.textStyles.push(newStyle); - } - classNode.styles.push(s); - }); - } - }); -}; - -export const setClass = function (ids: string[], classNames: string[]) { - for (const id of ids) { - const entity = entities.get(id); - if (entity) { - for (const className of classNames) { - entity.cssClasses += ' ' + className; + public addCssStyles(ids: string[], styles: string[]) { + for (const id of ids) { + const entity = this.entities.get(id); + if (!styles || !entity) { + return; + } + for (const style of styles) { + entity.cssStyles!.push(style); } } } -}; -function getCompiledStyles(classDefs: string[]) { - let compiledStyles: string[] = []; - for (const customClass of classDefs) { - const cssClass = classes.get(customClass); - if (cssClass?.styles) { - compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim()); - } - if (cssClass?.textStyles) { - compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim()); + public addClass(ids: string[], style: string[]) { + ids.forEach((id) => { + let classNode = this.classes.get(id); + if (classNode === undefined) { + classNode = { id, styles: [], textStyles: [] }; + this.classes.set(id, classNode); + } + + if (style) { + style.forEach(function (s) { + if (/color/.exec(s)) { + const newStyle = s.replace('fill', 'bgFill'); + classNode.textStyles.push(newStyle); + } + classNode.styles.push(s); + }); + } + }); + } + + public setClass(ids: string[], classNames: string[]) { + for (const id of ids) { + const entity = this.entities.get(id); + if (entity) { + for (const className of classNames) { + entity.cssClasses += ' ' + className; + } + } } } - return compiledStyles; -} -export default { - Cardinality, - Identification, - getConfig: () => getConfig().er, - addEntity, - addAttributes, - getEntities, - getEntity, - getClasses, - addRelationship, - getRelationships, - clear, - getDirection, - setDirection, - setAccTitle, - getAccTitle, - setAccDescription, - getAccDescription, - setDiagramTitle, - getDiagramTitle, - getData, - addCssStyles, - addClass, - setClass, -}; + public clear() { + this.entities = new Map(); + this.classes = new Map(); + this.relationships = []; + commonClear(); + } + + public getData() { + const nodes: Node[] = []; + const edges: Edge[] = []; + const config = getConfig(); + + for (const entityKey of this.entities.keys()) { + const entityNode = this.entities.get(entityKey); + if (entityNode) { + entityNode.cssCompiledStyles = this.getCompiledStyles(entityNode.cssClasses!.split(' ')); + nodes.push(entityNode as unknown as Node); + } + } + + let count = 0; + for (const relationship of this.relationships) { + const edge: Edge = { + id: getEdgeId(relationship.entityA, relationship.entityB, { + prefix: 'id', + counter: count++, + }), + type: 'normal', + start: relationship.entityA, + end: relationship.entityB, + label: relationship.roleA, + labelpos: 'c', + thickness: 'normal', + classes: 'relationshipLine', + arrowTypeStart: relationship.relSpec.cardB.toLowerCase(), + arrowTypeEnd: relationship.relSpec.cardA.toLowerCase(), + pattern: relationship.relSpec.relType == 'IDENTIFYING' ? 'solid' : 'dashed', + look: config.look, + }; + edges.push(edge); + } + return { nodes, edges, other: {}, config, direction: 'TB' }; + } + + public setAccTitle = setAccTitle; + public getAccTitle = getAccTitle; + public setAccDescription = setAccDescription; + public getAccDescription = getAccDescription; + public setDiagramTitle = setDiagramTitle; + public getDiagramTitle = getDiagramTitle; + public getConfig = () => getConfig().er; +} diff --git a/packages/mermaid/src/diagrams/er/erDiagram.ts b/packages/mermaid/src/diagrams/er/erDiagram.ts index 1647f181b..29bd36a05 100644 --- a/packages/mermaid/src/diagrams/er/erDiagram.ts +++ b/packages/mermaid/src/diagrams/er/erDiagram.ts @@ -1,12 +1,14 @@ // @ts-ignore: TODO: Fix ts errors import erParser from './parser/erDiagram.jison'; -import erDb from './erDb.js'; +import { ErDB } from './erDb.js'; import erRenderer from './erRenderer-unified.js'; import erStyles from './styles.js'; export const diagram = { parser: erParser, - db: erDb, + get db() { + return new ErDB(); + }, renderer: erRenderer, styles: erStyles, }; diff --git a/packages/mermaid/src/diagrams/er/erRenderer-unified.ts b/packages/mermaid/src/diagrams/er/erRenderer-unified.ts index 902d9829f..7611747fe 100644 --- a/packages/mermaid/src/diagrams/er/erRenderer-unified.ts +++ b/packages/mermaid/src/diagrams/er/erRenderer-unified.ts @@ -4,7 +4,6 @@ import { getDiagramElement } from '../../rendering-util/insertElementsForSize.js import { getRegisteredLayoutAlgorithm, render } from '../../rendering-util/render.js'; import { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js'; import type { LayoutData } from '../../rendering-util/types.js'; -import { getDirection } from './erDb.js'; import utils from '../../utils.js'; import { select } from 'd3'; @@ -26,7 +25,7 @@ export const draw = async function (text: string, id: string, _version: string, // Workaround as when rendering and setting up the graph it uses flowchart spacing before data4Layout spacing? data4Layout.config.flowchart!.nodeSpacing = conf?.nodeSpacing || 140; data4Layout.config.flowchart!.rankSpacing = conf?.rankSpacing || 80; - data4Layout.direction = getDirection(); + data4Layout.direction = diag.db.getDirection(); data4Layout.markers = ['only_one', 'zero_or_one', 'one_or_more', 'zero_or_more']; data4Layout.diagramId = id; diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js index 48cd3edce..3bd2339ba 100644 --- a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js +++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js @@ -1,5 +1,5 @@ import { setConfig } from '../../../config.js'; -import erDb from '../erDb.js'; +import { ErDb } from '../erDb.js'; import erDiagram from './erDiagram.jison'; // jison file setConfig({ @@ -7,6 +7,7 @@ setConfig({ }); describe('when parsing ER diagram it...', function () { + const erDb = new ErDb(); beforeEach(function () { erDiagram.parser.yy = erDb; erDiagram.parser.yy.clear(); From b53cf0a1fb40f39d132ce5bf61c522d4dde209c2 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 10:33:45 -0800 Subject: [PATCH 272/492] Fix getConfig to return correct config --- packages/mermaid/src/diagrams/requirement/requirementDb.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/requirement/requirementDb.ts b/packages/mermaid/src/diagrams/requirement/requirementDb.ts index 972c5e44e..b7c628040 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementDb.ts +++ b/packages/mermaid/src/diagrams/requirement/requirementDb.ts @@ -345,5 +345,5 @@ export class RequirementDB implements DiagramDB { public getAccDescription = getAccDescription; public setDiagramTitle = setDiagramTitle; public getDiagramTitle = getDiagramTitle; - public getConfig = () => getConfig().class; + public getConfig = () => getConfig().requirement; } From 8a8d169e278d2b834bd089fbc5886b07ac4059b2 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Mon, 27 Jan 2025 10:36:28 -0800 Subject: [PATCH 273/492] Fix typo --- packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js index 3bd2339ba..de602530c 100644 --- a/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js +++ b/packages/mermaid/src/diagrams/er/parser/erDiagram.spec.js @@ -1,5 +1,5 @@ import { setConfig } from '../../../config.js'; -import { ErDb } from '../erDb.js'; +import { ErDB } from '../erDb.js'; import erDiagram from './erDiagram.jison'; // jison file setConfig({ @@ -7,7 +7,7 @@ setConfig({ }); describe('when parsing ER diagram it...', function () { - const erDb = new ErDb(); + const erDb = new ErDB(); beforeEach(function () { erDiagram.parser.yy = erDb; erDiagram.parser.yy.clear(); From 509793d5c2651e498da7da5ce0f16515e1b58213 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Tue, 28 Jan 2025 07:48:51 -0800 Subject: [PATCH 274/492] Remove unnecessary default export --- packages/mermaid/src/diagrams/er/erDiagram.ts | 4 ++-- packages/mermaid/src/diagrams/er/erRenderer-unified.ts | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/mermaid/src/diagrams/er/erDiagram.ts b/packages/mermaid/src/diagrams/er/erDiagram.ts index 29bd36a05..1e3f0a4e1 100644 --- a/packages/mermaid/src/diagrams/er/erDiagram.ts +++ b/packages/mermaid/src/diagrams/er/erDiagram.ts @@ -1,7 +1,7 @@ // @ts-ignore: TODO: Fix ts errors import erParser from './parser/erDiagram.jison'; import { ErDB } from './erDb.js'; -import erRenderer from './erRenderer-unified.js'; +import * as renderer from './erRenderer-unified.js'; import erStyles from './styles.js'; export const diagram = { @@ -9,6 +9,6 @@ export const diagram = { get db() { return new ErDB(); }, - renderer: erRenderer, + renderer, styles: erStyles, }; diff --git a/packages/mermaid/src/diagrams/er/erRenderer-unified.ts b/packages/mermaid/src/diagrams/er/erRenderer-unified.ts index 7611747fe..9735dd3bb 100644 --- a/packages/mermaid/src/diagrams/er/erRenderer-unified.ts +++ b/packages/mermaid/src/diagrams/er/erRenderer-unified.ts @@ -64,7 +64,3 @@ export const draw = async function (text: string, id: string, _version: string, setupViewPortForSVG(svg, padding, 'erDiagram', conf?.useMaxWidth ?? true); }; - -export default { - draw, -}; From f00507449b668aee3e37b5038f79b8480a70dfc7 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Tue, 28 Jan 2025 07:51:06 -0800 Subject: [PATCH 275/492] Remove unnecessary default export --- .../mermaid/src/diagrams/requirement/requirementDiagram.ts | 2 +- .../mermaid/src/diagrams/requirement/requirementRenderer.ts | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts b/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts index 246d91197..5ad89949a 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts +++ b/packages/mermaid/src/diagrams/requirement/requirementDiagram.ts @@ -3,7 +3,7 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; import parser from './parser/requirementDiagram.jison'; import { RequirementDB } from './requirementDb.js'; import styles from './styles.js'; -import renderer from './requirementRenderer.js'; +import * as renderer from './requirementRenderer.js'; export const diagram: DiagramDefinition = { parser, diff --git a/packages/mermaid/src/diagrams/requirement/requirementRenderer.ts b/packages/mermaid/src/diagrams/requirement/requirementRenderer.ts index 7e190f2c9..de18a08f3 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementRenderer.ts +++ b/packages/mermaid/src/diagrams/requirement/requirementRenderer.ts @@ -34,7 +34,3 @@ export const draw = async function (text: string, id: string, _version: string, setupViewPortForSVG(svg, padding, 'requirementDiagram', conf?.useMaxWidth ?? true); }; - -export default { - draw, -}; From d0768cbc37d4fa5ce447382486e2054722f63420 Mon Sep 17 00:00:00 2001 From: yari-dewalt Date: Tue, 28 Jan 2025 08:10:07 -0800 Subject: [PATCH 276/492] Update shape --- .../shapes/requirementBox.ts | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts index da28f5db2..a41e1483a 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/requirementBox.ts @@ -18,7 +18,6 @@ export async function requirementBox( node.labelStyle = labelStyles; const requirementNode = node as unknown as Requirement; const elementNode = node as unknown as Element; - const config = getConfig().requirement; const padding = 20; const gap = 20; const isRequirementNode = 'verifyMethod' in node; @@ -47,7 +46,7 @@ export async function requirementBox( shapeSvg, requirementNode.name, accumulativeHeight, - node.labelStyle + node.labelStyle + '; font-weight: bold;' ); accumulativeHeight += nameHeight + gap; @@ -98,11 +97,8 @@ export async function requirementBox( ); } - const totalWidth = Math.max( - (shapeSvg.node()?.getBBox().width ?? 200) + padding, - config?.rect_min_width ?? 200 - ); - const totalHeight = totalWidth; + const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding; + const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding; const x = -totalWidth / 2; const y = -totalHeight / 2; @@ -151,16 +147,18 @@ export async function requirementBox( text.attr('transform', `translate(${newTranslateX}, ${newTranslateY + padding})`); }); - // Insert divider line - const roughLine = rc.line( - x, - y + typeHeight + nameHeight + gap, - x + totalWidth, - y + typeHeight + nameHeight + gap, - options - ); - const dividerLine = shapeSvg.insert(() => roughLine); - dividerLine.attr('style', nodeStyles); + // Insert divider line if there is body text + if (accumulativeHeight > typeHeight + nameHeight + gap) { + const roughLine = rc.line( + x, + y + typeHeight + nameHeight + gap, + x + totalWidth, + y + typeHeight + nameHeight + gap, + options + ); + const dividerLine = shapeSvg.insert(() => roughLine); + dividerLine.attr('style', nodeStyles); + } updateNodeBounds(node, rect); @@ -201,6 +199,9 @@ async function addText( const textChild = text.children[0]; for (const child of textChild.children) { child.textContent = child.textContent.replaceAll('>', '>').replaceAll('<', '<'); + if (style) { + child.setAttribute('style', style); + } } // Get the bounding box after the text update bbox = text.getBBox(); From 384f59eee243db06b58ec1e46720253e4387fba4 Mon Sep 17 00:00:00 2001 From: pranavm2109 Date: Wed, 29 Jan 2025 14:45:42 -0500 Subject: [PATCH 277/492] called getConfig() once in draw function and used returned value elsewhere within Co-authored-by: Shahir Ahmed --- .../src/diagrams/user-journey/journeyRenderer.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts b/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts index 1345e0624..98625510f 100644 --- a/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts +++ b/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts @@ -48,12 +48,13 @@ function drawActorLegend(diagram) { const conf = getConfig().journey; const LEFT_MARGIN = conf.leftMargin; export const draw = function (text, id, version, diagObj) { - const conf = getConfig().journey; - const titleColor = getConfig().themeVariables.titleColor; - const titleFontSize = getConfig().themeVariables.titleFontSize; - const titleFontFamily = getConfig().themeVariables.titleFontFamily; + const configObject = getConfig(); + const conf = configObject.journey; + const titleColor = configObject.themeVariables.titleColor; + const titleFontSize = configObject.themeVariables.titleFontSize; + const titleFontFamily = configObject.themeVariables.titleFontFamily; - const securityLevel = getConfig().securityLevel; + const securityLevel = configObject.securityLevel; // Handle root and Document for when rendering in sandbox mode let sandboxElement; if (securityLevel === 'sandbox') { From 7c0af381d1f5e7d95d120dffd856b0e3f905ffc4 Mon Sep 17 00:00:00 2001 From: Shahir Ahmed Date: Wed, 29 Jan 2025 16:11:57 -0500 Subject: [PATCH 278/492] adds styling, font-weight and font-family tests for user jounrey title Co-authored-by: Pranav Mishra --- cypress/integration/rendering/journey.spec.js | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/cypress/integration/rendering/journey.spec.js b/cypress/integration/rendering/journey.spec.js index d8bef6d1b..cf2b1cc81 100644 --- a/cypress/integration/rendering/journey.spec.js +++ b/cypress/integration/rendering/journey.spec.js @@ -63,4 +63,41 @@ section Checkout from website { journey: { useMaxWidth: false } } ); }); + + it('should render a user journey diagram title', () => { + renderGraph( + `--- +config: + theme: "forest" + themeVariables: + primaryColor: "#00ff00" + secondaryColor: "#fff" + titleColor: "#2900A5" + titleFontFamily: "Times New Roman" + titleFontSize: "5rem" +--- + +journey + title User Journey Example + section Onboarding + Sign Up: 5: John, Shahir + Complete Profile: 4: John + section Engagement + Browse Features: 3: John + Use Core Functionality: 4: John + section Retention + Revisit Application: 5: John + Invite Friends: 3: John + + size: 2rem + ` + ); + + cy.get('text').contains('User Journey Example').as('title'); + cy.get('@title').then(($title) => { + expect($title).to.have.attr('fill', '#2900A5'); + expect($title).to.have.attr('font-family', 'Times New Roman'); + expect($title).to.have.attr('font-size', '5rem'); + }); + }); }); From 9fb46ae88fdbc64f0c0005aad48459e93a309ec5 Mon Sep 17 00:00:00 2001 From: Shahir Ahmed Date: Wed, 29 Jan 2025 16:20:43 -0500 Subject: [PATCH 279/492] improves description for user journey diagram title test Co-authored-by: Pranav Mishra --- cypress/integration/rendering/journey.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/integration/rendering/journey.spec.js b/cypress/integration/rendering/journey.spec.js index cf2b1cc81..5f7bd76e1 100644 --- a/cypress/integration/rendering/journey.spec.js +++ b/cypress/integration/rendering/journey.spec.js @@ -64,7 +64,7 @@ section Checkout from website ); }); - it('should render a user journey diagram title', () => { + it('should correctly render the user journey diagram title with the specified styling', () => { renderGraph( `--- config: From 88a39f8e160404aba0a4045efa05d36d37dccda6 Mon Sep 17 00:00:00 2001 From: Shahir Ahmed Date: Fri, 31 Jan 2025 17:28:55 -0500 Subject: [PATCH 280/492] update dependencies for CI/CD pipeline Co-authored-by: Pranav Mishra --- .../classes/mermaid.UnknownDiagramError.md | 6 +- docs/config/theming.md | 3 + packages/mermaid/src/config.ts | 2 +- .../architecture/architectureTypes.ts | 4 +- pnpm-lock.yaml | 7203 +++++++---------- 5 files changed, 2900 insertions(+), 4318 deletions(-) diff --git a/docs/config/setup/classes/mermaid.UnknownDiagramError.md b/docs/config/setup/classes/mermaid.UnknownDiagramError.md index a3359c9d0..0e02a6b30 100644 --- a/docs/config/setup/classes/mermaid.UnknownDiagramError.md +++ b/docs/config/setup/classes/mermaid.UnknownDiagramError.md @@ -127,7 +127,7 @@ Error.prepareStackTrace #### Defined in -node_modules/.pnpm/@types+node\@20.16.11/node_modules/@types/node/globals.d.ts:98 +node_modules/.pnpm/@types+node\@20.17.16/node_modules/@types/node/globals.d.ts:98 --- @@ -141,7 +141,7 @@ Error.stackTraceLimit #### Defined in -node_modules/.pnpm/@types+node\@20.16.11/node_modules/@types/node/globals.d.ts:100 +node_modules/.pnpm/@types+node\@20.17.16/node_modules/@types/node/globals.d.ts:100 ## Methods @@ -168,4 +168,4 @@ Error.captureStackTrace #### Defined in -node_modules/.pnpm/@types+node\@20.16.11/node_modules/@types/node/globals.d.ts:91 +node_modules/.pnpm/@types+node\@20.17.16/node_modules/@types/node/globals.d.ts:91 diff --git a/docs/config/theming.md b/docs/config/theming.md index 088d9e755..a09221305 100644 --- a/docs/config/theming.md +++ b/docs/config/theming.md @@ -213,6 +213,9 @@ The theming engine will only recognize hex colors and not color names. So, the v | background | #f4f4f4 | Used to calculate color for items that should either be background colored or contrasting to the background | | fontFamily | trebuchet ms, verdana, arial | | | fontSize | 16px | Font size in pixels | +| titleColor | calculated from textColor | Color to be used for the title text in Journey Diagrams. | +| titleFontFamily | trebuchet ms, verdana, arial | Font family to be used for the title text in Journey Diagrams. | +| titleFontSize | 16px | Font size in pixels to be used for the title text in Journey Diagrams. | | primaryColor | #fff4dd | Color to be used as background in nodes, other colors will be derived from this | | primaryTextColor | calculated from darkMode #ddd/#333 | Color to be used as text color in nodes using `primaryColor` | | secondaryColor | calculated from primaryColor | | diff --git a/packages/mermaid/src/config.ts b/packages/mermaid/src/config.ts index 31f0592de..9468a3e46 100644 --- a/packages/mermaid/src/config.ts +++ b/packages/mermaid/src/config.ts @@ -230,7 +230,7 @@ const ConfigWarning = { } as const; type ConfigWarningStrings = keyof typeof ConfigWarning; -const issuedWarnings: { [key in ConfigWarningStrings]?: boolean } = {}; +const issuedWarnings: Partial> = {}; const issueWarning = (warning: ConfigWarningStrings) => { if (issuedWarnings[warning]) { return; diff --git a/packages/mermaid/src/diagrams/architecture/architectureTypes.ts b/packages/mermaid/src/diagrams/architecture/architectureTypes.ts index cad2c5c36..a7af33ca7 100644 --- a/packages/mermaid/src/diagrams/architecture/architectureTypes.ts +++ b/packages/mermaid/src/diagrams/architecture/architectureTypes.ts @@ -106,9 +106,7 @@ export const isValidArchitectureDirectionPair = function ( return x !== 'LL' && x !== 'RR' && x !== 'TT' && x !== 'BB'; }; -export type ArchitectureDirectionPairMap = { - [key in ArchitectureDirectionPair]?: string; -}; +export type ArchitectureDirectionPairMap = Partial>; /** * Creates a pair of the directions of each side of an edge. This function should be used instead of manually creating it to ensure that the source is always the first character. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd702ac25..b0f5799b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,28 +15,28 @@ importers: devDependencies: '@applitools/eyes-cypress': specifier: ^3.44.4 - version: 3.44.9(encoding@0.1.13)(typescript@5.4.5) + version: 3.50.0(encoding@0.1.13)(typescript@5.4.5) '@argos-ci/cypress': specifier: ^2.2.2 - version: 2.2.2(cypress@13.15.0) + version: 2.3.4(cypress@13.17.0) '@changesets/changelog-github': specifier: ^0.5.0 version: 0.5.0(encoding@0.1.13) '@changesets/cli': specifier: ^2.27.7 - version: 2.27.9 + version: 2.27.12 '@cspell/eslint-plugin': specifier: ^8.8.4 - version: 8.14.4(eslint@9.12.0(jiti@1.21.6)) + version: 8.17.3(eslint@9.19.0(jiti@1.21.7)) '@cypress/code-coverage': specifier: ^3.12.30 - version: 3.13.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(cypress@13.15.0)(webpack@5.95.0(esbuild@0.21.5)) + version: 3.13.11(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(babel-loader@9.2.1(@babel/core@7.26.7)(webpack@5.97.1(esbuild@0.21.5)))(cypress@13.17.0)(webpack@5.97.1(esbuild@0.21.5)) '@eslint/js': specifier: ^9.4.0 - version: 9.12.0 + version: 9.19.0 '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.32.0)(tslib@2.7.0)(typescript@5.4.5) + version: 11.1.6(rollup@4.32.1)(tslib@2.8.1)(typescript@5.4.5) '@types/cors': specifier: ^2.8.17 version: 2.8.17 @@ -51,19 +51,19 @@ importers: version: 21.1.7 '@types/lodash': specifier: ^4.17.0 - version: 4.17.10 + version: 4.17.15 '@types/mdast': specifier: ^4.0.3 version: 4.0.4 '@types/node': specifier: ^20.11.30 - version: 20.16.11 + version: 20.17.16 '@types/rollup-plugin-visualizer': specifier: ^4.2.4 version: 4.2.4 '@vitest/coverage-v8': specifier: ^1.4.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0)) + version: 1.6.0(vitest@1.6.0) '@vitest/spy': specifier: ^1.4.0 version: 1.6.0 @@ -90,46 +90,46 @@ importers: version: 7.0.3 cspell: specifier: ^8.6.0 - version: 8.14.4 + version: 8.17.3 cypress: specifier: ^13.14.1 - version: 13.15.0 + version: 13.17.0 cypress-image-snapshot: specifier: ^4.0.1 - version: 4.0.1(cypress@13.15.0)(jest@29.7.0(@types/node@20.16.11)) + version: 4.0.1(cypress@13.17.0)(jest@29.7.0(@types/node@20.17.16)) cypress-split: specifier: ^1.24.0 - version: 1.24.0(@babel/core@7.25.7) + version: 1.24.7(@babel/core@7.26.7) esbuild: specifier: ^0.21.5 version: 0.21.5 eslint: specifier: ^9.4.0 - version: 9.12.0(jiti@1.21.6) + version: 9.19.0(jiti@1.21.7) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.12.0(jiti@1.21.6)) + version: 9.1.0(eslint@9.19.0(jiti@1.21.7)) eslint-plugin-cypress: specifier: ^3.3.0 - version: 3.5.0(eslint@9.12.0(jiti@1.21.6)) + version: 3.6.0(eslint@9.19.0(jiti@1.21.7)) eslint-plugin-html: specifier: ^8.1.1 version: 8.1.2 eslint-plugin-jest: specifier: ^28.6.0 - version: 28.8.3(@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(jest@29.7.0(@types/node@20.16.11))(typescript@5.4.5) + version: 28.11.0(@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5))(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5))(eslint@9.19.0(jiti@1.21.7))(jest@29.7.0(@types/node@20.17.16))(typescript@5.4.5) eslint-plugin-jsdoc: specifier: ^50.0.0 - version: 50.3.1(eslint@9.12.0(jiti@1.21.6)) + version: 50.6.3(eslint@9.19.0(jiti@1.21.7)) eslint-plugin-json: specifier: ^4.0.0 version: 4.0.1 eslint-plugin-lodash: specifier: ^8.0.0 - version: 8.0.0(eslint@9.12.0(jiti@1.21.6)) + version: 8.0.0(eslint@9.19.0(jiti@1.21.7)) eslint-plugin-markdown: specifier: ^5.0.0 - version: 5.1.0(eslint@9.12.0(jiti@1.21.6)) + version: 5.1.0(eslint@9.19.0(jiti@1.21.7)) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.3.0 @@ -138,22 +138,22 @@ importers: version: 0.3.0 eslint-plugin-unicorn: specifier: ^56.0.0 - version: 56.0.0(eslint@9.12.0(jiti@1.21.6)) + version: 56.0.1(eslint@9.19.0(jiti@1.21.7)) express: specifier: ^4.19.1 - version: 4.21.0 + version: 4.21.2 globals: specifier: ^15.4.0 - version: 15.10.0 + version: 15.14.0 globby: specifier: ^14.0.1 version: 14.0.2 husky: specifier: ^9.0.11 - version: 9.1.6 + version: 9.1.7 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.16.11) + version: 29.7.0(@types/node@20.17.16) jison: specifier: ^0.4.18 version: 0.4.18 @@ -168,10 +168,10 @@ importers: version: 3.0.3 lint-staged: specifier: ^15.2.2 - version: 15.2.10 + version: 15.4.3 markdown-table: specifier: ^3.0.3 - version: 3.0.3 + version: 3.0.4 nyc: specifier: ^15.1.0 version: 15.1.0 @@ -179,47 +179,47 @@ importers: specifier: ^1.0.1 version: 1.0.1 prettier: - specifier: ^3.2.5 - version: 3.3.3 + specifier: ^3.3.3 + version: 3.4.2 prettier-plugin-jsdoc: specifier: ^1.3.0 - version: 1.3.0(prettier@3.3.3) + version: 1.3.2(prettier@3.4.2) rimraf: specifier: ^5.0.5 version: 5.0.10 rollup-plugin-visualizer: specifier: ^5.12.0 - version: 5.12.0(rollup@4.32.0) + version: 5.14.0(rollup@4.32.1) start-server-and-test: specifier: ^2.0.3 - version: 2.0.8 + version: 2.0.10 tsx: specifier: ^4.7.1 - version: 4.19.1 + version: 4.19.2 typescript: specifier: ~5.4.5 version: 5.4.5 typescript-eslint: specifier: ^8.0.0-alpha.34 - version: 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) + version: 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) vite: specifier: ^5.2.3 - version: 5.4.12(@types/node@20.16.11)(terser@5.37.0) + version: 5.4.14(@types/node@20.17.16)(terser@5.37.0) vite-plugin-istanbul: specifier: ^6.0.0 - version: 6.0.2(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0)) + version: 6.0.2(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0)) vitest: specifier: ^1.4.0 - version: 1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) + version: 1.6.0(@types/node@20.17.16)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) packages/mermaid: dependencies: '@braintree/sanitize-url': specifier: ^7.0.1 - version: 7.1.0 + version: 7.1.1 '@iconify/utils': specifier: ^2.1.32 - version: 2.1.33 + version: 2.2.1 '@mermaid-js/parser': specifier: workspace:^ version: link:../parser @@ -228,13 +228,13 @@ importers: version: 7.4.3 cytoscape: specifier: ^3.29.2 - version: 3.30.2 + version: 3.31.0 cytoscape-cose-bilkent: specifier: ^4.1.0 - version: 4.1.0(cytoscape@3.30.2) + version: 4.1.0(cytoscape@3.31.0) cytoscape-fcose: specifier: ^2.2.0 - version: 2.2.0(cytoscape@3.30.2) + version: 2.2.0(cytoscape@3.31.0) d3: specifier: ^7.9.0 version: 7.9.0 @@ -249,10 +249,10 @@ importers: version: 1.11.13 dompurify: specifier: ^3.2.1 - version: 3.2.1 + version: 3.2.4 katex: specifier: ^0.16.9 - version: 0.16.11 + version: 0.16.21 khroma: specifier: ^2.1.0 version: 2.1.0 @@ -267,7 +267,7 @@ importers: version: 4.6.6(patch_hash=vxb6t6fqvzyhwhtjiliqr25jyq) stylis: specifier: ^4.3.1 - version: 4.3.4 + version: 4.3.5 ts-dedent: specifier: ^2.2.0 version: 2.2.0 @@ -283,7 +283,7 @@ importers: version: 2.0.0 '@types/cytoscape': specifier: ^3.21.4 - version: 3.21.8 + version: 3.21.9 '@types/cytoscape-fcose': specifier: ^2.2.4 version: 2.2.4 @@ -295,13 +295,13 @@ importers: version: 4.0.8 '@types/d3-scale-chromatic': specifier: ^3.0.3 - version: 3.0.3 + version: 3.1.0 '@types/d3-selection': specifier: ^3.0.10 version: 3.0.11 '@types/d3-shape': specifier: ^3.1.6 - version: 3.1.6 + version: 3.1.7 '@types/jsdom': specifier: ^21.1.6 version: 21.1.7 @@ -319,7 +319,7 @@ importers: version: 3.0.0 '@types/stylis': specifier: ^4.2.5 - version: 4.2.6 + version: 4.2.7 '@types/uuid': specifier: ^9.0.8 version: 9.0.8 @@ -358,7 +358,7 @@ importers: version: 1.0.1 prettier: specifier: ^3.2.5 - version: 3.3.3 + version: 3.4.2 remark: specifier: ^15.0.1 version: 15.0.1 @@ -373,10 +373,10 @@ importers: version: 5.0.10 start-server-and-test: specifier: ^2.0.3 - version: 2.0.8 + version: 2.0.10 type-fest: specifier: ^4.13.1 - version: 4.26.1 + version: 4.33.0 typedoc: specifier: ^0.25.12 version: 0.25.13(typescript@5.4.5) @@ -394,16 +394,16 @@ importers: version: 5.0.0 vitepress: specifier: ^1.0.1 - version: 1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5) + version: 1.1.4(@algolia/client-search@5.20.0)(@types/node@20.17.16)(axios@1.7.9)(postcss@8.5.1)(search-insights@2.17.3)(terser@5.37.0)(typescript@5.4.5) vitepress-plugin-search: specifier: 1.0.4-alpha.22 - version: 1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5))(vue@3.5.11(typescript@5.4.5)) + version: 1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.1.4(@algolia/client-search@5.20.0)(@types/node@20.17.16)(axios@1.7.9)(postcss@8.5.1)(search-insights@2.17.3)(terser@5.37.0)(typescript@5.4.5))(vue@3.5.13(typescript@5.4.5)) packages/mermaid-example-diagram: dependencies: '@braintree/sanitize-url': specifier: ^7.0.0 - version: 7.1.0 + version: 7.1.1 d3: specifier: ^7.9.0 version: 7.9.0 @@ -441,7 +441,7 @@ importers: dependencies: '@zenuml/core': specifier: ^3.23.27 - version: 3.24.12(typescript@5.6.2) + version: 3.27.12(typescript@5.7.3) devDependencies: mermaid: specifier: workspace:^ @@ -454,35 +454,35 @@ importers: version: 7.4.47 '@vueuse/core': specifier: ^10.9.0 - version: 10.11.1(vue@3.5.11(typescript@5.6.2)) + version: 10.11.1(vue@3.5.13(typescript@5.7.3)) font-awesome: specifier: ^4.7.0 version: 4.7.0 jiti: specifier: ^1.21.0 - version: 1.21.6 + version: 1.21.7 mermaid: specifier: workspace:^ version: link:../.. vue: specifier: ^3.4.21 - version: 3.5.11(typescript@5.6.2) + version: 3.5.13(typescript@5.7.3) devDependencies: '@iconify-json/carbon': specifier: ^1.1.31 - version: 1.2.1 + version: 1.2.5 '@unocss/reset': specifier: ^0.59.0 version: 0.59.4 '@vite-pwa/vitepress': specifier: ^0.4.0 - version: 0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0)) + version: 0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)) '@vitejs/plugin-vue': specifier: ^5.0.0 - version: 5.1.4(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))(vue@3.5.11(typescript@5.6.2)) + version: 5.2.1(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(vue@3.5.13(typescript@5.7.3)) fast-glob: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.3 https-localhost: specifier: ^4.7.1 version: 4.7.1 @@ -491,22 +491,22 @@ importers: version: 1.1.2 unocss: specifier: ^0.59.0 - version: 0.59.4(postcss@8.5.1)(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0)) + version: 0.59.4(postcss@8.5.1)(rollup@2.79.2)(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0)) unplugin-vue-components: specifier: ^0.26.0 - version: 0.26.0(@babel/parser@7.26.7)(rollup@2.79.2)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3) + version: 0.26.0(@babel/parser@7.26.7)(rollup@2.79.2)(vue@3.5.13(typescript@5.7.3)) vite: specifier: ^5.0.0 - version: 5.4.12(@types/node@20.16.11)(terser@5.37.0) + version: 5.4.14(@types/node@20.17.16)(terser@5.37.0) vite-plugin-pwa: specifier: ^0.19.7 - version: 0.19.8(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + version: 0.19.8(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vitepress: specifier: 1.1.4 - version: 1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.6.2) + version: 1.1.4(@algolia/client-search@5.20.0)(@types/node@20.17.16)(axios@1.7.9)(postcss@8.5.1)(search-insights@2.17.3)(terser@5.37.0)(typescript@5.7.3) workbox-window: specifier: ^7.0.0 - version: 7.1.0 + version: 7.3.0 packages/parser: dependencies: @@ -529,13 +529,13 @@ importers: devDependencies: webpack: specifier: ^5.91.0 - version: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) + version: 5.97.1(esbuild@0.21.5)(webpack-cli@4.10.0) webpack-cli: specifier: ^4.10.0 - version: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + version: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.97.1) webpack-dev-server: specifier: ^4.15.2 - version: 4.15.2(webpack-cli@4.10.0)(webpack@5.95.0) + version: 4.15.2(webpack-cli@4.10.0)(webpack@5.97.1) packages: @@ -556,70 +556,77 @@ packages: engines: {node: ^18.0.0 || >= 20.0.0} hasBin: true - '@algolia/autocomplete-core@1.9.3': - resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + '@algolia/autocomplete-core@1.17.9': + resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==} - '@algolia/autocomplete-plugin-algolia-insights@1.9.3': - resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + '@algolia/autocomplete-plugin-algolia-insights@1.17.9': + resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==} peerDependencies: search-insights: '>= 1 < 3' - '@algolia/autocomplete-preset-algolia@1.9.3': - resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + '@algolia/autocomplete-preset-algolia@1.17.9': + resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/autocomplete-shared@1.9.3': - resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + '@algolia/autocomplete-shared@1.17.9': + resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/cache-browser-local-storage@4.24.0': - resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} + '@algolia/client-abtesting@5.20.0': + resolution: {integrity: sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww==} + engines: {node: '>= 14.0.0'} - '@algolia/cache-common@4.24.0': - resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} + '@algolia/client-analytics@5.20.0': + resolution: {integrity: sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw==} + engines: {node: '>= 14.0.0'} - '@algolia/cache-in-memory@4.24.0': - resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} + '@algolia/client-common@5.20.0': + resolution: {integrity: sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA==} + engines: {node: '>= 14.0.0'} - '@algolia/client-account@4.24.0': - resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} + '@algolia/client-insights@5.20.0': + resolution: {integrity: sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg==} + engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@4.24.0': - resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} + '@algolia/client-personalization@5.20.0': + resolution: {integrity: sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ==} + engines: {node: '>= 14.0.0'} - '@algolia/client-common@4.24.0': - resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} + '@algolia/client-query-suggestions@5.20.0': + resolution: {integrity: sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw==} + engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@4.24.0': - resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} + '@algolia/client-search@5.20.0': + resolution: {integrity: sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ==} + engines: {node: '>= 14.0.0'} - '@algolia/client-search@4.24.0': - resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} + '@algolia/ingestion@1.20.0': + resolution: {integrity: sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA==} + engines: {node: '>= 14.0.0'} - '@algolia/logger-common@4.24.0': - resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} + '@algolia/monitoring@1.20.0': + resolution: {integrity: sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw==} + engines: {node: '>= 14.0.0'} - '@algolia/logger-console@4.24.0': - resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} + '@algolia/recommend@5.20.0': + resolution: {integrity: sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw==} + engines: {node: '>= 14.0.0'} - '@algolia/recommend@4.24.0': - resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} + '@algolia/requester-browser-xhr@5.20.0': + resolution: {integrity: sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg==} + engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@4.24.0': - resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} + '@algolia/requester-fetch@5.20.0': + resolution: {integrity: sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ==} + engines: {node: '>= 14.0.0'} - '@algolia/requester-common@4.24.0': - resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - - '@algolia/requester-node-http@4.24.0': - resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} - - '@algolia/transporter@4.24.0': - resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + '@algolia/requester-node-http@5.20.0': + resolution: {integrity: sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw==} + engines: {node: '>= 14.0.0'} '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} @@ -641,17 +648,12 @@ packages: peerDependencies: ajv: '>=8' - '@applitools/core-base@1.16.1': - resolution: {integrity: sha512-T4/BCba4b77lJRh85Ir9Gwc2cKKwzLAdrPOWbzwx2euhl7ZPUdd4U4ncQpv9uKTYFwz5zu3v5TCeUxrRpRtXqg==} + '@applitools/core-base@1.22.1': + resolution: {integrity: sha512-5pHJgSjD6sGpWGrNzQsHasqkO8ROQ65z1F/dE+pITFfanreyoSrr8FLwwjQMiLq/Ggryt69PoAPXd7/N8vf0vg==} engines: {node: '>=12.13.0'} - '@applitools/core@4.18.2': - resolution: {integrity: sha512-loxNLlWyEdKBLTNUj4JUvDXImFxFVXZZ/NC/k5Z+LaXix3Xk5aIpCM+8Ii5Y96WBv8G7x/ZvQop7h823z3ai0Q==} - engines: {node: '>=12.13.0'} - hasBin: true - - '@applitools/core@4.19.0': - resolution: {integrity: sha512-OzGSZpRTouDFidzZx7IpqStoVThBz5ympBI6iowh1xkfbVRsRjKXaHIjCuB3TAkfTNy4V7lm2Pmzex7Dn4Fq1w==} + '@applitools/core@4.31.0': + resolution: {integrity: sha512-kdXLPRG7L8TIoQPMScwHBYp+WI1VoVRPGufhdAsYeqFn4owILi5XFSAEKZ33ppVwfl46Xc6Wmz5RzOYARx3BjQ==} engines: {node: '>=12.13.0'} hasBin: true @@ -659,37 +661,24 @@ packages: resolution: {integrity: sha512-rH3aq/dkTweEUgS/MKuthD79CZDqpQVJlqmxqVxLZVAzbeFxYdTG/gnfG0zj6YJ025jzcPH2ktdW16Rl3QLutg==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - '@applitools/dom-capture@11.4.0': - resolution: {integrity: sha512-8E5rjsuivGWx1TtZsjhwo32gF02dzwqvHf8NaN2fK+DTyomUvrh4QRD0ufUlKNeXIJhlVVgzjOkdfKjDj5pT/A==} + '@applitools/dom-capture@11.5.4': + resolution: {integrity: sha512-3n2wLLsXpGGiYrSkHnwgFsTXZntvw5MXtt6n0Kbpyi3mqBgdZ3yPt/9tJ+pQZDX/xe9mNXUVClHXmWmVCrGPCA==} engines: {node: '>=12.13.0'} - '@applitools/dom-capture@11.5.0': - resolution: {integrity: sha512-frsa+nztrxN0YyfnFNQ3fxs6Q8A93YmtqWw7v2rywv2vGk0bo1VzobFbfIFvwHEwk+oghobV+w94NdYk9jPVZA==} + '@applitools/dom-shared@1.0.16': + resolution: {integrity: sha512-P0JA5mq1f8rIi/xbh2+gCsEvv1CGenf0sGrC2UxXjmaFRpgoVS9BfpNg5aZyFJ9OPoi4qRMi9LCGsFiqZNNcTQ==} engines: {node: '>=12.13.0'} - '@applitools/dom-shared@1.0.15': - resolution: {integrity: sha512-XN77SPfzXriU1x6gTcublSe0yUJHxlYwHesOnWQov2dMVfHx7y3qp0yrjdVC7LO2bDIJIzDlPJRhfg2otlbxig==} + '@applitools/dom-snapshot@4.11.15': + resolution: {integrity: sha512-JsJ/2vTOywsxcwUMe9inGkHTBpMrnI09bCB7SJGRlbM4au4JAtMsyF5WnrbvrMlxr/kbe/BsJUDndswlkM9Duw==} engines: {node: '>=12.13.0'} - '@applitools/dom-snapshot@4.11.3': - resolution: {integrity: sha512-jdEWSbEOmD9LbzashTQ/YzYDdIKrhSBwNqNTIk8qjV8YtbQfZ+NtgCtW7nOsbknAMk95CfYEUV3R1rxCXs1XfA==} + '@applitools/driver@1.20.4': + resolution: {integrity: sha512-Lm1x6Bw66nqu7xtzRQoC3+DQb1PjZiC1DiyXi7L0YzR2c/JhQCyZ1uWWb8NrrLKctwv3SgohXZMaV90TIpAdQw==} engines: {node: '>=12.13.0'} - '@applitools/driver@1.19.0': - resolution: {integrity: sha512-fXNvT08/uR87Wi2nNURT9YXJYV/2ZG6DnKutk3jxsp29uNJXaHfruMXoA0p6guAWzo9gw592K0GKLTn1BB/3YA==} - engines: {node: '>=12.13.0'} - - '@applitools/driver@1.19.1': - resolution: {integrity: sha512-SWTOtdALeqrmaYo+gzeWupB3C4yDCNwEq/RFykW7k41yFg4145B/BgmubZjteDAr6W+4vmE8vXtbVWHNGPuFfA==} - engines: {node: '>=12.13.0'} - - '@applitools/ec-client@1.9.4': - resolution: {integrity: sha512-PFuvt/XrJxzoy/fXeLTq+bE5+0mitV0whi4MUWZAnESIvHj3k3+oUUTZxPmRQEiR1zzxGvN7ar3sMQfiW+houA==} - engines: {node: '>=12.13.0'} - hasBin: true - - '@applitools/ec-client@1.9.5': - resolution: {integrity: sha512-B2HvmSq5wKjszbV8y1b5jdMdQzR1izQ3DK3Egc/Y4ye/TXvuzsx6/t7/iV5TwLvGoS2jPWOr/iTgl3cCJjXUIg==} + '@applitools/ec-client@1.10.3': + resolution: {integrity: sha512-Gu+vR8uQjwYbZDtLLcWpSRwJtz6b20m/TG9ih0p7FymVRKIT82Bk2u3BNja+7IbgAESMUYmrdl7gMm804OPo4Q==} engines: {node: '>=12.13.0'} hasBin: true @@ -706,168 +695,124 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - '@applitools/eyes-cypress@3.44.9': - resolution: {integrity: sha512-hWwo02uMeFkwU7bG2396DqKrOsjMxAMowaIH8okP09ZPgK+nSJbnIHM111nj+4+eLKx4WAyDa9JljILuXZ4x9A==} + '@applitools/eyes-cypress@3.50.0': + resolution: {integrity: sha512-ZBtF5+rHyyO0hGjIzfRQJKg+uEvbAxfzW5JhoviYX9eN668xUCu6veokxnn+7E5Zv74vzgzGl6Jp6g9SnEylaw==} engines: {node: '>=12.13.0'} hasBin: true - '@applitools/eyes@1.22.2': - resolution: {integrity: sha512-72mMjSYjfBHAdVqyubtLWAKgK3f/lcFZcyTh8UacCZv+PJ+8+/JAC+ovloUOV1HHOtgcR+ocPdw3VJsxDZZuig==} + '@applitools/eyes@1.32.0': + resolution: {integrity: sha512-MrMrLn+9/8lFZJTpnMUQnKBQMdMU/LpHHesFg0obyYRhD3us7o/PdqlBCGtV6o6UP8yodXW/6Ud9n4WH+XFM+g==} engines: {node: '>=12.13.0'} + hasBin: true '@applitools/functional-commons@1.6.0': resolution: {integrity: sha512-fwiF0CbeYHDEOTD/NKaFgaI8LvRcGYG2GaJJiRwcedKko16sQ8F3TK5wXfj2Ytjf+8gjwHwsEEX550z3yvDWxA==} engines: {node: '>=8.0.0'} - '@applitools/image@1.1.13': - resolution: {integrity: sha512-oeSnsTJxhD6juNlWufeWsiWV9dbS0a3OL75/r/Bo2yauAi6AsRMDeh+McXJfYlf1NVZbrVG0+vNXn52mDVEIyw==} + '@applitools/image@1.1.16': + resolution: {integrity: sha512-vwTDcyzW7OT/PQfVFc1v2aSb48G4I4fzqmRa83wKI3YKt4HzuYYkzFS9OcoN8pSdQ5Kt8+if5gSfSxnYDhtZbw==} engines: {node: '>=12.13.0'} '@applitools/logger@1.1.53': resolution: {integrity: sha512-4mlzYxc0MgM3WIxEwKqIjn9W7G7kMtQc2bFRxozViKOXypTfr72j8iODs88wcetP0GsXtplhZQ5/6aZN5WY9ug==} engines: {node: '>=12.13.0'} - '@applitools/logger@2.0.18': - resolution: {integrity: sha512-d54OTreCXE+G9qUxiPDHHBzwof3EnXPrADdZ7ToB9AoI+kOgs/v6wjMx0ghAoXyyOiLvlvJnmdHSyJssRdv5GA==} + '@applitools/logger@2.1.0': + resolution: {integrity: sha512-/7wYHRyte8ZoUNGis3lVeEjBdRHda2AcykOr4+3RM2TB8APO4qIPjDSEE5TDramUKzjKC+K4BSUAL39pn8w13w==} engines: {node: '>=12.13.0'} - '@applitools/nml-client@1.8.10': - resolution: {integrity: sha512-avoZnD39XrWJg5x7PiFv+58YEDLbWPRIb+dHrH9LVD1HcQC8tmht2KfVLnTJLJtJgRQojqZh5H8rmplfT46t8w==} + '@applitools/nml-client@1.8.24': + resolution: {integrity: sha512-BV6qONX/2FmFr2j2vRAK3F4irRvVwzYfoklpNataRSSK5ZW6Q+XVSI2uHjD1vVce4Haq7ECeVUkUFMpff1zkjw==} engines: {node: '>=12.13.0'} - '@applitools/nml-client@1.8.11': - resolution: {integrity: sha512-Zoyjo9slRbvCGb/ldScNxTvRig5nuUdogXeiyV8jcKUocqb0LLfZZyNRRHnA0bmSk31mjqfB8HLG1wgBIKZ/eQ==} - engines: {node: '>=12.13.0'} - - '@applitools/req@1.7.2': - resolution: {integrity: sha512-L0tjPFGEJFAEGaifqtmtCghjkG7M0wnEwfzbHi6O+ThtTCbg4JSDRTaNvA+PLXQoS0mFvajG40/t5a4EgAG7QQ==} + '@applitools/req@1.7.7': + resolution: {integrity: sha512-kqEu6TKdPe++53/QDOVWmqYqd2jZ0zoZ/FPPsPKvcHzIY4DFx0W/BhLl0KYXFYWKdE1slnkyyQfCqhKOP0umWw==} engines: {node: '>=16.13.0'} - '@applitools/screenshoter@3.8.36': - resolution: {integrity: sha512-bzl+fs3c4L6J2t/PELxmoMGc40ZvjaExD0PMM6GvbNp3uPbDtGS348DC1ZYsSl481OxTae/uiO/iVOQP4bNZCQ==} + '@applitools/screenshoter@3.10.5': + resolution: {integrity: sha512-eeWae+HSUd/+J8pU0B7QdINR21sF/NHKEXW9duyOHd+GiGNsZxoWJGq1lVXxVx5QKfyrc87Gbbt3b5O+WOyIYg==} engines: {node: '>=12.13.0'} - '@applitools/screenshoter@3.8.37': - resolution: {integrity: sha512-il7clR9bd3E2QzjWfR/JafmUyrykvQN8EzqaFG4rfNO5IUYYP/K2rYGAbWykk220weI3r9S09QrSDWVHwNJgHw==} + '@applitools/snippets@2.6.4': + resolution: {integrity: sha512-J9X2uqtt1LQNJsQy9X+1smXKlalKpLJpNRAIvepqGZaVOwG5eKxF7chMZSiztv2jVbZCJj7DRLZdfEueB7xjcA==} engines: {node: '>=12.13.0'} - '@applitools/snippets@2.4.27': - resolution: {integrity: sha512-n6ckwbXWyJ+/DoV1T6bRiGXITgTgjayV0j4AzHiBx+HF3JdzygxIkWtn7yl1dJfzeqEGyrtBK6Sq1tTG2GoQcA==} + '@applitools/socket@1.2.1': + resolution: {integrity: sha512-OGMVkfOQBrJviVc1K4+kZMExMBTAMA5ZtF7DGrn7pqJQTAVTI7VL9ZXUELwiburMJS6ILNXOcBvi4z9l9adCig==} engines: {node: '>=12.13.0'} - '@applitools/snippets@2.5.0': - resolution: {integrity: sha512-7PoDf2Xub68q7bfEcSxzRIOsK+QPUEzCKO5X3YKEq7/y55G1bFalZiY+V0TZEgIu4SSbq8BmCos9798w1J31uA==} - engines: {node: '>=12.13.0'} - - '@applitools/socket@1.1.18': - resolution: {integrity: sha512-EMI/MMfVH38ucuZhFWOTUR8cPvuoP9b+xi5yBJF8uLlJjxQEmGnvm+Pm3s9o3mfxQzDRddYGtpIo3TTZhMVZdQ==} - engines: {node: '>=12.13.0'} - - '@applitools/spec-driver-webdriver@1.1.12': - resolution: {integrity: sha512-r6PobChadcc3couBtnf3pTunL7Vi00cNcg2l1rTr0ApSEfJ1m1DdTcX8bgXU1jDzJ2QhCn7OoqsziTajQdWmoA==} + '@applitools/spec-driver-webdriver@1.1.25': + resolution: {integrity: sha512-grS0B/ityKqjCac2vJSVpvFnLyyRp5KODXxOQBjmPUGDeOd/aPrw+vdXdbEJOvMZV0oyOMenFLTJ6kT2WxgPMw==} engines: {node: '>=12.13.0'} peerDependencies: webdriver: '>=6.0.0' - '@applitools/spec-driver-webdriver@1.1.13': - resolution: {integrity: sha512-LcX4mbXdptPjcgRifUvV17pANVhjMiSEYkfZkP0G/ZuPi1czQvgzsSkjeYTKuKJJYLaP19h4CFNjNttD3mSsDQ==} - engines: {node: '>=12.13.0'} - peerDependencies: - webdriver: '>=6.0.0' - - '@applitools/tunnel-client@1.5.8': - resolution: {integrity: sha512-SJByl2/I0NftENw5NvW+nHN+Vq64b0aeTsdCTYKhDhJBWqPEkGYwRR5ziYpk8MWYsL2hWcPUfg/S/hS+M3zmDg==} + '@applitools/tunnel-client@1.6.1': + resolution: {integrity: sha512-XFt93+XELoLX8RMuDkSvyNwaXiWRbe8N9/qSoETo3ykcGgKVuvraoIck1yKlfIShS5yA+bBHWDn0LXQtpM72/g==} engines: {node: '>=12.13.0'} hasBin: true - '@applitools/ufg-client@1.12.3': - resolution: {integrity: sha512-bSxLqxzAuc+ldum/nGoiM/iCcf97uku3bABxB90ilzUYT1DOu9vEGmaPxxGLDc+GRRVYlOYGNdIJF+DQP4dFTg==} + '@applitools/ufg-client@1.16.3': + resolution: {integrity: sha512-7u8q2gOzztfggjo9HuaJxP3Z6Pfn1MOT1l5HznC+w0meet3TrL50HmL2AsR6OTOZRJtGYqMIY7si4VsXFOCZHQ==} engines: {node: '>=12.13.0'} '@applitools/utils@1.3.36': resolution: {integrity: sha512-eROEssh7wIW+V87PvLiHI2hUPxqoBxXFMRx3+z5qOZqXUPSR1Uz7EMFwxZcDDR7T6C3O3UDckB2aVB5fJAg5JA==} engines: {node: '>=12.13.0'} - '@applitools/utils@1.7.4': - resolution: {integrity: sha512-qgJqx2yjlJBf79YyFehf1nSp4AXOdzJn3POQyg8CMWV0YH6HsjAfJjYaNrbXFcGYCSpPEJGhGehxC7GVKHX3YA==} + '@applitools/utils@1.7.7': + resolution: {integrity: sha512-4YQc/FGYmA4Jx8vRNRI6YOE8oa7tOWhCik3b1OV3RQ6OkAY5EpVRF8ruiFpX+9BIjZ2V5AdVpsJacYOIiCHNMg==} engines: {node: '>=12.13.0'} - '@argos-ci/api-client@0.5.0': - resolution: {integrity: sha512-syJJmvLtJKQYXDmGYRb+ZKpzpSk/dReqhZZm2tnWn7ThxHaJRJ7Wu3J5nqDpCP3LxoYCVfvV/dmfoJO0v8+PbQ==} + '@argos-ci/api-client@0.7.2': + resolution: {integrity: sha512-ojKOhb4CXugJcHNzGH4Gp7G6gqqBEbhO2B5FNfU/ieBCDsYY+urE0hQ5L7+4TfmMoKb/xVpvtu2mQdEpMt4JVg==} engines: {node: '>=18.0.0'} - '@argos-ci/browser@2.1.4': - resolution: {integrity: sha512-GursnbWL01wN92hRgEsa0c55ih9Sp6qGeYIXFWP4o42FDzm98LbxIy2e1WS+ezP+gBwsSBEMBTGcGCSSmVzacg==} + '@argos-ci/browser@2.2.2': + resolution: {integrity: sha512-pxoUKAVA/3whUKZU1BV93vI4JBYD6utKOd8yfMdZk70kRBL+ZEY+wIPDgQCXiDk02/od64xTn3YiD+N20V45RA==} engines: {node: '>=18.0.0'} - '@argos-ci/core@2.8.1': - resolution: {integrity: sha512-5ygruMnfQ3OY6LvywnwTycZFg6oTG5UYvPCVdwQiOh+8FgUZUyJge7QBVfeWW+qC0UXFMo+f3eTQ5YFvTwc0ZA==} + '@argos-ci/core@3.0.0': + resolution: {integrity: sha512-00xNAPwE8O7sKCgn9oeiKGE0cyZYuC3ouCxN+DBAMqZLIG+8zoUZUuB+ZJsKwjMHA9un/bzFX9l8z2Z8rgkQ7w==} engines: {node: '>=18.0.0'} - '@argos-ci/cypress@2.2.2': - resolution: {integrity: sha512-lwXu6y5DcP4ufYQEom4JtHSHjIYul6+GB4pniC8S97mfXLYq6KITJD4JHbrnfIiQGuV1xNPIaBc4MWX+atFDuw==} + '@argos-ci/cypress@2.3.4': + resolution: {integrity: sha512-tIiLxJONGypBI5opsJEpwbvt7UVLQRqqniaRIlCJWRRZa5K5a/rJNZF15F5V5kF++5HAqSgI3odXibCFu7W6rA==} engines: {node: '>=18.0.0'} peerDependencies: cypress: ^12.0.0 || ^13.0.0 - '@argos-ci/util@2.1.1': - resolution: {integrity: sha512-UyACLQe9rvCPbo9muhrLte1AD75kQlcGBuecjmaotaF9MBMj+9Yz+TYs1jJrlLMgqowfIgbXjBYmkXRUn36tCg==} + '@argos-ci/util@2.2.2': + resolution: {integrity: sha512-MpKAz/3dMNjsUO49sEMYfw+qZFUrEeji8EmSbr0rgL8bw+Q7hIYNesRtEIQnFPub0FgX1/AV3sRZ9yqWTgGgUw==} engines: {node: '>=18.0.0'} - '@babel/code-frame@7.25.7': - resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} - engines: {node: '>=6.9.0'} + '@asamuzakjp/css-color@2.8.3': + resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==} '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.7': - resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.5': resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.7': - resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} - engines: {node: '>=6.9.0'} - '@babel/core@7.26.7': resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.7': - resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.26.5': resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.7': - resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} - engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.7': - resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.26.5': resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.7': - resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.25.9': resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} @@ -885,46 +830,24 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-member-expression-to-functions@7.25.7': - resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.25.9': resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.7': - resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.7': - resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.25.7': - resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} - engines: {node: '>=6.9.0'} - '@babel/helper-optimise-call-expression@7.25.9': resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.25.7': - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} - engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.26.5': resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} @@ -935,50 +858,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.7': - resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.26.5': resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.25.7': - resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.25.7': - resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} - engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.7': - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.7': - resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} @@ -987,23 +884,10 @@ packages: resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.7': - resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.26.7': resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.25.7': - resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.7': - resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.26.7': resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} engines: {node: '>=6.0.0'} @@ -1066,28 +950,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.26.0': resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.25.7': - resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.26.0': resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} engines: {node: '>=6.9.0'} @@ -1104,8 +972,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.7': - resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1152,8 +1020,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.7': - resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1302,12 +1170,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.25.7': - resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.26.3': resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} engines: {node: '>=6.9.0'} @@ -1446,8 +1308,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.25.7': - resolution: {integrity: sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==} + '@babel/plugin-transform-typescript@7.26.7': + resolution: {integrity: sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1476,12 +1338,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.25.7': - resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/preset-env@7.26.7': resolution: {integrity: sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==} engines: {node: '>=6.9.0'} @@ -1493,40 +1349,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.25.7': - resolution: {integrity: sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==} + '@babel/preset-typescript@7.26.0': + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.7': - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.26.7': resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.7': - resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} - engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.7': - resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.7': resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.7': - resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.7': resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} engines: {node: '>=6.9.0'} @@ -1538,14 +1378,14 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@braintree/sanitize-url@7.1.0': - resolution: {integrity: sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==} + '@braintree/sanitize-url@7.1.1': + resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} - '@changesets/apply-release-plan@7.0.5': - resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} + '@changesets/apply-release-plan@7.0.8': + resolution: {integrity: sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA==} - '@changesets/assemble-release-plan@6.0.4': - resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} + '@changesets/assemble-release-plan@6.0.5': + resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} @@ -1553,12 +1393,12 @@ packages: '@changesets/changelog-github@0.5.0': resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} - '@changesets/cli@2.27.9': - resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==} + '@changesets/cli@2.27.12': + resolution: {integrity: sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==} hasBin: true - '@changesets/config@3.0.3': - resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} + '@changesets/config@3.0.5': + resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} @@ -1569,14 +1409,14 @@ packages: '@changesets/get-github-info@0.6.0': resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} - '@changesets/get-release-plan@4.0.4': - resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} + '@changesets/get-release-plan@4.0.6': + resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@changesets/git@3.0.1': - resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} + '@changesets/git@3.0.2': + resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} @@ -1587,8 +1427,8 @@ packages: '@changesets/pre@2.0.1': resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - '@changesets/read@0.6.1': - resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} + '@changesets/read@0.6.2': + resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} '@changesets/should-skip-package@0.1.1': resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} @@ -1621,216 +1461,261 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@cspell/cspell-bundled-dicts@8.14.4': - resolution: {integrity: sha512-JHZOpCJzN6fPBapBOvoeMxZbr0ZA11ZAkwcqM4w0lKoacbi6TwK8GIYf66hHvwLmMeav75TNXWE6aPTvBLMMqA==} + '@cspell/cspell-bundled-dicts@8.17.3': + resolution: {integrity: sha512-6uOF726o3JnExAUKM20OJJXZo+Qf9Jt64nkVwnVXx7Upqr5I9Pb1npYPEAIpUA03SnWYmKwUIqhAmkwrN+bLPA==} engines: {node: '>=18'} - '@cspell/cspell-json-reporter@8.14.4': - resolution: {integrity: sha512-gJ6tQbGCNLyHS2iIimMg77as5MMAFv3sxU7W6tjLlZp8htiNZS7fS976g24WbT/hscsTT9Dd0sNHkpo8K3nvVw==} + '@cspell/cspell-json-reporter@8.17.3': + resolution: {integrity: sha512-RWSfyHOin/d9CqLjz00JMvPkag3yUSsQZr6G9BnCT5cMEO/ws8wQZzA54CNj/LAOccbknTX65SSroPPAtxs56w==} engines: {node: '>=18'} - '@cspell/cspell-pipe@8.14.4': - resolution: {integrity: sha512-CLLdouqfrQ4rqdQdPu0Oo+HHCU/oLYoEsK1nNPb28cZTFxnn0cuSPKB6AMPBJmMwdfJ6fMD0BCKNbEe1UNLHcw==} + '@cspell/cspell-pipe@8.17.3': + resolution: {integrity: sha512-DqqSWKt9NLWPGloYxZTpzUhgdW8ObMkZmOOF6TyqpJ4IbckEct8ULgskNorTNRlmmjLniaNgvg6JSHuYO3Urxw==} engines: {node: '>=18'} - '@cspell/cspell-resolver@8.14.4': - resolution: {integrity: sha512-s3uZyymJ04yn8+zlTp7Pt1WRSlAel6XVo+iZRxls3LSvIP819KK64DoyjCD2Uon0Vg9P/K7aAPt8GcxDcnJtgA==} + '@cspell/cspell-resolver@8.17.3': + resolution: {integrity: sha512-yQlVaIsWiax6RRuuacZs++kl6Y9rwH9ZkVlsG9fhdeCJ5Xf3WCW+vmX1chzhhKDzRr8CF9fsvb1uagd/5/bBYA==} engines: {node: '>=18'} - '@cspell/cspell-service-bus@8.14.4': - resolution: {integrity: sha512-i3UG+ep63akNsDXZrtGgICNF3MLBHtvKe/VOIH6+L+NYaAaVHqqQvOY9MdUwt1HXh8ElzfwfoRp36wc5aAvt6g==} + '@cspell/cspell-service-bus@8.17.3': + resolution: {integrity: sha512-CC3nob/Kbuesz5WTW+LjAHnDFXJrA49pW5ckmbufJxNnoAk7EJez/qr7/ELMTf6Fl3A5xZ776Lhq7738Hy/fmQ==} engines: {node: '>=18'} - '@cspell/cspell-types@8.14.4': - resolution: {integrity: sha512-VXwikqdHgjOVperVVCn2DOe8W3rPIswwZtMHfRYnagpzZo/TOntIjkXPJSfTtl/cFyx5DnCBsDH8ytKGlMeHkw==} + '@cspell/cspell-types@8.17.3': + resolution: {integrity: sha512-ozgeuSioX9z2wtlargfgdw3LKwDFAfm8gxu+xwNREvXiLsevb+lb7ZlY5/ay+MahqR5Hfs7XzYzBLTKL/ldn9g==} engines: {node: '>=18'} - '@cspell/dict-ada@4.0.2': - resolution: {integrity: sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==} + '@cspell/dict-ada@4.1.0': + resolution: {integrity: sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg==} - '@cspell/dict-aws@4.0.4': - resolution: {integrity: sha512-6AWI/Kkf+RcX/J81VX8+GKLeTgHWEr/OMhGk3dHQzWK66RaqDJCGDqi7494ghZKcBB7dGa3U5jcKw2FZHL/u3w==} + '@cspell/dict-al@1.1.0': + resolution: {integrity: sha512-PtNI1KLmYkELYltbzuoztBxfi11jcE9HXBHCpID2lou/J4VMYKJPNqe4ZjVzSI9NYbMnMnyG3gkbhIdx66VSXg==} - '@cspell/dict-bash@4.1.5': - resolution: {integrity: sha512-YGim/h7E2U5HCCb2ckNufT6/yyWygt9nSZ5C7qw6oOD3bygbObqD1+rlPor1JW+YyO+3GwTIHE70uKEEU6VZYw==} + '@cspell/dict-aws@4.0.9': + resolution: {integrity: sha512-bDYdnnJGwSkIZ4gzrauu7qzOs/ZAY/FnU4k11LgdMI8BhwMfsbsy2EI1iS+sD/BI5ZnNT9kU5YR3WADeNOmhRg==} - '@cspell/dict-companies@3.1.4': - resolution: {integrity: sha512-y9e0amzEK36EiiKx3VAA+SHQJPpf2Qv5cCt5eTUSggpTkiFkCh6gRKQ97rVlrKh5GJrqinDwYIJtTsxuh2vy2Q==} + '@cspell/dict-bash@4.2.0': + resolution: {integrity: sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg==} - '@cspell/dict-cpp@5.1.19': - resolution: {integrity: sha512-i/odUPNFLdqWisOktu6c4qjUR4k+P9Al2RCri3Wso9EFblp53xt/5jIUdGMdDDVQGqX7s/KLtdqNxNKqP3/d+w==} + '@cspell/dict-companies@3.1.13': + resolution: {integrity: sha512-EAaFMxnSG4eQKup9D81EnWAYIzorLWG7b7Zzf+Suu0bVeFBpCYESss/EWtnmb5ZZNfKAGxtoMqfL3vRfyJERIQ==} - '@cspell/dict-cryptocurrencies@5.0.0': - resolution: {integrity: sha512-Z4ARIw5+bvmShL+4ZrhDzGhnc9znaAGHOEMaB/GURdS/jdoreEDY34wdN0NtdLHDO5KO7GduZnZyqGdRoiSmYA==} + '@cspell/dict-cpp@6.0.3': + resolution: {integrity: sha512-OFrVXdxCeGKnon36Pe3yFjBuY4kzzEwWFf3vDz+cJTodZDkjFkBifQeTtt5YfimgF8cfAJZXkBCsxjipAgmAiw==} - '@cspell/dict-csharp@4.0.2': - resolution: {integrity: sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==} + '@cspell/dict-cryptocurrencies@5.0.4': + resolution: {integrity: sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag==} - '@cspell/dict-css@4.0.13': - resolution: {integrity: sha512-WfOQkqlAJTo8eIQeztaH0N0P+iF5hsJVKFuhy4jmARPISy8Efcv8QXk2/IVbmjJH0/ZV7dKRdnY5JFVXuVz37g==} + '@cspell/dict-csharp@4.0.6': + resolution: {integrity: sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw==} - '@cspell/dict-dart@2.2.1': - resolution: {integrity: sha512-yriKm7QkoPx3JPSSOcw6iX9gOb2N50bOo/wqWviqPYbhpMRh9Xiv6dkUy3+ot+21GuShZazO8X6U5+Vw67XEwg==} + '@cspell/dict-css@4.0.17': + resolution: {integrity: sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==} - '@cspell/dict-data-science@2.0.2': - resolution: {integrity: sha512-VwAck6OZQVqrscKyOrvllixIugIPF+Q6YoFNvXZCPhHGtNyOAVraD3S7kOgPYBdUjgno4QbdMWm92BUPqL1QjQ==} + '@cspell/dict-dart@2.3.0': + resolution: {integrity: sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg==} - '@cspell/dict-django@4.1.0': - resolution: {integrity: sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==} + '@cspell/dict-data-science@2.0.7': + resolution: {integrity: sha512-XhAkK+nSW6zmrnWzusmZ1BpYLc62AWYHZc2p17u4nE2Z9XG5DleG55PCZxXQTKz90pmwlhFM9AfpkJsYaBWATA==} - '@cspell/dict-docker@1.1.7': - resolution: {integrity: sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A==} + '@cspell/dict-django@4.1.4': + resolution: {integrity: sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==} - '@cspell/dict-dotnet@5.0.5': - resolution: {integrity: sha512-gjg0L97ee146wX47dnA698cHm85e7EOpf9mVrJD8DmEaqoo/k1oPy2g7c7LgKxK9XnqwoXxhLNnngPrwXOoEtQ==} + '@cspell/dict-docker@1.1.12': + resolution: {integrity: sha512-6d25ZPBnYZaT9D9An/x6g/4mk542R8bR3ipnby3QFCxnfdd6xaWiTcwDPsCgwN2aQZIQ1jX/fil9KmBEqIK/qA==} - '@cspell/dict-elixir@4.0.3': - resolution: {integrity: sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==} + '@cspell/dict-dotnet@5.0.9': + resolution: {integrity: sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==} - '@cspell/dict-en-common-misspellings@2.0.4': - resolution: {integrity: sha512-lvOiRjV/FG4pAGZL3PN2GCVHSTCE92cwhfLGGkOsQtxSmef6WCHfHwp9auafkBlX0yFQSKDfq6/TlpQbjbJBtQ==} + '@cspell/dict-elixir@4.0.7': + resolution: {integrity: sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA==} + + '@cspell/dict-en-common-misspellings@2.0.9': + resolution: {integrity: sha512-O/jAr1VNtuyCFckbTmpeEf43ZFWVD9cJFvWaA6rO2IVmLirJViHWJUyBZOuQcesSplzEIw80MAYmnK06/MDWXQ==} '@cspell/dict-en-gb@1.1.33': resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} - '@cspell/dict-en_us@4.3.23': - resolution: {integrity: sha512-l0SoEQBsi3zDSl3OuL4/apBkxjuj4hLIg/oy6+gZ7LWh03rKdF6VNtSZNXWAmMY+pmb1cGA3ouleTiJIglbsIg==} + '@cspell/dict-en_us@4.3.30': + resolution: {integrity: sha512-p0G5fByj5fUnMyFUlkN3kaqE3nuQkqpYV47Gn9n8k2TszsdLY55xj9UoFE4YIcjOiyU1bR/YDJ5daiPMYXTJ/A==} - '@cspell/dict-filetypes@3.0.4': - resolution: {integrity: sha512-IBi8eIVdykoGgIv5wQhOURi5lmCNJq0we6DvqKoPQJHthXbgsuO1qrHSiUVydMiQl/XvcnUWTMeAlVUlUClnVg==} + '@cspell/dict-filetypes@3.0.10': + resolution: {integrity: sha512-JEN3627joBVtpa1yfkdN9vz1Z129PoKGHBKjXCEziJvf2Zt1LeULWYYYg/O6pzRR4yzRa5YbXDTuyrN7vX7DFg==} - '@cspell/dict-flutter@1.0.0': - resolution: {integrity: sha512-W7k1VIc4KeV8BjEBxpA3cqpzbDWjfb7oXkEb0LecBCBp5Z7kcfnjT1YVotTx/U9PGyAOBhDaEdgZACVGNQhayw==} + '@cspell/dict-flutter@1.1.0': + resolution: {integrity: sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA==} - '@cspell/dict-fonts@4.0.0': - resolution: {integrity: sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q==} + '@cspell/dict-fonts@4.0.4': + resolution: {integrity: sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg==} - '@cspell/dict-fsharp@1.0.1': - resolution: {integrity: sha512-23xyPcD+j+NnqOjRHgW3IU7Li912SX9wmeefcY0QxukbAxJ/vAN4rBpjSwwYZeQPAn3fxdfdNZs03fg+UM+4yQ==} + '@cspell/dict-fsharp@1.1.0': + resolution: {integrity: sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw==} - '@cspell/dict-fullstack@3.2.0': - resolution: {integrity: sha512-sIGQwU6G3rLTo+nx0GKyirR5dQSFeTIzFTOrURw51ISf+jKG9a3OmvsVtc2OANfvEAOLOC9Wfd8WYhmsO8KRDQ==} + '@cspell/dict-fullstack@3.2.3': + resolution: {integrity: sha512-62PbndIyQPH11mAv0PyiyT0vbwD0AXEocPpHlCHzfb5v9SspzCCbzQ/LIBiFmyRa+q5LMW35CnSVu6OXdT+LKg==} - '@cspell/dict-gaming-terms@1.0.5': - resolution: {integrity: sha512-C3riccZDD3d9caJQQs1+MPfrUrQ+0KHdlj9iUR1QD92FgTOF6UxoBpvHUUZ9YSezslcmpFQK4xQQ5FUGS7uWfw==} + '@cspell/dict-gaming-terms@1.1.0': + resolution: {integrity: sha512-46AnDs9XkgJ2f1Sqol1WgfJ8gOqp60fojpc9Wxch7x+BA63g4JfMV5/M5x0sI0TLlLY8EBSglcr8wQF/7C80AQ==} - '@cspell/dict-git@3.0.0': - resolution: {integrity: sha512-simGS/lIiXbEaqJu9E2VPoYW1OTC2xrwPPXNXFMa2uo/50av56qOuaxDrZ5eH1LidFXwoc8HROCHYeKoNrDLSw==} + '@cspell/dict-git@3.0.4': + resolution: {integrity: sha512-C44M+m56rYn6QCsLbiKiedyPTMZxlDdEYAsPwwlL5bhMDDzXZ3Ic8OCQIhMbiunhCOJJT+er4URmOmM+sllnjg==} - '@cspell/dict-golang@6.0.13': - resolution: {integrity: sha512-uBUWi+AjFpluB6qF0rsC1gGyooqXeKPUdWHSmSXW/DCnS5PBSjRW6VWWp8efc1Fanob0QJxiZiYlc4U7oxuG6Q==} + '@cspell/dict-golang@6.0.18': + resolution: {integrity: sha512-Mt+7NwfodDwUk7423DdaQa0YaA+4UoV3XSxQwZioqjpFBCuxfvvv4l80MxCTAAbK6duGj0uHbGTwpv8fyKYPKg==} - '@cspell/dict-google@1.0.1': - resolution: {integrity: sha512-dQr4M3n95uOhtloNSgB9tYYGXGGEGEykkFyRtfcp5pFuEecYUa0BSgtlGKx9RXVtJtKgR+yFT/a5uQSlt8WjqQ==} + '@cspell/dict-google@1.0.8': + resolution: {integrity: sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A==} - '@cspell/dict-haskell@4.0.1': - resolution: {integrity: sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==} + '@cspell/dict-haskell@4.0.5': + resolution: {integrity: sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ==} - '@cspell/dict-html-symbol-entities@4.0.0': - resolution: {integrity: sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==} + '@cspell/dict-html-symbol-entities@4.0.3': + resolution: {integrity: sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==} - '@cspell/dict-html@4.0.6': - resolution: {integrity: sha512-cLWHfuOhE4wqwC12up6Doxo2u1xxVhX1A8zriR4CUD+osFQzUIcBK1ykNXppga+rt1WyypaJdTU2eV6OpzYrgQ==} + '@cspell/dict-html@4.0.11': + resolution: {integrity: sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==} - '@cspell/dict-java@5.0.7': - resolution: {integrity: sha512-ejQ9iJXYIq7R09BScU2y5OUGrSqwcD+J5mHFOKbduuQ5s/Eh/duz45KOzykeMLI6KHPVxhBKpUPBWIsfewECpQ==} + '@cspell/dict-java@5.0.11': + resolution: {integrity: sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w==} - '@cspell/dict-julia@1.0.1': - resolution: {integrity: sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ==} + '@cspell/dict-julia@1.1.0': + resolution: {integrity: sha512-CPUiesiXwy3HRoBR3joUseTZ9giFPCydSKu2rkh6I2nVjXnl5vFHzOMLXpbF4HQ1tH2CNfnDbUndxD+I+7eL9w==} - '@cspell/dict-k8s@1.0.6': - resolution: {integrity: sha512-srhVDtwrd799uxMpsPOQqeDJY+gEocgZpoK06EFrb4GRYGhv7lXo9Fb+xQMyQytzOW9dw4DNOEck++nacDuymg==} + '@cspell/dict-k8s@1.0.10': + resolution: {integrity: sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==} - '@cspell/dict-latex@4.0.0': - resolution: {integrity: sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==} + '@cspell/dict-kotlin@1.1.0': + resolution: {integrity: sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ==} - '@cspell/dict-lorem-ipsum@4.0.0': - resolution: {integrity: sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw==} + '@cspell/dict-latex@4.0.3': + resolution: {integrity: sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw==} - '@cspell/dict-lua@4.0.3': - resolution: {integrity: sha512-lDHKjsrrbqPaea13+G9s0rtXjMO06gPXPYRjRYawbNmo4E/e3XFfVzeci3OQDQNDmf2cPOwt9Ef5lu2lDmwfJg==} + '@cspell/dict-lorem-ipsum@4.0.4': + resolution: {integrity: sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw==} - '@cspell/dict-makefile@1.0.0': - resolution: {integrity: sha512-3W9tHPcSbJa6s0bcqWo6VisEDTSN5zOtDbnPabF7rbyjRpNo0uHXHRJQF8gAbFzoTzBBhgkTmrfSiuyQm7vBUQ==} + '@cspell/dict-lua@4.0.7': + resolution: {integrity: sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q==} - '@cspell/dict-monkeyc@1.0.6': - resolution: {integrity: sha512-oO8ZDu/FtZ55aq9Mb67HtaCnsLn59xvhO/t2mLLTHAp667hJFxpp7bCtr2zOrR1NELzFXmKln/2lw/PvxMSvrA==} + '@cspell/dict-makefile@1.0.4': + resolution: {integrity: sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw==} - '@cspell/dict-node@5.0.1': - resolution: {integrity: sha512-lax/jGz9h3Dv83v8LHa5G0bf6wm8YVRMzbjJPG/9rp7cAGPtdrga+XANFq+B7bY5+jiSA3zvj10LUFCFjnnCCg==} + '@cspell/dict-markdown@2.0.9': + resolution: {integrity: sha512-j2e6Eg18BlTb1mMP1DkyRFMM/FLS7qiZjltpURzDckB57zDZbUyskOFdl4VX7jItZZEeY0fe22bSPOycgS1Z5A==} + peerDependencies: + '@cspell/dict-css': ^4.0.17 + '@cspell/dict-html': ^4.0.11 + '@cspell/dict-html-symbol-entities': ^4.0.3 + '@cspell/dict-typescript': ^3.2.0 - '@cspell/dict-npm@5.1.5': - resolution: {integrity: sha512-oAOGWuJYU3DlO+cAsStKMWN8YEkBue25cRC9EwdiL5Z84nchU20UIoYrLfIQejMlZca+1GyrNeyxRAgn4KiivA==} + '@cspell/dict-monkeyc@1.0.10': + resolution: {integrity: sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw==} - '@cspell/dict-php@4.0.10': - resolution: {integrity: sha512-NfTZdp6kcZDF1PvgQ6cY0zE4FUO5rSwNmBH/iwCBuaLfJAFQ97rgjxo+D2bic4CFwNjyHutnHPtjJBRANO5XQw==} + '@cspell/dict-node@5.0.6': + resolution: {integrity: sha512-CEbhPCpxGvRNByGolSBTrXXW2rJA4bGqZuTx1KKO85mwR6aadeOmUE7xf/8jiCkXSy+qvr9aJeh+jlfXcsrziQ==} - '@cspell/dict-powershell@5.0.10': - resolution: {integrity: sha512-U4H0zm94sNK+YP7jSFb7xb160XLf2dKIPVt5sOYctKlEyR9M16sP8FHbyWV2Yp1YtxXugoNdeCm2vwGEDAd8sg==} + '@cspell/dict-npm@5.1.24': + resolution: {integrity: sha512-yAyyHetElLR236sqWQkBtiLbzCGexV5zzLMHyQPptKQQK88BTQR5f9wXW2EtSgJw/4gUchpSWQWxMlkIfK/iQQ==} - '@cspell/dict-public-licenses@2.0.8': - resolution: {integrity: sha512-Sup+tFS7cDV0fgpoKtUqEZ6+fA/H+XUgBiqQ/Fbs6vUE3WCjJHOIVsP+udHuyMH7iBfJ4UFYOYeORcY4EaKdMg==} + '@cspell/dict-php@4.0.14': + resolution: {integrity: sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==} - '@cspell/dict-python@4.2.8': - resolution: {integrity: sha512-4y5dynLiajvowhB3PqlcwJ2C4okK1y2Hombec1+TGcV9sUBfo8FYNw6VRFUUrpsxO+Ut/3ncIifdZS5/zAWi5w==} + '@cspell/dict-powershell@5.0.14': + resolution: {integrity: sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA==} - '@cspell/dict-r@2.0.1': - resolution: {integrity: sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==} + '@cspell/dict-public-licenses@2.0.13': + resolution: {integrity: sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ==} - '@cspell/dict-ruby@5.0.4': - resolution: {integrity: sha512-URw0jScj5pv8sKCVLNnde11qVCQR442rUpSd12u46Swl+5qBaSdnOUoCWQk419kd9/dpC6bB/3l4kOSY2fdYHw==} + '@cspell/dict-python@4.2.15': + resolution: {integrity: sha512-VNXhj0Eh+hdHN89MgyaoSAexBQKmYtJaMhucbMI7XmBs4pf8fuFFN3xugk51/A4TZJr8+RImdFFsGMOw+I4bDA==} - '@cspell/dict-rust@4.0.6': - resolution: {integrity: sha512-Buzy9PfLbdRPibSth8CV1D8ZsYqybo26yNIlAN+8ehU0pSBss0Jv4aleL4vKQ3FjouXeAC27rtEsLd7yaMZTog==} + '@cspell/dict-r@2.1.0': + resolution: {integrity: sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA==} - '@cspell/dict-scala@5.0.3': - resolution: {integrity: sha512-4yGb4AInT99rqprxVNT9TYb1YSpq58Owzq7zi3ZS5T0u899Y4VsxsBiOgHnQ/4W+ygi+sp+oqef8w8nABR2lkg==} + '@cspell/dict-ruby@5.0.7': + resolution: {integrity: sha512-4/d0hcoPzi5Alk0FmcyqlzFW9lQnZh9j07MJzPcyVO62nYJJAGKaPZL2o4qHeCS/od/ctJC5AHRdoUm0ktsw6Q==} - '@cspell/dict-software-terms@4.1.7': - resolution: {integrity: sha512-+fFTALseXszDN8/khonF1DpTcYzwyNqYxhATLakr7CUPtUCO1fCH4lidMtBN4UtPVpE6tbjc5D8tj51PJxEOcw==} + '@cspell/dict-rust@4.0.11': + resolution: {integrity: sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw==} - '@cspell/dict-sql@2.1.5': - resolution: {integrity: sha512-FmxanytHXss7GAWAXmgaxl3icTCW7YxlimyOSPNfm+njqeUDjw3kEv4mFNDDObBJv8Ec5AWCbUDkWIpkE3IpKg==} + '@cspell/dict-scala@5.0.7': + resolution: {integrity: sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA==} - '@cspell/dict-svelte@1.0.2': - resolution: {integrity: sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==} + '@cspell/dict-shell@1.1.0': + resolution: {integrity: sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==} - '@cspell/dict-swift@2.0.1': - resolution: {integrity: sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==} + '@cspell/dict-software-terms@4.2.4': + resolution: {integrity: sha512-GRkuaFfjFHPYynyRMuisKyE3gRiVK0REClRWfnH9+5iCs5TKDURsMpWJGNsgQ6N5jAKKrtWXVKjepkDHjMldjQ==} - '@cspell/dict-terraform@1.0.2': - resolution: {integrity: sha512-UZdJwWIpib2Rx02w6vtXTU3z+M/VMZU0F1dhSL3Ab9otQsFntT8U1CX7wBSqQCLg8bJiCfnUyVvMK3UBm3SR8A==} + '@cspell/dict-sql@2.2.0': + resolution: {integrity: sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==} - '@cspell/dict-typescript@3.1.6': - resolution: {integrity: sha512-1beC6O4P/j23VuxX+i0+F7XqPVc3hhiAzGJHEKqnWf5cWAXQtg0xz3xQJ5MvYx2a7iLaSa+lu7+05vG9UHyu9Q==} + '@cspell/dict-svelte@1.0.6': + resolution: {integrity: sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q==} - '@cspell/dict-vue@3.0.0': - resolution: {integrity: sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==} + '@cspell/dict-swift@2.0.5': + resolution: {integrity: sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==} - '@cspell/dynamic-import@8.14.4': - resolution: {integrity: sha512-GjKsBJvPXp4dYRqsMn7n1zpnKbnpfJnlKLOVeoFBh8fi4n06G50xYr+G25CWX1WT3WFaALAavvVICEUPrVsuqg==} + '@cspell/dict-terraform@1.1.0': + resolution: {integrity: sha512-G55pcUUxeXAhejstmD35B47SkFd4uqCQimc+CMgq8Nx0dr03guL2iMsz8faRWQGkCnGimX8S91rbOhDv9p/heg==} + + '@cspell/dict-typescript@3.2.0': + resolution: {integrity: sha512-Pk3zNePLT8qg51l0M4g1ISowYAEGxTuNfZlgkU5SvHa9Cu7x/BWoyYq9Fvc3kAyoisCjRPyvWF4uRYrPitPDFw==} + + '@cspell/dict-vue@3.0.4': + resolution: {integrity: sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==} + + '@cspell/dynamic-import@8.17.3': + resolution: {integrity: sha512-Kg6IJhGHPv+9OxpxaXUpcqgnHEOhMLRWHLyx7FADZ+CJyO4AVeWQfhpTRM6KXhzIl7dPlLG1g8JAQxaoy88KTw==} engines: {node: '>=18.0'} - '@cspell/eslint-plugin@8.14.4': - resolution: {integrity: sha512-Wv6Jkttp/rsEm1nadLFQrUrYg9nTWQFwJu47KO2cfWP39TeH0zXQpmyas1xNlcDx5QJ9JJw9urTT/iw2tsHeRA==} + '@cspell/eslint-plugin@8.17.3': + resolution: {integrity: sha512-jxumorVlfYrKujlooFP3csyuEYkyNljB5HFHAABvd/42kRyt1LQgt8yaZivlO6nl/B5fzn2wfRtjUp/Nhu97xA==} engines: {node: '>=18'} peerDependencies: eslint: ^7 || ^8 || ^9 - '@cspell/filetypes@8.14.4': - resolution: {integrity: sha512-qd68dD7xTA4Mnf/wjIKYz2SkiTBshIM+yszOUtLa06YJm0aocoNQ25FHXyYEQYm9NQXCYnRWWA02sFMGs8Sv/w==} + '@cspell/filetypes@8.17.3': + resolution: {integrity: sha512-UFqRmJPccOSo+RYP/jZ4cr0s7ni37GrvnNAg1H/qIIxfmBYsexTAmsNzMqxp1M31NeI1Cx3LL7PspPMT0ms+7w==} engines: {node: '>=18'} - '@cspell/strong-weak-map@8.14.4': - resolution: {integrity: sha512-Uyfck64TfVU24wAP3BLGQ5EsAfzIZiLfN90NhttpEM7GlOBmbGrEJd4hNOwfpYsE/TT80eGWQVPRTLr5SDbXFA==} + '@cspell/strong-weak-map@8.17.3': + resolution: {integrity: sha512-l/CaFc3CITI/dC+whEBZ05Om0KXR3V2whhVOWOBPIqA5lCjWAyvWWvmFD+CxWd0Hs6Qcb/YDnMyJW14aioXN4g==} engines: {node: '>=18'} - '@cspell/url@8.14.4': - resolution: {integrity: sha512-htHhNF8WrM/NfaLSWuTYw0NqVgFRVHYSyHlRT3i/Yv5xvErld8Gw7C6ldm+0TLjoGlUe6X1VV72JSir7+yLp/Q==} + '@cspell/url@8.17.3': + resolution: {integrity: sha512-gcsCz8g0qY94C8RXiAlUH/89n84Q9RSptP91XrvnLOT+Xva9Aibd7ywd5k9ameuf8Nagyl0ezB1MInZ30S9SRw==} engines: {node: '>=18.0'} - '@cypress/code-coverage@3.13.4': - resolution: {integrity: sha512-4Bne95y/Vkye9tfctyiKjYHirA/0LZq7Z5MiCrrT2mlyWfaOSnPeUHG84BdxuycgVOLzMFxqvc+uNQO5lupvTg==} + '@csstools/color-helpers@5.0.1': + resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.1': + resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-color-parser@3.0.7': + resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + + '@cypress/code-coverage@3.13.11': + resolution: {integrity: sha512-mX5MLnfIGwtd4pAEzTBMfwnQYAT/z8sINq4DA10DNhj8ZkF4/foSxosToFbtNkchTtZiKGrhWS+6LZL2qsi+bw==} peerDependencies: '@babel/core': ^7.0.1 '@babel/preset-env': ^7.0.0 @@ -1838,8 +1723,8 @@ packages: cypress: '*' webpack: ^4 || ^5 - '@cypress/request@3.0.5': - resolution: {integrity: sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==} + '@cypress/request@3.0.7': + resolution: {integrity: sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==} engines: {node: '>= 6'} '@cypress/webpack-preprocessor@6.0.2': @@ -1861,14 +1746,14 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@docsearch/css@3.6.2': - resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==} + '@docsearch/css@3.8.3': + resolution: {integrity: sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ==} - '@docsearch/js@3.6.2': - resolution: {integrity: sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==} + '@docsearch/js@3.8.3': + resolution: {integrity: sha512-CQsX1zeoPJIWxN3IGoDSWOqzRc0JsOE9Bclegf9llwjYN2rzzJF93zagGcT3uI3tF31oCqTuUOVGW/mVFb7arw==} - '@docsearch/react@3.6.2': - resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==} + '@docsearch/react@3.8.3': + resolution: {integrity: sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -1884,11 +1769,11 @@ packages: search-insights: optional: true - '@emnapi/runtime@1.3.0': - resolution: {integrity: sha512-XMBySMuNZs3DM96xcJmLW4EfGnf+uGmFNjzpehMjuX5PLB5j87ar2Zc4e3PVeZ3I5g3tYtAqskB28manlF69Zw==} + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - '@es-joy/jsdoccomment@0.48.0': - resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} + '@es-joy/jsdoccomment@0.49.0': + resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} engines: {node: '>=16'} '@esbuild/aix-ppc64@0.21.5': @@ -2173,38 +2058,38 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.18.0': - resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.6.0': - resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + '@eslint/core@0.10.0': + resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.12.0': - resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} + '@eslint/js@9.19.0': + resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.0': - resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + '@eslint/plugin-kit@0.2.5': + resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/ajv-compiler@3.6.0': @@ -2223,17 +2108,17 @@ packages: '@fastify/merge-json-schemas@0.1.1': resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.11': - resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@floating-ui/vue@1.1.5': - resolution: {integrity: sha512-ynL1p5Z+woPVSwgMGqeDrx6HrJfGIDzFyESFkyqJKilGW1+h/8yVY29Khn0LaU6wHBRwZ13ntG6reiHWK6jyzw==} + '@floating-ui/vue@1.1.6': + resolution: {integrity: sha512-XFlUzGHGv12zbgHNk5FN2mUB7ROul3oG2ENdTpWdE+qMFxyNxWSRmsoyhiEnpmabNm6WnUvR1OvJfUfN4ojC1A==} '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2259,12 +2144,12 @@ packages: peerDependencies: vue: ^3.2.0 - '@humanfs/core@0.19.0': - resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.5': - resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -2275,14 +2160,18 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@iconify-json/carbon@1.2.1': - resolution: {integrity: sha512-dIMY6OOY9LnwR3kOqAtfz4phGFG+KNfESEwSL6muCprBelSlSPpRXtdqvEEO/qWhkf5AJ9hWrOV3Egi5Z2IuKA==} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + + '@iconify-json/carbon@1.2.5': + resolution: {integrity: sha512-aI3TEzOrUDGhs74zIT3ym/ZQBUEziyu8JifntX2Hb4siVzsP5sQ/QEfVdmcCUj37kQUYT3TYBSeAw2vTfCJx9w==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.1.33': - resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} + '@iconify/utils@2.2.1': + resolution: {integrity: sha512-0/7J7hk4PqXmxo5PDBDxmnecw5PxklZJfNjIVG9FM0mEfVrvfudS22rYWsqVk6gR3UJ/mSYS90X4R3znXnqfNA==} '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} @@ -2467,10 +2356,6 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -2589,15 +2474,6 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 - '@rollup/pluginutils@5.1.2': - resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} @@ -2607,198 +2483,124 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.24.0': - resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + '@rollup/rollup-android-arm-eabi@4.32.1': + resolution: {integrity: sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.32.0': - resolution: {integrity: sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.24.0': - resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + '@rollup/rollup-android-arm64@4.32.1': + resolution: {integrity: sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==} cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.32.0': - resolution: {integrity: sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.24.0': - resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + '@rollup/rollup-darwin-arm64@4.32.1': + resolution: {integrity: sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.32.0': - resolution: {integrity: sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.24.0': - resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + '@rollup/rollup-darwin-x64@4.32.1': + resolution: {integrity: sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==} cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.32.0': - resolution: {integrity: sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.32.0': - resolution: {integrity: sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==} + '@rollup/rollup-freebsd-arm64@4.32.1': + resolution: {integrity: sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.32.0': - resolution: {integrity: sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==} + '@rollup/rollup-freebsd-x64@4.32.1': + resolution: {integrity: sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': - resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + '@rollup/rollup-linux-arm-gnueabihf@4.32.1': + resolution: {integrity: sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': - resolution: {integrity: sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==} + '@rollup/rollup-linux-arm-musleabihf@4.32.1': + resolution: {integrity: sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.24.0': - resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.32.0': - resolution: {integrity: sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.24.0': - resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + '@rollup/rollup-linux-arm64-gnu@4.32.1': + resolution: {integrity: sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.32.0': - resolution: {integrity: sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==} + '@rollup/rollup-linux-arm64-musl@4.32.1': + resolution: {integrity: sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.24.0': - resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.32.0': - resolution: {integrity: sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': - resolution: {integrity: sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==} + '@rollup/rollup-linux-loongarch64-gnu@4.32.1': + resolution: {integrity: sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': - resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': + resolution: {integrity: sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': - resolution: {integrity: sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.24.0': - resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + '@rollup/rollup-linux-riscv64-gnu@4.32.1': + resolution: {integrity: sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.32.0': - resolution: {integrity: sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.24.0': - resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + '@rollup/rollup-linux-s390x-gnu@4.32.1': + resolution: {integrity: sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.32.0': - resolution: {integrity: sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.24.0': - resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + '@rollup/rollup-linux-x64-gnu@4.32.1': + resolution: {integrity: sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.32.0': - resolution: {integrity: sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==} + '@rollup/rollup-linux-x64-musl@4.32.1': + resolution: {integrity: sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.24.0': - resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.32.0': - resolution: {integrity: sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.24.0': - resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + '@rollup/rollup-win32-arm64-msvc@4.32.1': + resolution: {integrity: sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.32.0': - resolution: {integrity: sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.24.0': - resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + '@rollup/rollup-win32-ia32-msvc@4.32.1': + resolution: {integrity: sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.32.0': - resolution: {integrity: sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.24.0': - resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + '@rollup/rollup-win32-x64-msvc@4.32.1': + resolution: {integrity: sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.32.0': - resolution: {integrity: sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==} - cpu: [x64] - os: [win32] + '@shikijs/core@1.29.2': + resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - '@shikijs/core@1.22.0': - resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==} + '@shikijs/engine-javascript@1.29.2': + resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} - '@shikijs/engine-javascript@1.22.0': - resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==} + '@shikijs/engine-oniguruma@1.29.2': + resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - '@shikijs/engine-oniguruma@1.22.0': - resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==} + '@shikijs/langs@1.29.2': + resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - '@shikijs/transformers@1.22.0': - resolution: {integrity: sha512-k7iMOYuGQA62KwAuJOQBgH2IQb5vP8uiB3lMvAMGUgAMMurePOx3Z7oNqJdcpxqZP6I9cc7nc4DNqSKduCxmdg==} + '@shikijs/themes@1.29.2': + resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} - '@shikijs/types@1.22.0': - resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==} + '@shikijs/transformers@1.29.2': + resolution: {integrity: sha512-NHQuA+gM7zGuxGWP9/Ub4vpbwrYCrho9nQCLcCPfOe3Yc7LOYwmSuhElI688oiqIXk9dlZwDiyAG9vPBTuPJMA==} - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + '@shikijs/types@1.29.2': + resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} + + '@shikijs/vscode-textmate@10.0.1': + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -2833,11 +2635,11 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tanstack/virtual-core@3.10.8': - resolution: {integrity: sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==} + '@tanstack/virtual-core@3.11.3': + resolution: {integrity: sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==} - '@tanstack/vue-virtual@3.10.8': - resolution: {integrity: sha512-DB5QA8c/LfqOqIUCpSs3RdOTVroRRdqeHMqBkYrcashSZtOzIv8xbiqHgg7RYxDfkH5F3Y+e0MkuuyGNDVB0BQ==} + '@tanstack/vue-virtual@3.11.3': + resolution: {integrity: sha512-BVZ00i5XBucetRj2doVd32jOPtJthvZSVJvx9GL4gSQsyngliSCtzlP1Op7TFrEtmebRKT8QUQE1tRhOQzWecQ==} peerDependencies: vue: ^2.7.0 || ^3.0.0 @@ -2845,8 +2647,8 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@types/assert@1.5.10': - resolution: {integrity: sha512-qEO+AUgYab7GVbeDDgUNCU3o0aZUoIMpNAe+w5LDbRxfxQX7vQAdDgwj1AroX+i8KaV56FWg0srXlSZROnsrIQ==} + '@types/assert@1.5.11': + resolution: {integrity: sha512-FjS1mxq2dlGr9N4z72/DO+XmyRS3ZZIoVn998MEopAN/OmyN28F4yumRL5pOw2z+hbFLuWGYuF2rrw5p11xM5A==} '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2866,8 +2668,8 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - '@types/braces@3.0.4': - resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} + '@types/braces@3.0.5': + resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -2884,8 +2686,8 @@ packages: '@types/cytoscape-fcose@2.2.4': resolution: {integrity: sha512-QwWtnT8HI9h+DHhG5krGc1ZY0Ex+cn85MvX96ZNAjSxuXiZDnjIZW/ypVkvvubTjIY4rSdkJY1D/Nsn8NDpmAw==} - '@types/cytoscape@3.21.8': - resolution: {integrity: sha512-6Bo9ZDrv0vfwe8Sg/ERc5VL0yU0gYvP4dgZi0fAXYkKHfyHaNqWRMcwYm3mu4sLsXbB8ZuXE75sR7qnaOL5JgQ==} + '@types/cytoscape@3.21.9': + resolution: {integrity: sha512-JyrG4tllI6jvuISPjHK9j2Xv/LTbnLekLke5otGStjFluIyA9JjgnvgZrSBsp8cEDpiTjwgZUZwpPv8TSBcoLw==} '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -2956,8 +2758,8 @@ packages: '@types/d3-sankey@0.12.4': resolution: {integrity: sha512-YTicQNwioitIlvuvlfW2GfO6sKxpohzg2cSQttlXAPjFwoBuN+XpGLhUN3kLutG/dI3GCLC+DUorqiJt7Naetw==} - '@types/d3-scale-chromatic@3.0.3': - resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==} + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} '@types/d3-scale@4.0.8': resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} @@ -2968,14 +2770,14 @@ packages: '@types/d3-shape@1.3.12': resolution: {integrity: sha512-8oMzcd4+poSLGgV0R1Q1rOlx/xdmozS4Xab7np0eamFFUYq71AU9pOCJEFnkXW2aI/oXdVYJzw6pssbSut7Z9Q==} - '@types/d3-shape@3.1.6': - resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} + '@types/d3-shape@3.1.7': + resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} '@types/d3-time-format@4.0.3': resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} - '@types/d3-time@3.0.3': - resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} '@types/d3-timer@3.0.2': resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} @@ -2992,6 +2794,12 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} @@ -3001,8 +2809,8 @@ packages: '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - '@types/express-serve-static-core@5.0.0': - resolution: {integrity: sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==} + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} @@ -3010,8 +2818,8 @@ packages: '@types/flexsearch@0.7.6': resolution: {integrity: sha512-H5IXcRn96/gaDmo+rDl2aJuIJsob8dgOXDqf8K0t8rWZd1AFNaaspmRsElESiU+EWE33qfbFPgI0OC/B1g9FCA==} - '@types/geojson@7946.0.14': - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} @@ -3064,8 +2872,8 @@ packages: '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - '@types/lodash@4.17.10': - resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==} + '@types/lodash@4.17.15': + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} '@types/markdown-it@12.2.3': resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} @@ -3091,8 +2899,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} @@ -3100,11 +2908,11 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.55': - resolution: {integrity: sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==} + '@types/node@18.19.74': + resolution: {integrity: sha512-HMwEkkifei3L605gFdV+/UwtpxP6JSzM+xFk2Ia6DNFSwSVBRh9qp5Tgf4lNFOMfPVuU0WnkcWpXZpgn5ufO4A==} - '@types/node@20.16.11': - resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/node@20.17.16': + resolution: {integrity: sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3116,8 +2924,8 @@ packages: resolution: {integrity: sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA==} deprecated: This is a stub types definition. prettier provides its own type definitions, so you do not need this installed. - '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} '@types/ramda@0.28.25': resolution: {integrity: sha512-HrQNqQAGcITpn9HAJFamDxm7iZeeXiP/95pN5OMbNniDjzCCeOHbBKNGmUy8NRi0fhYS+/cXeo91MFC+06gbow==} @@ -3149,8 +2957,8 @@ packages: '@types/sinonjs__fake-timers@8.1.1': resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} - '@types/sizzle@2.3.8': - resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} + '@types/sizzle@2.3.9': + resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==} '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} @@ -3158,8 +2966,8 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/stylis@4.2.6': - resolution: {integrity: sha512-4nebF2ZJGzQk0ka0O6+FZUWceyFv4vWq/0dXBMmrSeAwzOuOd/GxE5Pa64d/ndeNLG73dXoBsRzvtsVsYUv6Uw==} + '@types/stylis@4.2.7': + resolution: {integrity: sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA==} '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} @@ -3179,8 +2987,8 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@types/ws@8.5.12': - resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + '@types/ws@8.5.14': + resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} '@types/ws@8.5.5': resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} @@ -3194,46 +3002,38 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.8.1': - resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} + '@typescript-eslint/eslint-plugin@8.22.0': + resolution: {integrity: sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.8.1': - resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} + '@typescript-eslint/parser@8.22.0': + resolution: {integrity: sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.8.1': - resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} + '@typescript-eslint/scope-manager@8.22.0': + resolution: {integrity: sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.8.1': - resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} + '@typescript-eslint/type-utils@8.22.0': + resolution: {integrity: sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' '@typescript-eslint/types@7.18.0': resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.8.1': - resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} + '@typescript-eslint/types@8.22.0': + resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -3245,31 +3045,29 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.8.1': - resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} + '@typescript-eslint/typescript-estree@8.22.0': + resolution: {integrity: sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.8.1': - resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} + '@typescript-eslint/utils@8.22.0': + resolution: {integrity: sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' '@typescript-eslint/visitor-keys@7.18.0': resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.8.1': - resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} + '@typescript-eslint/visitor-keys@8.22.0': + resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} '@unocss/astro@0.59.4': resolution: {integrity: sha512-DU3OR5MMR1Uvvec4/wB9EetDASHRg19Moy6z/MiIhn8JWJ0QzWYgSeJcfUX8exomMYv6WUEQJL+CyLI34Wmn8w==} @@ -3366,11 +3164,11 @@ packages: '@vite-pwa/assets-generator': optional: true - '@vitejs/plugin-vue@5.1.4': - resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==} + '@vitejs/plugin-vue@5.2.1': + resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 '@vitest/coverage-v8@1.6.0': @@ -3398,51 +3196,51 @@ packages: '@vitest/utils@1.6.0': resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} - '@vue/compat@3.5.11': - resolution: {integrity: sha512-ESH2z/vUZQi6yRDBCDjBgip6a0Rk48KiT4Dk1LkxSYnqM++3mlqyMo0MgXFxfLhQ1uMaL6pquSCMgKfivrRqRg==} + '@vue/compat@3.5.13': + resolution: {integrity: sha512-Q3xRdTPN4l+kddxU98REyUBgvc0meAo9CefCWE2lW8Fg3dyPn3vSCce52b338ihrJAx1RQQhO5wMWhJ/PAKUpA==} peerDependencies: - vue: 3.5.11 + vue: 3.5.13 - '@vue/compiler-core@3.5.11': - resolution: {integrity: sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==} + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} - '@vue/compiler-dom@3.5.11': - resolution: {integrity: sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==} + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} - '@vue/compiler-sfc@3.5.11': - resolution: {integrity: sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==} + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} - '@vue/compiler-ssr@3.5.11': - resolution: {integrity: sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==} + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} - '@vue/devtools-api@7.4.6': - resolution: {integrity: sha512-XipBV5k0/IfTr0sNBDTg7OBUCp51cYMMXyPxLXJZ4K/wmUeMqt8cVdr2ZZGOFq+si/jTyCYnNxeKoyev5DOUUA==} + '@vue/devtools-api@7.7.1': + resolution: {integrity: sha512-Cexc8GimowoDkJ6eNelOPdYIzsu2mgNyp0scOQ3tiaYSb9iok6LOESSsJvHaI+ib3joRfqRJNLkHFjhNuWA5dg==} - '@vue/devtools-kit@7.4.6': - resolution: {integrity: sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew==} + '@vue/devtools-kit@7.7.1': + resolution: {integrity: sha512-yhZ4NPnK/tmxGtLNQxmll90jIIXdb2jAhPF76anvn5M/UkZCiLJy28bYgPIACKZ7FCosyKoaope89/RsFJll1w==} - '@vue/devtools-shared@7.4.6': - resolution: {integrity: sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg==} + '@vue/devtools-shared@7.7.1': + resolution: {integrity: sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA==} - '@vue/reactivity@3.5.11': - resolution: {integrity: sha512-Nqo5VZEn8MJWlCce8XoyVqHZbd5P2NH+yuAaFzuNSR96I+y1cnuUiq7xfSG+kyvLSiWmaHTKP1r3OZY4mMD50w==} + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} - '@vue/runtime-core@3.5.11': - resolution: {integrity: sha512-7PsxFGqwfDhfhh0OcDWBG1DaIQIVOLgkwA5q6MtkPiDFjp5gohVnJEahSktwSFLq7R5PtxDKy6WKURVN1UDbzA==} + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} - '@vue/runtime-dom@3.5.11': - resolution: {integrity: sha512-GNghjecT6IrGf0UhuYmpgaOlN7kxzQBhxWEn08c/SQDxv1yy4IXI1bn81JgEpQ4IXjRxWtPyI8x0/7TF5rPfYQ==} + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} - '@vue/server-renderer@3.5.11': - resolution: {integrity: sha512-cVOwYBxR7Wb1B1FoxYvtjJD8X/9E5nlH4VSkJy2uMA1MzYNdzAAB//l8nrmN9py/4aP+3NjWukf9PZ3TeWULaA==} + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} peerDependencies: - vue: 3.5.11 + vue: 3.5.13 - '@vue/shared@3.5.11': - resolution: {integrity: sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==} + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} @@ -3519,50 +3317,50 @@ packages: resolution: {integrity: sha512-np7I+smszFUennbQKdzbMN/zUL3s3EZq9pCCUcTRjjs9TE4tnn0wfmGdoz2o7REYu6kn9NfFFJyVIM2VtBbKEA==} engines: {node: '>=12.0.0'} - '@webassemblyjs/ast@1.12.1': - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - '@webassemblyjs/helper-api-error@1.11.6': - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - '@webassemblyjs/helper-buffer@1.12.1': - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - '@webassemblyjs/helper-numbers@1.11.6': - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - '@webassemblyjs/helper-wasm-section@1.12.1': - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - '@webassemblyjs/ieee754@1.11.6': - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - '@webassemblyjs/leb128@1.11.6': - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - '@webassemblyjs/utf8@1.11.6': - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - '@webassemblyjs/wasm-edit@1.12.1': - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - '@webassemblyjs/wasm-gen@1.12.1': - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - '@webassemblyjs/wasm-opt@1.12.1': - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - '@webassemblyjs/wasm-parser@1.12.1': - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - '@webassemblyjs/wast-printer@1.12.1': - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} '@webpack-cli/configtest@1.2.0': resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} @@ -3594,8 +3392,8 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@zenuml/core@3.24.12': - resolution: {integrity: sha512-SM9TYgyWl1Bm7oWc4lZLq0q9ejT6RdqxBYav8a4BhVvWkFgND088YCL9xlvo9vPJenwIuVNK+xukgqL1nwfztw==} + '@zenuml/core@3.27.12': + resolution: {integrity: sha512-cNIQM6CCcsz4VqgHySIxjIlqjRnVO7d3HfBQtBkw8woBrvssHfU6FxSg23RVUsb8j98TdruPgEgLbpFbKCGlHA==} engines: {node: '>=12.0.0'} JSONSelect@0.4.0: @@ -3616,11 +3414,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3630,11 +3423,6 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -3644,8 +3432,8 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} aggregate-error@3.1.0: @@ -3691,8 +3479,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - algoliasearch@4.24.0: - resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + algoliasearch@5.20.0: + resolution: {integrity: sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ==} + engines: {node: '>= 14.0.0'} amdefine@1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} @@ -3797,10 +3586,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -3872,8 +3657,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axios@1.7.7: - resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -3951,8 +3736,8 @@ packages: binary@0.3.0: resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} - birpc@0.2.17: - resolution: {integrity: sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==} + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} blob-util@2.0.2: resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} @@ -3970,8 +3755,8 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - bonjour-service@1.2.1: - resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} + bonjour-service@1.3.0: + resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} @@ -3987,11 +3772,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.0: - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.24.4: resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -4020,10 +3800,6 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -4052,10 +3828,6 @@ packages: resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} engines: {node: '>= 0.4'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - call-bind@1.0.8: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} @@ -4083,11 +3855,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001667: - resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} - - caniuse-lite@1.0.30001695: - resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==} + caniuse-lite@1.0.30001696: + resolution: {integrity: sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4126,6 +3895,10 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -4178,12 +3951,12 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} engines: {node: '>=8'} - cjs-module-lexer@1.4.1: - resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} cjson@0.3.0: resolution: {integrity: sha512-bBRQcCIHzI1IVH59fR0bwGrFmi3Btb/JNwM/n401i1DnYgWndpsUBiQRAddLflkZage20A2d25OAWZZk0vBRlA==} @@ -4304,6 +4077,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4311,10 +4088,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} engines: {node: '>= 6'} @@ -4349,8 +4122,8 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} engines: {node: '>= 0.8.0'} concat-map@0.0.1: @@ -4368,8 +4141,8 @@ packages: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} - consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + consola@3.4.0: + resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} engines: {node: ^14.18.0 || >=16.10.0} console.table@0.10.0: @@ -4397,8 +4170,8 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} cookie@0.7.2: @@ -4409,9 +4182,6 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} - core-js-compat@3.38.1: - resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} - core-js-compat@3.40.0: resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} @@ -4454,57 +4224,54 @@ packages: engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - - cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} engines: {node: '>=4.8'} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} crypto-random-string@2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - cspell-config-lib@8.14.4: - resolution: {integrity: sha512-cnUeJfniTiebqCaQmIUnbSrPrTH7xzKRQjJDHAEV0WYnOG2MhRXI13OzytdFdhkVBdStmgTzTCJKE7x+kmU2NA==} + cspell-config-lib@8.17.3: + resolution: {integrity: sha512-+N32Q6xck3D2RqZIFwq8s0TnzHYMpyh4bgNtYqW5DIP3TLDiA4/MJGjwmLKAg/s9dkre6n8/++vVli3MZAOhIg==} engines: {node: '>=18'} - cspell-dictionary@8.14.4: - resolution: {integrity: sha512-pZvQHxpAW5fZAnt3ZKKy3s7M+3CX2t8tCS3uJrpEHIynlCawpG0fPF78rVE5o+g0dON36Lguc/BUuSN4IWKLmQ==} + cspell-dictionary@8.17.3: + resolution: {integrity: sha512-89I/lpQKdkX17RCFrUIJnc70Rjfpup/o+ynHZen0hUxGTfLsEJPrK6H2oGvic3Yrv5q8IOtwM1p8vqPqBkBheA==} engines: {node: '>=18'} - cspell-gitignore@8.14.4: - resolution: {integrity: sha512-RwfQEW5hD7CpYwS7m3b0ONG0nTLKP6bL2tvMdl7qtaYkL7ztGdsBTtLD1pmwqUsCbiN5RuaOxhYOYeRcpFRIkQ==} + cspell-gitignore@8.17.3: + resolution: {integrity: sha512-rQamjb8R+Nwib/Bpcgf+xv5IdsOHgbP+fe4hCgv0jjgUPkeOR2c4dGwc0WS+2UkJbc+wQohpzBGDLRYGSB/hQw==} engines: {node: '>=18'} hasBin: true - cspell-glob@8.14.4: - resolution: {integrity: sha512-C/xTS5nujMRMuguibq92qMVP767mtxrur7DcVolCvpzcivm1RB5NtIN0OctQxTyMbnmKeQv1t4epRKQ9A8vWRg==} + cspell-glob@8.17.3: + resolution: {integrity: sha512-0ov9A0E6OuOO7KOxlGCxJ09LR/ubZ6xcGwWc5bu+jp/8onUowQfe+9vZdznj/o8/vcf5JkDzyhRSBsdhWKqoAg==} engines: {node: '>=18'} - cspell-grammar@8.14.4: - resolution: {integrity: sha512-yaSKAAJDiamsw3FChbw4HXb2RvTQrDsLelh1+T4MavarOIcAxXrqAJ8ysqm++g+S/ooJz2YO8YWIyzJKxcMf8g==} + cspell-grammar@8.17.3: + resolution: {integrity: sha512-wfjkkvHthnKJtEaTgx3cPUPquGRXfgXSCwvMJaDyUi36KBlopXX38PejBTdmuqrvp7bINLSuHErml9wAfL5Fxw==} engines: {node: '>=18'} hasBin: true - cspell-io@8.14.4: - resolution: {integrity: sha512-o6OTWRyx/Az+PFhr1B0wMAwqG070hFC9g73Fkxd8+rHX0rfRS69QZH7LgSmZytqbZIMxCTDGdsLl33MFGWCbZQ==} + cspell-io@8.17.3: + resolution: {integrity: sha512-NwEVb3Kr8loV1C8Stz9QSMgUrBkxqf2s7A9H2/RBnfvQBt9CWZS6NgoNxTPwHj3h1sUNl9reDkMQQzkKtgWGBQ==} engines: {node: '>=18'} - cspell-lib@8.14.4: - resolution: {integrity: sha512-qdkUkKtm+nmgpA4jQbmQTuepDfjHBDWvs3zDuEwVIVFq/h8gnXrRr75gJ3RYdTy+vOOqHPoLLqgxyqkUUrUGXA==} + cspell-lib@8.17.3: + resolution: {integrity: sha512-KpwYIj8HwFyTzCCQcyezlmomvyNfPwZQmqTh4V126sFvf9HLoMdfyq8KYDZmZ//4HzwrF/ufJOF3CpuVUiJHfA==} engines: {node: '>=18'} - cspell-trie-lib@8.14.4: - resolution: {integrity: sha512-zu8EJ33CH+FA5lwTRGqS//Q6phO0qtgEmODMR1KPlD7WlrfTFMb3bWFsLo/tiv5hjpsn7CM6dYDAAgBOSkoyhQ==} + cspell-trie-lib@8.17.3: + resolution: {integrity: sha512-6LE5BeT2Rwv0bkQckpxX0K1fnFCWfeJ8zVPFtYOaix0trtqj0VNuwWzYDnxyW+OwMioCH29yRAMODa+JDFfUrA==} engines: {node: '>=18'} - cspell@8.14.4: - resolution: {integrity: sha512-R5Awb3i/RKaVVcZzFt8dkN3M6VnifIEDYBcbzbmYjZ/Eq+ASF+QTmI0E9WPhMEcFM1nd7YOyXnETo560yRdoKw==} + cspell@8.17.3: + resolution: {integrity: sha512-fBZg674Dir9y/FWMwm2JyixM/1eB2vnqHJjRxOgGS/ZiZ3QdQ3LkK02Aqvlni8ffWYDZnYnYY9rfWmql9bb42w==} engines: {node: '>=18'} hasBin: true @@ -4517,8 +4284,8 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@4.1.0: - resolution: {integrity: sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==} + cssstyle@4.2.1: + resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==} engines: {node: '>=18'} csstree-validator@3.0.0: @@ -4538,15 +4305,15 @@ packages: peerDependencies: cypress: ^4.5.0 - cypress-split@1.24.0: - resolution: {integrity: sha512-ZEFh1m6z+HwPWpB1h9YAF1L6K/wkPBR3vD+v8Rrg8BRm50sZ7oSx6Dw+sv6zfr5Pfqv247CnobLewdFBLlPIBQ==} + cypress-split@1.24.7: + resolution: {integrity: sha512-JOxWgCQHi/JMOwznm6VF7V1GHYEM9Mxz6EipZu9WgQtqnRjk3QX6lBXJMjRXOPqArguL9S49OSFUQXDiC19hBg==} hasBin: true cypress-wait-until@3.0.2: resolution: {integrity: sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==} - cypress@13.15.0: - resolution: {integrity: sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==} + cypress@13.17.0: + resolution: {integrity: sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==} engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -4560,8 +4327,8 @@ packages: peerDependencies: cytoscape: ^3.2.0 - cytoscape@3.30.2: - resolution: {integrity: sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==} + cytoscape@3.31.0: + resolution: {integrity: sha512-zDGn1K/tfZwEnoGOcHc0H4XazqAAXAuDpcYw9mUnUjATjqljyCNGJv8uEvbvxGaGHaVshxMecyl6oc6uKzRfbw==} engines: {node: '>=0.10'} d3-array@2.12.1: @@ -4778,15 +4545,6 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -4800,8 +4558,8 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -4946,8 +4704,8 @@ packages: peerDependencies: typescript: ^5.4.4 - detective-vue2@2.0.3: - resolution: {integrity: sha512-AgWdSfVnft8uPGnUkdvE1EDadEENDCzoSRMt2xZfpxsjqVO617zGWXbB8TGIxHaqHz/nHa6lOSgAB8/dt0yEug==} + detective-vue2@2.1.1: + resolution: {integrity: sha512-/TQ+cs4qmSyhgESjyBXxoUuh36XjS06+UhCItWcGGOpXmU3KBRGRknG+tDzv2dASn1+UJUm2rhpDFa9TWT0dFw==} engines: {node: '>=18'} peerDependencies: typescript: ^5.4.4 @@ -4986,14 +4744,14 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.2.1: - resolution: {integrity: sha512-NBHEsc0/kzRYQd+AY6HR6B/IgsqzBABrqJbpCDQII/OK6h7B7LXzweZTDsqSW2LkTRpoxf18YUP+YjGySk6B3w==} + dompurify@3.2.4: + resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} dotenv@8.6.0: @@ -5027,11 +4785,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.33: - resolution: {integrity: sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==} - - electron-to-chromium@1.5.88: - resolution: {integrity: sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw==} + electron-to-chromium@1.5.90: + resolution: {integrity: sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==} elkjs@0.9.3: resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} @@ -5040,6 +4795,9 @@ packages: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -5063,8 +4821,8 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + enhanced-resolve@5.18.0: + resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -5099,10 +4857,6 @@ packages: resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -5114,8 +4868,8 @@ packages: es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -5199,8 +4953,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-cypress@3.5.0: - resolution: {integrity: sha512-JZQ6XnBTNI8h1B9M7wJSFzc48SYbh7VMMKaNTQOFa3BQlnmXPrVc4PKen8R+fpv6VleiPeej6VxloGb42zdRvw==} + eslint-plugin-cypress@3.6.0: + resolution: {integrity: sha512-7IAMcBbTVu5LpWeZRn5a9mQ30y4hKp3AfTz+6nSD/x/7YyLMoBI6X7XjDLYI6zFvuy4Q4QVGl563AGEXGW/aSA==} peerDependencies: eslint: '>=7' @@ -5208,8 +4962,8 @@ packages: resolution: {integrity: sha512-pbRchDV2SmqbCi/Ev/q3aAikzG9BcFe0IjjqjtMn8eTLq71ZUggyJB6CDmuwGAXmYZHrXI12XTfCqvgcnPRqGw==} engines: {node: '>=16.0.0'} - eslint-plugin-jest@28.8.3: - resolution: {integrity: sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==} + eslint-plugin-jest@28.11.0: + resolution: {integrity: sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==} engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -5221,8 +4975,8 @@ packages: jest: optional: true - eslint-plugin-jsdoc@50.3.1: - resolution: {integrity: sha512-SY9oUuTMr6aWoJggUS40LtMjsRzJPB5ZT7F432xZIHK3EfHF+8i48GbUBpwanrtlL9l1gILNTHK9o8gEhYLcKA==} + eslint-plugin-jsdoc@50.6.3: + resolution: {integrity: sha512-NxbJyt1M5zffPcYZ8Nb53/8nnbIScmiLAMdoe0/FAszwb7lcSiX3iYBTsuF7RV84dZZJC8r3NghomrUXsmWvxQ==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -5250,8 +5004,8 @@ packages: eslint-plugin-tsdoc@0.3.0: resolution: {integrity: sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==} - eslint-plugin-unicorn@56.0.0: - resolution: {integrity: sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==} + eslint-plugin-unicorn@56.0.1: + resolution: {integrity: sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==} engines: {node: '>=18.18'} peerDependencies: eslint: '>=8.56.0' @@ -5260,20 +5014,20 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.1.0: - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.1.0: - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.12.0: - resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} + eslint@9.19.0: + resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -5286,8 +5040,8 @@ packages: resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} engines: {node: '>=0.10'} - espree@10.2.0: - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@1.1.1: @@ -5392,8 +5146,8 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - express@4.21.0: - resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} ext@1.7.0: @@ -5427,12 +5181,12 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.0.1: - resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + fast-equals@5.2.2: + resolution: {integrity: sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==} engines: {node: '>=6.0.0'} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -5451,14 +5205,14 @@ packages: resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} - fast-shuffle@6.1.0: - resolution: {integrity: sha512-3aj8oO6bvZFKYDGvXNmmEuxyOjre8trCpIbtFSM/DSKd+o3iSbQQPb5BZQeJ7SPYVivn9EeW3gKh0QdnD027MQ==} + fast-shuffle@6.1.1: + resolution: {integrity: sha512-HPxFJxEi18KPmVQuK5Hi5l4KSl3u50jtaxseRrPqrxewqfvU+sTPTaUpP33Hj+NdJoLuJP5ipx3ybTr+fa6dEw==} fast-uri@2.4.0: resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} - fast-uri@3.0.2: - resolution: {integrity: sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} @@ -5470,11 +5224,11 @@ packages: fastify-plugin@3.0.1: resolution: {integrity: sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA==} - fastify@4.28.1: - resolution: {integrity: sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==} + fastify@4.29.0: + resolution: {integrity: sha512-MaaUHUGcCgC8fXQDsDtioaCcag1fmPJ9j64vAKunqZF4aSub040ZGi/ag8NGE2714yREPOKZuHCfpPzuUD3UQQ==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -5489,8 +5243,8 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.4.0: - resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -5546,8 +5300,8 @@ packages: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} - find-cypress-specs@1.43.4: - resolution: {integrity: sha512-GAdz6lfBndbOq9OOJ3psThQ56hqgL8tZUCOLnl60d/l56bvHkC0TNwyqlLfBObiscirSZWSgyGL86jJkrpFMrA==} + find-cypress-specs@1.46.2: + resolution: {integrity: sha512-eXvGQMftYDTbQflVX6TzJj7hA0ypO5+FfUrnMdRf1+yCu5xVY5wPv721AWp/xPBOpQXwx5jdoZRH9m95U/1c7A==} engines: {node: '>=18'} hasBin: true @@ -5555,12 +5309,12 @@ packages: resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==} engines: {node: '>=14'} - find-process@1.4.7: - resolution: {integrity: sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==} + find-process@1.4.10: + resolution: {integrity: sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==} hasBin: true - find-test-names@1.28.18: - resolution: {integrity: sha512-hhnGdkWK+qEA5Z02Tu0OqGQIUjFZNyOCE4WaJpbhW4hAF1+NZ7OCr0Bss9RCaj7BBtjoIjkU93utobQ8pg2iVg==} + find-test-names@1.28.30: + resolution: {integrity: sha512-b5PLJ5WnskdaYHBf+38FN/4TKh5lqwrltITkqxuARsN2bW6civrhqOXbVA+4727YNowYLt/jtIC9Dsn7eJSP6A==} hasBin: true find-up-simple@1.0.0: @@ -5595,14 +5349,14 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} flexsearch@0.7.43: resolution: {integrity: sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==} - focus-trap@7.6.0: - resolution: {integrity: sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==} + focus-trap@7.6.4: + resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} @@ -5617,9 +5371,6 @@ packages: resolution: {integrity: sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==} engines: {node: '>=0.10.3'} - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - for-each@0.3.4: resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} engines: {node: '>= 0.4'} @@ -5635,8 +5386,8 @@ packages: forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} format@0.2.2: @@ -5718,17 +5469,13 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - get-intrinsic@1.2.7: resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} @@ -5776,8 +5523,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} getos@3.2.1: resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} @@ -5838,8 +5585,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.10.0: - resolution: {integrity: sha512-tqFIbz83w4Y5TCbtgjZjApohbuh7K9BxGYFm7ifwDR240tvdb7P9x+/9VvUKlmkPoiknoJtanI8UOrqxS3a7lQ==} + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} engines: {node: '>=18'} globalthis@1.0.4: @@ -5866,9 +5613,6 @@ packages: engines: {node: '>=0.6.0'} hasBin: true - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5902,9 +5646,6 @@ packages: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -5924,18 +5665,10 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - has-proto@1.2.0: resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -5952,8 +5685,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + hast-util-to-html@9.0.4: + resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -6003,8 +5736,8 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + http-parser-js@0.5.9: + resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==} http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} @@ -6043,8 +5776,8 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} human-id@1.0.2: @@ -6065,8 +5798,8 @@ packages: humanize-duration@3.32.1: resolution: {integrity: sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g==} - husky@9.1.6: - resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true @@ -6134,10 +5867,6 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -6171,12 +5900,8 @@ packages: is-alphanumerical@1.0.4: resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} is-array-buffer@3.0.5: @@ -6193,9 +5918,6 @@ packages: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - is-bigint@1.1.0: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} @@ -6204,10 +5926,6 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - is-boolean-object@1.2.1: resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} engines: {node: '>= 0.4'} @@ -6220,14 +5938,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -6236,10 +5946,6 @@ packages: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - is-date-object@1.1.0: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} @@ -6302,10 +6008,6 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -6340,10 +6042,6 @@ packages: is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -6356,10 +6054,6 @@ packages: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.4: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} @@ -6376,10 +6070,6 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -6388,10 +6078,6 @@ packages: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} @@ -6422,8 +6108,8 @@ packages: resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} engines: {node: '>= 0.4'} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} is-what@4.1.16: @@ -6655,8 +6341,8 @@ packages: engines: {node: '>=0.4'} hasBin: true - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true jju@1.4.0: @@ -6674,8 +6360,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.0: - resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -6778,8 +6464,8 @@ packages: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} - katex@0.16.11: - resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} + katex@0.16.21: + resolution: {integrity: sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==} hasBin: true keyv@4.5.4: @@ -6846,12 +6532,8 @@ packages: light-my-request@5.14.0: resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==} - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} lines-and-columns@1.2.4: @@ -6860,8 +6542,8 @@ packages: linkify-it@4.0.1: resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} - lint-staged@15.2.10: - resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} + lint-staged@15.4.3: + resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==} engines: {node: '>=18.12.0'} hasBin: true @@ -6886,8 +6568,8 @@ packages: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} - local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} engines: {node: '>=14'} locate-path@3.0.0: @@ -6971,9 +6653,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -6986,8 +6665,8 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -7013,8 +6692,8 @@ packages: resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} hasBin: true - markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} marked@13.0.3: resolution: {integrity: sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==} @@ -7033,14 +6712,14 @@ packages: mdast-builder@1.1.1: resolution: {integrity: sha512-a3KBk/LmYD6wKsWi8WJrGU/rXR4yuF4Men0JO0z6dSZCm5FrXXWTRDjqK0vGSqa+1M6p9edeuypZAZAzSehTUw==} - mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - mdast-util-from-markdown@2.0.1: - resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} @@ -7069,8 +6748,8 @@ packages: mdast-util-to-hast@13.2.0: resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} @@ -7117,8 +6796,8 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromark-core-commonmark@2.0.1: - resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} + micromark-core-commonmark@2.0.2: + resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} micromark-extension-frontmatter@2.0.0: resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} @@ -7132,8 +6811,8 @@ packages: micromark-extension-gfm-strikethrough@2.1.0: resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - micromark-extension-gfm-table@2.1.0: - resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} @@ -7144,68 +6823,68 @@ packages: micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - micromark-util-subtokenize@2.0.1: - resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + micromark-util-subtokenize@2.0.4: + resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==} - micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + micromark-util-types@2.0.1: + resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromark@4.0.1: + resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -7288,8 +6967,8 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.2: - resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} module-definition@6.0.0: resolution: {integrity: sha512-sEGP5nKEXU7fGSZUML/coJbrO+yQtxcppDAYWRE9ovWsTbFoUHB2qDUx564WUzDaBHXsD46JBbIK5WVTwCyu3w==} @@ -7325,11 +7004,6 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -7342,6 +7016,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -7361,8 +7039,8 @@ packages: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} @@ -7397,14 +7075,11 @@ packages: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} engines: {node: '>=8'} - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-source-walk@7.0.0: - resolution: {integrity: sha512-1uiY543L+N7Og4yswvlm5NCKgPKDEXd9AUR9Jh3gen6oOeBsesr6LqhXom1er3eRzSUcVRWXzhv8tSNrIfGHKw==} + node-source-walk@7.0.1: + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} engines: {node: '>=18'} nomnom@1.5.2: @@ -7434,8 +7109,8 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nwsapi@2.2.13: - resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} @@ -7450,10 +7125,6 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - object-inspect@1.13.3: resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} @@ -7466,10 +7137,6 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - object.assign@4.1.7: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} @@ -7477,8 +7144,8 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - ofetch@1.4.0: - resolution: {integrity: sha512-MuHgsEhU6zGeX+EMh+8mSMrYTnsqJQQrpM00Q6QHMKNqQ0bKy0B43tk8tL1wg+CnsSTy1kg4Ir2T5Ig6rD+dfQ==} + ofetch@1.4.1: + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} @@ -7510,18 +7177,18 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-js@0.4.3: - resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} + oniguruma-to-es@2.3.0: + resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openapi-fetch@0.11.3: - resolution: {integrity: sha512-r18fERgpxFrI4pv79ABD1dqFetWz7pTfwRd7jQmRm/lFdCDpWF43kvHUiOqOZu+tWsMydDJMpJN1hlZ9inRvfA==} + openapi-fetch@0.13.4: + resolution: {integrity: sha512-JHX7UYjLEiHuQGCPxa3CCCIqe/nc4bTIF9c4UYVC8BegAbWoS3g4gJxKX5XcG7UtYQs2060kY6DH64KkvNZahg==} - openapi-typescript-helpers@0.0.13: - resolution: {integrity: sha512-z44WK2e7ygW3aUtAtiurfEACohf/Qt9g6BsejmIYgEoY4REHeRzgFJmO3ium0libsuzPc145I+8lE9aiiZrQvQ==} + openapi-typescript-helpers@0.0.15: + resolution: {integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -7636,8 +7303,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.1: - resolution: {integrity: sha512-/hVW2fZvAdEas+wyKh0SnlZ2mx0NIa1+j11YaQkogEJkcMErbwchHCuo8z7lEtajZJQZ6rgZNVTWMVVd71Bjng==} + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -7661,8 +7328,8 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} @@ -7709,8 +7376,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -7723,14 +7390,17 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.2: + resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} + pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - pcg@1.0.0: - resolution: {integrity: sha512-6wjoSJZ4TEJhI0rLDOKd5mOu6TwS4svn9oBaRsD1PCrhlDNLWAaTimWJgBABmIGJxzkI+RbaHJYRLGVf9QFE5Q==} + pcg@1.1.0: + resolution: {integrity: sha512-S+bYs8CV6l2lj01PRN4g9EiHDktcXJKD9FdE/FqpdXSuy1zImsRq8A8T5UK6gkXdI9O5YFdAgH40uPoR8Bk8aQ==} pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -7741,9 +7411,6 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -7771,6 +7438,9 @@ packages: pino-abstract-transport@1.2.0: resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-std-serializers@6.2.2: resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} @@ -7781,8 +7451,8 @@ packages: resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} hasBin: true - pino@9.4.0: - resolution: {integrity: sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w==} + pino@9.6.0: + resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} hasBin: true pirates@4.0.6: @@ -7805,8 +7475,8 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} - pkg-types@1.2.0: - resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} @@ -7880,16 +7550,12 @@ packages: peerDependencies: postcss: ^8.2.9 - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.1: resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} - preact@10.24.2: - resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} + preact@10.25.4: + resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} precinct@12.1.2: resolution: {integrity: sha512-x2qVN3oSOp3D05ihCd8XdkIPuEQsyte7PSxzLqiRgktu79S5Dr1I75/S+zAup8/0cwjoiJTQztE9h0/sWp9bJQ==} @@ -7900,8 +7566,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-jsdoc@1.3.0: - resolution: {integrity: sha512-cQm8xIa0fN9ieJFMXACQd6JPycl+8ouOijAqUqu44EF/s4fXL3Wi9sKXuEaodsEWgCN42Xby/bNhqgM1iWx4uw==} + prettier-plugin-jsdoc@1.3.2: + resolution: {integrity: sha512-LNi9eq0TjyZn/PUNf/SYQxxUvGg5FLK4alEbi3i/S+2JbMyTu790c/puFueXzx09KP44oWCJ+TaHRyM/a0rKJQ==} engines: {node: '>=14.13.1 || >=16.0.0'} peerDependencies: prettier: ^3.0.0 @@ -7911,8 +7577,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} engines: {node: '>=14'} hasBin: true @@ -7931,15 +7597,15 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-on-spawn@1.0.0: - resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} + process-on-spawn@1.1.0: + resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} engines: {node: '>=8'} process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} - process-warning@4.0.0: - resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} @@ -7967,11 +7633,8 @@ packages: engines: {node: '>= 0.10'} hasBin: true - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -7987,6 +7650,10 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + qs@6.13.1: + resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} + engines: {node: '>=0.6'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -8009,8 +7676,8 @@ packages: ramda@0.28.0: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} - ramda@0.29.0: - resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + ramda@0.29.1: + resolution: {integrity: sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==} randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -8048,8 +7715,8 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readable-stream@4.5.2: - resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} readdirp@3.6.0: @@ -8085,17 +7752,19 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regex@4.3.3: - resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==} + regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@5.1.1: + resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} - engines: {node: '>= 0.4'} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -8190,8 +7859,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} resolve@1.22.10: @@ -8199,10 +7868,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} @@ -8246,13 +7911,16 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup-plugin-visualizer@5.12.0: - resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} - engines: {node: '>=14'} + rollup-plugin-visualizer@5.14.0: + resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + engines: {node: '>=18'} hasBin: true peerDependencies: + rolldown: 1.x rollup: 2.x || 3.x || 4.x peerDependenciesMeta: + rolldown: + optional: true rollup: optional: true @@ -8261,13 +7929,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.24.0: - resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.32.0: - resolution: {integrity: sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==} + rollup@4.32.1: + resolution: {integrity: sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -8277,6 +7940,9 @@ packages: rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -8314,8 +7980,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-lookup@6.0.1: - resolution: {integrity: sha512-nl9Wxbj9RjEJA5SSV0hSDoU2zYGtE+ANaDS4OFUR7nYrquvBFvPKZZtQHe3lvnxCcylEDV00KUijjdMTUElcVQ==} + sass-lookup@6.1.0: + resolution: {integrity: sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==} engines: {node: '>=18'} hasBin: true @@ -8327,16 +7993,12 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - schema-utils@4.3.0: resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} engines: {node: '>= 10.13.0'} - search-insights@2.17.2: - resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} + search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} @@ -8361,8 +8023,8 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.0: + resolution: {integrity: sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==} engines: {node: '>=10'} hasBin: true @@ -8384,8 +8046,8 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@2.7.0: - resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -8429,8 +8091,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} @@ -8440,8 +8103,8 @@ packages: shiki@0.14.7: resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} - shiki@1.22.0: - resolution: {integrity: sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==} + shiki@1.29.2: + resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -8455,10 +8118,6 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - side-channel@1.1.0: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} @@ -8527,8 +8186,8 @@ packages: sonic-boom@3.8.1: resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} - sonic-boom@4.1.0: - resolution: {integrity: sha512-NGipjjRicyJJ03rPiZCJYjwlsuP2d1/5QUviozRXC7S3WdVWNK5e3Ojieb9CCyfhq2UC+3+SRd9nG3I2lPRvUw==} + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} source-map-js@1.0.1: resolution: {integrity: sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==} @@ -8574,8 +8233,8 @@ packages: resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} engines: {node: '>=8'} - spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -8589,8 +8248,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -8632,8 +8291,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - start-server-and-test@2.0.8: - resolution: {integrity: sha512-v2fV6NV2F7tL1ocwfI4Wpait+IKjRbT5l3ZZ+ZikXdMLmxYsS8ynGAsCQAUVXkVyGyS+UibsRnvgHkMvJIvCsw==} + start-server-and-test@2.0.10: + resolution: {integrity: sha512-nZphcfcqGqwk74lbZkqSwClkYz+M5ZPGOMgWxNVJrdztPKN96qe6HooRu6L3TpwITn0lKJJdKACqHbJtqythOQ==} engines: {node: '>=16'} hasBin: true @@ -8645,11 +8304,11 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} - stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} stream-combiner@0.0.4: @@ -8748,14 +8407,14 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@2.1.0: - resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + strip-literal@2.1.1: + resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} - stylis@4.3.4: - resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} + stylis@4.3.5: + resolution: {integrity: sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==} - stylus-lookup@6.0.0: - resolution: {integrity: sha512-RaWKxAvPnIXrdby+UWCr1WRfa+lrPMSJPySte4Q6a+rWyjeJyFOLJxr5GrAVfcMCsfVlCuzTAJ/ysYT8p8do7Q==} + stylus-lookup@6.1.0: + resolution: {integrity: sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==} engines: {node: '>=18'} hasBin: true @@ -8764,8 +8423,8 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - superjson@2.2.1: - resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + superjson@2.2.2: + resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} engines: {node: '>=16'} supports-color@2.0.0: @@ -8798,8 +8457,8 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwindcss@3.4.13: - resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} hasBin: true @@ -8827,8 +8486,8 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -8843,11 +8502,6 @@ packages: uglify-js: optional: true - terser@5.34.1: - resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} - engines: {node: '>=10'} - hasBin: true - terser@5.37.0: resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} engines: {node: '>=10'} @@ -8857,9 +8511,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -8892,11 +8543,11 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.0: - resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.9: - resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} tinypool@0.8.4: @@ -8907,6 +8558,13 @@ packages: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} + tldts-core@6.1.76: + resolution: {integrity: sha512-uzhJ02RaMzgQR3yPoeE65DrcHI6LoM4saUqXOt/b5hmb3+mc4YWpdSeAQqVqRUlQ14q8ZuLRWyBR1ictK1dzzg==} + + tldts@6.1.76: + resolution: {integrity: sha512-6U2ti64/nppsDxQs9hw8ephA3nO6nSQvVVfxwRw8wLQPFtLI1cFI1a1eP22g+LUP+1TA2pKKjUTwWB+K2coqmQ==} + hasBin: true + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -8918,10 +8576,6 @@ packages: tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -8942,6 +8596,10 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} + tough-cookie@5.1.0: + resolution: {integrity: sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -8965,12 +8623,18 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.0.0: + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -8985,11 +8649,11 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.19.1: - resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} engines: {node: '>=18.0.0'} hasBin: true @@ -9035,8 +8699,8 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@4.26.1: - resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + type-fest@4.33.0: + resolution: {integrity: sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==} engines: {node: '>=16'} type-is@1.6.18: @@ -9077,22 +8741,20 @@ packages: peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x - typescript-eslint@8.8.1: - resolution: {integrity: sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==} + typescript-eslint@8.22.0: + resolution: {integrity: sha512-Y2rj210FW1Wb6TWXzQc5+P+EWI9/zdS57hLEc0gnyuvdzWo8+Y8brKlbj0muejonhMI/xAZCnZZwjbIfv1CkOw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -9123,8 +8785,8 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + undici@5.28.5: + resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} engines: {node: '>=14.0'} unicode-canonical-property-names-ecmascript@2.0.1: @@ -9222,14 +8884,9 @@ packages: '@nuxt/kit': optional: true - unplugin@1.14.1: - resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==} + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} engines: {node: '>=14.0.0'} - peerDependencies: - webpack-sources: ^3 - peerDependenciesMeta: - webpack-sources: - optional: true untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} @@ -9239,12 +8896,6 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-browserslist-db@1.1.2: resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true @@ -9315,39 +8966,8 @@ packages: '@vite-pwa/assets-generator': optional: true - vite@5.4.12: - resolution: {integrity: sha512-KwUaKB27TvWwDJr1GjjWthLMATbGEbeWYZIbGZ5qFIsgPP3vWzLu4cVooqhm5/Z2SPDUMjyPVjTztm5tYKwQxA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@5.4.8: - resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -9465,8 +9085,8 @@ packages: '@vue/composition-api': optional: true - vue@3.5.11: - resolution: {integrity: sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==} + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -9482,8 +9102,8 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - wait-on@8.0.1: - resolution: {integrity: sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig==} + wait-on@8.0.2: + resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==} engines: {node: '>=12.0.0'} hasBin: true @@ -9568,8 +9188,8 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.95.0: - resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -9594,8 +9214,8 @@ packages: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} - whatwg-url@14.0.0: - resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + whatwg-url@14.1.0: + resolution: {integrity: sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==} engines: {node: '>=18'} whatwg-url@5.0.0: @@ -9604,9 +9224,6 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -9622,10 +9239,6 @@ packages: which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - which-typed-array@1.1.18: resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} @@ -9658,54 +9271,54 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workbox-background-sync@7.1.0: - resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} + workbox-background-sync@7.3.0: + resolution: {integrity: sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg==} - workbox-broadcast-update@7.1.0: - resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} + workbox-broadcast-update@7.3.0: + resolution: {integrity: sha512-T9/F5VEdJVhwmrIAE+E/kq5at2OY6+OXXgOWQevnubal6sO92Gjo24v6dCVwQiclAF5NS3hlmsifRrpQzZCdUA==} - workbox-build@7.1.1: - resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} + workbox-build@7.3.0: + resolution: {integrity: sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ==} engines: {node: '>=16.0.0'} - workbox-cacheable-response@7.1.0: - resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} + workbox-cacheable-response@7.3.0: + resolution: {integrity: sha512-eAFERIg6J2LuyELhLlmeRcJFa5e16Mj8kL2yCDbhWE+HUun9skRQrGIFVUagqWj4DMaaPSMWfAolM7XZZxNmxA==} - workbox-core@7.1.0: - resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} + workbox-core@7.3.0: + resolution: {integrity: sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw==} - workbox-expiration@7.1.0: - resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} + workbox-expiration@7.3.0: + resolution: {integrity: sha512-lpnSSLp2BM+K6bgFCWc5bS1LR5pAwDWbcKt1iL87/eTSJRdLdAwGQznZE+1czLgn/X05YChsrEegTNxjM067vQ==} - workbox-google-analytics@7.1.0: - resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} + workbox-google-analytics@7.3.0: + resolution: {integrity: sha512-ii/tSfFdhjLHZ2BrYgFNTrb/yk04pw2hasgbM70jpZfLk0vdJAXgaiMAWsoE+wfJDNWoZmBYY0hMVI0v5wWDbg==} - workbox-navigation-preload@7.1.0: - resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} + workbox-navigation-preload@7.3.0: + resolution: {integrity: sha512-fTJzogmFaTv4bShZ6aA7Bfj4Cewaq5rp30qcxl2iYM45YD79rKIhvzNHiFj1P+u5ZZldroqhASXwwoyusnr2cg==} - workbox-precaching@7.1.0: - resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} + workbox-precaching@7.3.0: + resolution: {integrity: sha512-ckp/3t0msgXclVAYaNndAGeAoWQUv7Rwc4fdhWL69CCAb2UHo3Cef0KIUctqfQj1p8h6aGyz3w8Cy3Ihq9OmIw==} - workbox-range-requests@7.1.0: - resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} + workbox-range-requests@7.3.0: + resolution: {integrity: sha512-EyFmM1KpDzzAouNF3+EWa15yDEenwxoeXu9bgxOEYnFfCxns7eAxA9WSSaVd8kujFFt3eIbShNqa4hLQNFvmVQ==} - workbox-recipes@7.1.0: - resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} + workbox-recipes@7.3.0: + resolution: {integrity: sha512-BJro/MpuW35I/zjZQBcoxsctgeB+kyb2JAP5EB3EYzePg8wDGoQuUdyYQS+CheTb+GhqJeWmVs3QxLI8EBP1sg==} - workbox-routing@7.1.0: - resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} + workbox-routing@7.3.0: + resolution: {integrity: sha512-ZUlysUVn5ZUzMOmQN3bqu+gK98vNfgX/gSTZ127izJg/pMMy4LryAthnYtjuqcjkN4HEAx1mdgxNiKJMZQM76A==} - workbox-strategies@7.1.0: - resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} + workbox-strategies@7.3.0: + resolution: {integrity: sha512-tmZydug+qzDFATwX7QiEL5Hdf7FrkhjaF9db1CbB39sDmEZJg3l9ayDvPxy8Y18C3Y66Nrr9kkN1f/RlkDgllg==} - workbox-streams@7.1.0: - resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} + workbox-streams@7.3.0: + resolution: {integrity: sha512-SZnXucyg8x2Y61VGtDjKPO5EgPUG5NDn/v86WYHX+9ZqvAsGOytP0Jxp1bl663YUuMoXSAtsGLL+byHzEuMRpw==} - workbox-sw@7.1.0: - resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} + workbox-sw@7.3.0: + resolution: {integrity: sha512-aCUyoAZU9IZtH05mn0ACUpyHzPs0lMeJimAYkQkBsOWiqaJLgusfDCR+yllkPkFRxWpZKF8vSvgHYeG7LwhlmA==} - workbox-window@7.1.0: - resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + workbox-window@7.3.0: + resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==} wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -9782,14 +9395,11 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -9841,7 +9451,7 @@ snapshots: '@actions/http-client@2.2.3': dependencies: tunnel: 0.0.6 - undici: 5.28.4 + undici: 5.28.5 '@actions/io@1.1.3': {} @@ -9867,121 +9477,122 @@ snapshots: transitivePeerDependencies: - supports-color - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - search-insights: 2.17.2 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - '@algolia/client-search': 4.24.0 - algoliasearch: 4.24.0 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + '@algolia/client-search': 5.20.0 + algoliasearch: 5.20.0 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)': dependencies: - '@algolia/client-search': 4.24.0 - algoliasearch: 4.24.0 + '@algolia/client-search': 5.20.0 + algoliasearch: 5.20.0 - '@algolia/cache-browser-local-storage@4.24.0': + '@algolia/client-abtesting@5.20.0': dependencies: - '@algolia/cache-common': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/cache-common@4.24.0': {} - - '@algolia/cache-in-memory@4.24.0': + '@algolia/client-analytics@5.20.0': dependencies: - '@algolia/cache-common': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/client-account@4.24.0': + '@algolia/client-common@5.20.0': {} + + '@algolia/client-insights@5.20.0': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/client-analytics@4.24.0': + '@algolia/client-personalization@5.20.0': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/client-common@4.24.0': + '@algolia/client-query-suggestions@5.20.0': dependencies: - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/client-personalization@4.24.0': + '@algolia/client-search@5.20.0': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/client-search@4.24.0': + '@algolia/ingestion@1.20.0': dependencies: - '@algolia/client-common': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/logger-common@4.24.0': {} - - '@algolia/logger-console@4.24.0': + '@algolia/monitoring@1.20.0': dependencies: - '@algolia/logger-common': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/recommend@4.24.0': + '@algolia/recommend@5.20.0': dependencies: - '@algolia/cache-browser-local-storage': 4.24.0 - '@algolia/cache-common': 4.24.0 - '@algolia/cache-in-memory': 4.24.0 - '@algolia/client-common': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/logger-console': 4.24.0 - '@algolia/requester-browser-xhr': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-common': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 - '@algolia/requester-browser-xhr@4.24.0': + '@algolia/requester-browser-xhr@5.20.0': dependencies: - '@algolia/requester-common': 4.24.0 + '@algolia/client-common': 5.20.0 - '@algolia/requester-common@4.24.0': {} - - '@algolia/requester-node-http@4.24.0': + '@algolia/requester-fetch@5.20.0': dependencies: - '@algolia/requester-common': 4.24.0 + '@algolia/client-common': 5.20.0 - '@algolia/transporter@4.24.0': + '@algolia/requester-node-http@5.20.0': dependencies: - '@algolia/cache-common': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/requester-common': 4.24.0 + '@algolia/client-common': 5.20.0 '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@antfu/install-pkg@0.4.1': dependencies: - package-manager-detector: 0.2.1 - tinyexec: 0.3.0 + package-manager-detector: 0.2.9 + tinyexec: 0.3.2 '@antfu/utils@0.7.10': {} @@ -9992,64 +9603,33 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - '@applitools/core-base@1.16.1': + '@applitools/core-base@1.22.1': dependencies: - '@applitools/image': 1.1.13 - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/utils': 1.7.4 + '@applitools/image': 1.1.16 + '@applitools/logger': 2.1.0 + '@applitools/req': 1.7.7 + '@applitools/utils': 1.7.7 abort-controller: 3.0.0 throat: 6.0.2 transitivePeerDependencies: - supports-color - '@applitools/core@4.18.2(encoding@0.1.13)(typescript@5.4.5)': + '@applitools/core@4.31.0(encoding@0.1.13)(typescript@5.4.5)': dependencies: - '@applitools/core-base': 1.16.1 - '@applitools/dom-capture': 11.4.0 - '@applitools/dom-snapshot': 4.11.3 - '@applitools/driver': 1.19.0 - '@applitools/ec-client': 1.9.4(typescript@5.4.5) - '@applitools/logger': 2.0.18 - '@applitools/nml-client': 1.8.10 - '@applitools/req': 1.7.2 - '@applitools/screenshoter': 3.8.36 - '@applitools/snippets': 2.4.27 - '@applitools/socket': 1.1.18 - '@applitools/spec-driver-webdriver': 1.1.12(webdriver@7.31.1(typescript@5.4.5)) - '@applitools/ufg-client': 1.12.3 - '@applitools/utils': 1.7.4 - '@types/ws': 8.5.5 - abort-controller: 3.0.0 - chalk: 4.1.2 - node-fetch: 2.6.7(encoding@0.1.13) - semver: 7.6.2 - webdriver: 7.31.1(typescript@5.4.5) - ws: 8.17.1 - yargs: 17.7.2 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - typescript - - utf-8-validate - - '@applitools/core@4.19.0(encoding@0.1.13)(typescript@5.4.5)': - dependencies: - '@applitools/core-base': 1.16.1 - '@applitools/dom-capture': 11.5.0 - '@applitools/dom-snapshot': 4.11.3 - '@applitools/driver': 1.19.1 - '@applitools/ec-client': 1.9.5(typescript@5.4.5) - '@applitools/logger': 2.0.18 - '@applitools/nml-client': 1.8.11 - '@applitools/req': 1.7.2 - '@applitools/screenshoter': 3.8.37 - '@applitools/snippets': 2.5.0 - '@applitools/socket': 1.1.18 - '@applitools/spec-driver-webdriver': 1.1.13(webdriver@7.31.1(typescript@5.4.5)) - '@applitools/ufg-client': 1.12.3 - '@applitools/utils': 1.7.4 + '@applitools/core-base': 1.22.1 + '@applitools/dom-capture': 11.5.4 + '@applitools/dom-snapshot': 4.11.15 + '@applitools/driver': 1.20.4 + '@applitools/ec-client': 1.10.3(typescript@5.4.5) + '@applitools/logger': 2.1.0 + '@applitools/nml-client': 1.8.24 + '@applitools/req': 1.7.7 + '@applitools/screenshoter': 3.10.5 + '@applitools/snippets': 2.6.4 + '@applitools/socket': 1.2.1 + '@applitools/spec-driver-webdriver': 1.1.25(webdriver@7.31.1(typescript@5.4.5)) + '@applitools/ufg-client': 1.16.3 + '@applitools/utils': 1.7.7 '@types/ws': 8.5.5 abort-controller: 3.0.0 chalk: 4.1.2 @@ -10070,70 +9650,39 @@ snapshots: mdn-data: 2.1.0 source-map-js: 1.0.1 - '@applitools/dom-capture@11.4.0': + '@applitools/dom-capture@11.5.4': dependencies: - '@applitools/dom-shared': 1.0.15 + '@applitools/dom-shared': 1.0.16 '@applitools/functional-commons': 1.6.0 - '@applitools/dom-capture@11.5.0': - dependencies: - '@applitools/dom-shared': 1.0.15 - '@applitools/functional-commons': 1.6.0 + '@applitools/dom-shared@1.0.16': {} - '@applitools/dom-shared@1.0.15': {} - - '@applitools/dom-snapshot@4.11.3': + '@applitools/dom-snapshot@4.11.15': dependencies: '@applitools/css-tree': 1.1.4 - '@applitools/dom-shared': 1.0.15 + '@applitools/dom-shared': 1.0.16 '@applitools/functional-commons': 1.6.0 pako: 1.0.11 - '@applitools/driver@1.19.0': + '@applitools/driver@1.20.4': dependencies: - '@applitools/logger': 2.0.18 - '@applitools/snippets': 2.4.27 - '@applitools/utils': 1.7.4 + '@applitools/logger': 2.1.0 + '@applitools/snippets': 2.6.4 + '@applitools/utils': 1.7.7 semver: 7.6.2 transitivePeerDependencies: - supports-color - '@applitools/driver@1.19.1': + '@applitools/ec-client@1.10.3(typescript@5.4.5)': dependencies: - '@applitools/logger': 2.0.18 - '@applitools/snippets': 2.5.0 - '@applitools/utils': 1.7.4 - semver: 7.6.2 - transitivePeerDependencies: - - supports-color - - '@applitools/ec-client@1.9.4(typescript@5.4.5)': - dependencies: - '@applitools/core-base': 1.16.1 - '@applitools/driver': 1.19.0 - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/socket': 1.1.18 - '@applitools/spec-driver-webdriver': 1.1.12(webdriver@7.31.1(typescript@5.4.5)) - '@applitools/tunnel-client': 1.5.8 - '@applitools/utils': 1.7.4 - abort-controller: 3.0.0 - webdriver: 7.31.1(typescript@5.4.5) - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - typescript - - '@applitools/ec-client@1.9.5(typescript@5.4.5)': - dependencies: - '@applitools/core-base': 1.16.1 - '@applitools/driver': 1.19.1 - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/socket': 1.1.18 - '@applitools/spec-driver-webdriver': 1.1.13(webdriver@7.31.1(typescript@5.4.5)) - '@applitools/tunnel-client': 1.5.8 - '@applitools/utils': 1.7.4 + '@applitools/core-base': 1.22.1 + '@applitools/driver': 1.20.4 + '@applitools/logger': 2.1.0 + '@applitools/req': 1.7.7 + '@applitools/socket': 1.2.1 + '@applitools/spec-driver-webdriver': 1.1.25(webdriver@7.31.1(typescript@5.4.5)) + '@applitools/tunnel-client': 1.6.1 + '@applitools/utils': 1.7.7 abort-controller: 3.0.0 webdriver: 7.31.1(typescript@5.4.5) yargs: 17.7.2 @@ -10153,11 +9702,11 @@ snapshots: '@applitools/eg-frpc': 1.0.5 '@applitools/eg-socks5-proxy-server': 0.5.6 '@applitools/logger': 1.1.53 - dotenv: 16.4.5 + dotenv: 16.4.7 encoding: 0.1.13 - fastify: 4.28.1 + fastify: 4.29.0 fastify-plugin: 3.0.1 - find-process: 1.4.7 + find-process: 1.4.10 ini: 3.0.1 node-cleanup: 2.1.2 node-fetch: 2.6.7(encoding@0.1.13) @@ -10167,13 +9716,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@applitools/eyes-cypress@3.44.9(encoding@0.1.13)(typescript@5.4.5)': + '@applitools/eyes-cypress@3.50.0(encoding@0.1.13)(typescript@5.4.5)': dependencies: - '@applitools/core': 4.19.0(encoding@0.1.13)(typescript@5.4.5) - '@applitools/eyes': 1.22.2(encoding@0.1.13)(typescript@5.4.5) + '@applitools/core': 4.31.0(encoding@0.1.13)(typescript@5.4.5) + '@applitools/eyes': 1.32.0(encoding@0.1.13)(typescript@5.4.5) '@applitools/functional-commons': 1.6.0 - '@applitools/logger': 2.0.18 - '@applitools/utils': 1.7.4 + '@applitools/logger': 2.1.0 + '@applitools/utils': 1.7.7 boxen: 5.1.2 chalk: 3.0.0 semver: 7.6.2 @@ -10186,11 +9735,12 @@ snapshots: - typescript - utf-8-validate - '@applitools/eyes@1.22.2(encoding@0.1.13)(typescript@5.4.5)': + '@applitools/eyes@1.32.0(encoding@0.1.13)(typescript@5.4.5)': dependencies: - '@applitools/core': 4.18.2(encoding@0.1.13)(typescript@5.4.5) - '@applitools/logger': 2.0.18 - '@applitools/utils': 1.7.4 + '@applitools/core': 4.31.0(encoding@0.1.13)(typescript@5.4.5) + '@applitools/logger': 2.1.0 + '@applitools/utils': 1.7.7 + chalk: 4.1.2 transitivePeerDependencies: - bufferutil - encoding @@ -10200,9 +9750,9 @@ snapshots: '@applitools/functional-commons@1.6.0': {} - '@applitools/image@1.1.13': + '@applitools/image@1.1.16': dependencies: - '@applitools/utils': 1.7.4 + '@applitools/utils': 1.7.7 bmpimagejs: 1.0.4 jpeg-js: 0.4.4 omggif: 1.0.10 @@ -10216,33 +9766,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@applitools/logger@2.0.18': + '@applitools/logger@2.1.0': dependencies: - '@applitools/utils': 1.7.4 + '@applitools/utils': 1.7.7 chalk: 4.1.2 debug: 4.3.4 transitivePeerDependencies: - supports-color - '@applitools/nml-client@1.8.10': + '@applitools/nml-client@1.8.24': dependencies: - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/utils': 1.7.4 + '@applitools/logger': 2.1.0 + '@applitools/req': 1.7.7 + '@applitools/utils': 1.7.7 transitivePeerDependencies: - supports-color - '@applitools/nml-client@1.8.11': + '@applitools/req@1.7.7': dependencies: - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/utils': 1.7.4 - transitivePeerDependencies: - - supports-color - - '@applitools/req@1.7.2': - dependencies: - '@applitools/utils': 1.7.4 + '@applitools/utils': 1.7.7 abort-controller: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 @@ -10250,74 +9792,53 @@ snapshots: transitivePeerDependencies: - supports-color - '@applitools/screenshoter@3.8.36': + '@applitools/screenshoter@3.10.5': dependencies: - '@applitools/image': 1.1.13 - '@applitools/logger': 2.0.18 - '@applitools/snippets': 2.4.27 - '@applitools/utils': 1.7.4 + '@applitools/image': 1.1.16 + '@applitools/logger': 2.1.0 + '@applitools/snippets': 2.6.4 + '@applitools/utils': 1.7.7 transitivePeerDependencies: - supports-color - '@applitools/screenshoter@3.8.37': + '@applitools/snippets@2.6.4': {} + + '@applitools/socket@1.2.1': dependencies: - '@applitools/image': 1.1.13 - '@applitools/logger': 2.0.18 - '@applitools/snippets': 2.5.0 - '@applitools/utils': 1.7.4 + '@applitools/logger': 2.1.0 + '@applitools/utils': 1.7.7 transitivePeerDependencies: - supports-color - '@applitools/snippets@2.4.27': {} - - '@applitools/snippets@2.5.0': {} - - '@applitools/socket@1.1.18': + '@applitools/spec-driver-webdriver@1.1.25(webdriver@7.31.1(typescript@5.4.5))': dependencies: - '@applitools/logger': 2.0.18 - '@applitools/utils': 1.7.4 - transitivePeerDependencies: - - supports-color - - '@applitools/spec-driver-webdriver@1.1.12(webdriver@7.31.1(typescript@5.4.5))': - dependencies: - '@applitools/driver': 1.19.0 - '@applitools/utils': 1.7.4 + '@applitools/driver': 1.20.4 + '@applitools/utils': 1.7.7 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 webdriver: 7.31.1(typescript@5.4.5) transitivePeerDependencies: - supports-color - '@applitools/spec-driver-webdriver@1.1.13(webdriver@7.31.1(typescript@5.4.5))': - dependencies: - '@applitools/driver': 1.19.1 - '@applitools/utils': 1.7.4 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - webdriver: 7.31.1(typescript@5.4.5) - transitivePeerDependencies: - - supports-color - - '@applitools/tunnel-client@1.5.8': + '@applitools/tunnel-client@1.6.1': dependencies: '@applitools/execution-grid-tunnel': 3.0.8 - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/socket': 1.1.18 - '@applitools/utils': 1.7.4 + '@applitools/logger': 2.1.0 + '@applitools/req': 1.7.7 + '@applitools/socket': 1.2.1 + '@applitools/utils': 1.7.7 abort-controller: 3.0.0 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@applitools/ufg-client@1.12.3': + '@applitools/ufg-client@1.16.3': dependencies: '@applitools/css-tree': 1.1.4 - '@applitools/image': 1.1.13 - '@applitools/logger': 2.0.18 - '@applitools/req': 1.7.2 - '@applitools/utils': 1.7.4 + '@applitools/image': 1.1.16 + '@applitools/logger': 2.1.0 + '@applitools/req': 1.7.7 + '@applitools/utils': 1.7.7 '@xmldom/xmldom': 0.8.10 abort-controller: 3.0.0 throat: 6.0.2 @@ -10326,43 +9847,49 @@ snapshots: '@applitools/utils@1.3.36': {} - '@applitools/utils@1.7.4': {} + '@applitools/utils@1.7.7': {} - '@argos-ci/api-client@0.5.0': + '@argos-ci/api-client@0.7.2': dependencies: - openapi-fetch: 0.11.3 + debug: 4.4.0(supports-color@8.1.1) + openapi-fetch: 0.13.4 + transitivePeerDependencies: + - supports-color - '@argos-ci/browser@2.1.4': {} + '@argos-ci/browser@2.2.2': {} - '@argos-ci/core@2.8.1': + '@argos-ci/core@3.0.0': dependencies: - '@argos-ci/api-client': 0.5.0 - '@argos-ci/util': 2.1.1 - axios: 1.7.7(debug@4.3.7) + '@argos-ci/api-client': 0.7.2 + '@argos-ci/util': 2.2.2 + axios: 1.7.9(debug@4.4.0) convict: 6.2.4 - debug: 4.3.7(supports-color@8.1.1) - fast-glob: 3.3.2 + debug: 4.4.0(supports-color@8.1.1) + fast-glob: 3.3.3 sharp: 0.33.5 tmp: 0.2.3 transitivePeerDependencies: - supports-color - '@argos-ci/cypress@2.2.2(cypress@13.15.0)': + '@argos-ci/cypress@2.3.4(cypress@13.17.0)': dependencies: - '@argos-ci/browser': 2.1.4 - '@argos-ci/core': 2.8.1 - '@argos-ci/util': 2.1.1 - cypress: 13.15.0 + '@argos-ci/browser': 2.2.2 + '@argos-ci/core': 3.0.0 + '@argos-ci/util': 2.2.2 + cypress: 13.17.0 cypress-wait-until: 3.0.2 transitivePeerDependencies: - supports-color - '@argos-ci/util@2.1.1': {} + '@argos-ci/util@2.2.2': {} - '@babel/code-frame@7.25.7': + '@asamuzakjp/css-color@2.8.3': dependencies: - '@babel/highlight': 7.25.7 - picocolors: 1.1.1 + '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + lru-cache: 10.4.3 '@babel/code-frame@7.26.2': dependencies: @@ -10370,30 +9897,8 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.25.7': {} - '@babel/compat-data@7.26.5': {} - '@babel/core@7.25.7': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helpers': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 - convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/core@7.26.7': dependencies: '@ampproject/remapping': 2.3.0 @@ -10407,20 +9912,13 @@ snapshots: '@babel/traverse': 7.26.7 '@babel/types': 7.26.7 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.25.7': - dependencies: - '@babel/types': 7.25.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - '@babel/generator@7.26.5': dependencies: '@babel/parser': 7.26.7 @@ -10429,56 +9927,18 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.25.7': - dependencies: - '@babel/types': 7.25.7 - '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.7 - '@babel/helper-compilation-targets@7.25.7': - dependencies: - '@babel/compat-data': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - browserslist: 4.24.0 - lru-cache: 5.1.1 - semver: 6.3.1 - '@babel/helper-compilation-targets@7.26.5': dependencies: '@babel/compat-data': 7.26.5 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.0 + browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/traverse': 7.25.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10492,13 +9952,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.2.0 - semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10506,35 +9959,17 @@ snapshots: regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0 - lodash.debounce: 4.0.8 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0 + debug: 4.4.0(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: - supports-color - '@babel/helper-member-expression-to-functions@7.25.7': - dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.26.7 @@ -10542,13 +9977,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.7': - dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.26.7 @@ -10556,25 +9984,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.26.0(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10584,27 +9993,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.25.7': - dependencies: - '@babel/types': 7.25.7 - '@babel/helper-optimise-call-expression@7.25.9': dependencies: '@babel/types': 7.26.7 - '@babel/helper-plugin-utils@7.25.7': {} - '@babel/helper-plugin-utils@7.26.5': {} - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10614,24 +10008,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/traverse': 7.25.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.26.5(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10641,20 +10017,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-simple-access@7.25.7': - dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.25.7': - dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: '@babel/traverse': 7.26.7 @@ -10662,16 +10024,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.7': {} - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.25.7': {} - '@babel/helper-validator-option@7.25.9': {} '@babel/helper-wrap-function@7.25.9': @@ -10682,39 +10038,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.25.7': - dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 - '@babel/helpers@7.26.7': dependencies: '@babel/template': 7.25.9 '@babel/types': 7.26.7 - '@babel/highlight@7.25.7': - dependencies: - '@babel/helper-validator-identifier': 7.25.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/parser@7.25.7': - dependencies: - '@babel/types': 7.25.7 - '@babel/parser@7.26.7': dependencies: '@babel/types': 7.26.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10723,35 +10055,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.7) - transitivePeerDependencies: - - supports-color - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10761,14 +10074,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10777,47 +10082,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.25.7)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.7)': @@ -10825,85 +10111,69 @@ snapshots: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.7) + '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.7)': @@ -10912,25 +10182,11 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.7) - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10940,15 +10196,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.7) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10958,34 +10205,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -10994,14 +10223,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11010,18 +10231,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.7) - '@babel/traverse': 7.26.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11034,100 +10243,49 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.25.9 - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/template': 7.25.9 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11136,15 +10294,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11154,54 +10303,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11210,23 +10331,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11235,16 +10339,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11255,14 +10349,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11271,55 +10357,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11327,14 +10385,6 @@ snapshots: '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.7) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11343,24 +10393,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11369,24 +10406,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11395,15 +10419,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11413,22 +10428,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - regenerator-transform: 0.15.2 - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11441,34 +10445,16 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11477,182 +10463,55 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-typescript@7.26.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-env@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/compat-data': 7.26.5 - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.25.7) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.25.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.7) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.25.7) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.25.7) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.25.7) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.7) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.25.7) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.25.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.7) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.25.7) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.25.7) - core-js-compat: 3.40.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/preset-env@7.26.7(@babel/core@7.26.7)': dependencies: '@babel/compat-data': 7.26.5 @@ -11728,13 +10587,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.7 - esutils: 2.0.3 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -11742,49 +10594,27 @@ snapshots: '@babel/types': 7.26.7 esutils: 2.0.3 - '@babel/preset-typescript@7.25.7(@babel/core@7.25.7)': + '@babel/preset-typescript@7.26.0(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.7) + '@babel/plugin-transform-typescript': 7.26.7(@babel/core@7.26.7) transitivePeerDependencies: - supports-color - '@babel/runtime@7.25.7': - dependencies: - regenerator-runtime: 0.14.1 - '@babel/runtime@7.26.7': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.7': - dependencies: - '@babel/code-frame': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 - '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.7 '@babel/types': 7.26.7 - '@babel/traverse@7.25.7': - dependencies: - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 - debug: 4.3.7(supports-color@8.1.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.26.7': dependencies: '@babel/code-frame': 7.26.2 @@ -11792,17 +10622,11 @@ snapshots: '@babel/parser': 7.26.7 '@babel/template': 7.25.9 '@babel/types': 7.26.7 - debug: 4.4.0 + debug: 4.4.0(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.7': - dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - to-fast-properties: 2.0.0 - '@babel/types@7.26.7': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -11817,13 +10641,13 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@braintree/sanitize-url@7.1.0': {} + '@braintree/sanitize-url@7.1.1': {} - '@changesets/apply-release-plan@7.0.5': + '@changesets/apply-release-plan@7.0.8': dependencies: - '@changesets/config': 3.0.3 + '@changesets/config': 3.0.5 '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.1 + '@changesets/git': 3.0.2 '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -11833,16 +10657,16 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.7.0 - '@changesets/assemble-release-plan@6.0.4': + '@changesets/assemble-release-plan@6.0.5': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.2 '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.3 + semver: 7.7.0 '@changesets/changelog-git@0.2.0': dependencies: @@ -11856,19 +10680,19 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.27.9': + '@changesets/cli@2.27.12': dependencies: - '@changesets/apply-release-plan': 7.0.5 - '@changesets/assemble-release-plan': 6.0.4 + '@changesets/apply-release-plan': 7.0.8 + '@changesets/assemble-release-plan': 6.0.5 '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.3 + '@changesets/config': 3.0.5 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.4 - '@changesets/git': 3.0.1 + '@changesets/get-release-plan': 4.0.6 + '@changesets/git': 3.0.2 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.1 + '@changesets/read': 0.6.2 '@changesets/should-skip-package': 0.1.1 '@changesets/types': 6.0.0 '@changesets/write': 0.3.2 @@ -11880,14 +10704,14 @@ snapshots: fs-extra: 7.0.1 mri: 1.2.0 p-limit: 2.3.0 - package-manager-detector: 0.2.1 - picocolors: 1.1.0 + package-manager-detector: 0.2.9 + picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.6.3 - spawndamnit: 2.0.0 + semver: 7.7.0 + spawndamnit: 3.0.1 term-size: 2.2.1 - '@changesets/config@3.0.3': + '@changesets/config@3.0.5': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.2 @@ -11905,8 +10729,8 @@ snapshots: dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - picocolors: 1.1.0 - semver: 7.6.3 + picocolors: 1.1.1 + semver: 7.7.0 '@changesets/get-github-info@0.6.0(encoding@0.1.13)': dependencies: @@ -11915,28 +10739,28 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.4': + '@changesets/get-release-plan@4.0.6': dependencies: - '@changesets/assemble-release-plan': 6.0.4 - '@changesets/config': 3.0.3 + '@changesets/assemble-release-plan': 6.0.5 + '@changesets/config': 3.0.5 '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.1 + '@changesets/read': 0.6.2 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@3.0.1': + '@changesets/git@3.0.2': dependencies: '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 micromatch: 4.0.8 - spawndamnit: 2.0.0 + spawndamnit: 3.0.1 '@changesets/logger@0.1.1': dependencies: - picocolors: 1.1.0 + picocolors: 1.1.1 '@changesets/parse@0.4.0': dependencies: @@ -11950,15 +10774,15 @@ snapshots: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.1': + '@changesets/read@0.6.2': dependencies: - '@changesets/git': 3.0.1 + '@changesets/git': 3.0.2 '@changesets/logger': 0.1.1 '@changesets/parse': 0.4.0 '@changesets/types': 6.0.0 fs-extra: 7.0.1 p-filter: 2.1.0 - picocolors: 1.1.0 + picocolors: 1.1.1 '@changesets/should-skip-package@0.1.1': dependencies: @@ -11996,224 +10820,265 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@cspell/cspell-bundled-dicts@8.14.4': + '@cspell/cspell-bundled-dicts@8.17.3': dependencies: - '@cspell/dict-ada': 4.0.2 - '@cspell/dict-aws': 4.0.4 - '@cspell/dict-bash': 4.1.5 - '@cspell/dict-companies': 3.1.4 - '@cspell/dict-cpp': 5.1.19 - '@cspell/dict-cryptocurrencies': 5.0.0 - '@cspell/dict-csharp': 4.0.2 - '@cspell/dict-css': 4.0.13 - '@cspell/dict-dart': 2.2.1 - '@cspell/dict-django': 4.1.0 - '@cspell/dict-docker': 1.1.7 - '@cspell/dict-dotnet': 5.0.5 - '@cspell/dict-elixir': 4.0.3 - '@cspell/dict-en-common-misspellings': 2.0.4 + '@cspell/dict-ada': 4.1.0 + '@cspell/dict-al': 1.1.0 + '@cspell/dict-aws': 4.0.9 + '@cspell/dict-bash': 4.2.0 + '@cspell/dict-companies': 3.1.13 + '@cspell/dict-cpp': 6.0.3 + '@cspell/dict-cryptocurrencies': 5.0.4 + '@cspell/dict-csharp': 4.0.6 + '@cspell/dict-css': 4.0.17 + '@cspell/dict-dart': 2.3.0 + '@cspell/dict-data-science': 2.0.7 + '@cspell/dict-django': 4.1.4 + '@cspell/dict-docker': 1.1.12 + '@cspell/dict-dotnet': 5.0.9 + '@cspell/dict-elixir': 4.0.7 + '@cspell/dict-en-common-misspellings': 2.0.9 '@cspell/dict-en-gb': 1.1.33 - '@cspell/dict-en_us': 4.3.23 - '@cspell/dict-filetypes': 3.0.4 - '@cspell/dict-flutter': 1.0.0 - '@cspell/dict-fonts': 4.0.0 - '@cspell/dict-fsharp': 1.0.1 - '@cspell/dict-fullstack': 3.2.0 - '@cspell/dict-gaming-terms': 1.0.5 - '@cspell/dict-git': 3.0.0 - '@cspell/dict-golang': 6.0.13 - '@cspell/dict-google': 1.0.1 - '@cspell/dict-haskell': 4.0.1 - '@cspell/dict-html': 4.0.6 - '@cspell/dict-html-symbol-entities': 4.0.0 - '@cspell/dict-java': 5.0.7 - '@cspell/dict-julia': 1.0.1 - '@cspell/dict-k8s': 1.0.6 - '@cspell/dict-latex': 4.0.0 - '@cspell/dict-lorem-ipsum': 4.0.0 - '@cspell/dict-lua': 4.0.3 - '@cspell/dict-makefile': 1.0.0 - '@cspell/dict-monkeyc': 1.0.6 - '@cspell/dict-node': 5.0.1 - '@cspell/dict-npm': 5.1.5 - '@cspell/dict-php': 4.0.10 - '@cspell/dict-powershell': 5.0.10 - '@cspell/dict-public-licenses': 2.0.8 - '@cspell/dict-python': 4.2.8 - '@cspell/dict-r': 2.0.1 - '@cspell/dict-ruby': 5.0.4 - '@cspell/dict-rust': 4.0.6 - '@cspell/dict-scala': 5.0.3 - '@cspell/dict-software-terms': 4.1.7 - '@cspell/dict-sql': 2.1.5 - '@cspell/dict-svelte': 1.0.2 - '@cspell/dict-swift': 2.0.1 - '@cspell/dict-terraform': 1.0.2 - '@cspell/dict-typescript': 3.1.6 - '@cspell/dict-vue': 3.0.0 + '@cspell/dict-en_us': 4.3.30 + '@cspell/dict-filetypes': 3.0.10 + '@cspell/dict-flutter': 1.1.0 + '@cspell/dict-fonts': 4.0.4 + '@cspell/dict-fsharp': 1.1.0 + '@cspell/dict-fullstack': 3.2.3 + '@cspell/dict-gaming-terms': 1.1.0 + '@cspell/dict-git': 3.0.4 + '@cspell/dict-golang': 6.0.18 + '@cspell/dict-google': 1.0.8 + '@cspell/dict-haskell': 4.0.5 + '@cspell/dict-html': 4.0.11 + '@cspell/dict-html-symbol-entities': 4.0.3 + '@cspell/dict-java': 5.0.11 + '@cspell/dict-julia': 1.1.0 + '@cspell/dict-k8s': 1.0.10 + '@cspell/dict-kotlin': 1.1.0 + '@cspell/dict-latex': 4.0.3 + '@cspell/dict-lorem-ipsum': 4.0.4 + '@cspell/dict-lua': 4.0.7 + '@cspell/dict-makefile': 1.0.4 + '@cspell/dict-markdown': 2.0.9(@cspell/dict-css@4.0.17)(@cspell/dict-html-symbol-entities@4.0.3)(@cspell/dict-html@4.0.11)(@cspell/dict-typescript@3.2.0) + '@cspell/dict-monkeyc': 1.0.10 + '@cspell/dict-node': 5.0.6 + '@cspell/dict-npm': 5.1.24 + '@cspell/dict-php': 4.0.14 + '@cspell/dict-powershell': 5.0.14 + '@cspell/dict-public-licenses': 2.0.13 + '@cspell/dict-python': 4.2.15 + '@cspell/dict-r': 2.1.0 + '@cspell/dict-ruby': 5.0.7 + '@cspell/dict-rust': 4.0.11 + '@cspell/dict-scala': 5.0.7 + '@cspell/dict-shell': 1.1.0 + '@cspell/dict-software-terms': 4.2.4 + '@cspell/dict-sql': 2.2.0 + '@cspell/dict-svelte': 1.0.6 + '@cspell/dict-swift': 2.0.5 + '@cspell/dict-terraform': 1.1.0 + '@cspell/dict-typescript': 3.2.0 + '@cspell/dict-vue': 3.0.4 - '@cspell/cspell-json-reporter@8.14.4': + '@cspell/cspell-json-reporter@8.17.3': dependencies: - '@cspell/cspell-types': 8.14.4 + '@cspell/cspell-types': 8.17.3 - '@cspell/cspell-pipe@8.14.4': {} + '@cspell/cspell-pipe@8.17.3': {} - '@cspell/cspell-resolver@8.14.4': + '@cspell/cspell-resolver@8.17.3': dependencies: global-directory: 4.0.1 - '@cspell/cspell-service-bus@8.14.4': {} + '@cspell/cspell-service-bus@8.17.3': {} - '@cspell/cspell-types@8.14.4': {} + '@cspell/cspell-types@8.17.3': {} - '@cspell/dict-ada@4.0.2': {} + '@cspell/dict-ada@4.1.0': {} - '@cspell/dict-aws@4.0.4': {} + '@cspell/dict-al@1.1.0': {} - '@cspell/dict-bash@4.1.5': {} + '@cspell/dict-aws@4.0.9': {} - '@cspell/dict-companies@3.1.4': {} + '@cspell/dict-bash@4.2.0': + dependencies: + '@cspell/dict-shell': 1.1.0 - '@cspell/dict-cpp@5.1.19': {} + '@cspell/dict-companies@3.1.13': {} - '@cspell/dict-cryptocurrencies@5.0.0': {} + '@cspell/dict-cpp@6.0.3': {} - '@cspell/dict-csharp@4.0.2': {} + '@cspell/dict-cryptocurrencies@5.0.4': {} - '@cspell/dict-css@4.0.13': {} + '@cspell/dict-csharp@4.0.6': {} - '@cspell/dict-dart@2.2.1': {} + '@cspell/dict-css@4.0.17': {} - '@cspell/dict-data-science@2.0.2': {} + '@cspell/dict-dart@2.3.0': {} - '@cspell/dict-django@4.1.0': {} + '@cspell/dict-data-science@2.0.7': {} - '@cspell/dict-docker@1.1.7': {} + '@cspell/dict-django@4.1.4': {} - '@cspell/dict-dotnet@5.0.5': {} + '@cspell/dict-docker@1.1.12': {} - '@cspell/dict-elixir@4.0.3': {} + '@cspell/dict-dotnet@5.0.9': {} - '@cspell/dict-en-common-misspellings@2.0.4': {} + '@cspell/dict-elixir@4.0.7': {} + + '@cspell/dict-en-common-misspellings@2.0.9': {} '@cspell/dict-en-gb@1.1.33': {} - '@cspell/dict-en_us@4.3.23': {} + '@cspell/dict-en_us@4.3.30': {} - '@cspell/dict-filetypes@3.0.4': {} + '@cspell/dict-filetypes@3.0.10': {} - '@cspell/dict-flutter@1.0.0': {} + '@cspell/dict-flutter@1.1.0': {} - '@cspell/dict-fonts@4.0.0': {} + '@cspell/dict-fonts@4.0.4': {} - '@cspell/dict-fsharp@1.0.1': {} + '@cspell/dict-fsharp@1.1.0': {} - '@cspell/dict-fullstack@3.2.0': {} + '@cspell/dict-fullstack@3.2.3': {} - '@cspell/dict-gaming-terms@1.0.5': {} + '@cspell/dict-gaming-terms@1.1.0': {} - '@cspell/dict-git@3.0.0': {} + '@cspell/dict-git@3.0.4': {} - '@cspell/dict-golang@6.0.13': {} + '@cspell/dict-golang@6.0.18': {} - '@cspell/dict-google@1.0.1': {} + '@cspell/dict-google@1.0.8': {} - '@cspell/dict-haskell@4.0.1': {} + '@cspell/dict-haskell@4.0.5': {} - '@cspell/dict-html-symbol-entities@4.0.0': {} + '@cspell/dict-html-symbol-entities@4.0.3': {} - '@cspell/dict-html@4.0.6': {} + '@cspell/dict-html@4.0.11': {} - '@cspell/dict-java@5.0.7': {} + '@cspell/dict-java@5.0.11': {} - '@cspell/dict-julia@1.0.1': {} + '@cspell/dict-julia@1.1.0': {} - '@cspell/dict-k8s@1.0.6': {} + '@cspell/dict-k8s@1.0.10': {} - '@cspell/dict-latex@4.0.0': {} + '@cspell/dict-kotlin@1.1.0': {} - '@cspell/dict-lorem-ipsum@4.0.0': {} + '@cspell/dict-latex@4.0.3': {} - '@cspell/dict-lua@4.0.3': {} + '@cspell/dict-lorem-ipsum@4.0.4': {} - '@cspell/dict-makefile@1.0.0': {} + '@cspell/dict-lua@4.0.7': {} - '@cspell/dict-monkeyc@1.0.6': {} + '@cspell/dict-makefile@1.0.4': {} - '@cspell/dict-node@5.0.1': {} - - '@cspell/dict-npm@5.1.5': {} - - '@cspell/dict-php@4.0.10': {} - - '@cspell/dict-powershell@5.0.10': {} - - '@cspell/dict-public-licenses@2.0.8': {} - - '@cspell/dict-python@4.2.8': + '@cspell/dict-markdown@2.0.9(@cspell/dict-css@4.0.17)(@cspell/dict-html-symbol-entities@4.0.3)(@cspell/dict-html@4.0.11)(@cspell/dict-typescript@3.2.0)': dependencies: - '@cspell/dict-data-science': 2.0.2 + '@cspell/dict-css': 4.0.17 + '@cspell/dict-html': 4.0.11 + '@cspell/dict-html-symbol-entities': 4.0.3 + '@cspell/dict-typescript': 3.2.0 - '@cspell/dict-r@2.0.1': {} + '@cspell/dict-monkeyc@1.0.10': {} - '@cspell/dict-ruby@5.0.4': {} + '@cspell/dict-node@5.0.6': {} - '@cspell/dict-rust@4.0.6': {} + '@cspell/dict-npm@5.1.24': {} - '@cspell/dict-scala@5.0.3': {} + '@cspell/dict-php@4.0.14': {} - '@cspell/dict-software-terms@4.1.7': {} + '@cspell/dict-powershell@5.0.14': {} - '@cspell/dict-sql@2.1.5': {} + '@cspell/dict-public-licenses@2.0.13': {} - '@cspell/dict-svelte@1.0.2': {} - - '@cspell/dict-swift@2.0.1': {} - - '@cspell/dict-terraform@1.0.2': {} - - '@cspell/dict-typescript@3.1.6': {} - - '@cspell/dict-vue@3.0.0': {} - - '@cspell/dynamic-import@8.14.4': + '@cspell/dict-python@4.2.15': dependencies: + '@cspell/dict-data-science': 2.0.7 + + '@cspell/dict-r@2.1.0': {} + + '@cspell/dict-ruby@5.0.7': {} + + '@cspell/dict-rust@4.0.11': {} + + '@cspell/dict-scala@5.0.7': {} + + '@cspell/dict-shell@1.1.0': {} + + '@cspell/dict-software-terms@4.2.4': {} + + '@cspell/dict-sql@2.2.0': {} + + '@cspell/dict-svelte@1.0.6': {} + + '@cspell/dict-swift@2.0.5': {} + + '@cspell/dict-terraform@1.1.0': {} + + '@cspell/dict-typescript@3.2.0': {} + + '@cspell/dict-vue@3.0.4': {} + + '@cspell/dynamic-import@8.17.3': + dependencies: + '@cspell/url': 8.17.3 import-meta-resolve: 4.1.0 - '@cspell/eslint-plugin@8.14.4(eslint@9.12.0(jiti@1.21.6))': + '@cspell/eslint-plugin@8.17.3(eslint@9.19.0(jiti@1.21.7))': dependencies: - '@cspell/cspell-types': 8.14.4 - '@cspell/url': 8.14.4 - cspell-lib: 8.14.4 - eslint: 9.12.0(jiti@1.21.6) + '@cspell/cspell-types': 8.17.3 + '@cspell/url': 8.17.3 + cspell-lib: 8.17.3 + eslint: 9.19.0(jiti@1.21.7) synckit: 0.9.2 - '@cspell/filetypes@8.14.4': {} + '@cspell/filetypes@8.17.3': {} - '@cspell/strong-weak-map@8.14.4': {} + '@cspell/strong-weak-map@8.17.3': {} - '@cspell/url@8.14.4': {} + '@cspell/url@8.17.3': {} - '@cypress/code-coverage@3.13.4(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(cypress@13.15.0)(webpack@5.95.0(esbuild@0.21.5))': + '@csstools/color-helpers@5.0.1': {} + + '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': dependencies: - '@babel/core': 7.25.7 - '@babel/preset-env': 7.25.7(@babel/core@7.25.7) - '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(webpack@5.95.0(esbuild@0.21.5)) - babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/color-helpers': 5.0.1 + '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + + '@cypress/code-coverage@3.13.11(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(babel-loader@9.2.1(@babel/core@7.26.7)(webpack@5.97.1(esbuild@0.21.5)))(cypress@13.17.0)(webpack@5.97.1(esbuild@0.21.5))': + dependencies: + '@babel/core': 7.26.7 + '@babel/preset-env': 7.26.7(@babel/core@7.26.7) + '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(babel-loader@9.2.1(@babel/core@7.26.7)(webpack@5.97.1(esbuild@0.21.5)))(webpack@5.97.1(esbuild@0.21.5)) + babel-loader: 9.2.1(@babel/core@7.26.7)(webpack@5.97.1(esbuild@0.21.5)) chalk: 4.1.2 - cypress: 13.15.0 + cypress: 13.17.0 dayjs: 1.11.13 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) execa: 4.1.0 globby: 11.1.0 istanbul-lib-coverage: 3.2.2 js-yaml: 4.1.0 nyc: 15.1.0 - webpack: 5.95.0(esbuild@0.21.5) + webpack: 5.97.1(esbuild@0.21.5) transitivePeerDependencies: - supports-color - '@cypress/request@3.0.5': + '@cypress/request@3.0.7': dependencies: aws-sign2: 0.7.0 aws4: 1.13.2 @@ -12221,28 +11086,28 @@ snapshots: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 4.0.0 + form-data: 4.0.1 http-signature: 1.4.0 is-typedarray: 1.0.0 isstream: 0.1.2 json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 - qs: 6.13.0 + qs: 6.13.1 safe-buffer: 5.2.1 - tough-cookie: 4.1.4 + tough-cookie: 5.1.0 tunnel-agent: 0.6.0 uuid: 8.3.2 - '@cypress/webpack-preprocessor@6.0.2(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)))(webpack@5.95.0(esbuild@0.21.5))': + '@cypress/webpack-preprocessor@6.0.2(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(babel-loader@9.2.1(@babel/core@7.26.7)(webpack@5.97.1(esbuild@0.21.5)))(webpack@5.97.1(esbuild@0.21.5))': dependencies: - '@babel/core': 7.25.7 - '@babel/preset-env': 7.25.7(@babel/core@7.25.7) - babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)) + '@babel/core': 7.26.7 + '@babel/preset-env': 7.26.7(@babel/core@7.26.7) + babel-loader: 9.2.1(@babel/core@7.26.7)(webpack@5.97.1(esbuild@0.21.5)) bluebird: 3.7.1 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) lodash: 4.17.21 - webpack: 5.95.0(esbuild@0.21.5) + webpack: 5.97.1(esbuild@0.21.5) transitivePeerDependencies: - supports-color @@ -12256,16 +11121,16 @@ snapshots: '@dependents/detective-less@5.0.0': dependencies: gonzales-pe: 4.3.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 '@discoveryjs/json-ext@0.5.7': {} - '@docsearch/css@3.6.2': {} + '@docsearch/css@3.8.3': {} - '@docsearch/js@3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + '@docsearch/js@3.8.3(@algolia/client-search@5.20.0)(search-insights@2.17.3)': dependencies: - '@docsearch/react': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) - preact: 10.24.2 + '@docsearch/react': 3.8.3(@algolia/client-search@5.20.0)(search-insights@2.17.3) + preact: 10.25.4 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -12273,23 +11138,23 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2)': + '@docsearch/react@3.8.3(@algolia/client-search@5.20.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - '@docsearch/css': 3.6.2 - algoliasearch: 4.24.0 + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.20.0)(algoliasearch@5.20.0) + '@docsearch/css': 3.8.3 + algoliasearch: 5.20.0 optionalDependencies: - search-insights: 2.17.2 + search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - '@emnapi/runtime@1.3.0': + '@emnapi/runtime@1.3.1': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 optional: true - '@es-joy/jsdoccomment@0.48.0': + '@es-joy/jsdoccomment@0.49.0': dependencies: comment-parser: 1.4.1 esquery: 1.6.0 @@ -12436,28 +11301,30 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@1.21.6))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0(jiti@1.21.7))': dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.19.0(jiti@1.21.7) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.18.0': + '@eslint/config-array@0.19.2': dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7(supports-color@8.1.1) + '@eslint/object-schema': 2.1.6 + debug: 4.4.0(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.6.0': {} + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@8.1.1) - espree: 10.2.0 + debug: 4.4.0(supports-color@8.1.1) + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -12467,12 +11334,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.12.0': {} + '@eslint/js@9.19.0': {} - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.0': + '@eslint/plugin-kit@0.2.5': dependencies: + '@eslint/core': 0.10.0 levn: 0.4.1 '@fastify/ajv-compiler@3.6.0': @@ -12493,22 +11361,22 @@ snapshots: dependencies: fast-deep-equal: 3.1.3 - '@floating-ui/core@1.6.8': + '@floating-ui/core@1.6.9': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.11': + '@floating-ui/dom@1.6.13': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 - '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} - '@floating-ui/vue@1.1.5(vue@3.5.11(typescript@5.6.2))': + '@floating-ui/vue@1.1.6(vue@3.5.13(typescript@5.7.3))': dependencies: - '@floating-ui/dom': 1.6.11 - '@floating-ui/utils': 0.2.8 - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + '@floating-ui/dom': 1.6.13 + '@floating-ui/utils': 0.2.9 + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -12519,51 +11387,54 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@headlessui-float/vue@0.14.4(@headlessui/vue@1.7.23(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))': + '@headlessui-float/vue@0.14.4(@headlessui/vue@1.7.23(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/dom': 1.6.11 - '@floating-ui/vue': 1.1.5(vue@3.5.11(typescript@5.6.2)) - '@headlessui/vue': 1.7.23(vue@3.5.11(typescript@5.6.2)) - vue: 3.5.11(typescript@5.6.2) + '@floating-ui/core': 1.6.9 + '@floating-ui/dom': 1.6.13 + '@floating-ui/vue': 1.1.6(vue@3.5.13(typescript@5.7.3)) + '@headlessui/vue': 1.7.23(vue@3.5.13(typescript@5.7.3)) + vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - '@vue/composition-api' - '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.13)': + '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.17)': dependencies: - tailwindcss: 3.4.13 + tailwindcss: 3.4.17 - '@headlessui/vue@1.7.23(vue@3.5.11(typescript@5.6.2))': + '@headlessui/vue@1.7.23(vue@3.5.13(typescript@5.7.3))': dependencies: - '@tanstack/vue-virtual': 3.10.8(vue@3.5.11(typescript@5.6.2)) - vue: 3.5.11(typescript@5.6.2) + '@tanstack/vue-virtual': 3.11.3(vue@3.5.13(typescript@5.7.3)) + vue: 3.5.13(typescript@5.7.3) - '@humanfs/core@0.19.0': {} + '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.5': + '@humanfs/node@0.16.6': dependencies: - '@humanfs/core': 0.19.0 + '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.1': {} - '@iconify-json/carbon@1.2.1': + '@humanwhocodes/retry@0.4.1': {} + + '@iconify-json/carbon@1.2.5': dependencies: '@iconify/types': 2.0.0 '@iconify/types@2.0.0': {} - '@iconify/utils@2.1.33': + '@iconify/utils@2.2.1': dependencies: '@antfu/install-pkg': 0.4.1 '@antfu/utils': 0.7.10 '@iconify/types': 2.0.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) + globals: 15.14.0 kolorist: 1.8.0 - local-pkg: 0.5.0 - mlly: 1.7.2 + local-pkg: 0.5.1 + mlly: 1.7.4 transitivePeerDependencies: - supports-color @@ -12633,7 +11504,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.3.0 + '@emnapi/runtime': 1.3.1 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -12664,7 +11535,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -12677,14 +11548,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 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@20.16.11) + jest-config: 29.7.0(@types/node@20.17.16) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -12709,7 +11580,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -12727,7 +11598,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.16.11 + '@types/node': 20.17.16 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12749,7 +11620,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.16.11 + '@types/node': 20.17.16 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -12796,7 +11667,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -12819,16 +11690,10 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -12841,7 +11706,7 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -12857,14 +11722,14 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.7 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.7 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -12878,7 +11743,7 @@ snapshots: '@microsoft/tsdoc': 0.15.0 ajv: 8.12.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.10 '@microsoft/tsdoc@0.15.0': {} @@ -12892,7 +11757,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.19.0 '@pkgjs/parseargs@0.11.0': optional: true @@ -12936,14 +11801,14 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/plugin-typescript@11.1.6(rollup@4.32.0)(tslib@2.7.0)(typescript@5.4.5)': + '@rollup/plugin-typescript@11.1.6(rollup@4.32.1)(tslib@2.8.1)(typescript@5.4.5)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@4.32.0) - resolve: 1.22.8 + '@rollup/pluginutils': 5.1.4(rollup@4.32.1) + resolve: 1.22.10 typescript: 5.4.5 optionalDependencies: - rollup: 4.32.0 - tslib: 2.7.0 + rollup: 4.32.1 + tslib: 2.8.1 '@rollup/pluginutils@3.1.0(rollup@2.79.2)': dependencies: @@ -12952,22 +11817,6 @@ snapshots: picomatch: 2.3.1 rollup: 2.79.2 - '@rollup/pluginutils@5.1.2(rollup@2.79.2)': - dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 2.79.2 - - '@rollup/pluginutils@5.1.2(rollup@4.32.0)': - dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 4.32.0 - '@rollup/pluginutils@5.1.4(rollup@2.79.2)': dependencies: '@types/estree': 1.0.6 @@ -12976,141 +11825,110 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/rollup-android-arm-eabi@4.24.0': - optional: true - - '@rollup/rollup-android-arm-eabi@4.32.0': - optional: true - - '@rollup/rollup-android-arm64@4.24.0': - optional: true - - '@rollup/rollup-android-arm64@4.32.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.24.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.32.0': - optional: true - - '@rollup/rollup-darwin-x64@4.24.0': - optional: true - - '@rollup/rollup-darwin-x64@4.32.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.32.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.32.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.32.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.24.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.32.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.24.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.32.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.24.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.32.0': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.32.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.32.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.24.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.32.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.24.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.32.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.24.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.32.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.24.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.32.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.24.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.32.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.24.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.32.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.24.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.32.0': - optional: true - - '@shikijs/core@1.22.0': + '@rollup/pluginutils@5.1.4(rollup@4.32.1)': dependencies: - '@shikijs/engine-javascript': 1.22.0 - '@shikijs/engine-oniguruma': 1.22.0 - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.32.1 + + '@rollup/rollup-android-arm-eabi@4.32.1': + optional: true + + '@rollup/rollup-android-arm64@4.32.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.32.1': + optional: true + + '@rollup/rollup-darwin-x64@4.32.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.32.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.32.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.32.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.32.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.32.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.32.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.32.1': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.32.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.32.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.32.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.32.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.32.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.32.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.32.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.32.1': + optional: true + + '@shikijs/core@1.29.2': + dependencies: + '@shikijs/engine-javascript': 1.29.2 + '@shikijs/engine-oniguruma': 1.29.2 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.22.0': + '@shikijs/engine-javascript@1.29.2': dependencies: - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-js: 0.4.3 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 2.3.0 - '@shikijs/engine-oniguruma@1.22.0': + '@shikijs/engine-oniguruma@1.29.2': dependencies: - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.1 - '@shikijs/transformers@1.22.0': + '@shikijs/langs@1.29.2': dependencies: - shiki: 1.22.0 + '@shikijs/types': 1.29.2 - '@shikijs/types@1.22.0': + '@shikijs/themes@1.29.2': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.2 + + '@shikijs/transformers@1.29.2': + dependencies: + '@shikijs/core': 1.29.2 + '@shikijs/types': 1.29.2 + + '@shikijs/types@1.29.2': + dependencies: + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.0': {} + '@shikijs/vscode-textmate@10.0.1': {} '@sideway/address@4.1.5': dependencies: @@ -13145,74 +11963,74 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tanstack/virtual-core@3.10.8': {} + '@tanstack/virtual-core@3.11.3': {} - '@tanstack/vue-virtual@3.10.8(vue@3.5.11(typescript@5.6.2))': + '@tanstack/vue-virtual@3.11.3(vue@3.5.13(typescript@5.7.3))': dependencies: - '@tanstack/virtual-core': 3.10.8 - vue: 3.5.11(typescript@5.6.2) + '@tanstack/virtual-core': 3.11.3 + vue: 3.5.13(typescript@5.7.3) '@tootallnate/once@2.0.0': {} - '@types/assert@1.5.10': {} + '@types/assert@1.5.11': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.7 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/bonjour@3.5.13': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 - '@types/braces@3.0.4': {} + '@types/braces@3.0.5': {} '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/responselike': 1.0.3 '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 5.0.0 - '@types/node': 20.16.11 + '@types/express-serve-static-core': 5.0.6 + '@types/node': 20.17.16 '@types/connect@3.4.38': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/cors@2.8.17': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/cytoscape-fcose@2.2.4': dependencies: - '@types/cytoscape': 3.21.8 + '@types/cytoscape': 3.21.9 - '@types/cytoscape@3.21.8': {} + '@types/cytoscape@3.21.9': {} '@types/d3-array@3.2.1': {} @@ -13231,7 +12049,7 @@ snapshots: '@types/d3-contour@3.0.6': dependencies: '@types/d3-array': 3.2.1 - '@types/geojson': 7946.0.14 + '@types/geojson': 7946.0.16 '@types/d3-delaunay@6.0.4': {} @@ -13255,7 +12073,7 @@ snapshots: '@types/d3-geo@3.1.0': dependencies: - '@types/geojson': 7946.0.14 + '@types/geojson': 7946.0.16 '@types/d3-hierarchy@3.1.7': {} @@ -13277,11 +12095,11 @@ snapshots: dependencies: '@types/d3-shape': 1.3.12 - '@types/d3-scale-chromatic@3.0.3': {} + '@types/d3-scale-chromatic@3.1.0': {} '@types/d3-scale@4.0.8': dependencies: - '@types/d3-time': 3.0.3 + '@types/d3-time': 3.0.4 '@types/d3-selection@3.0.11': {} @@ -13289,13 +12107,13 @@ snapshots: dependencies: '@types/d3-path': 1.0.11 - '@types/d3-shape@3.1.6': + '@types/d3-shape@3.1.7': dependencies: '@types/d3-path': 3.1.0 '@types/d3-time-format@4.0.3': {} - '@types/d3-time@3.0.3': {} + '@types/d3-time@3.0.4': {} '@types/d3-timer@3.0.2': {} @@ -13332,10 +12150,10 @@ snapshots: '@types/d3-quadtree': 3.0.6 '@types/d3-random': 3.0.3 '@types/d3-scale': 4.0.8 - '@types/d3-scale-chromatic': 3.0.3 + '@types/d3-scale-chromatic': 3.1.0 '@types/d3-selection': 3.0.11 - '@types/d3-shape': 3.1.6 - '@types/d3-time': 3.0.3 + '@types/d3-shape': 3.1.7 + '@types/d3-time': 3.0.4 '@types/d3-time-format': 4.0.3 '@types/d3-timer': 3.0.2 '@types/d3-transition': 3.0.9 @@ -13343,7 +12161,17 @@ snapshots: '@types/debug@4.1.12': dependencies: - '@types/ms': 0.7.34 + '@types/ms': 2.1.0 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 '@types/estree@0.0.39': {} @@ -13351,15 +12179,15 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 20.16.11 - '@types/qs': 6.9.16 + '@types/node': 20.17.16 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express-serve-static-core@5.0.0': + '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 20.16.11 - '@types/qs': 6.9.16 + '@types/node': 20.17.16 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -13367,26 +12195,26 @@ snapshots: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.16 + '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 '@types/flexsearch@0.7.6': {} - '@types/geojson@7946.0.14': {} + '@types/geojson@7946.0.16': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/hast@3.0.4': dependencies: @@ -13398,7 +12226,7 @@ snapshots: '@types/http-proxy@1.17.15': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/istanbul-lib-coverage@2.0.6': {} @@ -13414,9 +12242,9 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 + parse5: 7.2.1 '@types/json-schema@7.0.15': {} @@ -13424,15 +12252,15 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/linkify-it@5.0.0': {} '@types/lodash-es@4.17.12': dependencies: - '@types/lodash': 4.17.10 + '@types/lodash': 4.17.15 - '@types/lodash@4.17.10': {} + '@types/lodash@4.17.15': {} '@types/markdown-it@12.2.3': dependencies: @@ -13456,25 +12284,25 @@ snapshots: '@types/micromatch@4.0.9': dependencies: - '@types/braces': 3.0.4 + '@types/braces': 3.0.5 '@types/mime@1.3.5': {} '@types/minimatch@5.1.2': {} - '@types/ms@0.7.34': {} + '@types/ms@2.1.0': {} '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/node@12.20.55': {} - '@types/node@18.19.55': + '@types/node@18.19.74': dependencies: undici-types: 5.26.5 - '@types/node@20.16.11': + '@types/node@20.17.16': dependencies: undici-types: 6.19.8 @@ -13484,9 +12312,9 @@ snapshots: '@types/prettier@3.0.0': dependencies: - prettier: 3.3.3 + prettier: 3.4.2 - '@types/qs@6.9.16': {} + '@types/qs@6.9.18': {} '@types/ramda@0.28.25': dependencies: @@ -13498,7 +12326,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/retry@0.12.0': {} @@ -13509,7 +12337,7 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/serve-index@1.9.4': dependencies: @@ -13518,20 +12346,20 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/send': 0.17.4 '@types/sinonjs__fake-timers@8.1.1': {} - '@types/sizzle@2.3.8': {} + '@types/sizzle@2.3.9': {} '@types/sockjs@0.3.36': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/stack-utils@2.0.3': {} - '@types/stylis@4.2.6': {} + '@types/stylis@4.2.7': {} '@types/tough-cookie@4.0.5': {} @@ -13545,13 +12373,13 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@types/ws@8.5.12': + '@types/ws@8.5.14': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/ws@8.5.5': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@types/yargs-parser@21.0.3': {} @@ -13561,137 +12389,133 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 optional: true - '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5))(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.8.1 - eslint: 9.12.0(jiti@1.21.6) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.22.0 + '@typescript-eslint/type-utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.22.0 + eslint: 9.19.0(jiti@1.21.7) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: + ts-api-utils: 2.0.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.8.1 - debug: 4.3.7(supports-color@8.1.1) - eslint: 9.12.0(jiti@1.21.6) - optionalDependencies: + '@typescript-eslint/scope-manager': 8.22.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.22.0 + debug: 4.4.0(supports-color@8.1.1) + eslint: 9.19.0(jiti@1.21.7) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.8.1': + '@typescript-eslint/scope-manager@8.22.0': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/visitor-keys': 8.22.0 - '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - debug: 4.3.7(supports-color@8.1.1) - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: + '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + debug: 4.4.0(supports-color@8.1.1) + eslint: 9.19.0(jiti@1.21.7) + ts-api-utils: 2.0.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - - eslint - supports-color '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.8.1': {} + '@typescript-eslint/types@8.22.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.2)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) + semver: 7.7.0 + ts-api-utils: 1.4.3(typescript@5.7.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.8.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.22.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 - debug: 4.3.7(supports-color@8.1.1) - fast-glob: 3.3.2 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/visitor-keys': 8.22.0 + debug: 4.4.0(supports-color@8.1.1) + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: + semver: 7.7.0 + ts-api-utils: 2.0.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5)': + '@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.4.5) - eslint: 9.12.0(jiti@1.21.6) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.22.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.4.5) + eslint: 9.19.0(jiti@1.21.7) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - - typescript '@typescript-eslint/visitor-keys@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.8.1': + '@typescript-eslint/visitor-keys@8.22.0': dependencies: - '@typescript-eslint/types': 8.8.1 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.22.0 + eslint-visitor-keys: 4.2.0 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.3.0': {} - '@unocss/astro@0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))': + '@unocss/astro@0.59.4(rollup@2.79.2)(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))': dependencies: '@unocss/core': 0.59.4 '@unocss/reset': 0.59.4 - '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0)) + '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0)) optionalDependencies: - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) transitivePeerDependencies: - rollup '@unocss/cli@0.59.4(rollup@2.79.2)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@rollup/pluginutils': 5.1.4(rollup@2.79.2) '@unocss/config': 0.59.4 '@unocss/core': 0.59.4 '@unocss/preset-uno': 0.59.4 cac: 6.7.14 chokidar: 3.6.0 colorette: 2.0.20 - consola: 3.2.3 - fast-glob: 3.3.2 - magic-string: 0.30.11 + consola: 3.4.0 + fast-glob: 3.3.3 + magic-string: 0.30.17 pathe: 1.1.2 perfect-debounce: 1.0.0 transitivePeerDependencies: @@ -13721,8 +12545,8 @@ snapshots: '@unocss/core': 0.59.4 '@unocss/rule-utils': 0.59.4 css-tree: 2.3.1 - fast-glob: 3.3.2 - magic-string: 0.30.11 + fast-glob: 3.3.3 + magic-string: 0.30.17 postcss: 8.5.1 '@unocss/preset-attributify@0.59.4': @@ -13731,9 +12555,9 @@ snapshots: '@unocss/preset-icons@0.59.4': dependencies: - '@iconify/utils': 2.1.33 + '@iconify/utils': 2.2.1 '@unocss/core': 0.59.4 - ofetch: 1.4.0 + ofetch: 1.4.1 transitivePeerDependencies: - supports-color @@ -13762,7 +12586,7 @@ snapshots: '@unocss/preset-web-fonts@0.59.4': dependencies: '@unocss/core': 0.59.4 - ofetch: 1.4.0 + ofetch: 1.4.1 '@unocss/preset-wind@0.59.4': dependencies: @@ -13775,15 +12599,15 @@ snapshots: '@unocss/rule-utils@0.59.4': dependencies: '@unocss/core': 0.59.4 - magic-string: 0.30.11 + magic-string: 0.30.17 '@unocss/scope@0.59.4': {} '@unocss/transformer-attributify-jsx-babel@0.59.4': dependencies: - '@babel/core': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/preset-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.7 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.7) '@unocss/core': 0.59.4 transitivePeerDependencies: - supports-color @@ -13806,57 +12630,52 @@ snapshots: dependencies: '@unocss/core': 0.59.4 - '@unocss/vite@0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))': + '@unocss/vite@0.59.4(rollup@2.79.2)(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@rollup/pluginutils': 5.1.4(rollup@2.79.2) '@unocss/config': 0.59.4 '@unocss/core': 0.59.4 '@unocss/inspector': 0.59.4 '@unocss/scope': 0.59.4 '@unocss/transformer-directives': 0.59.4 chokidar: 3.6.0 - fast-glob: 3.3.2 - magic-string: 0.30.11 - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) + fast-glob: 3.3.3 + magic-string: 0.30.17 + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) transitivePeerDependencies: - rollup - '@vite-pwa/vitepress@0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0))': + '@vite-pwa/vitepress@0.4.0(vite-plugin-pwa@0.19.8(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0))': dependencies: - vite-plugin-pwa: 0.19.8(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + vite-plugin-pwa: 0.19.8(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) - '@vitejs/plugin-vue@5.1.4(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))(vue@3.5.11(typescript@5.6.2))': + '@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(vue@3.5.13(typescript@5.4.5))': dependencies: - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) - vue: 3.5.11(typescript@5.6.2) + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) + vue: 3.5.13(typescript@5.4.5) - '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.37.0))(vue@3.5.11(typescript@5.4.5))': + '@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(vue@3.5.13(typescript@5.7.3))': dependencies: - vite: 5.4.8(@types/node@20.16.11)(terser@5.37.0) - vue: 3.5.11(typescript@5.4.5) + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) + vue: 3.5.13(typescript@5.7.3) - '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.37.0))(vue@3.5.11(typescript@5.6.2))': - dependencies: - vite: 5.4.8(@types/node@20.16.11)(terser@5.37.0) - vue: 3.5.11(typescript@5.6.2) - - '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0))': + '@vitest/coverage-v8@1.6.0(vitest@1.6.0)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.11 + magic-string: 0.30.17 magicast: 0.3.5 - picocolors: 1.1.0 - std-env: 3.7.0 - strip-literal: 2.1.0 + picocolors: 1.1.1 + std-env: 3.8.0 + strip-literal: 2.1.1 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) + vitest: 1.6.0(@types/node@20.17.16)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) transitivePeerDependencies: - supports-color @@ -13874,7 +12693,7 @@ snapshots: '@vitest/snapshot@1.6.0': dependencies: - magic-string: 0.30.11 + magic-string: 0.30.17 pathe: 1.1.2 pretty-format: 29.7.0 @@ -13885,13 +12704,13 @@ snapshots: '@vitest/ui@1.6.0(vitest@1.6.0)': dependencies: '@vitest/utils': 1.6.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 fflate: 0.8.2 - flatted: 3.3.1 + flatted: 3.3.2 pathe: 1.1.2 - picocolors: 1.1.0 + picocolors: 1.1.1 sirv: 2.0.4 - vitest: 1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) + vitest: 1.6.0(@types/node@20.17.16)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0) '@vitest/utils@1.6.0': dependencies: @@ -13900,149 +12719,149 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@vue/compat@3.5.11(vue@3.5.11(typescript@5.6.2))': + '@vue/compat@3.5.13(vue@3.5.13(typescript@5.7.3))': dependencies: - '@babel/parser': 7.25.7 + '@babel/parser': 7.26.7 estree-walker: 2.0.2 source-map-js: 1.2.1 - vue: 3.5.11(typescript@5.6.2) + vue: 3.5.13(typescript@5.7.3) - '@vue/compiler-core@3.5.11': + '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.25.7 - '@vue/shared': 3.5.11 + '@babel/parser': 7.26.7 + '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.11': + '@vue/compiler-dom@3.5.13': dependencies: - '@vue/compiler-core': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 - '@vue/compiler-sfc@3.5.11': + '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.25.7 - '@vue/compiler-core': 3.5.11 - '@vue/compiler-dom': 3.5.11 - '@vue/compiler-ssr': 3.5.11 - '@vue/shared': 3.5.11 + '@babel/parser': 7.26.7 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 estree-walker: 2.0.2 - magic-string: 0.30.11 - postcss: 8.4.47 + magic-string: 0.30.17 + postcss: 8.5.1 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.11': + '@vue/compiler-ssr@3.5.13': dependencies: - '@vue/compiler-dom': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 '@vue/devtools-api@6.6.4': {} - '@vue/devtools-api@7.4.6': + '@vue/devtools-api@7.7.1': dependencies: - '@vue/devtools-kit': 7.4.6 + '@vue/devtools-kit': 7.7.1 - '@vue/devtools-kit@7.4.6': + '@vue/devtools-kit@7.7.1': dependencies: - '@vue/devtools-shared': 7.4.6 - birpc: 0.2.17 + '@vue/devtools-shared': 7.7.1 + birpc: 0.2.19 hookable: 5.5.3 mitt: 3.0.1 perfect-debounce: 1.0.0 speakingurl: 14.0.1 - superjson: 2.2.1 + superjson: 2.2.2 - '@vue/devtools-shared@7.4.6': + '@vue/devtools-shared@7.7.1': dependencies: rfdc: 1.4.1 - '@vue/reactivity@3.5.11': + '@vue/reactivity@3.5.13': dependencies: - '@vue/shared': 3.5.11 + '@vue/shared': 3.5.13 - '@vue/runtime-core@3.5.11': + '@vue/runtime-core@3.5.13': dependencies: - '@vue/reactivity': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 - '@vue/runtime-dom@3.5.11': + '@vue/runtime-dom@3.5.13': dependencies: - '@vue/reactivity': 3.5.11 - '@vue/runtime-core': 3.5.11 - '@vue/shared': 3.5.11 + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 csstype: 3.1.3 - '@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.4.5))': + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.4.5))': dependencies: - '@vue/compiler-ssr': 3.5.11 - '@vue/shared': 3.5.11 - vue: 3.5.11(typescript@5.4.5) + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.4.5) - '@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2))': + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.3))': dependencies: - '@vue/compiler-ssr': 3.5.11 - '@vue/shared': 3.5.11 - vue: 3.5.11(typescript@5.6.2) + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.7.3) - '@vue/shared@3.5.11': {} + '@vue/shared@3.5.13': {} - '@vueuse/core@10.11.1(vue@3.5.11(typescript@5.4.5))': + '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.4.5))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.4.5)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.4.5)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.4.5)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.4.5)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/core@10.11.1(vue@3.5.11(typescript@5.6.2))': + '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.3))': dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.6.2)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.4.5))': + '@vueuse/integrations@10.11.1(axios@1.7.9)(focus-trap@7.6.4)(vue@3.5.13(typescript@5.4.5))': dependencies: - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.4.5)) - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.4.5)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.4.5)) + '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.4.5)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.4.5)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.4.5)) optionalDependencies: - axios: 1.7.7(debug@4.3.7) - focus-trap: 7.6.0 + axios: 1.7.9(debug@4.4.0) + focus-trap: 7.6.4 transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/integrations@10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.6.2))': + '@vueuse/integrations@10.11.1(axios@1.7.9)(focus-trap@7.6.4)(vue@3.5.13(typescript@5.7.3))': dependencies: - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.6.2)) - '@vueuse/shared': 10.11.1(vue@3.5.11(typescript@5.6.2)) - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3)) + '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) optionalDependencies: - axios: 1.7.7(debug@4.3.7) - focus-trap: 7.6.0 + axios: 1.7.9(debug@4.4.0) + focus-trap: 7.6.4 transitivePeerDependencies: - '@vue/composition-api' - vue '@vueuse/metadata@10.11.1': {} - '@vueuse/shared@10.11.1(vue@3.5.11(typescript@5.4.5))': + '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.4.5))': dependencies: - vue-demi: 0.14.10(vue@3.5.11(typescript@5.4.5)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.4.5)) transitivePeerDependencies: - '@vue/composition-api' - vue - '@vueuse/shared@10.11.1(vue@3.5.11(typescript@5.6.2))': + '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.3))': dependencies: - vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -14069,7 +12888,7 @@ snapshots: '@wdio/types@7.30.2(typescript@5.4.5)': dependencies: - '@types/node': 18.19.55 + '@types/node': 18.19.74 got: 11.8.6 optionalDependencies: typescript: 5.4.5 @@ -14082,97 +12901,97 @@ snapshots: transitivePeerDependencies: - typescript - '@webassemblyjs/ast@1.12.1': + '@webassemblyjs/ast@1.14.1': dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - '@webassemblyjs/helper-api-error@1.11.6': {} + '@webassemblyjs/helper-api-error@1.13.2': {} - '@webassemblyjs/helper-buffer@1.12.1': {} + '@webassemblyjs/helper-buffer@1.14.1': {} - '@webassemblyjs/helper-numbers@1.11.6': + '@webassemblyjs/helper-numbers@1.13.2': dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - '@webassemblyjs/helper-wasm-section@1.12.1': + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/ieee754@1.11.6': + '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 - '@webassemblyjs/leb128@1.11.6': + '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 - '@webassemblyjs/utf8@1.11.6': {} + '@webassemblyjs/utf8@1.13.2': {} - '@webassemblyjs/wasm-edit@1.12.1': + '@webassemblyjs/wasm-edit@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 - '@webassemblyjs/wasm-gen@1.12.1': + '@webassemblyjs/wasm-gen@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wasm-opt@1.12.1': + '@webassemblyjs/wasm-opt@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wasm-parser@1.12.1': + '@webassemblyjs/wasm-parser@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wast-printer@1.12.1': + '@webassemblyjs/wast-printer@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0))': + '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.97.1)': dependencies: - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack: 5.97.1(esbuild@0.21.5)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.97.1) - '@webpack-cli/info@1.5.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))': + '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': dependencies: envinfo: 7.14.0 - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.97.1) - '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.95.0))': + '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.15.2)': dependencies: - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.97.1) optionalDependencies: - webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.95.0) + webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.97.1) '@xmldom/xmldom@0.8.10': {} @@ -14180,29 +12999,29 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zenuml/core@3.24.12(typescript@5.6.2)': + '@zenuml/core@3.27.12(typescript@5.7.3)': dependencies: - '@headlessui-float/vue': 0.14.4(@headlessui/vue@1.7.23(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2)) - '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.13) - '@headlessui/vue': 1.7.23(vue@3.5.11(typescript@5.6.2)) - '@types/assert': 1.5.10 + '@headlessui-float/vue': 0.14.4(@headlessui/vue@1.7.23(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) + '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.17) + '@headlessui/vue': 1.7.23(vue@3.5.13(typescript@5.7.3)) + '@types/assert': 1.5.11 '@types/ramda': 0.28.25 - '@vue/compat': 3.5.11(vue@3.5.11(typescript@5.6.2)) + '@vue/compat': 3.5.13(vue@3.5.13(typescript@5.7.3)) antlr4: 4.11.0 color-string: 1.9.1 dom-to-image-more: 2.16.0 - dompurify: 3.2.1 + dompurify: 3.2.4 file-saver: 2.0.5 highlight.js: 10.7.3 html-to-image: 1.11.11 lodash: 4.17.21 marked: 4.3.0 pino: 8.21.0 - postcss: 8.4.47 + postcss: 8.5.1 ramda: 0.28.0 - tailwindcss: 3.4.13 - vue: 3.5.11(typescript@5.6.2) - vuex: 4.1.0(vue@3.5.11(typescript@5.6.2)) + tailwindcss: 3.4.17 + vue: 3.5.13(typescript@5.7.3) + vuex: 4.1.0(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/composition-api' - ts-node @@ -14223,33 +13042,23 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 - - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk@8.3.4: dependencies: - acorn: 8.12.1 - - acorn@8.12.1: {} + acorn: 8.14.0 acorn@8.14.0: {} agent-base@6.0.2: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color - agent-base@7.1.1: - dependencies: - debug: 4.3.7(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color + agent-base@7.1.3: {} aggregate-error@3.1.0: dependencies: @@ -14295,27 +13104,25 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.2 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@4.24.0: + algoliasearch@5.20.0: dependencies: - '@algolia/cache-browser-local-storage': 4.24.0 - '@algolia/cache-common': 4.24.0 - '@algolia/cache-in-memory': 4.24.0 - '@algolia/client-account': 4.24.0 - '@algolia/client-analytics': 4.24.0 - '@algolia/client-common': 4.24.0 - '@algolia/client-personalization': 4.24.0 - '@algolia/client-search': 4.24.0 - '@algolia/logger-common': 4.24.0 - '@algolia/logger-console': 4.24.0 - '@algolia/recommend': 4.24.0 - '@algolia/requester-browser-xhr': 4.24.0 - '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http': 4.24.0 - '@algolia/transporter': 4.24.0 + '@algolia/client-abtesting': 5.20.0 + '@algolia/client-analytics': 5.20.0 + '@algolia/client-common': 5.20.0 + '@algolia/client-insights': 5.20.0 + '@algolia/client-personalization': 5.20.0 + '@algolia/client-query-suggestions': 5.20.0 + '@algolia/client-search': 5.20.0 + '@algolia/ingestion': 1.20.0 + '@algolia/monitoring': 1.20.0 + '@algolia/recommend': 5.20.0 + '@algolia/requester-browser-xhr': 5.20.0 + '@algolia/requester-fetch': 5.20.0 + '@algolia/requester-node-http': 5.20.0 amdefine@1.0.1: optional: true @@ -14393,11 +13200,6 @@ snapshots: argparse@2.0.1: {} - array-buffer-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.3 @@ -14450,43 +13252,43 @@ snapshots: avvio@8.4.0: dependencies: '@fastify/error': 3.4.1 - fastq: 1.17.1 + fastq: 1.19.0 aws-sign2@0.7.0: {} aws4@1.13.2: {} - axios@1.7.7(debug@4.3.7): + axios@1.7.9(debug@4.4.0): dependencies: - follow-redirects: 1.15.9(debug@4.3.7) - form-data: 4.0.0 + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - babel-jest@29.7.0(@babel/core@7.25.7): + babel-jest@29.7.0(@babel/core@7.26.7): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.25.7) + babel-preset-jest: 29.6.3(@babel/core@7.26.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.95.0(esbuild@0.21.5)): + babel-loader@9.2.1(@babel/core@7.26.7)(webpack@5.97.1(esbuild@0.21.5)): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.95.0(esbuild@0.21.5) + webpack: 5.97.1(esbuild@0.21.5) babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.26.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -14496,20 +13298,11 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.25.7): - dependencies: - '@babel/compat-data': 7.26.5 - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.7): dependencies: '@babel/compat-data': 7.26.5 @@ -14519,14 +13312,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.7) - core-js-compat: 3.40.0 - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.7): dependencies: '@babel/core': 7.26.7 @@ -14535,13 +13320,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.25.7): - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.7) - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.7): dependencies: '@babel/core': 7.26.7 @@ -14549,30 +13327,30 @@ snapshots: transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.7): + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.7): dependencies: - '@babel/core': 7.25.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) + '@babel/core': 7.26.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.7) - babel-preset-jest@29.6.3(@babel/core@7.25.7): + babel-preset-jest@29.6.3(@babel/core@7.26.7): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) bail@2.0.2: {} @@ -14599,7 +13377,7 @@ snapshots: buffers: 0.1.1 chainsaw: 0.1.0 - birpc@0.2.17: {} + birpc@0.2.19: {} blob-util@2.0.2: {} @@ -14626,7 +13404,7 @@ snapshots: transitivePeerDependencies: - supports-color - bonjour-service@1.2.1: + bonjour-service@1.3.0: dependencies: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 @@ -14655,17 +13433,10 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.0: - dependencies: - caniuse-lite: 1.0.30001667 - electron-to-chromium: 1.5.33 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.0) - browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001695 - electron-to-chromium: 1.5.88 + caniuse-lite: 1.0.30001696 + electron-to-chromium: 1.5.90 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) @@ -14691,8 +13462,6 @@ snapshots: builtin-modules@3.3.0: {} - bytes@3.0.0: {} - bytes@3.1.2: {} cac@6.7.14: {} @@ -14723,14 +13492,6 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - call-bind@1.0.8: dependencies: call-bind-apply-helpers: 1.0.1 @@ -14753,9 +13514,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001667: {} - - caniuse-lite@1.0.30001695: {} + caniuse-lite@1.0.30001696: {} caseless@0.12.0: {} @@ -14777,7 +13536,7 @@ snapshots: chalk-template@1.1.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 chalk@1.1.3: dependencies: @@ -14805,6 +13564,8 @@ snapshots: chalk@5.3.0: {} + chalk@5.4.1: {} + char-regex@1.0.2: {} character-entities-html4@2.1.0: {} @@ -14857,9 +13618,9 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.0.0: {} + ci-info@4.1.0: {} - cjs-module-lexer@1.4.1: {} + cjs-module-lexer@1.4.3: {} cjson@0.3.0: dependencies: @@ -14983,12 +13744,12 @@ snapshots: commander@12.1.0: {} + commander@13.1.0: {} + commander@2.20.3: {} commander@4.1.1: {} - commander@5.1.0: {} - commander@6.2.1: {} commander@7.2.0: {} @@ -15015,14 +13776,14 @@ snapshots: dependencies: mime-db: 1.53.0 - compression@1.7.4: + compression@1.7.5: dependencies: - accepts: 1.3.8 - bytes: 3.0.0 + bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9 + negotiator: 0.6.4 on-headers: 1.0.2 - safe-buffer: 5.1.2 + safe-buffer: 5.2.1 vary: 1.1.2 transitivePeerDependencies: - supports-color @@ -15035,7 +13796,7 @@ snapshots: date-fns: 2.30.0 lodash: 4.17.21 rxjs: 7.8.1 - shell-quote: 1.8.1 + shell-quote: 1.8.2 spawn-command: 0.0.2 supports-color: 8.1.1 tree-kill: 1.2.2 @@ -15045,7 +13806,7 @@ snapshots: connect-history-api-fallback@2.0.0: {} - consola@3.2.3: {} + consola@3.4.0: {} console.table@0.10.0: dependencies: @@ -15068,7 +13829,7 @@ snapshots: cookie-signature@1.0.6: {} - cookie@0.6.0: {} + cookie@0.7.1: {} cookie@0.7.2: {} @@ -15076,10 +13837,6 @@ snapshots: dependencies: is-what: 4.1.16 - core-js-compat@3.38.1: - dependencies: - browserslist: 4.24.0 - core-js-compat@3.40.0: dependencies: browserslist: 4.24.4 @@ -15123,13 +13880,13 @@ snapshots: p-filter: 3.0.0 p-map: 6.0.0 - create-jest@29.7.0(@types/node@20.16.11): + create-jest@29.7.0(@types/node@20.17.16): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.16.11) + jest-config: 29.7.0(@types/node@20.17.16) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -15140,15 +13897,9 @@ snapshots: cross-env@7.0.3: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - - cross-spawn@6.0.5: + cross-spawn@6.0.6: dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -15156,7 +13907,7 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -15164,61 +13915,61 @@ snapshots: crypto-random-string@2.0.0: {} - cspell-config-lib@8.14.4: + cspell-config-lib@8.17.3: dependencies: - '@cspell/cspell-types': 8.14.4 + '@cspell/cspell-types': 8.17.3 comment-json: 4.2.5 - yaml: 2.5.1 + yaml: 2.7.0 - cspell-dictionary@8.14.4: + cspell-dictionary@8.17.3: dependencies: - '@cspell/cspell-pipe': 8.14.4 - '@cspell/cspell-types': 8.14.4 - cspell-trie-lib: 8.14.4 - fast-equals: 5.0.1 + '@cspell/cspell-pipe': 8.17.3 + '@cspell/cspell-types': 8.17.3 + cspell-trie-lib: 8.17.3 + fast-equals: 5.2.2 - cspell-gitignore@8.14.4: + cspell-gitignore@8.17.3: dependencies: - '@cspell/url': 8.14.4 - cspell-glob: 8.14.4 - cspell-io: 8.14.4 + '@cspell/url': 8.17.3 + cspell-glob: 8.17.3 + cspell-io: 8.17.3 find-up-simple: 1.0.0 - cspell-glob@8.14.4: + cspell-glob@8.17.3: dependencies: - '@cspell/url': 8.14.4 + '@cspell/url': 8.17.3 micromatch: 4.0.8 - cspell-grammar@8.14.4: + cspell-grammar@8.17.3: dependencies: - '@cspell/cspell-pipe': 8.14.4 - '@cspell/cspell-types': 8.14.4 + '@cspell/cspell-pipe': 8.17.3 + '@cspell/cspell-types': 8.17.3 - cspell-io@8.14.4: + cspell-io@8.17.3: dependencies: - '@cspell/cspell-service-bus': 8.14.4 - '@cspell/url': 8.14.4 + '@cspell/cspell-service-bus': 8.17.3 + '@cspell/url': 8.17.3 - cspell-lib@8.14.4: + cspell-lib@8.17.3: dependencies: - '@cspell/cspell-bundled-dicts': 8.14.4 - '@cspell/cspell-pipe': 8.14.4 - '@cspell/cspell-resolver': 8.14.4 - '@cspell/cspell-types': 8.14.4 - '@cspell/dynamic-import': 8.14.4 - '@cspell/filetypes': 8.14.4 - '@cspell/strong-weak-map': 8.14.4 - '@cspell/url': 8.14.4 + '@cspell/cspell-bundled-dicts': 8.17.3 + '@cspell/cspell-pipe': 8.17.3 + '@cspell/cspell-resolver': 8.17.3 + '@cspell/cspell-types': 8.17.3 + '@cspell/dynamic-import': 8.17.3 + '@cspell/filetypes': 8.17.3 + '@cspell/strong-weak-map': 8.17.3 + '@cspell/url': 8.17.3 clear-module: 4.1.2 comment-json: 4.2.5 - cspell-config-lib: 8.14.4 - cspell-dictionary: 8.14.4 - cspell-glob: 8.14.4 - cspell-grammar: 8.14.4 - cspell-io: 8.14.4 - cspell-trie-lib: 8.14.4 + cspell-config-lib: 8.17.3 + cspell-dictionary: 8.17.3 + cspell-glob: 8.17.3 + cspell-grammar: 8.17.3 + cspell-io: 8.17.3 + cspell-trie-lib: 8.17.3 env-paths: 3.0.0 - fast-equals: 5.0.1 + fast-equals: 5.2.2 gensequence: 7.0.0 import-fresh: 3.3.0 resolve-from: 5.0.0 @@ -15226,33 +13977,32 @@ snapshots: vscode-uri: 3.0.8 xdg-basedir: 5.1.0 - cspell-trie-lib@8.14.4: + cspell-trie-lib@8.17.3: dependencies: - '@cspell/cspell-pipe': 8.14.4 - '@cspell/cspell-types': 8.14.4 + '@cspell/cspell-pipe': 8.17.3 + '@cspell/cspell-types': 8.17.3 gensequence: 7.0.0 - cspell@8.14.4: + cspell@8.17.3: dependencies: - '@cspell/cspell-json-reporter': 8.14.4 - '@cspell/cspell-pipe': 8.14.4 - '@cspell/cspell-types': 8.14.4 - '@cspell/dynamic-import': 8.14.4 - '@cspell/url': 8.14.4 - chalk: 5.3.0 + '@cspell/cspell-json-reporter': 8.17.3 + '@cspell/cspell-pipe': 8.17.3 + '@cspell/cspell-types': 8.17.3 + '@cspell/dynamic-import': 8.17.3 + '@cspell/url': 8.17.3 + chalk: 5.4.1 chalk-template: 1.1.0 - commander: 12.1.0 - cspell-dictionary: 8.14.4 - cspell-gitignore: 8.14.4 - cspell-glob: 8.14.4 - cspell-io: 8.14.4 - cspell-lib: 8.14.4 - fast-glob: 3.3.2 + commander: 13.1.0 + cspell-dictionary: 8.17.3 + cspell-gitignore: 8.17.3 + cspell-glob: 8.17.3 + cspell-io: 8.17.3 + cspell-lib: 8.17.3 fast-json-stable-stringify: 2.1.0 file-entry-cache: 9.1.0 get-stdin: 9.0.0 - semver: 7.6.3 - strip-ansi: 7.1.0 + semver: 7.7.0 + tinyglobby: 0.2.10 css-tree@2.3.1: dependencies: @@ -15261,40 +14011,41 @@ snapshots: cssesc@3.0.0: {} - cssstyle@4.1.0: + cssstyle@4.2.1: dependencies: - rrweb-cssom: 0.7.1 + '@asamuzakjp/css-color': 2.8.3 + rrweb-cssom: 0.8.0 csstree-validator@3.0.0: dependencies: clap: 3.1.1 css-tree: 2.3.1 - resolve: 1.22.8 + resolve: 1.22.10 csstype@3.1.3: {} cuint@0.2.2: {} - cypress-image-snapshot@4.0.1(cypress@13.15.0)(jest@29.7.0(@types/node@20.16.11)): + cypress-image-snapshot@4.0.1(cypress@13.17.0)(jest@29.7.0(@types/node@20.17.16)): dependencies: chalk: 2.4.2 - cypress: 13.15.0 + cypress: 13.17.0 fs-extra: 7.0.1 glob: 7.2.3 - jest-image-snapshot: 4.2.0(jest@29.7.0(@types/node@20.16.11)) + jest-image-snapshot: 4.2.0(jest@29.7.0(@types/node@20.17.16)) pkg-dir: 3.0.0 term-img: 4.1.0 transitivePeerDependencies: - jest - cypress-split@1.24.0(@babel/core@7.25.7): + cypress-split@1.24.7(@babel/core@7.26.7): dependencies: '@actions/core': 1.11.1 arg: 5.0.2 console.table: 0.10.0 - debug: 4.3.7(supports-color@8.1.1) - fast-shuffle: 6.1.0 - find-cypress-specs: 1.43.4(@babel/core@7.25.7) + debug: 4.4.0(supports-color@8.1.1) + fast-shuffle: 6.1.1 + find-cypress-specs: 1.46.2(@babel/core@7.26.7) globby: 11.1.0 humanize-duration: 3.32.1 transitivePeerDependencies: @@ -15303,12 +14054,12 @@ snapshots: cypress-wait-until@3.0.2: {} - cypress@13.15.0: + cypress@13.17.0: dependencies: - '@cypress/request': 3.0.5 + '@cypress/request': 3.0.7 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) '@types/sinonjs__fake-timers': 8.1.1 - '@types/sizzle': 2.3.8 + '@types/sizzle': 2.3.9 arch: 2.2.0 blob-util: 2.0.2 bluebird: 3.7.2 @@ -15316,12 +14067,13 @@ snapshots: cachedir: 2.4.0 chalk: 4.1.2 check-more-types: 2.24.0 + ci-info: 4.1.0 cli-cursor: 3.1.0 cli-table3: 0.6.5 commander: 6.2.1 common-tags: 1.8.2 dayjs: 1.11.13 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) enquirer: 2.4.1 eventemitter2: 6.4.7 execa: 4.1.0 @@ -15330,7 +14082,6 @@ snapshots: figures: 3.2.0 fs-extra: 9.1.0 getos: 3.2.1 - is-ci: 3.0.1 is-installed-globally: 0.4.0 lazy-ass: 1.6.0 listr2: 3.14.0(enquirer@2.4.1) @@ -15342,23 +14093,24 @@ snapshots: process: 0.11.10 proxy-from-env: 1.0.0 request-progress: 3.0.0 - semver: 7.6.3 + semver: 7.7.0 supports-color: 8.1.1 tmp: 0.2.3 + tree-kill: 1.2.2 untildify: 4.0.0 yauzl: 2.10.0 - cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.2): + cytoscape-cose-bilkent@4.1.0(cytoscape@3.31.0): dependencies: cose-base: 1.0.3 - cytoscape: 3.30.2 + cytoscape: 3.31.0 - cytoscape-fcose@2.2.0(cytoscape@3.30.2): + cytoscape-fcose@2.2.0(cytoscape@3.31.0): dependencies: cose-base: 2.2.0 - cytoscape: 3.30.2 + cytoscape: 3.31.0 - cytoscape@3.30.2: {} + cytoscape@3.31.0: {} d3-array@2.12.1: dependencies: @@ -15546,7 +14298,7 @@ snapshots: data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 + whatwg-url: 14.1.0 data-view-buffer@1.0.2: dependencies: @@ -15570,7 +14322,7 @@ snapshots: date-fns@2.30.0: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.7 dayjs@1.11.13: {} @@ -15592,19 +14344,15 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.3.7(supports-color@8.1.1): + debug@4.4.0(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 8.1.1 - debug@4.4.0: - dependencies: - ms: 2.1.3 - decamelize@1.2.0: {} - decimal.js@10.4.3: {} + decimal.js@10.5.0: {} decode-named-character-reference@1.0.2: dependencies: @@ -15622,24 +14370,24 @@ snapshots: deep-equal@2.2.3: dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 - is-arguments: 1.1.1 - is-array-buffer: 3.0.4 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 + get-intrinsic: 1.2.7 + is-arguments: 1.2.0 + is-array-buffer: 3.0.5 + is-date-object: 1.1.0 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 isarray: 2.0.5 object-is: 1.1.6 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - side-channel: 1.0.6 - which-boxed-primitive: 1.0.2 + object.assign: 4.1.7 + regexp.prototype.flags: 1.5.4 + side-channel: 1.1.0 + which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.18 deep-is@0.1.4: {} @@ -15662,9 +14410,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-lazy-prop@2.0.0: {} @@ -15714,16 +14462,16 @@ snapshots: ast-module-types: 6.0.0 escodegen: 2.1.0 get-amd-module-type: 6.0.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 detective-cjs@6.0.0: dependencies: ast-module-types: 6.0.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 detective-es6@5.0.0: dependencies: - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 detective-postcss@7.0.0(postcss@8.5.1): dependencies: @@ -15734,33 +14482,34 @@ snapshots: detective-sass@6.0.0: dependencies: gonzales-pe: 4.3.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 detective-scss@5.0.0: dependencies: gonzales-pe: 4.3.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 detective-stylus@5.0.0: {} - detective-typescript@13.0.0(typescript@5.6.2): + detective-typescript@13.0.0(typescript@5.7.3): dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.3) ast-module-types: 6.0.0 - node-source-walk: 7.0.0 - typescript: 5.6.2 + node-source-walk: 7.0.1 + typescript: 5.7.3 transitivePeerDependencies: - supports-color - detective-vue2@2.0.3(typescript@5.6.2): + detective-vue2@2.1.1(typescript@5.7.3): dependencies: - '@vue/compiler-sfc': 3.5.11 + '@dependents/detective-less': 5.0.0 + '@vue/compiler-sfc': 3.5.13 detective-es6: 5.0.0 detective-sass: 6.0.0 detective-scss: 5.0.0 detective-stylus: 5.0.0 - detective-typescript: 13.0.0(typescript@5.6.2) - typescript: 5.6.2 + detective-typescript: 13.0.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -15796,17 +14545,17 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.2.1: + dompurify@3.2.4: optionalDependencies: '@types/trusted-types': 2.0.7 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dotenv@16.4.5: {} + dotenv@16.4.7: {} dotenv@8.6.0: {} @@ -15837,14 +14586,14 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.33: {} - - electron-to-chromium@1.5.88: {} + electron-to-chromium@1.5.90: {} elkjs@0.9.3: {} emittery@0.13.1: {} + emoji-regex-xs@1.0.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -15863,7 +14612,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.17.1: + enhanced-resolve@5.18.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -15941,27 +14690,23 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.18 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - es-define-property@1.0.1: {} es-errors@1.3.0: {} es-get-iterator@1.1.3: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - is-arguments: 1.1.1 + call-bind: 1.0.8 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 + is-arguments: 1.2.0 is-map: 2.0.3 is-set: 2.0.3 - is-string: 1.0.7 + is-string: 1.1.1 isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 + stop-iteration-iterator: 1.1.0 - es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} es-object-atoms@1.1.1: dependencies: @@ -16090,42 +14835,42 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@1.21.6)): + eslint-config-prettier@9.1.0(eslint@9.19.0(jiti@1.21.7)): dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.19.0(jiti@1.21.7) - eslint-plugin-cypress@3.5.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-cypress@3.6.0(eslint@9.19.0(jiti@1.21.7)): dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.19.0(jiti@1.21.7) globals: 13.24.0 eslint-plugin-html@8.1.2: dependencies: htmlparser2: 9.1.0 - eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(jest@29.7.0(@types/node@20.16.11))(typescript@5.4.5): + eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5))(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5))(eslint@9.19.0(jiti@1.21.7))(jest@29.7.0(@types/node@20.17.16))(typescript@5.4.5): dependencies: - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - eslint: 9.12.0(jiti@1.21.6) + '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + eslint: 9.19.0(jiti@1.21.7) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - jest: 29.7.0(@types/node@20.16.11) + '@typescript-eslint/eslint-plugin': 8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5))(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + jest: 29.7.0(@types/node@20.17.16) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.3.1(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-jsdoc@50.6.3(eslint@9.19.0(jiti@1.21.7)): dependencies: - '@es-joy/jsdoccomment': 0.48.0 + '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.12.0(jiti@1.21.6) - espree: 10.2.0 + eslint: 9.19.0(jiti@1.21.7) + espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 - semver: 7.6.3 + semver: 7.7.0 spdx-expression-parse: 4.0.0 synckit: 0.9.2 transitivePeerDependencies: @@ -16136,14 +14881,14 @@ snapshots: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 - eslint-plugin-lodash@8.0.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-lodash@8.0.0(eslint@9.19.0(jiti@1.21.7)): dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.19.0(jiti@1.21.7) lodash: 4.17.21 - eslint-plugin-markdown@5.1.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-markdown@5.1.0(eslint@9.19.0(jiti@1.21.7)): dependencies: - eslint: 9.12.0(jiti@1.21.6) + eslint: 9.19.0(jiti@1.21.7) mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color @@ -16155,24 +14900,24 @@ snapshots: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - eslint-plugin-unicorn@56.0.0(eslint@9.12.0(jiti@1.21.6)): + eslint-plugin-unicorn@56.0.1(eslint@9.19.0(jiti@1.21.7)): dependencies: - '@babel/helper-validator-identifier': 7.25.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) - ci-info: 4.0.0 + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7)) + ci-info: 4.1.0 clean-regexp: 1.0.0 - core-js-compat: 3.38.1 - eslint: 9.12.0(jiti@1.21.6) + core-js-compat: 3.40.0 + eslint: 9.19.0(jiti@1.21.7) esquery: 1.6.0 - globals: 15.10.0 + globals: 15.14.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 - jsesc: 3.0.2 + jsesc: 3.1.0 pluralize: 8.0.0 read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.6.3 + semver: 7.7.0 strip-indent: 3.0.0 eslint-scope@5.1.1: @@ -16180,37 +14925,37 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.1.0: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.1.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@9.12.0(jiti@1.21.6): + eslint@9.19.0(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@1.21.6)) - '@eslint-community/regexpp': 4.11.1 - '@eslint/config-array': 0.18.0 - '@eslint/core': 0.6.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.12.0 - '@eslint/plugin-kit': 0.2.0 - '@humanfs/node': 0.16.5 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.19.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.1 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@8.1.1) + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint-scope: 8.1.0 - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -16225,9 +14970,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - text-table: 0.2.0 optionalDependencies: - jiti: 1.21.6 + jiti: 1.21.7 transitivePeerDependencies: - supports-color @@ -16238,11 +14982,11 @@ snapshots: event-emitter: 0.3.5 type: 2.7.3 - espree@10.2.0: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.1.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@1.1.1: {} @@ -16303,7 +15047,7 @@ snapshots: execa@1.0.0: dependencies: - cross-spawn: 6.0.5 + cross-spawn: 6.0.6 get-stream: 4.1.0 is-stream: 1.1.0 npm-run-path: 2.0.2 @@ -16313,7 +15057,7 @@ snapshots: execa@4.1.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 5.2.0 human-signals: 1.1.1 is-stream: 2.0.1 @@ -16325,7 +15069,7 @@ snapshots: execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -16337,7 +15081,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -16361,14 +15105,14 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - express@4.21.0: + express@4.21.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.6.0 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 @@ -16382,7 +15126,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.10 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 @@ -16413,7 +15157,7 @@ snapshots: extract-zip@2.0.1(supports-color@8.1.1): dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -16429,9 +15173,9 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.0.1: {} + fast-equals@5.2.2: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -16459,13 +15203,13 @@ snapshots: fast-redact@3.5.0: {} - fast-shuffle@6.1.0: + fast-shuffle@6.1.1: dependencies: - pcg: 1.0.0 + pcg: 1.1.0 fast-uri@2.4.0: {} - fast-uri@3.0.2: {} + fast-uri@3.0.6: {} fastest-levenshtein@1.0.16: {} @@ -16473,7 +15217,7 @@ snapshots: fastify-plugin@3.0.1: {} - fastify@4.28.1: + fastify@4.29.0: dependencies: '@fastify/ajv-compiler': 3.6.0 '@fastify/error': 3.4.1 @@ -16484,15 +15228,15 @@ snapshots: fast-json-stringify: 5.16.1 find-my-way: 8.2.2 light-my-request: 5.14.0 - pino: 9.4.0 + pino: 9.6.0 process-warning: 3.0.0 proxy-addr: 2.0.7 rfdc: 1.4.1 secure-json-parse: 2.7.0 - semver: 7.6.3 + semver: 7.6.2 toad-cache: 3.7.0 - fastq@1.17.1: + fastq@1.19.0: dependencies: reusify: 1.0.4 @@ -16512,7 +15256,7 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.4.0(picomatch@4.0.2): + fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -16551,13 +15295,13 @@ snapshots: dependencies: app-module-path: 2.2.0 commander: 12.1.0 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.0 module-definition: 6.0.0 module-lookup-amd: 9.0.2 - resolve: 1.22.8 + resolve: 1.22.10 resolve-dependency-path: 4.0.0 - sass-lookup: 6.0.1 - stylus-lookup: 6.0.0 + sass-lookup: 6.1.0 + stylus-lookup: 6.1.0 tsconfig-paths: 4.2.0 typescript: 5.4.5 @@ -16588,20 +15332,20 @@ snapshots: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 - find-cypress-specs@1.43.4(@babel/core@7.25.7): + find-cypress-specs@1.46.2(@babel/core@7.26.7): dependencies: '@actions/core': 1.11.1 arg: 5.0.2 console.table: 0.10.0 - debug: 4.3.7(supports-color@8.1.1) - find-test-names: 1.28.18(@babel/core@7.25.7) + debug: 4.4.0(supports-color@8.1.1) + find-test-names: 1.28.30(@babel/core@7.26.7) globby: 11.1.0 minimatch: 3.1.2 pluralize: 8.0.0 require-and-forget: 1.0.1 shelljs: 0.8.5 spec-change: 1.11.11 - tsx: 4.19.1 + tsx: 4.19.2 transitivePeerDependencies: - '@babel/core' - supports-color @@ -16612,20 +15356,18 @@ snapshots: fast-querystring: 1.1.2 safe-regex2: 3.1.0 - find-process@1.4.7: + find-process@1.4.10: dependencies: chalk: 4.1.2 - commander: 5.1.0 - debug: 4.3.7(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color + commander: 12.1.0 + loglevel: 1.9.2 - find-test-names@1.28.18(@babel/core@7.25.7): + find-test-names@1.28.30(@babel/core@7.26.7): dependencies: - '@babel/parser': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) + '@babel/parser': 7.26.7 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) acorn-walk: 8.3.4 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 simple-bin-help: 1.8.0 transitivePeerDependencies: @@ -16655,51 +15397,47 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 flat-cache@5.0.0: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 flat@5.0.2: {} - flatted@3.3.1: {} + flatted@3.3.2: {} flexsearch@0.7.43: {} - focus-trap@7.6.0: + focus-trap@7.6.4: dependencies: tabbable: 6.2.0 - follow-redirects@1.15.9(debug@4.3.7): + follow-redirects@1.15.9(debug@4.4.0): optionalDependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) font-awesome@4.7.0: {} - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - for-each@0.3.4: dependencies: is-callable: 1.2.7 foreground-child@2.0.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 signal-exit: 3.0.7 foreground-child@3.3.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 signal-exit: 4.1.0 forever-agent@0.6.1: {} - form-data@4.0.0: + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -16777,22 +15515,14 @@ snapshots: get-amd-module-type@6.0.0: dependencies: ast-module-types: 6.0.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 get-caller-file@2.0.5: {} - get-east-asian-width@1.2.0: {} + get-east-asian-width@1.3.0: {} get-func-name@2.0.2: {} - get-intrinsic@1.2.4: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - get-intrinsic@1.2.7: dependencies: call-bind-apply-helpers: 1.0.1 @@ -16839,7 +15569,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.7 - get-tsconfig@4.8.1: + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -16910,7 +15640,7 @@ snapshots: globals@14.0.0: {} - globals@15.10.0: {} + globals@15.14.0: {} globalthis@1.0.4: dependencies: @@ -16921,7 +15651,7 @@ snapshots: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -16929,7 +15659,7 @@ snapshots: globby@13.2.2: dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -16937,7 +15667,7 @@ snapshots: globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 @@ -16949,10 +15679,6 @@ snapshots: dependencies: minimist: 1.2.8 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 - gopd@1.2.0: {} got@11.8.6: @@ -16994,8 +15720,6 @@ snapshots: dependencies: ansi-regex: 2.1.1 - has-bigints@1.0.2: {} - has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -17006,21 +15730,17 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} + es-define-property: 1.0.1 has-proto@1.2.0: dependencies: dunder-proto: 1.0.1 - has-symbols@1.0.3: {} - has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasha@5.2.2: dependencies: @@ -17031,7 +15751,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-to-html@9.0.3: + hast-util-to-html@9.0.4: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -17078,7 +15798,7 @@ snapshots: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 entities: 4.5.0 http-cache-semantics@4.1.1: {} @@ -17100,20 +15820,20 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-parser-js@0.5.8: {} + http-parser-js@0.5.9: {} http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.1 - debug: 4.3.7(supports-color@8.1.1) + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17132,7 +15852,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -17151,9 +15871,9 @@ snapshots: https-localhost@4.7.1: dependencies: appdata-path: 1.0.0 - compression: 1.7.4 + compression: 1.7.5 cors: 2.8.5 - express: 4.21.0 + express: 4.21.2 spdy: 4.0.2 uglify-js: 3.19.3 transitivePeerDependencies: @@ -17162,14 +15882,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.5: + https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.1 - debug: 4.3.7(supports-color@8.1.1) + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17183,7 +15903,7 @@ snapshots: humanize-duration@3.32.1: {} - husky@9.1.6: {} + husky@9.1.7: {} iconv-lite@0.4.24: dependencies: @@ -17232,12 +15952,6 @@ snapshots: ini@4.1.1: {} - internal-slot@1.0.7: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.0.6 - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -17263,16 +15977,11 @@ snapshots: is-alphabetical: 1.0.4 is-decimal: 1.0.4 - is-arguments@1.1.1: + is-arguments@1.2.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-array-buffer@3.0.4: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -17291,10 +16000,6 @@ snapshots: has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - is-bigint@1.1.0: dependencies: has-bigints: 1.1.0 @@ -17303,11 +16008,6 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-boolean-object@1.2.1: dependencies: call-bound: 1.0.3 @@ -17319,14 +16019,6 @@ snapshots: is-callable@1.2.7: {} - is-ci@3.0.1: - dependencies: - ci-info: 3.9.0 - - is-core-module@2.15.1: - dependencies: - hasown: 2.0.2 - is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -17337,10 +16029,6 @@ snapshots: get-intrinsic: 1.2.7 is-typed-array: 1.1.15 - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.2 - is-date-object@1.1.0: dependencies: call-bound: 1.0.3 @@ -17362,7 +16050,7 @@ snapshots: is-fullwidth-code-point@5.0.0: dependencies: - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.3.0 is-generator-fn@2.1.0: {} @@ -17390,10 +16078,6 @@ snapshots: is-module@1.0.0: {} - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-number-object@1.1.1: dependencies: call-bound: 1.0.3 @@ -17417,11 +16101,6 @@ snapshots: is-promise@2.2.2: {} - is-regex@1.1.4: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-regex@1.2.1: dependencies: call-bound: 1.0.3 @@ -17433,10 +16112,6 @@ snapshots: is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 - is-shared-array-buffer@1.0.4: dependencies: call-bound: 1.0.3 @@ -17447,10 +16122,6 @@ snapshots: is-stream@3.0.0: {} - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.2 - is-string@1.1.1: dependencies: call-bound: 1.0.3 @@ -17460,10 +16131,6 @@ snapshots: dependencies: better-path-resolve: 1.0.0 - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - is-symbol@1.1.1: dependencies: call-bound: 1.0.3 @@ -17488,10 +16155,10 @@ snapshots: dependencies: call-bound: 1.0.3 - is-weakset@2.0.3: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 is-what@4.1.16: {} @@ -17519,7 +16186,7 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -17528,8 +16195,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -17538,18 +16205,18 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/core': 7.26.7 + '@babel/parser': 7.26.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 + semver: 7.7.0 transitivePeerDependencies: - supports-color istanbul-lib-processinfo@2.0.3: dependencies: archy: 1.0.0 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 istanbul-lib-coverage: 3.2.2 p-map: 3.0.0 rimraf: 3.0.2 @@ -17563,7 +16230,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -17572,7 +16239,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -17612,7 +16279,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -17632,16 +16299,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.16.11): + jest-cli@29.7.0(@types/node@20.17.16): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.11) + create-jest: 29.7.0(@types/node@20.17.16) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.16.11) + jest-config: 29.7.0(@types/node@20.17.16) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -17651,12 +16318,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.16.11): + jest-config@29.7.0(@types/node@20.17.16): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.25.7) + babel-jest: 29.7.0(@babel/core@7.26.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -17676,7 +16343,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -17705,7 +16372,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -17715,7 +16382,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.16.11 + '@types/node': 20.17.16 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -17727,12 +16394,12 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - jest-image-snapshot@4.2.0(jest@29.7.0(@types/node@20.16.11)): + jest-image-snapshot@4.2.0(jest@29.7.0(@types/node@20.17.16)): dependencies: chalk: 1.1.3 get-stdin: 5.0.1 glur: 1.1.2 - jest: 29.7.0(@types/node@20.16.11) + jest: 29.7.0(@types/node@20.17.16) lodash: 4.17.21 mkdirp: 0.5.6 pixelmatch: 5.3.0 @@ -17754,7 +16421,7 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -17767,7 +16434,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -17791,8 +16458,8 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 + resolve: 1.22.10 + resolve.exports: 2.0.3 slash: 3.0.0 jest-runner@29.7.0: @@ -17802,7 +16469,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -17830,9 +16497,9 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 chalk: 4.1.2 - cjs-module-lexer: 1.4.1 + cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -17850,15 +16517,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) - '@babel/types': 7.25.7 + '@babel/core': 7.26.7 + '@babel/generator': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) + '@babel/types': 7.26.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -17869,14 +16536,14 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.3 + semver: 7.7.0 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -17895,7 +16562,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.11 + '@types/node': 20.17.16 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -17904,23 +16571,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.16.11): + jest@29.7.0(@types/node@20.17.16): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.16.11) + jest-cli: 29.7.0(@types/node@20.17.16) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -17943,7 +16610,7 @@ snapshots: lex-parser: 0.1.4 nomnom: 1.5.2 - jiti@1.21.6: {} + jiti@1.21.7: {} jju@1.4.0: {} @@ -17961,7 +16628,7 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.0: {} + js-tokens@9.0.1: {} js-yaml@3.14.1: dependencies: @@ -17978,16 +16645,16 @@ snapshots: jsdom@24.1.3: dependencies: - cssstyle: 4.1.0 + cssstyle: 4.2.1 data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.0 + decimal.js: 10.5.0 + form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.13 - parse5: 7.1.2 + nwsapi: 2.2.16 + parse5: 7.2.1 rrweb-cssom: 0.7.1 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -17996,7 +16663,7 @@ snapshots: webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 + whatwg-url: 14.1.0 ws: 8.18.0 xml-name-validator: 5.0.0 transitivePeerDependencies: @@ -18022,7 +16689,7 @@ snapshots: dependencies: '@bcherny/json-schema-ref-parser': 10.0.5-fork '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.10 + '@types/lodash': 4.17.15 '@types/prettier': 2.7.3 cli-color: 2.0.4 get-stdin: 8.0.0 @@ -18077,7 +16744,7 @@ snapshots: junk@4.0.1: {} - katex@0.16.11: + katex@0.16.21: dependencies: commander: 8.3.0 @@ -18120,8 +16787,8 @@ snapshots: launch-editor@2.9.1: dependencies: - picocolors: 1.1.0 - shell-quote: 1.8.1 + picocolors: 1.1.1 + shell-quote: 1.8.2 layout-base@1.0.2: {} @@ -18144,11 +16811,9 @@ snapshots: dependencies: cookie: 0.7.2 process-warning: 3.0.0 - set-cookie-parser: 2.7.0 + set-cookie-parser: 2.7.1 - lilconfig@2.1.0: {} - - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -18156,18 +16821,18 @@ snapshots: dependencies: uc.micro: 1.0.6 - lint-staged@15.2.10: + lint-staged@15.4.3: dependencies: - chalk: 5.3.0 - commander: 12.1.0 - debug: 4.3.7(supports-color@8.1.1) + chalk: 5.4.1 + commander: 13.1.0 + debug: 4.4.0(supports-color@8.1.1) execa: 8.0.1 - lilconfig: 3.1.2 + lilconfig: 3.1.3 listr2: 8.2.5 micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.5.1 + yaml: 2.7.0 transitivePeerDependencies: - supports-color @@ -18197,10 +16862,10 @@ snapshots: local-pkg@0.4.3: {} - local-pkg@0.5.0: + local-pkg@0.5.1: dependencies: - mlly: 1.7.2 - pkg-types: 1.2.0 + mlly: 1.7.4 + pkg-types: 1.3.1 locate-path@3.0.0: dependencies: @@ -18275,11 +16940,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -18294,14 +16954,14 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.11: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 magicast@0.3.5: dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.26.7 + '@babel/types': 7.26.7 source-map-js: 1.2.1 make-dir@3.1.0: @@ -18310,7 +16970,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.0 makeerror@1.0.12: dependencies: @@ -18328,7 +16988,7 @@ snapshots: mdurl: 1.0.1 uc.micro: 1.0.6 - markdown-table@3.0.3: {} + markdown-table@3.0.4: {} marked@13.0.3: {} @@ -18340,7 +17000,7 @@ snapshots: dependencies: '@types/unist': 2.0.11 - mdast-util-find-and-replace@3.0.1: + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 @@ -18357,19 +17017,19 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-from-markdown@2.0.1: + mdast-util-from-markdown@2.0.2: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-decode-string: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark: 4.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color @@ -18379,8 +17039,8 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: - supports-color @@ -18390,24 +17050,24 @@ snapshots: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.1 - micromark-util-character: 2.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 mdast-util-gfm-footnote@2.0.0: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 - micromark-util-normalize-identifier: 2.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -18415,9 +17075,9 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -18425,20 +17085,20 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.1 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.1 + mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -18451,22 +17111,23 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.0 devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.0 + micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 vfile: 6.0.3 - mdast-util-to-markdown@2.1.0: + mdast-util-to-markdown@2.1.2: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 - micromark-util-decode-string: 2.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 unist-util-visit: 5.0.0 zwitch: 2.0.4 @@ -18509,208 +17170,208 @@ snapshots: methods@1.1.2: {} - micromark-core-commonmark@2.0.1: + micromark-core-commonmark@2.0.2: dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-factory-destination: 2.0.0 - micromark-factory-label: 2.0.0 - micromark-factory-space: 2.0.0 - micromark-factory-title: 2.0.0 - micromark-factory-whitespace: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-classify-character: 2.0.0 - micromark-util-html-tag-name: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.0.4 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 micromark-extension-frontmatter@2.0.0: dependencies: fault: 2.0.1 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 micromark-extension-gfm-autolink-literal@2.1.0: dependencies: - micromark-util-character: 2.1.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 micromark-extension-gfm-strikethrough@2.1.0: dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-classify-character: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-extension-gfm-table@2.1.0: + micromark-extension-gfm-table@2.1.1: dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 micromark-extension-gfm-tagfilter@2.0.0: dependencies: - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.1 micromark-extension-gfm-task-list-item@2.1.0: dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 micromark-extension-gfm@3.0.0: dependencies: micromark-extension-gfm-autolink-literal: 2.1.0 micromark-extension-gfm-footnote: 2.1.0 micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.0 + micromark-extension-gfm-table: 2.1.1 micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.1 - micromark-factory-destination@2.0.0: + micromark-factory-destination@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-factory-label@2.0.0: + micromark-factory-label@2.0.1: dependencies: devlop: 1.1.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-factory-space@2.0.0: + micromark-factory-space@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.1 - micromark-factory-title@2.0.0: + micromark-factory-title@2.0.1: dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-factory-whitespace@2.0.0: + micromark-factory-whitespace@2.0.1: dependencies: - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-util-character@2.1.0: + micromark-util-character@2.1.1: dependencies: - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-util-chunked@2.0.0: + micromark-util-chunked@2.0.1: dependencies: - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 - micromark-util-classify-character@2.0.0: + micromark-util-classify-character@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-util-combine-extensions@2.0.0: + micromark-util-combine-extensions@2.0.1: dependencies: - micromark-util-chunked: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.1 - micromark-util-decode-numeric-character-reference@2.0.1: + micromark-util-decode-numeric-character-reference@2.0.2: dependencies: - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 - micromark-util-decode-string@2.0.0: + micromark-util-decode-string@2.0.1: dependencies: decode-named-character-reference: 1.0.2 - micromark-util-character: 2.1.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-symbol: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 - micromark-util-encode@2.0.0: {} + micromark-util-encode@2.0.1: {} - micromark-util-html-tag-name@2.0.0: {} + micromark-util-html-tag-name@2.0.1: {} - micromark-util-normalize-identifier@2.0.0: + micromark-util-normalize-identifier@2.0.1: dependencies: - micromark-util-symbol: 2.0.0 + micromark-util-symbol: 2.0.1 - micromark-util-resolve-all@2.0.0: + micromark-util-resolve-all@2.0.1: dependencies: - micromark-util-types: 2.0.0 + micromark-util-types: 2.0.1 - micromark-util-sanitize-uri@2.0.0: + micromark-util-sanitize-uri@2.0.1: dependencies: - micromark-util-character: 2.1.0 - micromark-util-encode: 2.0.0 - micromark-util-symbol: 2.0.0 + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 - micromark-util-subtokenize@2.0.1: + micromark-util-subtokenize@2.0.4: dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 - micromark-util-symbol@2.0.0: {} + micromark-util-symbol@2.0.1: {} - micromark-util-types@2.0.0: {} + micromark-util-types@2.0.1: {} micromark@2.11.4: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color - micromark@4.0.0: + micromark@4.0.1: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.1 - micromark-factory-space: 2.0.0 - micromark-util-character: 2.1.0 - micromark-util-chunked: 2.0.0 - micromark-util-combine-extensions: 2.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-encode: 2.0.0 - micromark-util-normalize-identifier: 2.0.0 - micromark-util-resolve-all: 2.0.0 - micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.1 - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 + micromark-core-commonmark: 2.0.2 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.0.4 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.1 transitivePeerDependencies: - supports-color @@ -18769,17 +17430,17 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.7.2: + mlly@1.7.4: dependencies: - acorn: 8.12.1 - pathe: 1.1.2 - pkg-types: 1.2.0 + acorn: 8.14.0 + pathe: 2.0.2 + pkg-types: 1.3.1 ufo: 1.5.4 module-definition@6.0.0: dependencies: ast-module-types: 6.0.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 module-lookup-amd@9.0.2: dependencies: @@ -18809,14 +17470,14 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.7: {} - nanoid@3.3.8: {} natural-compare@1.4.0: {} negotiator@0.6.3: {} + negotiator@0.6.4: {} + neo-async@2.6.2: {} nested-error-stacks@2.1.1: {} @@ -18829,7 +17490,7 @@ snapshots: node-domexception@1.0.0: {} - node-fetch-native@1.6.4: {} + node-fetch-native@1.6.6: {} node-fetch@2.6.7(encoding@0.1.13): dependencies: @@ -18855,15 +17516,13 @@ snapshots: node-preload@0.2.1: dependencies: - process-on-spawn: 1.0.0 - - node-releases@2.0.18: {} + process-on-spawn: 1.1.0 node-releases@2.0.19: {} - node-source-walk@7.0.0: + node-source-walk@7.0.1: dependencies: - '@babel/parser': 7.25.7 + '@babel/parser': 7.26.7 nomnom@1.5.2: dependencies: @@ -18873,7 +17532,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.8 + resolve: 1.22.10 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -18893,7 +17552,7 @@ snapshots: dependencies: path-key: 4.0.0 - nwsapi@2.2.13: {} + nwsapi@2.2.16: {} nyc@15.1.0: dependencies: @@ -18917,7 +17576,7 @@ snapshots: make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 - process-on-spawn: 1.0.0 + process-on-spawn: 1.1.0 resolve-from: 5.0.0 rimraf: 3.0.2 signal-exit: 3.0.7 @@ -18931,24 +17590,15 @@ snapshots: object-hash@3.0.0: {} - object-inspect@1.13.2: {} - object-inspect@1.13.3: {} object-is@1.1.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 object-keys@1.1.1: {} - object.assign@4.1.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - object.assign@4.1.7: dependencies: call-bind: 1.0.8 @@ -18960,10 +17610,10 @@ snapshots: obuf@1.1.2: {} - ofetch@1.4.0: + ofetch@1.4.1: dependencies: destr: 2.0.3 - node-fetch-native: 1.6.4 + node-fetch-native: 1.6.6 ufo: 1.5.4 omggif@1.0.10: {} @@ -18992,9 +17642,11 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-js@0.4.3: + oniguruma-to-es@2.3.0: dependencies: - regex: 4.3.3 + emoji-regex-xs: 1.0.0 + regex: 5.1.1 + regex-recursion: 5.1.1 open@8.4.2: dependencies: @@ -19002,11 +17654,11 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openapi-fetch@0.11.3: + openapi-fetch@0.13.4: dependencies: - openapi-typescript-helpers: 0.0.13 + openapi-typescript-helpers: 0.0.15 - openapi-typescript-helpers@0.0.13: {} + openapi-typescript-helpers@0.0.15: {} optionator@0.9.4: dependencies: @@ -19113,7 +17765,7 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.1: {} + package-manager-detector@0.2.9: {} pako@1.0.11: {} @@ -19136,17 +17788,17 @@ snapshots: parse-imports@2.2.1: dependencies: - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 slashes: 3.0.12 parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse5@7.1.2: + parse5@7.2.1: dependencies: entities: 4.5.0 @@ -19177,7 +17829,7 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.10: {} + path-to-regexp@0.1.12: {} path-type@4.0.0: {} @@ -19185,16 +17837,18 @@ snapshots: pathe@1.1.2: {} + pathe@2.0.2: {} + pathval@1.1.1: {} pause-stream@0.0.11: dependencies: through: 2.3.8 - pcg@1.0.0: + pcg@1.1.0: dependencies: long: 5.2.3 - ramda: 0.29.0 + ramda: 0.29.1 pend@1.2.0: {} @@ -19202,8 +17856,6 @@ snapshots: performance-now@2.1.0: {} - picocolors@1.1.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -19218,7 +17870,11 @@ snapshots: pino-abstract-transport@1.2.0: dependencies: - readable-stream: 4.5.2 + readable-stream: 4.7.0 + split2: 4.2.0 + + pino-abstract-transport@2.0.0: + dependencies: split2: 4.2.0 pino-std-serializers@6.2.2: {} @@ -19239,18 +17895,18 @@ snapshots: sonic-boom: 3.8.1 thread-stream: 2.7.0 - pino@9.4.0: + pino@9.6.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.2.0 + pino-abstract-transport: 2.0.0 pino-std-serializers: 7.0.0 - process-warning: 4.0.0 + process-warning: 4.0.1 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 - sonic-boom: 4.1.0 + sonic-boom: 4.2.0 thread-stream: 3.1.0 pirates@4.0.6: {} @@ -19271,11 +17927,11 @@ snapshots: dependencies: find-up: 6.3.0 - pkg-types@1.2.0: + pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.2 - pathe: 1.1.2 + mlly: 1.7.4 + pathe: 2.0.2 plist@3.1.0: dependencies: @@ -19300,28 +17956,28 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.47): + postcss-import@15.1.0(postcss@8.5.1): dependencies: - postcss: 8.4.47 + postcss: 8.5.1 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.8 + resolve: 1.22.10 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.0.1(postcss@8.5.1): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.47 + postcss: 8.5.1 - postcss-load-config@4.0.2(postcss@8.4.47): + postcss-load-config@4.0.2(postcss@8.5.1): dependencies: - lilconfig: 3.1.2 - yaml: 2.5.1 + lilconfig: 3.1.3 + yaml: 2.7.0 optionalDependencies: - postcss: 8.4.47 + postcss: 8.5.1 - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@6.2.0(postcss@8.5.1): dependencies: - postcss: 8.4.47 + postcss: 8.5.1 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -19338,19 +17994,13 @@ snapshots: postcss: 8.5.1 quote-unquote: 1.0.0 - postcss@8.4.47: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.0 - source-map-js: 1.2.1 - postcss@8.5.1: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.24.2: {} + preact@10.25.4: {} precinct@12.1.2: dependencies: @@ -19363,29 +18013,29 @@ snapshots: detective-sass: 6.0.0 detective-scss: 5.0.0 detective-stylus: 5.0.0 - detective-typescript: 13.0.0(typescript@5.6.2) - detective-vue2: 2.0.3(typescript@5.6.2) + detective-typescript: 13.0.0(typescript@5.7.3) + detective-vue2: 2.1.1(typescript@5.7.3) module-definition: 6.0.0 - node-source-walk: 7.0.0 + node-source-walk: 7.0.1 postcss: 8.5.1 - typescript: 5.6.2 + typescript: 5.7.3 transitivePeerDependencies: - supports-color prelude-ls@1.2.1: {} - prettier-plugin-jsdoc@1.3.0(prettier@3.3.3): + prettier-plugin-jsdoc@1.3.2(prettier@3.4.2): dependencies: binary-searching: 2.0.5 comment-parser: 1.4.1 - mdast-util-from-markdown: 2.0.1 - prettier: 3.3.3 + mdast-util-from-markdown: 2.0.2 + prettier: 3.4.2 transitivePeerDependencies: - supports-color prettier@2.8.8: {} - prettier@3.3.3: {} + prettier@3.4.2: {} pretty-bytes@5.6.0: {} @@ -19399,13 +18049,13 @@ snapshots: process-nextick-args@2.0.1: {} - process-on-spawn@1.0.0: + process-on-spawn@1.1.0: dependencies: fromentries: 1.3.2 process-warning@3.0.0: {} - process-warning@4.0.0: {} + process-warning@4.0.1: {} process@0.11.10: {} @@ -19429,9 +18079,9 @@ snapshots: dependencies: event-stream: 3.3.4 - pseudomap@1.0.2: {} - - psl@1.9.0: {} + psl@1.15.0: + dependencies: + punycode: 2.3.1 pump@3.0.2: dependencies: @@ -19444,7 +18094,11 @@ snapshots: qs@6.13.0: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 + + qs@6.13.1: + dependencies: + side-channel: 1.1.0 querystringify@2.2.0: {} @@ -19460,7 +18114,7 @@ snapshots: ramda@0.28.0: {} - ramda@0.29.0: {} + ramda@0.29.1: {} randombytes@2.1.0: dependencies: @@ -19517,7 +18171,7 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readable-stream@4.5.2: + readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 @@ -19533,11 +18187,11 @@ snapshots: rechoir@0.6.2: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 rechoir@0.7.1: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 reflect.getprototypeof@1.0.10: dependencies: @@ -19562,17 +18216,19 @@ snapshots: dependencies: '@babel/runtime': 7.26.7 - regex@4.3.3: {} + regex-recursion@5.1.1: + dependencies: + regex: 5.1.1 + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@5.1.1: + dependencies: + regex-utilities: 2.3.0 regexp-tree@0.1.27: {} - regexp.prototype.flags@1.5.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -19628,8 +18284,8 @@ snapshots: remark-parse@11.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.1 - micromark-util-types: 2.0.0 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.1 unified: 11.0.4 transitivePeerDependencies: - supports-color @@ -19637,7 +18293,7 @@ snapshots: remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.0 + mdast-util-to-markdown: 2.1.2 unified: 11.0.4 remark@15.0.1: @@ -19690,7 +18346,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} + resolve.exports@2.0.3: {} resolve@1.22.10: dependencies: @@ -19698,12 +18354,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.8: - dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 @@ -19740,64 +18390,42 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-visualizer@5.12.0(rollup@4.32.0): + rollup-plugin-visualizer@5.14.0(rollup@4.32.1): dependencies: open: 8.4.2 - picomatch: 2.3.1 + picomatch: 4.0.2 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.32.0 + rollup: 4.32.1 rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 - rollup@4.24.0: + rollup@4.32.1: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.24.0 - '@rollup/rollup-android-arm64': 4.24.0 - '@rollup/rollup-darwin-arm64': 4.24.0 - '@rollup/rollup-darwin-x64': 4.24.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 - '@rollup/rollup-linux-arm-musleabihf': 4.24.0 - '@rollup/rollup-linux-arm64-gnu': 4.24.0 - '@rollup/rollup-linux-arm64-musl': 4.24.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 - '@rollup/rollup-linux-riscv64-gnu': 4.24.0 - '@rollup/rollup-linux-s390x-gnu': 4.24.0 - '@rollup/rollup-linux-x64-gnu': 4.24.0 - '@rollup/rollup-linux-x64-musl': 4.24.0 - '@rollup/rollup-win32-arm64-msvc': 4.24.0 - '@rollup/rollup-win32-ia32-msvc': 4.24.0 - '@rollup/rollup-win32-x64-msvc': 4.24.0 - fsevents: 2.3.3 - - rollup@4.32.0: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.32.0 - '@rollup/rollup-android-arm64': 4.32.0 - '@rollup/rollup-darwin-arm64': 4.32.0 - '@rollup/rollup-darwin-x64': 4.32.0 - '@rollup/rollup-freebsd-arm64': 4.32.0 - '@rollup/rollup-freebsd-x64': 4.32.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.32.0 - '@rollup/rollup-linux-arm-musleabihf': 4.32.0 - '@rollup/rollup-linux-arm64-gnu': 4.32.0 - '@rollup/rollup-linux-arm64-musl': 4.32.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.32.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.32.0 - '@rollup/rollup-linux-riscv64-gnu': 4.32.0 - '@rollup/rollup-linux-s390x-gnu': 4.32.0 - '@rollup/rollup-linux-x64-gnu': 4.32.0 - '@rollup/rollup-linux-x64-musl': 4.32.0 - '@rollup/rollup-win32-arm64-msvc': 4.32.0 - '@rollup/rollup-win32-ia32-msvc': 4.32.0 - '@rollup/rollup-win32-x64-msvc': 4.32.0 + '@rollup/rollup-android-arm-eabi': 4.32.1 + '@rollup/rollup-android-arm64': 4.32.1 + '@rollup/rollup-darwin-arm64': 4.32.1 + '@rollup/rollup-darwin-x64': 4.32.1 + '@rollup/rollup-freebsd-arm64': 4.32.1 + '@rollup/rollup-freebsd-x64': 4.32.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.32.1 + '@rollup/rollup-linux-arm-musleabihf': 4.32.1 + '@rollup/rollup-linux-arm64-gnu': 4.32.1 + '@rollup/rollup-linux-arm64-musl': 4.32.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.32.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.32.1 + '@rollup/rollup-linux-riscv64-gnu': 4.32.1 + '@rollup/rollup-linux-s390x-gnu': 4.32.1 + '@rollup/rollup-linux-x64-gnu': 4.32.1 + '@rollup/rollup-linux-x64-musl': 4.32.1 + '@rollup/rollup-win32-arm64-msvc': 4.32.1 + '@rollup/rollup-win32-ia32-msvc': 4.32.1 + '@rollup/rollup-win32-x64-msvc': 4.32.1 fsevents: 2.3.3 roughjs@4.6.6(patch_hash=vxb6t6fqvzyhwhtjiliqr25jyq): @@ -19809,6 +18437,8 @@ snapshots: rrweb-cssom@0.7.1: {} + rrweb-cssom@0.8.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -19817,7 +18447,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 safe-array-concat@1.1.3: dependencies: @@ -19850,9 +18480,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-lookup@6.0.1: + sass-lookup@6.1.0: dependencies: commander: 12.1.0 + enhanced-resolve: 5.18.0 saxes@6.0.0: dependencies: @@ -19864,13 +18495,6 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.2.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) - schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 @@ -19878,7 +18502,7 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) - search-insights@2.17.2: {} + search-insights@2.17.3: {} secure-json-parse@2.7.0: {} @@ -19895,7 +18519,7 @@ snapshots: semver@7.6.2: {} - semver@7.6.3: {} + semver@7.7.0: {} send@0.19.0: dependencies: @@ -19942,15 +18566,15 @@ snapshots: set-blocking@2.0.0: {} - set-cookie-parser@2.7.0: {} + set-cookie-parser@2.7.1: {} set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -19978,7 +18602,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.6.3 + semver: 7.7.0 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -20012,7 +18636,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.1: {} + shell-quote@1.8.2: {} shelljs@0.8.5: dependencies: @@ -20027,13 +18651,15 @@ snapshots: vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - shiki@1.22.0: + shiki@1.29.2: dependencies: - '@shikijs/core': 1.22.0 - '@shikijs/engine-javascript': 1.22.0 - '@shikijs/engine-oniguruma': 1.22.0 - '@shikijs/types': 1.22.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/core': 1.29.2 + '@shikijs/engine-javascript': 1.29.2 + '@shikijs/engine-oniguruma': 1.29.2 + '@shikijs/langs': 1.29.2 + '@shikijs/themes': 1.29.2 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 side-channel-list@1.0.0: @@ -20056,13 +18682,6 @@ snapshots: object-inspect: 1.13.3 side-channel-map: 1.0.1 - side-channel@1.0.6: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 - side-channel@1.1.0: dependencies: es-errors: 1.3.0 @@ -20133,7 +18752,7 @@ snapshots: dependencies: atomic-sleep: 1.0.0 - sonic-boom@4.1.0: + sonic-boom@4.2.0: dependencies: atomic-sleep: 1.0.0 @@ -20179,33 +18798,33 @@ snapshots: signal-exit: 3.0.7 which: 2.0.2 - spawndamnit@2.0.0: + spawndamnit@3.0.1: dependencies: - cross-spawn: 5.1.0 - signal-exit: 3.0.7 + cross-spawn: 7.0.6 + signal-exit: 4.1.0 spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 - spdx-license-ids@3.0.20: {} + spdx-license-ids@3.0.21: {} spdy-transport@3.0.0: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -20216,7 +18835,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -20229,11 +18848,11 @@ snapshots: spec-change@1.11.11: dependencies: arg: 5.0.2 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) deep-equal: 2.2.3 dependency-tree: 11.0.1 lazy-ass: 2.0.3 - tinyglobby: 0.2.9 + tinyglobby: 0.2.10 transitivePeerDependencies: - supports-color @@ -20265,16 +18884,16 @@ snapshots: stackback@0.0.2: {} - start-server-and-test@2.0.8: + start-server-and-test@2.0.10: dependencies: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 - wait-on: 8.0.1(debug@4.3.7) + wait-on: 8.0.2(debug@4.4.0) transitivePeerDependencies: - supports-color @@ -20282,11 +18901,12 @@ snapshots: statuses@2.0.1: {} - std-env@3.7.0: {} + std-env@3.8.0: {} - stop-iteration-iterator@1.0.0: + stop-iteration-iterator@1.1.0: dependencies: - internal-slot: 1.0.7 + es-errors: 1.3.0 + internal-slot: 1.1.0 stream-combiner@0.0.4: dependencies: @@ -20314,7 +18934,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.4.0 - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 string.prototype.matchall@4.0.12: @@ -20405,19 +19025,19 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@2.1.0: + strip-literal@2.1.1: dependencies: - js-tokens: 9.0.0 + js-tokens: 9.0.1 - stylis@4.3.4: {} + stylis@4.3.5: {} - stylus-lookup@6.0.0: + stylus-lookup@6.1.0: dependencies: commander: 12.1.0 sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -20425,7 +19045,7 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 - superjson@2.2.1: + superjson@2.2.2: dependencies: copy-anything: 3.0.5 @@ -20450,33 +19070,33 @@ snapshots: synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.7.0 + tslib: 2.8.1 tabbable@6.2.0: {} - tailwindcss@3.4.13: + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 + jiti: 1.21.7 + lilconfig: 3.1.3 micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.1.0 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47) - postcss-nested: 6.2.0(postcss@8.4.47) + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) postcss-selector-parser: 6.1.2 - resolve: 1.22.8 + resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - ts-node @@ -20485,10 +19105,10 @@ snapshots: teen_process@1.16.0: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.7 bluebird: 3.7.2 lodash: 4.17.21 - shell-quote: 1.8.1 + shell-quote: 1.8.2 source-map-support: 0.5.21 which: 2.0.2 @@ -20508,35 +19128,28 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)): + terser-webpack-plugin@5.3.11(esbuild@0.21.5)(webpack@5.97.1(esbuild@0.21.5)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 3.3.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.34.1 - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) + terser: 5.37.0 + webpack: 5.97.1(esbuild@0.21.5) optionalDependencies: esbuild: 0.21.5 - terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)): + terser-webpack-plugin@5.3.11(esbuild@0.21.5)(webpack@5.97.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 3.3.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.34.1 - webpack: 5.95.0(esbuild@0.21.5) + terser: 5.37.0 + webpack: 5.97.1(esbuild@0.21.5)(webpack-cli@4.10.0) optionalDependencies: esbuild: 0.21.5 - terser@5.34.1: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.12.1 - commander: 2.20.3 - source-map-support: 0.5.21 - terser@5.37.0: dependencies: '@jridgewell/source-map': 0.3.6 @@ -20550,8 +19163,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -20583,17 +19194,23 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.0: {} + tinyexec@0.3.2: {} - tinyglobby@0.2.9: + tinyglobby@0.2.10: dependencies: - fdir: 6.4.0(picomatch@4.0.2) + fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 tinypool@0.8.4: {} tinyspy@2.2.1: {} + tldts-core@6.1.76: {} + + tldts@6.1.76: + dependencies: + tldts-core: 6.1.76 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -20602,8 +19219,6 @@ snapshots: tmpl@1.0.5: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -20616,11 +19231,15 @@ snapshots: tough-cookie@4.1.4: dependencies: - psl: 1.9.0 + psl: 1.15.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + tough-cookie@5.1.0: + dependencies: + tldts: 6.1.76 + tr46@0.0.3: {} tr46@1.0.1: @@ -20639,14 +19258,14 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.4.5): + ts-api-utils@1.4.3(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-api-utils@2.0.0(typescript@5.4.5): dependencies: typescript: 5.4.5 - ts-api-utils@1.3.0(typescript@5.6.2): - dependencies: - typescript: 5.6.2 - ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} @@ -20659,12 +19278,12 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.7.0: {} + tslib@2.8.1: {} - tsx@4.19.1: + tsx@4.19.2: dependencies: esbuild: 0.23.1 - get-tsconfig: 4.8.1 + get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 @@ -20694,7 +19313,7 @@ snapshots: type-fest@0.8.1: {} - type-fest@4.26.1: {} + type-fest@4.33.0: {} type-is@1.6.18: dependencies: @@ -20753,20 +19372,19 @@ snapshots: shiki: 0.14.7 typescript: 5.4.5 - typescript-eslint@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5): + typescript-eslint@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5))(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@1.21.6))(typescript@5.4.5) - optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5))(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + '@typescript-eslint/parser': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + '@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.4.5) + eslint: 9.19.0(jiti@1.21.7) typescript: 5.4.5 transitivePeerDependencies: - - eslint - supports-color typescript@5.4.5: {} - typescript@5.6.2: {} + typescript@5.7.3: {} uc.micro@1.0.6: {} @@ -20785,7 +19403,7 @@ snapshots: dependencies: '@antfu/utils': 0.7.10 defu: 6.1.4 - jiti: 1.21.6 + jiti: 1.21.7 underscore@1.1.7: {} @@ -20793,7 +19411,7 @@ snapshots: undici-types@6.19.8: {} - undici@5.28.4: + undici@5.28.5: dependencies: '@fastify/busboy': 2.1.1 @@ -20873,9 +19491,9 @@ snapshots: universalify@2.0.1: {} - unocss@0.59.4(postcss@8.5.1)(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0)): + unocss@0.59.4(postcss@8.5.1)(rollup@2.79.2)(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0)): dependencies: - '@unocss/astro': 0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0)) + '@unocss/astro': 0.59.4(rollup@2.79.2)(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0)) '@unocss/cli': 0.59.4(rollup@2.79.2) '@unocss/core': 0.59.4 '@unocss/extractor-arbitrary-variants': 0.59.4 @@ -20894,9 +19512,9 @@ snapshots: '@unocss/transformer-compile-class': 0.59.4 '@unocss/transformer-directives': 0.59.4 '@unocss/transformer-variant-group': 0.59.4 - '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0)) + '@unocss/vite': 0.59.4(rollup@2.79.2)(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0)) optionalDependencies: - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) transitivePeerDependencies: - postcss - rollup @@ -20904,43 +19522,34 @@ snapshots: unpipe@1.0.0: {} - unplugin-vue-components@0.26.0(@babel/parser@7.26.7)(rollup@2.79.2)(vue@3.5.11(typescript@5.6.2))(webpack-sources@3.2.3): + unplugin-vue-components@0.26.0(@babel/parser@7.26.7)(rollup@2.79.2)(vue@3.5.13(typescript@5.7.3)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@rollup/pluginutils': 5.1.4(rollup@2.79.2) chokidar: 3.6.0 - debug: 4.3.7(supports-color@8.1.1) - fast-glob: 3.3.2 + debug: 4.4.0(supports-color@8.1.1) + fast-glob: 3.3.3 local-pkg: 0.4.3 - magic-string: 0.30.11 + magic-string: 0.30.17 minimatch: 9.0.5 - resolve: 1.22.8 - unplugin: 1.14.1(webpack-sources@3.2.3) - vue: 3.5.11(typescript@5.6.2) + resolve: 1.22.10 + unplugin: 1.16.1 + vue: 3.5.13(typescript@5.7.3) optionalDependencies: '@babel/parser': 7.26.7 transitivePeerDependencies: - rollup - supports-color - - webpack-sources - unplugin@1.14.1(webpack-sources@3.2.3): + unplugin@1.16.1: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 webpack-virtual-modules: 0.6.2 - optionalDependencies: - webpack-sources: 3.2.3 untildify@4.0.0: {} upath@1.2.0: {} - update-browserslist-db@1.1.1(browserslist@4.24.0): - dependencies: - browserslist: 4.24.0 - escalade: 3.2.0 - picocolors: 1.1.1 - update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -20993,13 +19602,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.0(@types/node@20.16.11)(terser@5.37.0): + vite-node@1.6.0(@types/node@20.17.16)(terser@5.37.0): dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) pathe: 1.1.2 - picocolors: 1.1.0 - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) + picocolors: 1.1.1 + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -21011,76 +19620,66 @@ snapshots: - supports-color - terser - vite-plugin-istanbul@6.0.2(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0)): + vite-plugin-istanbul@6.0.2(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0)): dependencies: '@istanbuljs/load-nyc-config': 1.1.0 - espree: 10.2.0 + espree: 10.3.0 istanbul-lib-instrument: 6.0.3 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map: 0.7.4 test-exclude: 6.0.0 - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) transitivePeerDependencies: - supports-color - vite-plugin-pwa@0.19.8(vite@5.4.12(@types/node@20.16.11)(terser@5.37.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + vite-plugin-pwa@0.19.8(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0): dependencies: - debug: 4.3.7(supports-color@8.1.1) - fast-glob: 3.3.2 + debug: 4.4.0(supports-color@8.1.1) + fast-glob: 3.3.3 pretty-bytes: 6.1.1 - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) - workbox-build: 7.1.1(@types/babel__core@7.20.5) - workbox-window: 7.1.0 + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) + workbox-build: 7.3.0(@types/babel__core@7.20.5) + workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite@5.4.12(@types/node@20.16.11)(terser@5.37.0): + vite@5.4.14(@types/node@20.17.16)(terser@5.37.0): dependencies: esbuild: 0.21.5 postcss: 8.5.1 - rollup: 4.32.0 + rollup: 4.32.1 optionalDependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 fsevents: 2.3.3 terser: 5.37.0 - vite@5.4.8(@types/node@20.16.11)(terser@5.37.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.47 - rollup: 4.24.0 - optionalDependencies: - '@types/node': 20.16.11 - fsevents: 2.3.3 - terser: 5.37.0 - - vitepress-plugin-search@1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5))(vue@3.5.11(typescript@5.4.5)): + vitepress-plugin-search@1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.1.4(@algolia/client-search@5.20.0)(@types/node@20.17.16)(axios@1.7.9)(postcss@8.5.1)(search-insights@2.17.3)(terser@5.37.0)(typescript@5.4.5))(vue@3.5.13(typescript@5.4.5)): dependencies: '@types/flexsearch': 0.7.6 '@types/markdown-it': 12.2.3 flexsearch: 0.7.43 glob-to-regexp: 0.4.1 markdown-it: 13.0.2 - vitepress: 1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5) - vue: 3.5.11(typescript@5.4.5) + vitepress: 1.1.4(@algolia/client-search@5.20.0)(@types/node@20.17.16)(axios@1.7.9)(postcss@8.5.1)(search-insights@2.17.3)(terser@5.37.0)(typescript@5.4.5) + vue: 3.5.13(typescript@5.4.5) - vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.4.5): + vitepress@1.1.4(@algolia/client-search@5.20.0)(@types/node@20.17.16)(axios@1.7.9)(postcss@8.5.1)(search-insights@2.17.3)(terser@5.37.0)(typescript@5.4.5): dependencies: - '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) - '@shikijs/core': 1.22.0 - '@shikijs/transformers': 1.22.0 + '@docsearch/css': 3.8.3 + '@docsearch/js': 3.8.3(@algolia/client-search@5.20.0)(search-insights@2.17.3) + '@shikijs/core': 1.29.2 + '@shikijs/transformers': 1.29.2 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.37.0))(vue@3.5.11(typescript@5.4.5)) - '@vue/devtools-api': 7.4.6 - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.4.5)) - '@vueuse/integrations': 10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.4.5)) - focus-trap: 7.6.0 + '@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(vue@3.5.13(typescript@5.4.5)) + '@vue/devtools-api': 7.7.1 + '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.4.5)) + '@vueuse/integrations': 10.11.1(axios@1.7.9)(focus-trap@7.6.4)(vue@3.5.13(typescript@5.4.5)) + focus-trap: 7.6.4 mark.js: 8.11.1 minisearch: 6.3.0 - shiki: 1.22.0 - vite: 5.4.8(@types/node@20.16.11)(terser@5.37.0) - vue: 3.5.11(typescript@5.4.5) + shiki: 1.29.2 + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) + vue: 3.5.13(typescript@5.4.5) optionalDependencies: postcss: 8.5.1 transitivePeerDependencies: @@ -21111,23 +19710,23 @@ snapshots: - typescript - universal-cookie - vitepress@1.1.4(@algolia/client-search@4.24.0)(@types/node@20.16.11)(axios@1.7.7)(postcss@8.5.1)(search-insights@2.17.2)(terser@5.37.0)(typescript@5.6.2): + vitepress@1.1.4(@algolia/client-search@5.20.0)(@types/node@20.17.16)(axios@1.7.9)(postcss@8.5.1)(search-insights@2.17.3)(terser@5.37.0)(typescript@5.7.3): dependencies: - '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.2) - '@shikijs/core': 1.22.0 - '@shikijs/transformers': 1.22.0 + '@docsearch/css': 3.8.3 + '@docsearch/js': 3.8.3(@algolia/client-search@5.20.0)(search-insights@2.17.3) + '@shikijs/core': 1.29.2 + '@shikijs/transformers': 1.29.2 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.1.4(vite@5.4.8(@types/node@20.16.11)(terser@5.37.0))(vue@3.5.11(typescript@5.6.2)) - '@vue/devtools-api': 7.4.6 - '@vueuse/core': 10.11.1(vue@3.5.11(typescript@5.6.2)) - '@vueuse/integrations': 10.11.1(axios@1.7.7)(focus-trap@7.6.0)(vue@3.5.11(typescript@5.6.2)) - focus-trap: 7.6.0 + '@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@20.17.16)(terser@5.37.0))(vue@3.5.13(typescript@5.7.3)) + '@vue/devtools-api': 7.7.1 + '@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3)) + '@vueuse/integrations': 10.11.1(axios@1.7.9)(focus-trap@7.6.4)(vue@3.5.13(typescript@5.7.3)) + focus-trap: 7.6.4 mark.js: 8.11.1 minisearch: 6.3.0 - shiki: 1.22.0 - vite: 5.4.8(@types/node@20.16.11)(terser@5.37.0) - vue: 3.5.11(typescript@5.6.2) + shiki: 1.29.2 + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) + vue: 3.5.13(typescript@5.7.3) optionalDependencies: postcss: 8.5.1 transitivePeerDependencies: @@ -21158,7 +19757,7 @@ snapshots: - typescript - universal-cookie - vitest@1.6.0(@types/node@20.16.11)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0): + vitest@1.6.0(@types/node@20.17.16)(@vitest/ui@1.6.0)(jsdom@24.1.3)(terser@5.37.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -21167,21 +19766,21 @@ snapshots: '@vitest/utils': 1.6.0 acorn-walk: 8.3.4 chai: 4.5.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) execa: 8.0.1 - local-pkg: 0.5.0 - magic-string: 0.30.11 + local-pkg: 0.5.1 + magic-string: 0.30.17 pathe: 1.1.2 - picocolors: 1.1.0 - std-env: 3.7.0 - strip-literal: 2.1.0 + picocolors: 1.1.1 + std-env: 3.8.0 + strip-literal: 2.1.1 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.12(@types/node@20.16.11)(terser@5.37.0) - vite-node: 1.6.0(@types/node@20.16.11)(terser@5.37.0) + vite: 5.4.14(@types/node@20.17.16)(terser@5.37.0) + vite-node: 1.6.0(@types/node@20.17.16)(terser@5.37.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.16.11 + '@types/node': 20.17.16 '@vitest/ui': 1.6.0(vitest@1.6.0) jsdom: 24.1.3 transitivePeerDependencies: @@ -21225,46 +19824,46 @@ snapshots: vscode-uri@3.0.8: {} - vue-demi@0.14.10(vue@3.5.11(typescript@5.4.5)): + vue-demi@0.14.10(vue@3.5.13(typescript@5.4.5)): dependencies: - vue: 3.5.11(typescript@5.4.5) + vue: 3.5.13(typescript@5.4.5) - vue-demi@0.14.10(vue@3.5.11(typescript@5.6.2)): + vue-demi@0.14.10(vue@3.5.13(typescript@5.7.3)): dependencies: - vue: 3.5.11(typescript@5.6.2) + vue: 3.5.13(typescript@5.7.3) - vue@3.5.11(typescript@5.4.5): + vue@3.5.13(typescript@5.4.5): dependencies: - '@vue/compiler-dom': 3.5.11 - '@vue/compiler-sfc': 3.5.11 - '@vue/runtime-dom': 3.5.11 - '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.4.5)) - '@vue/shared': 3.5.11 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.4.5)) + '@vue/shared': 3.5.13 optionalDependencies: typescript: 5.4.5 - vue@3.5.11(typescript@5.6.2): + vue@3.5.13(typescript@5.7.3): dependencies: - '@vue/compiler-dom': 3.5.11 - '@vue/compiler-sfc': 3.5.11 - '@vue/runtime-dom': 3.5.11 - '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.6.2)) - '@vue/shared': 3.5.11 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.3)) + '@vue/shared': 3.5.13 optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.3 - vuex@4.1.0(vue@3.5.11(typescript@5.6.2)): + vuex@4.1.0(vue@3.5.13(typescript@5.7.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.11(typescript@5.6.2) + vue: 3.5.13(typescript@5.7.3) w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 - wait-on@8.0.1(debug@4.3.7): + wait-on@8.0.2(debug@4.4.0): dependencies: - axios: 1.7.7(debug@4.3.7) + axios: 1.7.9(debug@4.4.0) joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 @@ -21294,7 +19893,7 @@ snapshots: webdriver@7.31.1(typescript@5.4.5): dependencies: - '@types/node': 18.19.55 + '@types/node': 18.19.74 '@wdio/config': 7.31.1(typescript@5.4.5) '@wdio/logger': 7.26.0 '@wdio/protocols': 7.27.0 @@ -21312,34 +19911,34 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0): + webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.97.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)) - '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0)) - '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0))(webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.95.0)) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.97.1) + '@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.2) colorette: 2.0.20 commander: 7.2.0 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 fastest-levenshtein: 1.0.16 import-local: 3.2.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) + webpack: 5.97.1(esbuild@0.21.5)(webpack-cli@4.10.0) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.95.0) + webpack-dev-server: 4.15.2(webpack-cli@4.10.0)(webpack@5.97.1) - webpack-dev-middleware@5.3.4(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)): + webpack-dev-middleware@5.3.4(webpack@5.97.1): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) + schema-utils: 4.3.0 + webpack: 5.97.1(esbuild@0.21.5)(webpack-cli@4.10.0) - webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.95.0): + webpack-dev-server@4.15.2(webpack-cli@4.10.0)(webpack@5.97.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -21347,15 +19946,15 @@ snapshots: '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 - '@types/ws': 8.5.12 + '@types/ws': 8.5.14 ansi-html-community: 0.0.8 - bonjour-service: 1.2.1 + bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.4 + compression: 1.7.5 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 - express: 4.21.0 + express: 4.21.2 graceful-fs: 4.2.11 html-entities: 2.5.2 http-proxy-middleware: 2.0.7(@types/express@4.17.21) @@ -21364,16 +19963,16 @@ snapshots: open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.2.0 + schema-utils: 4.3.0 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)) + webpack-dev-middleware: 5.3.4(webpack@5.97.1) ws: 8.18.0 optionalDependencies: - webpack: 5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0) - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack: 5.97.1(esbuild@0.21.5)(webpack-cli@4.10.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.97.1) transitivePeerDependencies: - bufferutil - debug @@ -21390,18 +19989,18 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.95.0(esbuild@0.21.5): + webpack@5.97.1(esbuild@0.21.5): dependencies: + '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.24.0 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 + enhanced-resolve: 5.18.0 + es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21412,7 +20011,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)) + terser-webpack-plugin: 5.3.11(esbuild@0.21.5)(webpack@5.97.1(esbuild@0.21.5)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21420,18 +20019,18 @@ snapshots: - esbuild - uglify-js - webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0): + webpack@5.97.1(esbuild@0.21.5)(webpack-cli@4.10.0): dependencies: + '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.1 - acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.24.0 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 + enhanced-resolve: 5.18.0 + es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21442,11 +20041,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.95.0(esbuild@0.21.5)(webpack-cli@4.10.0)) + terser-webpack-plugin: 5.3.11(esbuild@0.21.5)(webpack@5.97.1) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.95.0) + webpack-cli: 4.10.0(webpack-dev-server@4.15.2)(webpack@5.97.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -21454,7 +20053,7 @@ snapshots: websocket-driver@0.7.4: dependencies: - http-parser-js: 0.5.8 + http-parser-js: 0.5.9 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 @@ -21466,7 +20065,7 @@ snapshots: whatwg-mimetype@4.0.0: {} - whatwg-url@14.0.0: + whatwg-url@14.1.0: dependencies: tr46: 5.0.0 webidl-conversions: 7.0.0 @@ -21482,14 +20081,6 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -21519,18 +20110,10 @@ snapshots: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 - is-weakset: 2.0.3 + is-weakset: 2.0.4 which-module@2.0.1: {} - which-typed-array@1.1.15: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 @@ -21563,16 +20146,16 @@ snapshots: wordwrap@1.0.0: {} - workbox-background-sync@7.1.0: + workbox-background-sync@7.3.0: dependencies: idb: 7.1.1 - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-broadcast-update@7.1.0: + workbox-broadcast-update@7.3.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-build@7.1.1(@types/babel__core@7.20.5): + workbox-build@7.3.0(@types/babel__core@7.20.5): dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) '@babel/core': 7.26.7 @@ -21596,85 +20179,85 @@ snapshots: strip-comments: 2.0.1 tempy: 0.6.0 upath: 1.2.0 - workbox-background-sync: 7.1.0 - workbox-broadcast-update: 7.1.0 - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-google-analytics: 7.1.0 - workbox-navigation-preload: 7.1.0 - workbox-precaching: 7.1.0 - workbox-range-requests: 7.1.0 - workbox-recipes: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 - workbox-streams: 7.1.0 - workbox-sw: 7.1.0 - workbox-window: 7.1.0 + workbox-background-sync: 7.3.0 + workbox-broadcast-update: 7.3.0 + workbox-cacheable-response: 7.3.0 + workbox-core: 7.3.0 + workbox-expiration: 7.3.0 + workbox-google-analytics: 7.3.0 + workbox-navigation-preload: 7.3.0 + workbox-precaching: 7.3.0 + workbox-range-requests: 7.3.0 + workbox-recipes: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 + workbox-streams: 7.3.0 + workbox-sw: 7.3.0 + workbox-window: 7.3.0 transitivePeerDependencies: - '@types/babel__core' - supports-color - workbox-cacheable-response@7.1.0: + workbox-cacheable-response@7.3.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-core@7.1.0: {} + workbox-core@7.3.0: {} - workbox-expiration@7.1.0: + workbox-expiration@7.3.0: dependencies: idb: 7.1.1 - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-google-analytics@7.1.0: + workbox-google-analytics@7.3.0: dependencies: - workbox-background-sync: 7.1.0 - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 + workbox-background-sync: 7.3.0 + workbox-core: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 - workbox-navigation-preload@7.1.0: + workbox-navigation-preload@7.3.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-precaching@7.1.0: + workbox-precaching@7.3.0: dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 + workbox-core: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 - workbox-range-requests@7.1.0: + workbox-range-requests@7.3.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-recipes@7.1.0: + workbox-recipes@7.3.0: dependencies: - workbox-cacheable-response: 7.1.0 - workbox-core: 7.1.0 - workbox-expiration: 7.1.0 - workbox-precaching: 7.1.0 - workbox-routing: 7.1.0 - workbox-strategies: 7.1.0 + workbox-cacheable-response: 7.3.0 + workbox-core: 7.3.0 + workbox-expiration: 7.3.0 + workbox-precaching: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 - workbox-routing@7.1.0: + workbox-routing@7.3.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-strategies@7.1.0: + workbox-strategies@7.3.0: dependencies: - workbox-core: 7.1.0 + workbox-core: 7.3.0 - workbox-streams@7.1.0: + workbox-streams@7.3.0: dependencies: - workbox-core: 7.1.0 - workbox-routing: 7.1.0 + workbox-core: 7.3.0 + workbox-routing: 7.3.0 - workbox-sw@7.1.0: {} + workbox-sw@7.3.0: {} - workbox-window@7.1.0: + workbox-window@7.3.0: dependencies: '@types/trusted-types': 2.0.7 - workbox-core: 7.1.0 + workbox-core: 7.3.0 wrap-ansi@6.2.0: dependencies: @@ -21734,11 +20317,9 @@ snapshots: y18n@5.0.8: {} - yallist@2.1.2: {} - yallist@3.1.1: {} - yaml@2.5.1: {} + yaml@2.7.0: {} yargs-parser@18.1.3: dependencies: From ffe1bb359fc15e35da8afeb7202a43e1db925830 Mon Sep 17 00:00:00 2001 From: Shahir Ahmed Date: Fri, 31 Jan 2025 17:30:34 -0500 Subject: [PATCH 281/492] update pnpm-lock.yaml Co-authored-by: Pranav Mishra --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0f5799b4..11ecf5504 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -179,7 +179,7 @@ importers: specifier: ^1.0.1 version: 1.0.1 prettier: - specifier: ^3.3.3 + specifier: ^3.2.5 version: 3.4.2 prettier-plugin-jsdoc: specifier: ^1.3.0 From d81ddf246c8195c85345f5ee4d44749f5d8340b5 Mon Sep 17 00:00:00 2001 From: Shahir Ahmed Date: Fri, 31 Jan 2025 17:57:25 -0500 Subject: [PATCH 282/492] fixes titleColor default value Co-authored-by: Pranav Mishra --- packages/mermaid/src/themes/theme-default.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/themes/theme-default.js b/packages/mermaid/src/themes/theme-default.js index c3caed9e8..0cd159148 100644 --- a/packages/mermaid/src/themes/theme-default.js +++ b/packages/mermaid/src/themes/theme-default.js @@ -178,7 +178,7 @@ class Theme { this.clusterBkg = this.secondBkg; this.clusterBorder = this.border2; this.defaultLinkColor = this.lineColor; - this.titleColor = this.titleColor || this.textColor; + this.titleColor = this.titleColor === 'calculated' ? this.textColor : this.titleColor; this.edgeLabelBackground = this.labelBackground; /* Sequence Diagram variables */ From d155e414a0c4d463102032296283dfd056b187b6 Mon Sep 17 00:00:00 2001 From: homersimpsons Date: Sat, 1 Feb 2025 11:20:06 +0100 Subject: [PATCH 283/492] Add git graph preview in README.md --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index 280725af7..047f8254c 100644 --- a/README.md +++ b/README.md @@ -257,6 +257,34 @@ pie ### Git graph [experimental - live editor] +``` +gitGraph + commit + commit + branch develop + checkout develop + commit + commit + checkout main + merge develop + commit + commit +``` + +```mermaid +gitGraph + commit + commit + branch develop + checkout develop + commit + commit + checkout main + merge develop + commit + commit +``` + ### Bar chart (using gantt chart) [docs - live editor] ``` From a0e5408850f3bbfec0ad6219f45d7becae80dd84 Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Tue, 4 Feb 2025 16:41:54 +0530 Subject: [PATCH 284/492] convert stateDb to class, added test case. --- .../state/parser/state-parser.spec.js | 4 +- .../diagrams/state/parser/state-style.spec.js | 4 +- packages/mermaid/src/diagrams/state/shapes.js | 12 +- .../mermaid/src/diagrams/state/stateDb.js | 1131 +++++++++-------- .../src/diagrams/state/stateDb.spec.js | 30 +- .../diagrams/state/stateDiagram-v2.spec.js | 4 +- .../src/diagrams/state/stateDiagram-v2.ts | 6 +- .../src/diagrams/state/stateDiagram.spec.js | 4 +- .../src/diagrams/state/stateDiagram.ts | 6 +- packages/mermaid/src/mermaidAPI.spec.ts | 26 + 10 files changed, 669 insertions(+), 558 deletions(-) diff --git a/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js b/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js index 9fa8acab8..bb5345996 100644 --- a/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js +++ b/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js @@ -1,4 +1,4 @@ -import stateDb from '../stateDb.js'; +import { StateDB } from '../stateDb.js'; import stateDiagram from './stateDiagram.jison'; import { setConfig } from '../../../config.js'; @@ -7,7 +7,9 @@ setConfig({ }); describe('state parser can parse...', () => { + let stateDb; beforeEach(function () { + stateDb = new StateDB(); stateDiagram.parser.yy = stateDb; stateDiagram.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/state/parser/state-style.spec.js b/packages/mermaid/src/diagrams/state/parser/state-style.spec.js index fed63c444..c37bed3c7 100644 --- a/packages/mermaid/src/diagrams/state/parser/state-style.spec.js +++ b/packages/mermaid/src/diagrams/state/parser/state-style.spec.js @@ -1,4 +1,4 @@ -import stateDb from '../stateDb.js'; +import { StateDB } from '../stateDb.js'; import stateDiagram from './stateDiagram.jison'; import { setConfig } from '../../../config.js'; @@ -7,7 +7,9 @@ setConfig({ }); describe('ClassDefs and classes when parsing a State diagram', () => { + let stateDb; beforeEach(function () { + stateDb = new StateDB(); stateDiagram.parser.yy = stateDb; stateDiagram.parser.yy.clear(); }); diff --git a/packages/mermaid/src/diagrams/state/shapes.js b/packages/mermaid/src/diagrams/state/shapes.js index f0ab4136b..b18b4ca0e 100644 --- a/packages/mermaid/src/diagrams/state/shapes.js +++ b/packages/mermaid/src/diagrams/state/shapes.js @@ -1,6 +1,6 @@ import { line, curveBasis } from 'd3'; import idCache from './id-cache.js'; -import stateDb from './stateDb.js'; +import { StateDB } from './stateDb.js'; import utils from '../../utils.js'; import common from '../common/common.js'; import { getConfig } from '../../diagram-api/diagramAPI.js'; @@ -414,13 +414,13 @@ let edgeCount = 0; export const drawEdge = function (elem, path, relation) { const getRelationType = function (type) { switch (type) { - case stateDb.relationType.AGGREGATION: + case StateDB.relationType.AGGREGATION: return 'aggregation'; - case stateDb.relationType.EXTENSION: + case StateDB.relationType.EXTENSION: return 'extension'; - case stateDb.relationType.COMPOSITION: + case StateDB.relationType.COMPOSITION: return 'composition'; - case stateDb.relationType.DEPENDENCY: + case StateDB.relationType.DEPENDENCY: return 'dependency'; } }; @@ -459,7 +459,7 @@ export const drawEdge = function (elem, path, relation) { svgPath.attr( 'marker-end', - 'url(' + url + '#' + getRelationType(stateDb.relationType.DEPENDENCY) + 'End' + ')' + 'url(' + url + '#' + getRelationType(StateDB.relationType.DEPENDENCY) + 'End' + ')' ); if (relation.title !== undefined) { diff --git a/packages/mermaid/src/diagrams/state/stateDb.js b/packages/mermaid/src/diagrams/state/stateDb.js index 1f12425e6..2da0719ca 100644 --- a/packages/mermaid/src/diagrams/state/stateDb.js +++ b/packages/mermaid/src/diagrams/state/stateDb.js @@ -1,28 +1,28 @@ +import { getConfig } from '../../diagram-api/diagramAPI.js'; import { log } from '../../logger.js'; import { generateId } from '../../utils.js'; import common from '../common/common.js'; -import { getConfig } from '../../diagram-api/diagramAPI.js'; import { - setAccTitle, - getAccTitle, - getAccDescription, - setAccDescription, clear as commonClear, - setDiagramTitle, + getAccDescription, + getAccTitle, getDiagramTitle, + setAccDescription, + setAccTitle, + setDiagramTitle, } from '../common/commonDb.js'; import { dataFetcher, reset as resetDataFetching } from './dataFetcher.js'; import { getDir } from './stateRenderer-v3-unified.js'; import { DEFAULT_DIAGRAM_DIRECTION, - STMT_STATE, - STMT_RELATION, - STMT_CLASSDEF, - STMT_STYLEDEF, - STMT_APPLYCLASS, DEFAULT_STATE_TYPE, DIVIDER_TYPE, + STMT_APPLYCLASS, + STMT_CLASSDEF, + STMT_RELATION, + STMT_STATE, + STMT_STYLEDEF, } from './stateCommon.js'; const START_NODE = '[*]'; @@ -46,15 +46,6 @@ function newClassesList() { return new Map(); } -let nodes = []; -let edges = []; - -let direction = DEFAULT_DIAGRAM_DIRECTION; -let rootDoc = []; -let classes = newClassesList(); // style classes defined by a classDef - -// -------------------------------------- - const newDoc = () => { return { /** @type {{ id1: string, id2: string, relationTitle: string }[]} */ @@ -63,564 +54,622 @@ const newDoc = () => { documents: {}, }; }; -let documents = { - root: newDoc(), -}; - -let currentDocument = documents.root; -let startEndCount = 0; -let dividerCnt = 0; - -export const lineType = { - LINE: 0, - DOTTED_LINE: 1, -}; - -export const relationType = { - AGGREGATION: 0, - EXTENSION: 1, - COMPOSITION: 2, - DEPENDENCY: 3, -}; const clone = (o) => JSON.parse(JSON.stringify(o)); -const setRootDoc = (o) => { - log.info('Setting root doc', o); - // rootDoc = { id: 'root', doc: o }; - rootDoc = o; -}; +export class StateDB { + constructor() { + this.clear(); -const getRootDoc = () => rootDoc; - -const docTranslator = (parent, node, first) => { - if (node.stmt === STMT_RELATION) { - docTranslator(parent, node.state1, true); - docTranslator(parent, node.state2, false); - } else { - if (node.stmt === STMT_STATE) { - if (node.id === '[*]') { - node.id = first ? parent.id + '_start' : parent.id + '_end'; - node.start = first; - } else { - // This is just a plain state, not a start or end - node.id = node.id.trim(); - } - } - - if (node.doc) { - const doc = []; - // Check for concurrency - let currentDoc = []; - let i; - for (i = 0; i < node.doc.length; i++) { - if (node.doc[i].type === DIVIDER_TYPE) { - // debugger; - const newNode = clone(node.doc[i]); - newNode.doc = clone(currentDoc); - doc.push(newNode); - currentDoc = []; - } else { - currentDoc.push(node.doc[i]); - } - } - - // If any divider was encountered - if (doc.length > 0 && currentDoc.length > 0) { - const newNode = { - stmt: STMT_STATE, - id: generateId(), - type: 'divider', - doc: clone(currentDoc), - }; - doc.push(clone(newNode)); - node.doc = doc; - } - - node.doc.forEach((docNode) => docTranslator(node, docNode, true)); - } - } -}; -const getRootDocV2 = () => { - docTranslator({ id: 'root' }, { id: 'root', doc: rootDoc }, true); - return { id: 'root', doc: rootDoc }; - // Here -}; - -/** - * Convert all of the statements (stmts) that were parsed into states and relationships. - * This is done because a state diagram may have nested sections, - * where each section is a 'document' and has its own set of statements. - * Ex: the section within a fork has its own statements, and incoming and outgoing statements - * refer to the fork as a whole (document). - * See the parser grammar: the definition of a document is a document then a 'line', where a line can be a statement. - * This will push the statement into the list of statements for the current document. - * - * @param _doc - */ -const extract = (_doc) => { - // const res = { states: [], relations: [] }; - let doc; - if (_doc.doc) { - doc = _doc.doc; - } else { - doc = _doc; - } - // let doc = root.doc; - // if (!doc) { - // doc = root; - // } - log.info(doc); - clear(true); - - log.info('Extract initial document:', doc); - - doc.forEach((item) => { - log.warn('Statement', item.stmt); - switch (item.stmt) { - case STMT_STATE: - addState( - item.id.trim(), - item.type, - item.doc, - item.description, - item.note, - item.classes, - item.styles, - item.textStyles - ); - break; - case STMT_RELATION: - addRelation(item.state1, item.state2, item.description); - break; - case STMT_CLASSDEF: - addStyleClass(item.id.trim(), item.classes); - break; - case STMT_STYLEDEF: - { - const ids = item.id.trim().split(','); - const styles = item.styleClass.split(','); - ids.forEach((id) => { - let foundState = getState(id); - if (foundState === undefined) { - const trimmedId = id.trim(); - addState(trimmedId); - foundState = getState(trimmedId); - } - foundState.styles = styles.map((s) => s.replace(/;/g, '')?.trim()); - }); - } - break; - case STMT_APPLYCLASS: - setCssClass(item.id.trim(), item.styleClass); - break; - } - }); - - const diagramStates = getStates(); - const config = getConfig(); - const look = config.look; - resetDataFetching(); - dataFetcher(undefined, getRootDocV2(), diagramStates, nodes, edges, true, look, classes); - nodes.forEach((node) => { - if (Array.isArray(node.label)) { - // add the rest as description - node.description = node.label.slice(1); - if (node.isGroup && node.description.length > 0) { - throw new Error( - 'Group nodes can only have label. Remove the additional description for node [' + - node.id + - ']' - ); - } - // add first description as label - node.label = node.label[0]; - } - }); -}; - -/** - * Function called by parser when a node definition has been found. - * - * @param {null | string} id - * @param {null | string} type - * @param {null | string} doc - * @param {null | string | string[]} descr - description for the state. Can be a string or a list or strings - * @param {null | string} note - * @param {null | string | string[]} classes - class styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 class, convert it to an array of that 1 class. - * @param {null | string | string[]} styles - styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 style, convert it to an array of that 1 style. - * @param {null | string | string[]} textStyles - text styles to apply to this state. Can be a string (1 text test) or an array of text styles. If it's just 1 text style, convert it to an array of that 1 text style. - */ -export const addState = function ( - id, - type = DEFAULT_STATE_TYPE, - doc = null, - descr = null, - note = null, - classes = null, - styles = null, - textStyles = null -) { - const trimmedId = id?.trim(); - // add the state if needed - if (!currentDocument.states.has(trimmedId)) { - log.info('Adding state ', trimmedId, descr); - currentDocument.states.set(trimmedId, { - id: trimmedId, - descriptions: [], - type, - doc, - note, - classes: [], - styles: [], - textStyles: [], - }); - } else { - if (!currentDocument.states.get(trimmedId).doc) { - currentDocument.states.get(trimmedId).doc = doc; - } - if (!currentDocument.states.get(trimmedId).type) { - currentDocument.states.get(trimmedId).type = type; - } + // Needed for JISON since it only supports direct properties + this.setRootDoc = this.setRootDoc.bind(this); + this.getDividerId = this.getDividerId.bind(this); + this.setDirection = this.setDirection.bind(this); + this.trimColon = this.trimColon.bind(this); } - if (descr) { - log.info('Setting state description', trimmedId, descr); - if (typeof descr === 'string') { - addDescription(trimmedId, descr.trim()); - } - - if (typeof descr === 'object') { - descr.forEach((des) => addDescription(trimmedId, des.trim())); - } - } - - if (note) { - const doc2 = currentDocument.states.get(trimmedId); - doc2.note = note; - doc2.note.text = common.sanitizeText(doc2.note.text, getConfig()); - } - - if (classes) { - log.info('Setting state classes', trimmedId, classes); - const classesList = typeof classes === 'string' ? [classes] : classes; - classesList.forEach((cssClass) => setCssClass(trimmedId, cssClass.trim())); - } - - if (styles) { - log.info('Setting state styles', trimmedId, styles); - const stylesList = typeof styles === 'string' ? [styles] : styles; - stylesList.forEach((style) => setStyle(trimmedId, style.trim())); - } - - if (textStyles) { - log.info('Setting state styles', trimmedId, styles); - const textStylesList = typeof textStyles === 'string' ? [textStyles] : textStyles; - textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim())); - } -}; - -export const clear = function (saveCommon) { + /** + * @private + * @type {Array} + */ nodes = []; + /** + * @private + * @type {Array} + */ edges = []; + + /** + * @private + * @type {string} + */ + direction = DEFAULT_DIAGRAM_DIRECTION; + /** + * @private + * @type {Array} + */ + rootDoc = []; + /** + * @private + * @type {Map} + */ + classes = newClassesList(); // style classes defined by a classDef + + /** + * @private + * @type {Object} + */ documents = { root: newDoc(), }; - currentDocument = documents.root; - // number of start and end nodes; used to construct ids + /** + * @private + * @type {Object} + */ + currentDocument = this.documents.root; + /** + * @private + * @type {number} + */ startEndCount = 0; - classes = newClassesList(); - if (!saveCommon) { - commonClear(); + /** + * @private + * @type {number} + */ + dividerCnt = 0; + + static relationType = { + AGGREGATION: 0, + EXTENSION: 1, + COMPOSITION: 2, + DEPENDENCY: 3, + }; + + setRootDoc(o) { + log.info('Setting root doc', o); + // rootDoc = { id: 'root', doc: o }; + this.rootDoc = o; } -}; -export const getState = function (id) { - return currentDocument.states.get(id); -}; - -export const getStates = function () { - return currentDocument.states; -}; -export const logDocuments = function () { - log.info('Documents = ', documents); -}; -export const getRelations = function () { - return currentDocument.relations; -}; - -/** - * If the id is a start node ( [*] ), then return a new id constructed from - * the start node name and the current start node count. - * else return the given id - * - * @param {string} id - * @returns {string} - the id (original or constructed) - */ -function startIdIfNeeded(id = '') { - let fixedId = id; - if (id === START_NODE) { - startEndCount++; - fixedId = `${START_TYPE}${startEndCount}`; + getRootDoc() { + return this.rootDoc; } - return fixedId; -} -/** - * If the id is a start node ( [*] ), then return the start type ('start') - * else return the given type - * - * @param {string} id - * @param {string} type - * @returns {string} - the type that should be used - */ -function startTypeIfNeeded(id = '', type = DEFAULT_STATE_TYPE) { - return id === START_NODE ? START_TYPE : type; -} + /** + * @private + * @param {Object} parent + * @param {Object} node + * @param {boolean} first + */ + docTranslator(parent, node, first) { + if (node.stmt === STMT_RELATION) { + this.docTranslator(parent, node.state1, true); + this.docTranslator(parent, node.state2, false); + } else { + if (node.stmt === STMT_STATE) { + if (node.id === '[*]') { + node.id = first ? parent.id + '_start' : parent.id + '_end'; + node.start = first; + } else { + // This is just a plain state, not a start or end + node.id = node.id.trim(); + } + } -/** - * If the id is an end node ( [*] ), then return a new id constructed from - * the end node name and the current start_end node count. - * else return the given id - * - * @param {string} id - * @returns {string} - the id (original or constructed) - */ -function endIdIfNeeded(id = '') { - let fixedId = id; - if (id === END_NODE) { - startEndCount++; - fixedId = `${END_TYPE}${startEndCount}`; + if (node.doc) { + const doc = []; + // Check for concurrency + let currentDoc = []; + let i; + for (i = 0; i < node.doc.length; i++) { + if (node.doc[i].type === DIVIDER_TYPE) { + const newNode = clone(node.doc[i]); + newNode.doc = clone(currentDoc); + doc.push(newNode); + currentDoc = []; + } else { + currentDoc.push(node.doc[i]); + } + } + + // If any divider was encountered + if (doc.length > 0 && currentDoc.length > 0) { + const newNode = { + stmt: STMT_STATE, + id: generateId(), + type: 'divider', + doc: clone(currentDoc), + }; + doc.push(clone(newNode)); + node.doc = doc; + } + + node.doc.forEach((docNode) => this.docTranslator(node, docNode, true)); + } + } + } + getRootDocV2() { + this.docTranslator({ id: 'root' }, { id: 'root', doc: this.rootDoc }, true); + return { id: 'root', doc: this.rootDoc }; + // Here } - return fixedId; -} -/** - * If the id is an end node ( [*] ), then return the end type - * else return the given type - * - * @param {string} id - * @param {string} type - * @returns {string} - the type that should be used - */ -function endTypeIfNeeded(id = '', type = DEFAULT_STATE_TYPE) { - return id === END_NODE ? END_TYPE : type; -} + /** + * Convert all of the statements (stmts) that were parsed into states and relationships. + * This is done because a state diagram may have nested sections, + * where each section is a 'document' and has its own set of statements. + * Ex: the section within a fork has its own statements, and incoming and outgoing statements + * refer to the fork as a whole (document). + * See the parser grammar: the definition of a document is a document then a 'line', where a line can be a statement. + * This will push the statement into the list of statements for the current document. + * + * @param _doc + */ + extract(_doc) { + // const res = { states: [], relations: [] }; + let doc; + if (_doc.doc) { + doc = _doc.doc; + } else { + doc = _doc; + } + // let doc = root.doc; + // if (!doc) { + // doc = root; + // } + log.info(doc); + this.clear(true); -/** - * - * @param item1 - * @param item2 - * @param relationTitle - */ -export function addRelationObjs(item1, item2, relationTitle) { - let id1 = startIdIfNeeded(item1.id.trim()); - let type1 = startTypeIfNeeded(item1.id.trim(), item1.type); - let id2 = startIdIfNeeded(item2.id.trim()); - let type2 = startTypeIfNeeded(item2.id.trim(), item2.type); + log.info('Extract initial document:', doc); + doc.forEach((item) => { + log.warn('Statement', item.stmt); + switch (item.stmt) { + case STMT_STATE: + this.addState( + item.id.trim(), + item.type, + item.doc, + item.description, + item.note, + item.classes, + item.styles, + item.textStyles + ); + break; + case STMT_RELATION: + this.addRelation(item.state1, item.state2, item.description); + break; + case STMT_CLASSDEF: + this.addStyleClass(item.id.trim(), item.classes); + break; + case STMT_STYLEDEF: + { + const ids = item.id.trim().split(','); + const styles = item.styleClass.split(','); + ids.forEach((id) => { + let foundState = this.getState(id); + if (foundState === undefined) { + const trimmedId = id.trim(); + this.addState(trimmedId); + foundState = this.getState(trimmedId); + } + foundState.styles = styles.map((s) => s.replace(/;/g, '')?.trim()); + }); + } + break; + case STMT_APPLYCLASS: + this.setCssClass(item.id.trim(), item.styleClass); + break; + } + }); + + const diagramStates = this.getStates(); + const config = getConfig(); + const look = config.look; + + resetDataFetching(); + dataFetcher( + undefined, + this.getRootDocV2(), + diagramStates, + this.nodes, + this.edges, + true, + look, + this.classes + ); + this.nodes.forEach((node) => { + if (Array.isArray(node.label)) { + // add the rest as description + node.description = node.label.slice(1); + if (node.isGroup && node.description.length > 0) { + throw new Error( + 'Group nodes can only have label. Remove the additional description for node [' + + node.id + + ']' + ); + } + // add first description as label + node.label = node.label[0]; + } + }); + } + + /** + * Function called by parser when a node definition has been found. + * + * @param {null | string} id + * @param {null | string} type + * @param {null | string} doc + * @param {null | string | string[]} descr - description for the state. Can be a string or a list or strings + * @param {null | string} note + * @param {null | string | string[]} classes - class styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 class, convert it to an array of that 1 class. + * @param {null | string | string[]} styles - styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 style, convert it to an array of that 1 style. + * @param {null | string | string[]} textStyles - text styles to apply to this state. Can be a string (1 text test) or an array of text styles. If it's just 1 text style, convert it to an array of that 1 text style. + */ addState( - id1, - type1, - item1.doc, - item1.description, - item1.note, - item1.classes, - item1.styles, - item1.textStyles - ); - addState( - id2, - type2, - item2.doc, - item2.description, - item2.note, - item2.classes, - item2.styles, - item2.textStyles - ); + id, + type = DEFAULT_STATE_TYPE, + doc = null, + descr = null, + note = null, + classes = null, + styles = null, + textStyles = null + ) { + const trimmedId = id?.trim(); + // add the state if needed + if (!this.currentDocument.states.has(trimmedId)) { + log.info('Adding state ', trimmedId, descr); + this.currentDocument.states.set(trimmedId, { + id: trimmedId, + descriptions: [], + type, + doc, + note, + classes: [], + styles: [], + textStyles: [], + }); + } else { + if (!this.currentDocument.states.get(trimmedId).doc) { + this.currentDocument.states.get(trimmedId).doc = doc; + } + if (!this.currentDocument.states.get(trimmedId).type) { + this.currentDocument.states.get(trimmedId).type = type; + } + } - currentDocument.relations.push({ - id1, - id2, - relationTitle: common.sanitizeText(relationTitle, getConfig()), - }); -} + if (descr) { + log.info('Setting state description', trimmedId, descr); + if (typeof descr === 'string') { + this.addDescription(trimmedId, descr.trim()); + } -/** - * Add a relation between two items. The items may be full objects or just the string id of a state. - * - * @param {string | object} item1 - * @param {string | object} item2 - * @param {string} title - */ -export const addRelation = function (item1, item2, title) { - if (typeof item1 === 'object') { - addRelationObjs(item1, item2, title); - } else { - const id1 = startIdIfNeeded(item1.trim()); - const type1 = startTypeIfNeeded(item1); - const id2 = endIdIfNeeded(item2.trim()); - const type2 = endTypeIfNeeded(item2); + if (typeof descr === 'object') { + descr.forEach((des) => this.addDescription(trimmedId, des.trim())); + } + } - addState(id1, type1); - addState(id2, type2); - currentDocument.relations.push({ + if (note) { + const doc2 = this.currentDocument.states.get(trimmedId); + doc2.note = note; + doc2.note.text = common.sanitizeText(doc2.note.text, getConfig()); + } + + if (classes) { + log.info('Setting state classes', trimmedId, classes); + const classesList = typeof classes === 'string' ? [classes] : classes; + classesList.forEach((cssClass) => this.setCssClass(trimmedId, cssClass.trim())); + } + + if (styles) { + log.info('Setting state styles', trimmedId, styles); + const stylesList = typeof styles === 'string' ? [styles] : styles; + stylesList.forEach((style) => this.setStyle(trimmedId, style.trim())); + } + + if (textStyles) { + log.info('Setting state styles', trimmedId, styles); + const textStylesList = typeof textStyles === 'string' ? [textStyles] : textStyles; + textStylesList.forEach((textStyle) => this.setTextStyle(trimmedId, textStyle.trim())); + } + } + + clear(saveCommon) { + this.nodes = []; + this.edges = []; + this.documents = { + root: newDoc(), + }; + this.currentDocument = this.documents.root; + + // number of start and end nodes; used to construct ids + this.startEndCount = 0; + this.classes = newClassesList(); + if (!saveCommon) { + commonClear(); + } + } + + getState(id) { + return this.currentDocument.states.get(id); + } + getStates() { + return this.currentDocument.states; + } + logDocuments() { + log.info('Documents = ', this.documents); + } + getRelations() { + return this.currentDocument.relations; + } + + /** + * If the id is a start node ( [*] ), then return a new id constructed from + * the start node name and the current start node count. + * else return the given id + * + * @param {string} id + * @returns {string} - the id (original or constructed) + * @private + */ + startIdIfNeeded(id = '') { + let fixedId = id; + if (id === START_NODE) { + this.startEndCount++; + fixedId = `${START_TYPE}${this.startEndCount}`; + } + return fixedId; + } + + /** + * If the id is a start node ( [*] ), then return the start type ('start') + * else return the given type + * + * @param {string} id + * @param {string} type + * @returns {string} - the type that should be used + * @private + */ + startTypeIfNeeded(id = '', type = DEFAULT_STATE_TYPE) { + return id === START_NODE ? START_TYPE : type; + } + + /** + * If the id is an end node ( [*] ), then return a new id constructed from + * the end node name and the current start_end node count. + * else return the given id + * + * @param {string} id + * @returns {string} - the id (original or constructed) + * @private + */ + endIdIfNeeded(id = '') { + let fixedId = id; + if (id === END_NODE) { + this.startEndCount++; + fixedId = `${END_TYPE}${this.startEndCount}`; + } + return fixedId; + } + + /** + * If the id is an end node ( [*] ), then return the end type + * else return the given type + * + * @param {string} id + * @param {string} type + * @returns {string} - the type that should be used + * @private + */ + endTypeIfNeeded(id = '', type = DEFAULT_STATE_TYPE) { + return id === END_NODE ? END_TYPE : type; + } + + /** + * + * @param item1 + * @param item2 + * @param relationTitle + */ + addRelationObjs(item1, item2, relationTitle) { + let id1 = this.startIdIfNeeded(item1.id.trim()); + let type1 = this.startTypeIfNeeded(item1.id.trim(), item1.type); + let id2 = this.startIdIfNeeded(item2.id.trim()); + let type2 = this.startTypeIfNeeded(item2.id.trim(), item2.type); + + this.addState( + id1, + type1, + item1.doc, + item1.description, + item1.note, + item1.classes, + item1.styles, + item1.textStyles + ); + this.addState( + id2, + type2, + item2.doc, + item2.description, + item2.note, + item2.classes, + item2.styles, + item2.textStyles + ); + + this.currentDocument.relations.push({ id1, id2, - title: common.sanitizeText(title, getConfig()), + relationTitle: common.sanitizeText(relationTitle, getConfig()), }); } -}; -export const addDescription = function (id, descr) { - const theState = currentDocument.states.get(id); - const _descr = descr.startsWith(':') ? descr.replace(':', '').trim() : descr; - theState.descriptions.push(common.sanitizeText(_descr, getConfig())); -}; + /** + * Add a relation between two items. The items may be full objects or just the string id of a state. + * + * @param {string | object} item1 + * @param {string | object} item2 + * @param {string} title + */ + addRelation(item1, item2, title) { + if (typeof item1 === 'object') { + this.addRelationObjs(item1, item2, title); + } else { + const id1 = this.startIdIfNeeded(item1.trim()); + const type1 = this.startTypeIfNeeded(item1); + const id2 = this.endIdIfNeeded(item2.trim()); + const type2 = this.endTypeIfNeeded(item2); -export const cleanupLabel = function (label) { - if (label.substring(0, 1) === ':') { - return label.substr(2).trim(); - } else { - return label.trim(); - } -}; - -const getDividerId = () => { - dividerCnt++; - return 'divider-id-' + dividerCnt; -}; - -/** - * Called when the parser comes across a (style) class definition - * @example classDef my-style fill:#f96; - * - * @param {string} id - the id of this (style) class - * @param {string | null} styleAttributes - the string with 1 or more style attributes (each separated by a comma) - */ -export const addStyleClass = function (id, styleAttributes = '') { - // create a new style class object with this id - if (!classes.has(id)) { - classes.set(id, { id: id, styles: [], textStyles: [] }); // This is a classDef - } - const foundClass = classes.get(id); - if (styleAttributes !== undefined && styleAttributes !== null) { - styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { - // remove any trailing ; - const fixedAttrib = attrib.replace(/([^;]*);/, '$1').trim(); - - // replace some style keywords - if (RegExp(COLOR_KEYWORD).exec(attrib)) { - const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); - const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); - foundClass.textStyles.push(newStyle2); - } - foundClass.styles.push(fixedAttrib); - }); - } -}; - -/** - * Return all of the style classes - * @returns {{} | any | classes} - */ -export const getClasses = function () { - return classes; -}; - -/** - * Add a (style) class or css class to a state with the given id. - * If the state isn't already in the list of known states, add it. - * Might be called by parser when a style class or CSS class should be applied to a state - * - * @param {string | string[]} itemIds The id or a list of ids of the item(s) to apply the css class to - * @param {string} cssClassName CSS class name - */ -export const setCssClass = function (itemIds, cssClassName) { - itemIds.split(',').forEach(function (id) { - let foundState = getState(id); - if (foundState === undefined) { - const trimmedId = id.trim(); - addState(trimmedId); - foundState = getState(trimmedId); + this.addState(id1, type1); + this.addState(id2, type2); + this.currentDocument.relations.push({ + id1, + id2, + title: common.sanitizeText(title, getConfig()), + }); } - foundState.classes.push(cssClassName); - }); -}; - -/** - * Add a style to a state with the given id. - * @example style stateId fill:#f9f,stroke:#333,stroke-width:4px - * where 'style' is the keyword - * stateId is the id of a state - * the rest of the string is the styleText (all of the attributes to be applied to the state) - * - * @param itemId The id of item to apply the style to - * @param styleText - the text of the attributes for the style - */ -export const setStyle = function (itemId, styleText) { - const item = getState(itemId); - if (item !== undefined) { - item.styles.push(styleText); } -}; -/** - * Add a text style to a state with the given id - * - * @param itemId The id of item to apply the css class to - * @param cssClassName CSS class name - */ -export const setTextStyle = function (itemId, cssClassName) { - const item = getState(itemId); - if (item !== undefined) { - item.textStyles.push(cssClassName); + addDescription(id, descr) { + const theState = this.currentDocument.states.get(id); + const _descr = descr.startsWith(':') ? descr.replace(':', '').trim() : descr; + theState.descriptions.push(common.sanitizeText(_descr, getConfig())); } -}; -const getDirection = () => direction; -const setDirection = (dir) => { - direction = dir; -}; + cleanupLabel(label) { + if (label.substring(0, 1) === ':') { + return label.substr(2).trim(); + } else { + return label.trim(); + } + } -const trimColon = (str) => (str && str[0] === ':' ? str.substr(1).trim() : str.trim()); + getDividerId() { + this.dividerCnt++; + return 'divider-id-' + this.dividerCnt; + } -export const getData = () => { - const config = getConfig(); - return { nodes, edges, other: {}, config, direction: getDir(getRootDocV2()) }; -}; + /** + * Called when the parser comes across a (style) class definition + * @example classDef my-style fill:#f96; + * + * @param {string} id - the id of this (style) class + * @param {string | null} styleAttributes - the string with 1 or more style attributes (each separated by a comma) + */ + addStyleClass(id, styleAttributes = '') { + // create a new style class object with this id + if (!this.classes.has(id)) { + this.classes.set(id, { id: id, styles: [], textStyles: [] }); // This is a classDef + } + const foundClass = this.classes.get(id); + if (styleAttributes !== undefined && styleAttributes !== null) { + styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => { + // remove any trailing ; + const fixedAttrib = attrib.replace(/([^;]*);/, '$1').trim(); -export default { - getConfig: () => getConfig().state, - getData, - addState, - clear, - getState, - getStates, - getRelations, - getClasses, - getDirection, - addRelation, - getDividerId, - setDirection, - cleanupLabel, - lineType, - relationType, - logDocuments, - getRootDoc, - setRootDoc, - getRootDocV2, - extract, - trimColon, - getAccTitle, - setAccTitle, - getAccDescription, - setAccDescription, - addStyleClass, - setCssClass, - addDescription, - setDiagramTitle, - getDiagramTitle, -}; + // replace some style keywords + if (RegExp(COLOR_KEYWORD).exec(attrib)) { + const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL); + const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD); + foundClass.textStyles.push(newStyle2); + } + foundClass.styles.push(fixedAttrib); + }); + } + } + + /** + * Return all of the style classes + * @returns {{} | any | classes} + */ + getClasses() { + return this.classes; + } + + /** + * Add a (style) class or css class to a state with the given id. + * If the state isn't already in the list of known states, add it. + * Might be called by parser when a style class or CSS class should be applied to a state + * + * @param {string | string[]} itemIds The id or a list of ids of the item(s) to apply the css class to + * @param {string} cssClassName CSS class name + */ + setCssClass(itemIds, cssClassName) { + itemIds.split(',').forEach((id) => { + let foundState = this.getState(id); + if (foundState === undefined) { + const trimmedId = id.trim(); + this.addState(trimmedId); + foundState = this.getState(trimmedId); + } + foundState.classes.push(cssClassName); + }); + } + + /** + * Add a style to a state with the given id. + * @example style stateId fill:#f9f,stroke:#333,stroke-width:4px + * where 'style' is the keyword + * stateId is the id of a state + * the rest of the string is the styleText (all of the attributes to be applied to the state) + * + * @param itemId The id of item to apply the style to + * @param styleText - the text of the attributes for the style + */ + setStyle(itemId, styleText) { + const item = this.getState(itemId); + if (item !== undefined) { + item.styles.push(styleText); + } + } + + /** + * Add a text style to a state with the given id + * + * @param itemId The id of item to apply the css class to + * @param cssClassName CSS class name + */ + setTextStyle(itemId, cssClassName) { + const item = this.getState(itemId); + if (item !== undefined) { + item.textStyles.push(cssClassName); + } + } + + getDirection() { + return this.direction; + } + setDirection(dir) { + this.direction = dir; + } + + trimColon(str) { + return str && str[0] === ':' ? str.substr(1).trim() : str.trim(); + } + + getData() { + const config = getConfig(); + return { + nodes: this.nodes, + edges: this.edges, + other: {}, + config, + direction: getDir(this.getRootDocV2()), + }; + } + + getConfig() { + return getConfig().state; + } + getAccTitle = getAccTitle; + setAccTitle = setAccTitle; + getAccDescription = getAccDescription; + setAccDescription = setAccDescription; + setDiagramTitle = setDiagramTitle; + getDiagramTitle = getDiagramTitle; +} diff --git a/packages/mermaid/src/diagrams/state/stateDb.spec.js b/packages/mermaid/src/diagrams/state/stateDb.spec.js index ff0581200..73f1a4be9 100644 --- a/packages/mermaid/src/diagrams/state/stateDb.spec.js +++ b/packages/mermaid/src/diagrams/state/stateDb.spec.js @@ -1,8 +1,9 @@ -import stateDb from './stateDb.js'; +import { StateDB } from './stateDb.js'; describe('State Diagram stateDb', () => { + let stateDb; beforeEach(() => { - stateDb.clear(); + stateDb = new StateDB(); }); describe('addStyleClass', () => { @@ -20,8 +21,9 @@ describe('State Diagram stateDb', () => { }); describe('addDescription to a state', () => { + let stateDb; beforeEach(() => { - stateDb.clear(); + stateDb = new StateDB(); stateDb.addState('state1'); }); @@ -73,3 +75,25 @@ describe('State Diagram stateDb', () => { }); }); }); + +describe('state db class', () => { + let stateDb; + beforeEach(() => { + stateDb = new StateDB(); + }); + // This is to ensure that functions used in state JISON are exposed as function from StateDb + it('should have functions used in flow JISON as own property', () => { + const functionsUsedInParser = [ + 'setRootDoc', + 'trimColon', + 'getDividerId', + 'setAccTitle', + 'setAccDescription', + 'setDirection', + ]; + + for (const fun of functionsUsedInParser) { + expect(Object.hasOwn(stateDb, fun)).toBe(true); + } + }); +}); diff --git a/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js b/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js index 53063f41a..d1edc5b40 100644 --- a/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js +++ b/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js @@ -1,11 +1,13 @@ import { parser } from './parser/stateDiagram.jison'; -import stateDb from './stateDb.js'; +import { StateDB } from './stateDb.js'; import stateDiagram from './parser/stateDiagram.jison'; describe('state diagram V2, ', function () { // TODO - these examples should be put into ./parser/stateDiagram.spec.js describe('when parsing an info graph it', function () { + let stateDb; beforeEach(function () { + stateDb = new StateDB(); parser.yy = stateDb; stateDiagram.parser.yy = stateDb; stateDiagram.parser.yy.clear(); diff --git a/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts b/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts index 8fd98e930..f7bc716c6 100644 --- a/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts +++ b/packages/mermaid/src/diagrams/state/stateDiagram-v2.ts @@ -1,13 +1,15 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; // @ts-ignore: JISON doesn't support types import parser from './parser/stateDiagram.jison'; -import db from './stateDb.js'; +import { StateDB } from './stateDb.js'; import styles from './styles.js'; import renderer from './stateRenderer-v3-unified.js'; export const diagram: DiagramDefinition = { parser, - db, + get db() { + return new StateDB(); + }, renderer, styles, init: (cnf) => { diff --git a/packages/mermaid/src/diagrams/state/stateDiagram.spec.js b/packages/mermaid/src/diagrams/state/stateDiagram.spec.js index 7fcf4d0a6..8175ef041 100644 --- a/packages/mermaid/src/diagrams/state/stateDiagram.spec.js +++ b/packages/mermaid/src/diagrams/state/stateDiagram.spec.js @@ -1,9 +1,11 @@ import { parser } from './parser/stateDiagram.jison'; -import stateDb from './stateDb.js'; +import { StateDB } from './stateDb.js'; describe('state diagram, ', function () { describe('when parsing an info graph it', function () { + let stateDb; beforeEach(function () { + stateDb = new StateDB(); parser.yy = stateDb; }); diff --git a/packages/mermaid/src/diagrams/state/stateDiagram.ts b/packages/mermaid/src/diagrams/state/stateDiagram.ts index bd8383287..a6f9d7c63 100644 --- a/packages/mermaid/src/diagrams/state/stateDiagram.ts +++ b/packages/mermaid/src/diagrams/state/stateDiagram.ts @@ -1,13 +1,15 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; // @ts-ignore: JISON doesn't support types import parser from './parser/stateDiagram.jison'; -import db from './stateDb.js'; +import { StateDB } from './stateDb.js'; import styles from './styles.js'; import renderer from './stateRenderer.js'; export const diagram: DiagramDefinition = { parser, - db, + get db() { + return new StateDB(); + }, renderer, styles, init: (cnf) => { diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts index e51d419d3..e1b13dbd7 100644 --- a/packages/mermaid/src/mermaidAPI.spec.ts +++ b/packages/mermaid/src/mermaidAPI.spec.ts @@ -71,6 +71,7 @@ import { decodeEntities, encodeEntities } from './utils.js'; import { toBase64 } from './utils/base64.js'; import { ClassDB } from './diagrams/class/classDb.js'; import { FlowDB } from './diagrams/flowchart/flowDb.js'; +import { StateDB } from './diagrams/state/stateDb.js'; /** * @see https://vitest.dev/guide/mocking.html Mock part of a module @@ -836,6 +837,31 @@ graph TD;A--x|text including URL space|B;`) }); it('should not modify db when rendering different diagrams', async () => { + const stateDiagram1 = await mermaidAPI.getDiagramFromText( + `stateDiagram + direction LR + [*] --> Still + Still --> [*] + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]` + ); + const stateDiagram2 = await mermaidAPI.getDiagramFromText( + `stateDiagram + direction TB + [*] --> Still + Still --> [*] + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]` + ); + expect(stateDiagram1.db).not.toBe(stateDiagram2.db); + assert(stateDiagram1.db instanceof StateDB); + assert(stateDiagram2.db instanceof StateDB); + expect(stateDiagram1.db.getDirection()).not.toEqual(stateDiagram2.db.getDirection()); + const flowDiagram1 = await mermaidAPI.getDiagramFromText( `flowchart LR A -- text --> B -- text2 --> C` From 56d66cdabcbce7dafa2ba3cc7044f4d6c1cf2d73 Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Tue, 4 Feb 2025 16:45:45 +0530 Subject: [PATCH 285/492] Fix issue where data was not being set in the db after parsing. --- packages/mermaid/src/diagrams/state/stateDb.js | 1 + packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/state/stateDb.js b/packages/mermaid/src/diagrams/state/stateDb.js index 2da0719ca..50785587e 100644 --- a/packages/mermaid/src/diagrams/state/stateDb.js +++ b/packages/mermaid/src/diagrams/state/stateDb.js @@ -130,6 +130,7 @@ export class StateDB { log.info('Setting root doc', o); // rootDoc = { id: 'root', doc: o }; this.rootDoc = o; + this.extract(o); } getRootDoc() { diff --git a/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts b/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts index 109417c03..2998c8173 100644 --- a/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts +++ b/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts @@ -36,7 +36,6 @@ export const getClasses = function ( text: string, diagramObj: any ): Map { - diagramObj.db.extract(diagramObj.db.getRootDocV2()); return diagramObj.db.getClasses(); }; From 9cad3c7aea3bbbc61495b23225ccff76d312783f Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Tue, 4 Feb 2025 17:09:09 +0530 Subject: [PATCH 286/492] added changeset --- .changeset/grumpy-cheetahs-deliver.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/grumpy-cheetahs-deliver.md diff --git a/.changeset/grumpy-cheetahs-deliver.md b/.changeset/grumpy-cheetahs-deliver.md new file mode 100644 index 000000000..4213083f2 --- /dev/null +++ b/.changeset/grumpy-cheetahs-deliver.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +`mermaidAPI.getDiagramFromText()` now returns a new different db for each state diagram From 4dbaa2b5d6d3ffaa0dbbc7e78b4f3888d0850db8 Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Tue, 4 Feb 2025 19:18:46 +0530 Subject: [PATCH 287/492] code refactor --- .../diagrams/state/parser/state-parser.spec.js | 8 -------- .../diagrams/state/parser/state-style.spec.js | 16 +--------------- packages/mermaid/src/diagrams/state/stateDb.js | 2 +- .../src/diagrams/state/stateDiagram-v2.spec.js | 5 +---- 4 files changed, 3 insertions(+), 28 deletions(-) diff --git a/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js b/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js index bb5345996..1ef6912d9 100644 --- a/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js +++ b/packages/mermaid/src/diagrams/state/parser/state-parser.spec.js @@ -20,7 +20,6 @@ describe('state parser can parse...', () => { const diagramText = `stateDiagram-v2 state "Small State 1" as namedState1`; stateDiagram.parser.parse(diagramText); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get('namedState1')).not.toBeUndefined(); @@ -33,7 +32,6 @@ describe('state parser can parse...', () => { const diagramText = `stateDiagram-v2 namedState1 : Small State 1`; stateDiagram.parser.parse(diagramText); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get('namedState1')).not.toBeUndefined(); @@ -44,7 +42,6 @@ describe('state parser can parse...', () => { const diagramText = `stateDiagram-v2 namedState1:Small State 1`; stateDiagram.parser.parse(diagramText); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get('namedState1')).not.toBeUndefined(); @@ -62,7 +59,6 @@ describe('state parser can parse...', () => { state assemblies `; stateDiagram.parser.parse(diagramText); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get('assemble')).not.toBeUndefined(); expect(states.get('assemblies')).not.toBeUndefined(); @@ -73,7 +69,6 @@ describe('state parser can parse...', () => { state "as" as as `; stateDiagram.parser.parse(diagramText); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get('as')).not.toBeUndefined(); expect(states.get('as').descriptions.join(' ')).toEqual('as'); @@ -98,7 +93,6 @@ describe('state parser can parse...', () => { namedState2 --> bigState2: should point to \\nbigState2 container`; stateDiagram.parser.parse(diagramText); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get('namedState1')).not.toBeUndefined(); @@ -122,7 +116,6 @@ describe('state parser can parse...', () => { inner1 --> inner2 }`; stateDiagram.parser.parse(diagramText); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get('bigState1')).not.toBeUndefined(); @@ -139,7 +132,6 @@ describe('state parser can parse...', () => { stateDiagram-v2 [*] --> ${prop} ${prop} --> [*]`); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); expect(states.get(prop)).not.toBeUndefined(); }); diff --git a/packages/mermaid/src/diagrams/state/parser/state-style.spec.js b/packages/mermaid/src/diagrams/state/parser/state-style.spec.js index c37bed3c7..3f0f6ab00 100644 --- a/packages/mermaid/src/diagrams/state/parser/state-style.spec.js +++ b/packages/mermaid/src/diagrams/state/parser/state-style.spec.js @@ -1,6 +1,6 @@ +import { setConfig } from '../../../config.js'; import { StateDB } from '../stateDb.js'; import stateDiagram from './stateDiagram.jison'; -import { setConfig } from '../../../config.js'; setConfig({ securityLevel: 'strict', @@ -18,7 +18,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { describe('defining (classDef)', () => { it('has "classDef" as a keyword, an id, and can set a css style attribute', function () { stateDiagram.parser.parse('stateDiagram-v2\n classDef exampleClass background:#bbb;'); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const styleClasses = stateDb.getClasses(); expect(styleClasses.get('exampleClass').styles.length).toEqual(1); @@ -29,7 +28,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { stateDiagram.parser.parse( 'stateDiagram-v2\n classDef exampleClass background:#bbb, font-weight:bold, font-style:italic;' ); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const styleClasses = stateDb.getClasses(); expect(styleClasses.get('exampleClass').styles.length).toEqual(3); @@ -43,7 +41,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { stateDiagram.parser.parse( 'stateDiagram-v2\n classDef exampleStyleClass background:#bbb,border:1.5px solid red;' ); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const classes = stateDiagram.parser.yy.getClasses(); expect(classes.get('exampleStyleClass').styles.length).toBe(2); @@ -55,7 +52,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { stateDiagram.parser.parse( 'stateDiagram-v2\n classDef exampleStyleClass background: #bbb,border:1.5px solid red;' ); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const classes = stateDiagram.parser.yy.getClasses(); expect(classes.get('exampleStyleClass').styles.length).toBe(2); @@ -67,7 +63,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { stateDiagram.parser.parse( 'stateDiagram-v2\n classDef __proto__ background:#bbb,border:1.5px solid red;\n classDef constructor background:#bbb,border:1.5px solid red;' ); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const classes = stateDiagram.parser.yy.getClasses(); expect(classes.get('__proto__').styles.length).toBe(2); expect(classes.get('constructor').styles.length).toBe(2); @@ -83,7 +78,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { diagram += 'class a exampleStyleClass'; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const classes = stateDb.getClasses(); expect(classes.get('exampleStyleClass').styles.length).toEqual(2); @@ -104,7 +98,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { diagram += 'class a_a exampleStyleClass'; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const classes = stateDiagram.parser.yy.getClasses(); expect(classes.get('exampleStyleClass').styles.length).toBe(2); @@ -124,7 +117,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { diagram += 'a --> b:::exampleStyleClass' + '\n'; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); const classes = stateDiagram.parser.yy.getClasses(); @@ -163,7 +155,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { diagram += 'class a,b exampleStyleClass'; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); let classes = stateDiagram.parser.yy.getClasses(); let states = stateDiagram.parser.yy.getStates(); @@ -182,7 +173,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { diagram += 'class a,b,c, d, e exampleStyleClass'; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const classes = stateDiagram.parser.yy.getClasses(); const states = stateDiagram.parser.yy.getStates(); @@ -210,7 +200,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { diagram += '}\n'; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDiagram.parser.yy.getStates(); @@ -226,7 +215,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { stateDiagram.parser.parse(`stateDiagram-v2 id1 style id1 background:#bbb`); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const data4Layout = stateDiagram.parser.yy.getData(); expect(data4Layout.nodes[0].cssStyles).toEqual(['background:#bbb']); @@ -236,7 +224,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { id1 id2 style id1,id2 background:#bbb`); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const data4Layout = stateDiagram.parser.yy.getData(); expect(data4Layout.nodes[0].cssStyles).toEqual(['background:#bbb']); @@ -249,7 +236,6 @@ describe('ClassDefs and classes when parsing a State diagram', () => { id2 style id1,id2 background:#bbb, font-weight:bold, font-style:italic;`); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const data4Layout = stateDiagram.parser.yy.getData(); expect(data4Layout.nodes[0].cssStyles).toEqual([ diff --git a/packages/mermaid/src/diagrams/state/stateDb.js b/packages/mermaid/src/diagrams/state/stateDb.js index 50785587e..cc44659eb 100644 --- a/packages/mermaid/src/diagrams/state/stateDb.js +++ b/packages/mermaid/src/diagrams/state/stateDb.js @@ -204,7 +204,7 @@ export class StateDB { * refer to the fork as a whole (document). * See the parser grammar: the definition of a document is a document then a 'line', where a line can be a statement. * This will push the statement into the list of statements for the current document. - * + * @private * @param _doc */ extract(_doc) { diff --git a/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js b/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js index d1edc5b40..ce20879c3 100644 --- a/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js +++ b/packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js @@ -1,6 +1,5 @@ -import { parser } from './parser/stateDiagram.jison'; +import stateDiagram, { parser } from './parser/stateDiagram.jison'; import { StateDB } from './stateDb.js'; -import stateDiagram from './parser/stateDiagram.jison'; describe('state diagram V2, ', function () { // TODO - these examples should be put into ./parser/stateDiagram.spec.js @@ -129,7 +128,6 @@ describe('state diagram V2, ', function () { `; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const rels = stateDb.getRelations(); const rel_1_2 = rels.find((rel) => rel.id1 === 'State1' && rel.id2 === 'State2'); @@ -404,7 +402,6 @@ describe('state diagram V2, ', function () { `; stateDiagram.parser.parse(diagram); - stateDiagram.parser.yy.extract(stateDiagram.parser.yy.getRootDocV2()); const states = stateDb.getStates(); expect(states.get('Active').doc[0].id).toEqual('Idle'); From fbac4c61bb64c290b98e531fdd34b4d65e95a2b6 Mon Sep 17 00:00:00 2001 From: Shahir Ahmed Date: Wed, 5 Feb 2025 19:27:32 -0500 Subject: [PATCH 288/492] diagram adjusts with legend width changes Co-authored-by: Pranav Mishra --- .../src/diagrams/user-journey/journeyRenderer.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts b/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts index 13eb31a02..0860c4753 100644 --- a/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts +++ b/packages/mermaid/src/diagrams/user-journey/journeyRenderer.ts @@ -13,10 +13,12 @@ export const setConf = function (cnf) { }; const actors = {}; +let maxWidth = 0; /** @param diagram - The diagram to draw to. */ function drawActorLegend(diagram) { const conf = getConfig().journey; + maxWidth = 0; // Draw the actors let yPos = 60; Object.keys(actors).forEach((person) => { @@ -39,14 +41,19 @@ function drawActorLegend(diagram) { text: person, textMargin: conf.boxTextMargin | 5, }; - svgDraw.drawText(diagram, labelData); + const textElement = svgDraw.drawText(diagram, labelData); + const bbox = textElement.node().getBBox(); + const textLength = bbox.width; + if (textLength > maxWidth) { + maxWidth = textLength; + } yPos += 20; }); } // TODO: Cleanup? const conf = getConfig().journey; -const LEFT_MARGIN = conf.leftMargin; +let LEFT_MARGIN = 0; export const draw = function (text, id, version, diagObj) { const conf = getConfig().journey; @@ -84,6 +91,7 @@ export const draw = function (text, id, version, diagObj) { }); drawActorLegend(diagram); + LEFT_MARGIN = conf.leftMargin + maxWidth - 80; bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50); drawTasks(diagram, tasks, 0); From 4a19740aea90a20447500e1dfab7a3dae8a26e4f Mon Sep 17 00:00:00 2001 From: "Radmila M." Date: Mon, 10 Feb 2025 13:24:38 +0300 Subject: [PATCH 289/492] Update tutorials.md --- .../mermaid/src/docs/ecosystem/tutorials.md | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/mermaid/src/docs/ecosystem/tutorials.md b/packages/mermaid/src/docs/ecosystem/tutorials.md index 7258361bf..82c272a4e 100644 --- a/packages/mermaid/src/docs/ecosystem/tutorials.md +++ b/packages/mermaid/src/docs/ecosystem/tutorials.md @@ -42,16 +42,7 @@ https://codepen.io/Ryuno-Ki/pen/LNxwgR ## Mermaid in open source docs -[K8s.io Diagram Guide](https://kubernetes.io/docs/contribute/style/diagram-guide/) - -[K8s.dev blog: Improve your documentation with Mermaid.js diagrams](https://www.kubernetes.dev/blog/2021/12/01/improve-your-documentation-with-mermaid.js-diagrams/) - -## Jupyter Integration with mermaid-js - -Here's an example of Python integration with mermaid-js which uses the mermaid.ink service, that displays the graph in a Jupyter notebook. - -```python -import base64 +[K8s.io Diagram Guide](https://kubernetes.io/docs/contribute/style/diagram-guide/)import base64 from IPython.display import Image, display import matplotlib.pyplot as plt @@ -61,6 +52,28 @@ def mm(graph): base64_string = base64_bytes.decode("ascii") display(Image(url="https://mermaid.ink/img/" + base64_string)) +[K8s.dev blog: Improve your documentation with Mermaid.js diagrams](https://www.kubernetes.dev/blog/2021/12/01/improve-your-documentation-with-mermaid.js-diagrams/) + +## Jupyter / Python Integration with mermaid-js + +Here's an example of Python integration with mermaid-js which uses the mermaid.ink service, that displays the graph in a Jupyter notebook and save it as *.png* image with the stated resolution (in this example, `dpi=1200`). + +```python +import base64 +import io, requests +from IPython.display import Image, display +from PIL import Image as im +import matplotlib.pyplot as plt + +def mm(graph): + graphbytes = graph.encode("utf8") + base64_bytes = base64.urlsafe_b64encode(graphbytes) + base64_string = base64_bytes.decode("ascii") + img = im.open(io.BytesIO(requests.get('https://mermaid.ink/img/' + base64_string).content)) + plt.imshow(img) + plt.axis('off') # allow to hide axis + plt.savefig('image.png', dpi=1200) + mm(""" graph LR; A--> B & C & D; @@ -73,6 +86,6 @@ graph LR; **Output** -![Example graph of the Python integration](img/python-mermaid-integration.png) +![Example graph of the Python integration](img/python-mermaid-integration-updated.png) From a79c0f4c002198faee2eb585dab2461d34c8a174 Mon Sep 17 00:00:00 2001 From: "Radmila M." Date: Mon, 10 Feb 2025 14:01:09 +0300 Subject: [PATCH 290/492] Update tutorials.md --- .../mermaid/src/docs/ecosystem/tutorials.md | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/packages/mermaid/src/docs/ecosystem/tutorials.md b/packages/mermaid/src/docs/ecosystem/tutorials.md index 82c272a4e..146ffb282 100644 --- a/packages/mermaid/src/docs/ecosystem/tutorials.md +++ b/packages/mermaid/src/docs/ecosystem/tutorials.md @@ -42,15 +42,7 @@ https://codepen.io/Ryuno-Ki/pen/LNxwgR ## Mermaid in open source docs -[K8s.io Diagram Guide](https://kubernetes.io/docs/contribute/style/diagram-guide/)import base64 -from IPython.display import Image, display -import matplotlib.pyplot as plt - -def mm(graph): - graphbytes = graph.encode("utf8") - base64_bytes = base64.urlsafe_b64encode(graphbytes) - base64_string = base64_bytes.decode("ascii") - display(Image(url="https://mermaid.ink/img/" + base64_string)) +[K8s.io Diagram Guide](https://kubernetes.io/docs/contribute/style/diagram-guide/) [K8s.dev blog: Improve your documentation with Mermaid.js diagrams](https://www.kubernetes.dev/blog/2021/12/01/improve-your-documentation-with-mermaid.js-diagrams/) @@ -76,16 +68,16 @@ def mm(graph): mm(""" graph LR; - A--> B & C & D; - B--> A & E; - C--> A & E; - D--> A & E; - E--> B & C & D; + A--> B & C & D + B--> A & E + C--> A & E + D--> A & E + E--> B & C & D """) ``` **Output** -![Example graph of the Python integration](img/python-mermaid-integration-updated.png) +![Example graph of the Python integration](img/python-mermaid-integration.png) From d07f85e6ac4cbd4a75ddfad395884678d5f8c2f8 Mon Sep 17 00:00:00 2001 From: "Radmila M." Date: Mon, 10 Feb 2025 14:05:55 +0300 Subject: [PATCH 291/492] Add files via upload --- .../img/python-mermaid-integration-updated.png | Bin 0 -> 261810 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/mermaid/src/docs/ecosystem/img/python-mermaid-integration-updated.png diff --git a/packages/mermaid/src/docs/ecosystem/img/python-mermaid-integration-updated.png b/packages/mermaid/src/docs/ecosystem/img/python-mermaid-integration-updated.png new file mode 100644 index 0000000000000000000000000000000000000000..37ad58420671462588b204632c0bdcbc3d2aa85c GIT binary patch literal 261810 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 QGIAIFEykNOH##2uA7wj78vp Date: Wed, 12 Feb 2025 15:54:51 +0530 Subject: [PATCH 292/492] Refactored arrow function to regular function and assigned unique ID to messages during parsing. --- .../src/diagrams/sequence/sequenceDb.ts | 300 +++++++++++------- .../src/diagrams/sequence/sequenceDiagram.ts | 19 +- .../src/diagrams/sequence/sequenceRenderer.ts | 1 - .../mermaid/src/diagrams/sequence/types.ts | 1 + 4 files changed, 190 insertions(+), 131 deletions(-) diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDb.ts b/packages/mermaid/src/diagrams/sequence/sequenceDb.ts index e71177b1f..ba5d464c5 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceDb.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceDb.ts @@ -45,7 +45,63 @@ export class SequenceDB implements DiagramDB { lastDestroyed: undefined, })); - public addBox = (data: { text: string; color: string; wrap: boolean }) => { + constructor() { + // Needed for JISON since it only supports direct properties + this.apply = this.apply.bind(this); + this.parseBoxData = this.parseBoxData.bind(this); + this.parseMessage = this.parseMessage.bind(this); + this.setWrap(getConfig().wrap); + + this.clear(); + + this.LINETYPE = { + SOLID: 0, + DOTTED: 1, + NOTE: 2, + SOLID_CROSS: 3, + DOTTED_CROSS: 4, + SOLID_OPEN: 5, + DOTTED_OPEN: 6, + LOOP_START: 10, + LOOP_END: 11, + ALT_START: 12, + ALT_ELSE: 13, + ALT_END: 14, + OPT_START: 15, + OPT_END: 16, + ACTIVE_START: 17, + ACTIVE_END: 18, + PAR_START: 19, + PAR_AND: 20, + PAR_END: 21, + RECT_START: 22, + RECT_END: 23, + SOLID_POINT: 24, + DOTTED_POINT: 25, + AUTONUMBER: 26, + CRITICAL_START: 27, + CRITICAL_OPTION: 28, + CRITICAL_END: 29, + BREAK_START: 30, + BREAK_END: 31, + PAR_OVER_START: 32, + BIDIRECTIONAL_SOLID: 33, + BIDIRECTIONAL_DOTTED: 34, + }; + + this.ARROWTYPE = { + FILLED: 0, + OPEN: 1, + }; + + this.PLACEMENT = { + LEFTOF: 0, + RIGHTOF: 1, + OVER: 2, + }; + } + + public addBox(data: { text: string; color: string; wrap: boolean }) { this.state.records.boxes.push({ name: data.text, wrap: data.wrap ?? this.autoWrap(), @@ -53,14 +109,14 @@ export class SequenceDB implements DiagramDB { actorKeys: [], }); this.state.records.currentBox = this.state.records.boxes.slice(-1)[0]; - }; + } - public addActor = ( + public addActor( id: string, name: string, description: { text: string; wrap?: boolean | null; type: string }, type: string - ) => { + ) { let assignedBox = this.state.records.currentBox; const old = this.state.records.actors.get(id); if (old) { @@ -112,9 +168,9 @@ export class SequenceDB implements DiagramDB { this.state.records.currentBox.actorKeys.push(id); } this.state.records.prevActor = id; - }; + } - private readonly activationCount = (part: string) => { + private activationCount(part: string) { let i; let count = 0; if (!part) { @@ -135,30 +191,31 @@ export class SequenceDB implements DiagramDB { } } return count; - }; + } - public addMessage = ( + public addMessage( idFrom: Message['from'], idTo: Message['to'], message: { text: string; wrap?: boolean }, answer: Message['answer'] - ) => { + ) { this.state.records.messages.push({ + id: this.state.records.messages.length.toString(), from: idFrom, to: idTo, message: message.text, wrap: message.wrap ?? this.autoWrap(), answer: answer, }); - }; + } - public addSignal = ( + public addSignal( idFrom?: Message['from'], idTo?: Message['to'], message?: { text: string; wrap: boolean }, messageType?: number, activate = false - ) => { + ) { if (messageType === this.LINETYPE.ACTIVE_END) { const cnt = this.activationCount(idFrom ?? ''); if (cnt < 1) { @@ -177,6 +234,7 @@ export class SequenceDB implements DiagramDB { } } this.state.records.messages.push({ + id: this.state.records.messages.length.toString(), from: idFrom, to: idTo, message: message?.text ?? '', @@ -185,52 +243,54 @@ export class SequenceDB implements DiagramDB { activate, }); return true; - }; + } - public hasAtLeastOneBox = () => { + public hasAtLeastOneBox() { return this.state.records.boxes.length > 0; - }; + } - public hasAtLeastOneBoxWithTitle = () => { + public hasAtLeastOneBoxWithTitle() { return this.state.records.boxes.some((b) => b.name); - }; + } - public getMessages = () => { + public getMessages() { return this.state.records.messages; - }; + } - public getBoxes = () => { + public getBoxes() { return this.state.records.boxes; - }; - public getActors = () => { + } + public getActors() { return this.state.records.actors; - }; - public getCreatedActors = () => { + } + public getCreatedActors() { return this.state.records.createdActors; - }; - public getDestroyedActors = () => { + } + public getDestroyedActors() { return this.state.records.destroyedActors; - }; - public getActor = (id: string) => { + } + public getActor(id: string) { // TODO: do we ever use this function in a way that it might return undefined? return this.state.records.actors.get(id)!; - }; - public getActorKeys = () => { + } + public getActorKeys() { return [...this.state.records.actors.keys()]; - }; - public enableSequenceNumbers = () => { + } + public enableSequenceNumbers() { this.state.records.sequenceNumbersEnabled = true; - }; - public disableSequenceNumbers = () => { + } + public disableSequenceNumbers() { this.state.records.sequenceNumbersEnabled = false; - }; - public showSequenceNumbers = () => this.state.records.sequenceNumbersEnabled; + } + public showSequenceNumbers() { + return this.state.records.sequenceNumbersEnabled; + } - public setWrap = (wrapSetting?: boolean) => { + public setWrap(wrapSetting?: boolean) { this.state.records.wrapEnabled = wrapSetting; - }; + } - private readonly extractWrap = (text?: string): { cleanedText?: string; wrap?: boolean } => { + private extractWrap(text?: string): { cleanedText?: string; wrap?: boolean } { if (text === undefined) { return {}; } @@ -239,23 +299,23 @@ export class SequenceDB implements DiagramDB { /^:?wrap:/.exec(text) !== null ? true : /^:?nowrap:/.exec(text) !== null ? false : undefined; const cleanedText = (wrap === undefined ? text : text.replace(/^:?(?:no)?wrap:/, '')).trim(); return { cleanedText, wrap }; - }; + } - public autoWrap = () => { + public autoWrap() { // if setWrap has been called, use that value, otherwise use the value from the config // TODO: refactor, always use the config value let setWrap update the config value if (this.state.records.wrapEnabled !== undefined) { return this.state.records.wrapEnabled; } return getConfig().sequence?.wrap ?? false; - }; + } - public clear = () => { + public clear() { this.state.reset(); commonClear(); - }; + } - public parseMessage = (str: string) => { + public parseMessage(str: string) { const trimmedStr = str.trim(); const { wrap, cleanedText } = this.extractWrap(trimmedStr); const message = { @@ -264,12 +324,12 @@ export class SequenceDB implements DiagramDB { }; log.debug(`parseMessage: ${JSON.stringify(message)}`); return message; - }; + } // We expect the box statement to be color first then description // The color can be rgb,rgba,hsl,hsla, or css code names #hex codes are not supported for now because of the way the char # is handled // We extract first segment as color, the rest of the line is considered as text - public parseBoxData = (str: string) => { + public parseBoxData(str: string) { const match = /^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(str); let color = match?.[1] ? match[1].trim() : 'transparent'; let title = match?.[2] ? match[2].trim() : undefined; @@ -294,59 +354,59 @@ export class SequenceDB implements DiagramDB { color, wrap, }; + } + + public LINETYPE: { + SOLID: 0; + DOTTED: 1; + NOTE: 2; + SOLID_CROSS: 3; + DOTTED_CROSS: 4; + SOLID_OPEN: 5; + DOTTED_OPEN: 6; + LOOP_START: 10; + LOOP_END: 11; + ALT_START: 12; + ALT_ELSE: 13; + ALT_END: 14; + OPT_START: 15; + OPT_END: 16; + ACTIVE_START: 17; + ACTIVE_END: 18; + PAR_START: 19; + PAR_AND: 20; + PAR_END: 21; + RECT_START: 22; + RECT_END: 23; + SOLID_POINT: 24; + DOTTED_POINT: 25; + AUTONUMBER: 26; + CRITICAL_START: 27; + CRITICAL_OPTION: 28; + CRITICAL_END: 29; + BREAK_START: 30; + BREAK_END: 31; + PAR_OVER_START: 32; + BIDIRECTIONAL_SOLID: 33; + BIDIRECTIONAL_DOTTED: 34; }; - public LINETYPE = { - SOLID: 0, - DOTTED: 1, - NOTE: 2, - SOLID_CROSS: 3, - DOTTED_CROSS: 4, - SOLID_OPEN: 5, - DOTTED_OPEN: 6, - LOOP_START: 10, - LOOP_END: 11, - ALT_START: 12, - ALT_ELSE: 13, - ALT_END: 14, - OPT_START: 15, - OPT_END: 16, - ACTIVE_START: 17, - ACTIVE_END: 18, - PAR_START: 19, - PAR_AND: 20, - PAR_END: 21, - RECT_START: 22, - RECT_END: 23, - SOLID_POINT: 24, - DOTTED_POINT: 25, - AUTONUMBER: 26, - CRITICAL_START: 27, - CRITICAL_OPTION: 28, - CRITICAL_END: 29, - BREAK_START: 30, - BREAK_END: 31, - PAR_OVER_START: 32, - BIDIRECTIONAL_SOLID: 33, - BIDIRECTIONAL_DOTTED: 34, + public ARROWTYPE: { + FILLED: 0; + OPEN: 1; }; - public ARROWTYPE = { - FILLED: 0, - OPEN: 1, + public PLACEMENT: { + LEFTOF: 0; + RIGHTOF: 1; + OVER: 2; }; - public PLACEMENT = { - LEFTOF: 0, - RIGHTOF: 1, - OVER: 2, - }; - - public addNote = ( + public addNote( actor: { actor: string }, placement: Message['placement'], message: { text: string; wrap?: boolean } - ) => { + ) { const note: Note = { actor: actor, placement: placement, @@ -359,6 +419,7 @@ export class SequenceDB implements DiagramDB { const actors = [].concat(actor, actor); this.state.records.notes.push(note); this.state.records.messages.push({ + id: this.state.records.messages.length.toString(), from: actors[0], to: actors[1], message: message.text, @@ -366,9 +427,9 @@ export class SequenceDB implements DiagramDB { type: this.LINETYPE.NOTE, placement: placement, }); - }; + } - public addLinks = (actorId: string, text: { text: string }) => { + public addLinks(actorId: string, text: { text: string }) { // find the actor const actor = this.getActor(actorId); // JSON.parse the text @@ -382,9 +443,9 @@ export class SequenceDB implements DiagramDB { } catch (e) { log.error('error while parsing actor link text', e); } - }; + } - public addALink = (actorId: string, text: { text: string }) => { + public addALink(actorId: string, text: { text: string }) { // find the actor const actor = this.getActor(actorId); try { @@ -402,13 +463,9 @@ export class SequenceDB implements DiagramDB { } catch (e) { log.error('error while parsing actor link text', e); } - }; + } - /** - * @param actor - the actor to add the links to - * @param links - the links to add to the actor - */ - private readonly insertLinks = (actor: Actor, links: Record) => { + private insertLinks(actor: Actor, links: Record) { if (actor.links == null) { actor.links = links; } else { @@ -416,9 +473,9 @@ export class SequenceDB implements DiagramDB { actor.links[key] = links[key]; } } - }; + } - public addProperties = (actorId: string, text: { text: string }) => { + public addProperties(actorId: string, text: { text: string }) { // find the actor const actor = this.getActor(actorId); // JSON.parse the text @@ -430,13 +487,9 @@ export class SequenceDB implements DiagramDB { } catch (e) { log.error('error while parsing actor properties text', e); } - }; + } - /** - * @param actor - the actor to add the properties to - * @param properties - the properties to add to the actor's properties - */ - private readonly insertProperties = (actor: Actor, properties: Record) => { + private insertProperties(actor: Actor, properties: Record) { if (actor.properties == null) { actor.properties = properties; } else { @@ -444,13 +497,13 @@ export class SequenceDB implements DiagramDB { actor.properties[key] = properties[key]; } } - }; + } - private readonly boxEnd = () => { + private boxEnd() { this.state.records.currentBox = undefined; - }; + } - public addDetails = (actorId: string, text: { text: string }) => { + public addDetails(actorId: string, text: { text: string }) { // find the actor const actor = this.getActor(actorId); const elem = document.getElementById(text.text)!; @@ -470,18 +523,18 @@ export class SequenceDB implements DiagramDB { } catch (e) { log.error('error while parsing actor details text', e); } - }; + } - public getActorProperty = (actor: Actor, key: string) => { + public getActorProperty(actor: Actor, key: string) { if (actor?.properties !== undefined) { return actor.properties[key]; } return undefined; - }; + } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents - public apply = (param: any | AddMessageParams | AddMessageParams[]) => { + public apply(param: any | AddMessageParams | AddMessageParams[]) { if (Array.isArray(param)) { param.forEach((item) => { this.apply(item); @@ -490,6 +543,7 @@ export class SequenceDB implements DiagramDB { switch (param.type) { case 'sequenceIndex': this.state.records.messages.push({ + id: this.state.records.messages.length.toString(), from: undefined, to: undefined, message: { @@ -628,13 +682,15 @@ export class SequenceDB implements DiagramDB { break; } } - }; + } - public getAccTitle = getAccTitle; - public getDiagramTitle = getDiagramTitle; - public setDiagramTitle = setDiagramTitle; - public getConfig = () => getConfig().sequence; public setAccTitle = setAccTitle; public setAccDescription = setAccDescription; + public setDiagramTitle = setDiagramTitle; + public getAccTitle = getAccTitle; public getAccDescription = getAccDescription; + public getDiagramTitle = getDiagramTitle; + public getConfig() { + return getConfig().sequence; + } } diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.ts b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.ts index 80ccda5f9..f2b701712 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.ts @@ -3,21 +3,24 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; import parser from './parser/sequenceDiagram.jison'; import { SequenceDB } from './sequenceDb.js'; import styles from './styles.js'; +import { setConfig } from '../../diagram-api/diagramAPI.js'; import renderer from './sequenceRenderer.js'; - -let db: SequenceDB; +import type { MermaidConfig } from '../../config.type.js'; export const diagram: DiagramDefinition = { parser, get db() { - if (!db) { - db = new SequenceDB(); - } - return db; + return new SequenceDB(); }, renderer, styles, - init: ({ wrap }) => { - db.setWrap(wrap); + init: (cnf: MermaidConfig) => { + if (!cnf.sequence) { + cnf.sequence = {}; + } + if (cnf.wrap) { + cnf.sequence.wrap = cnf.wrap; + setConfig({ sequence: { wrap: cnf.wrap } }); + } }, }; diff --git a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts index 951d84b86..389171d3c 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts +++ b/packages/mermaid/src/diagrams/sequence/sequenceRenderer.ts @@ -1538,7 +1538,6 @@ const calculateLoopBounds = async function (messages, actors, _maxWidthPerActor, let current, noteModel, msgModel; for (const msg of messages) { - msg.id = utils.random({ length: 10 }); switch (msg.type) { case diagObj.db.LINETYPE.LOOP_START: case diagObj.db.LINETYPE.ALT_START: diff --git a/packages/mermaid/src/diagrams/sequence/types.ts b/packages/mermaid/src/diagrams/sequence/types.ts index 10c1c8ed3..7cf2ead9c 100644 --- a/packages/mermaid/src/diagrams/sequence/types.ts +++ b/packages/mermaid/src/diagrams/sequence/types.ts @@ -20,6 +20,7 @@ export interface Actor { } export interface Message { + id: string; from?: string; to?: string; message: From f454865b9773ce3843e42f3da929a0a907bfa1af Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Wed, 12 Feb 2025 16:00:14 +0530 Subject: [PATCH 293/492] Updated unit tests to reflect new DB instance per parse. --- .../diagrams/sequence/sequenceDiagram.spec.js | 795 ++++++++---------- 1 file changed, 364 insertions(+), 431 deletions(-) diff --git a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js index 474668edf..7fbf4f4e3 100644 --- a/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js +++ b/packages/mermaid/src/diagrams/sequence/sequenceDiagram.spec.js @@ -98,14 +98,15 @@ let diagram; describe('more than one sequence diagram', () => { it('should not have duplicated messages', async () => { const diagram1 = await Diagram.fromText(` - sequenceDiagram - Alice->Bob:Hello Bob, how are you? + sequenceDiagram + Alice->Bob:Hello Bob, how are you? Bob-->Alice: I am good thanks!`); expect(diagram1.db.getMessages()).toMatchInlineSnapshot(` [ { "activate": false, "from": "Alice", + "id": "0", "message": "Hello Bob, how are you?", "to": "Bob", "type": 5, @@ -114,6 +115,7 @@ describe('more than one sequence diagram', () => { { "activate": false, "from": "Bob", + "id": "1", "message": "I am good thanks!", "to": "Alice", "type": 6, @@ -131,6 +133,7 @@ describe('more than one sequence diagram', () => { { "activate": false, "from": "Alice", + "id": "0", "message": "Hello Bob, how are you?", "to": "Bob", "type": 5, @@ -139,6 +142,7 @@ describe('more than one sequence diagram', () => { { "activate": false, "from": "Bob", + "id": "1", "message": "I am good thanks!", "to": "Alice", "type": 6, @@ -158,6 +162,7 @@ describe('more than one sequence diagram', () => { { "activate": false, "from": "Alice", + "id": "0", "message": "Hello John, how are you?", "to": "John", "type": 5, @@ -166,6 +171,7 @@ describe('more than one sequence diagram', () => { { "activate": false, "from": "John", + "id": "1", "message": "I am good thanks!", "to": "Alice", "type": 6, @@ -221,27 +227,27 @@ Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->Alice: I am good thanks!`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); // needs to be rendered for the correct value of visibility auto numbers - expect(diagram.db.showSequenceNumbers()).toBe(true); + const diagram1 = await Diagram.fromText(str); + + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); // needs to be rendered for the correct value of visibility auto numbers + expect(diagram1.db.showSequenceNumbers()).toBe(true); }); it('should handle a sequenceDiagram definition with a title:', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram title: Diagram Title Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks -Bob-->Alice: I am good thanks!`; +Bob-->Alice: I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - expect(diagram.db.getAccDescription()).toBe(''); - const messages = diagram.db.getMessages(); - const title = diagram.db.getDiagramTitle(); + expect(diagram1.db.getAccDescription()).toBe(''); + const messages = diagram1.db.getMessages(); + const title = diagram1.db.getDiagramTitle(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); @@ -250,21 +256,20 @@ Bob-->Alice: I am good thanks!`; }); it('should handle a sequenceDiagram definition with a title without a :', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram title Diagram Title Alice->Bob:Hello Bob, how are you? Note right of Bob: Bob thinks -Bob-->Alice: I am good thanks!`; +Bob-->Alice: I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - expect(diagram.db.getAccDescription()).toBe(''); - const messages = diagram.db.getMessages(); - const title = diagram.db.getDiagramTitle(); + expect(diagram1.db.getAccDescription()).toBe(''); + const messages = diagram1.db.getMessages(); + const title = diagram1.db.getDiagramTitle(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); @@ -273,22 +278,20 @@ Bob-->Alice: I am good thanks!`; }); it('should handle a sequenceDiagram definition with a accessibility title and description (accDescr)', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram title: Diagram Title accTitle: This is the title accDescr: Accessibility Description Alice->Bob:Hello Bob, how are you? -`; +`); - await mermaidAPI.parse(str); - expect(diagram.db.getDiagramTitle()).toBe('Diagram Title'); - expect(diagram.db.getAccTitle()).toBe('This is the title'); - expect(diagram.db.getAccDescription()).toBe('Accessibility Description'); - const messages = diagram.db.getMessages(); + expect(diagram1.db.getDiagramTitle()).toBe('Diagram Title'); + expect(diagram1.db.getAccTitle()).toBe('This is the title'); + expect(diagram1.db.getAccDescription()).toBe('Accessibility Description'); }); it('should handle a sequenceDiagram definition with a accessibility title and multiline description (accDescr)', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram accTitle: This is the title accDescr { @@ -296,43 +299,39 @@ Accessibility Description } Alice->Bob:Hello Bob, how are you? -`; +`); - await mermaidAPI.parse(str); - expect(diagram.db.getAccTitle()).toBe('This is the title'); - expect(diagram.db.getAccDescription()).toBe('Accessibility\nDescription'); - const messages = diagram.db.getMessages(); + expect(diagram1.db.getAccTitle()).toBe('This is the title'); + expect(diagram1.db.getAccDescription()).toBe('Accessibility\nDescription'); }); it('should space in actor names', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob:Hello Bob, how are - you? -Bob-->Alice: I am good thanks!`; +Bob-->Alice: I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should handle dashes in actor names', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice-in-Wonderland->Bob:Hello Bob, how are - you? -Bob-->Alice-in-Wonderland:I am good thanks!`; +Bob-->Alice-in-Wonderland:I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice-in-Wonderland').description).toBe('Alice-in-Wonderland'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('Alice-in-Wonderland'); @@ -340,20 +339,19 @@ Bob-->Alice-in-Wonderland:I am good thanks!`; }); it('should handle dashes in participant names', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant Alice-in-Wonderland participant Bob Alice-in-Wonderland->Bob:Hello Bob, how are - you? -Bob-->Alice-in-Wonderland:I am good thanks!`; +Bob-->Alice-in-Wonderland:I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect([...actors.keys()]).toEqual(['Alice-in-Wonderland', 'Bob']); expect(actors.get('Alice-in-Wonderland').description).toBe('Alice-in-Wonderland'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('Alice-in-Wonderland'); @@ -361,28 +359,26 @@ Bob-->Alice-in-Wonderland:I am good thanks!`; }); it('should alias participants', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant A as Alice participant B as Bob A->B:Hello Bob, how are you? -B-->A: I am good thanks!`; +B-->A: I am good thanks!`); - await mermaidAPI.parse(str); - - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect([...actors.keys()]).toEqual(['A', 'B']); expect(actors.get('A').description).toBe('Alice'); expect(actors.get('B').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('A'); expect(messages[1].from).toBe('B'); }); it('should alias a mix of actors and participants apa12', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram actor Alice as Alice2 actor Bob @@ -392,11 +388,9 @@ sequenceDiagram Bob->>Alice: Hi Alice Alice->>John: Hi John John->>Mandy: Hi Mandy - Mandy ->>Joan: Hi Joan`; + Mandy ->>Joan: Hi Joan`); - await mermaidAPI.parse(str); - - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect([...actors.keys()]).toEqual(['Alice', 'Bob', 'John', 'Mandy', 'Joan']); expect(actors.get('Alice').description).toBe('Alice2'); expect(actors.get('Alice').type).toBe('actor'); @@ -404,219 +398,212 @@ sequenceDiagram expect(actors.get('John').type).toBe('participant'); expect(actors.get('Joan').type).toBe('participant'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(5); expect(messages[0].from).toBe('Alice'); expect(messages[4].to).toBe('Joan'); }); it('should alias actors apa13', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram actor A as Alice actor B as Bob A->B:Hello Bob, how are you? -B-->A: I am good thanks!`; +B-->A: I am good thanks!`); - await mermaidAPI.parse(str); - - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect([...actors.keys()]).toEqual(['A', 'B']); expect(actors.get('A').description).toBe('Alice'); expect(actors.get('B').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(2); expect(messages[0].from).toBe('A'); expect(messages[1].from).toBe('B'); }); it('should handle in async messages', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram -Alice-xBob:Hello Bob, how are you?`; +Alice-xBob:Hello Bob, how are you?`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.SOLID_CROSS); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.SOLID_CROSS); }); it('should handle in async dotted messages', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram -Alice--xBob:Hello Bob, how are you?`; +Alice--xBob:Hello Bob, how are you?`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED_CROSS); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.DOTTED_CROSS); }); it('should handle in sync messages', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram -Alice-)Bob:Hello Bob, how are you?`; +Alice-)Bob:Hello Bob, how are you?`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.SOLID_POINT); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.SOLID_POINT); }); it('should handle in sync dotted messages', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram -Alice--)Bob:Hello Bob, how are you?`; +Alice--)Bob:Hello Bob, how are you?`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED_POINT); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.DOTTED_POINT); }); it('should handle in arrow messages', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram -Alice->>Bob:Hello Bob, how are you?`; +Alice->>Bob:Hello Bob, how are you?`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.SOLID); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.SOLID); }); it('should handle in arrow messages', async () => { - const str = 'sequenceDiagram\n' + 'Alice-->>Bob:Hello Bob, how are you?'; + const diagram1 = await Diagram.fromText( + 'sequenceDiagram\n' + 'Alice-->>Bob:Hello Bob, how are you?' + ); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.DOTTED); }); it('should handle bidirectional arrow messages', async () => { - const str = ` + const diagram1 = await Diagram.fromText( + ` sequenceDiagram -Alice<<->>Bob:Hello Bob, how are you?`; +Alice<<->>Bob:Hello Bob, how are you?` + ); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.BIDIRECTIONAL_SOLID); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.BIDIRECTIONAL_SOLID); }); it('should handle bidirectional dotted arrow messages', async () => { - const str = ` + const diagram1 = await Diagram.fromText( + ` sequenceDiagram - Alice<<-->>Bob:Hello Bob, how are you?`; + Alice<<-->>Bob:Hello Bob, how are you?` + ); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(1); - expect(messages[0].type).toBe(diagram.db.LINETYPE.BIDIRECTIONAL_DOTTED); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.BIDIRECTIONAL_DOTTED); }); it('should handle actor activation', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice-->>Bob:Hello Bob, how are you? activate Bob Bob-->>Alice:Hello Alice, I'm fine and you? -deactivate Bob`; +deactivate Bob`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(4); - expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); - expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.DOTTED); + expect(messages[1].type).toBe(diagram1.db.LINETYPE.ACTIVE_START); expect(messages[1].from).toBe('Bob'); - expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED); - expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END); + expect(messages[2].type).toBe(diagram1.db.LINETYPE.DOTTED); + expect(messages[3].type).toBe(diagram1.db.LINETYPE.ACTIVE_END); expect(messages[3].from).toBe('Bob'); }); it('should handle actor one line notation activation', async () => { - const str = ` - sequenceDiagram - Alice-->>+Bob:Hello Bob, how are you? - Bob-->>- Alice:Hello Alice, I'm fine and you?`; + const diagram1 = await Diagram.fromText(` + sequenceDiagram + Alice-->>+Bob:Hello Bob, how are you? + Bob-->>- Alice:Hello Alice, I'm fine and you?`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(4); - expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.DOTTED); expect(messages[0].activate).toBeTruthy(); - expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START); + expect(messages[1].type).toBe(diagram1.db.LINETYPE.ACTIVE_START); expect(messages[1].from).toBe('Bob'); - expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED); - expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_END); + expect(messages[2].type).toBe(diagram1.db.LINETYPE.DOTTED); + expect(messages[3].type).toBe(diagram1.db.LINETYPE.ACTIVE_END); expect(messages[3].from).toBe('Bob'); }); it('should handle stacked activations', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice-->>+Bob:Hello Bob, how are you? Bob-->>+Carol:Carol, let me introduce Alice? Bob-->>- Alice:Hello Alice, please meet Carol? - Carol->>- Bob:Oh Bob, I'm so happy to be here!`; + Carol->>- Bob:Oh Bob, I'm so happy to be here!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(8); - expect(messages[0].type).toBe(diagram.db.LINETYPE.DOTTED); - expect(messages[1].type).toBe(diagram.db.LINETYPE.ACTIVE_START); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.DOTTED); + expect(messages[1].type).toBe(diagram1.db.LINETYPE.ACTIVE_START); expect(messages[1].from).toBe('Bob'); - expect(messages[2].type).toBe(diagram.db.LINETYPE.DOTTED); - expect(messages[3].type).toBe(diagram.db.LINETYPE.ACTIVE_START); + expect(messages[2].type).toBe(diagram1.db.LINETYPE.DOTTED); + expect(messages[3].type).toBe(diagram1.db.LINETYPE.ACTIVE_START); expect(messages[3].from).toBe('Carol'); - expect(messages[5].type).toBe(diagram.db.LINETYPE.ACTIVE_END); + expect(messages[5].type).toBe(diagram1.db.LINETYPE.ACTIVE_END); expect(messages[5].from).toBe('Bob'); - expect(messages[7].type).toBe(diagram.db.LINETYPE.ACTIVE_END); + expect(messages[7].type).toBe(diagram1.db.LINETYPE.ACTIVE_END); expect(messages[7].from).toBe('Carol'); }); it('should handle fail parsing when activating an inactive participant', async () => { @@ -646,102 +633,97 @@ deactivate Bob`; }); it('should handle comments in a sequenceDiagram', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks - Bob-->Alice: I am good thanks!`; + Bob-->Alice: I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle new lines in a sequenceDiagram', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks Bob-->Alice: I am good thanks! - `; + `); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle semicolons', async () => { - const str = ` -sequenceDiagram;Alice->Bob: Hello Bob, how are you?;Note right of Bob: Bob thinks;Bob-->Alice: I am good thanks!;`; + const diagram1 = await Diagram.fromText(` +sequenceDiagram;Alice->Bob: Hello Bob, how are you?;Note right of Bob: Bob thinks;Bob-->Alice: I am good thanks!;`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle one leading space in lines in a sequenceDiagram', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks -Bob-->Alice: I am good thanks!`; +Bob-->Alice: I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle several leading spaces in lines in a sequenceDiagram', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment Note right of Bob: Bob thinks -Bob-->Alice: I am good thanks!`; +Bob-->Alice: I am good thanks!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(3); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('Bob'); }); it('should handle several leading spaces in lines in a sequenceDiagram', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant Alice participant Bob @@ -752,21 +734,20 @@ John->John: Fight against hypochondria Note right of John: Rational thoughts
prevail... John-->Alice: Great! John->Bob: How about you? -Bob-->John: Jolly good!`; +Bob-->John: Jolly good!`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(8); expect(messages[0].from).toBe('Alice'); expect(messages[2].from).toBe('John'); }); it('should handle different line breaks', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant 1 as multiline
text participant 2 as multiline
text @@ -780,17 +761,15 @@ note right of 3: multiline
text note right of 4: multiline
text 4->>1: multiline
text note right of 1: multiline
text -`; +`); - await mermaidAPI.parse(str); - - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('1').description).toBe('multiline
text'); expect(actors.get('2').description).toBe('multiline
text'); expect(actors.get('3').description).toBe('multiline
text'); expect(actors.get('4').description).toBe('multiline
text'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[0].message).toBe('multiline
text'); expect(messages[1].message).toBe('multiline
text'); expect(messages[2].message).toBe('multiline
text'); @@ -801,7 +780,7 @@ note right of 1: multiline
text expect(messages[7].message).toBe('multiline
text'); }); it('should handle notes and messages without wrap specified', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant 1 participant 2 @@ -815,11 +794,9 @@ note right of 3:nowrap: single-line text note right of 4: multiline
text 4->>1:nowrap: multiline
text note right of 1:nowrap: multiline
text -`; +`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[0].message).toBe('single-line text'); expect(messages[1].message).toBe('single-line text'); expect(messages[2].message).toBe('single-line text'); @@ -840,7 +817,7 @@ note right of 1:nowrap: multiline
text expect(messages[7].wrap).toBe(false); }); it('should handle notes and messages with wrap specified', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant 1 participant 2 @@ -850,11 +827,9 @@ participant 4 note right of 2:wrap: single-line text 2->>3:wrap: multiline
text note right of 3:wrap: multiline
text -`; +`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[0].message).toBe('single-line text'); expect(messages[1].message).toBe('single-line text'); expect(messages[2].message).toBe('multiline
text'); @@ -865,53 +840,47 @@ note right of 3:wrap: multiline
text expect(messages[3].wrap).toBe(true); }); it('should handle notes and messages with nowrap or line breaks', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant 1 participant 2 1->>2: single-line text note right of 2: single-line text -`; +`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[0].message).toBe('single-line text'); expect(messages[1].message).toBe('single-line text'); expect(messages[0].wrap).toBe(false); expect(messages[1].wrap).toBe(false); }); it('should handle notes over a single actor', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note over Bob: Bob thinks -`; +`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].from).toBe('Bob'); expect(messages[1].to).toBe('Bob'); }); it('should handle notes over multiple actors', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? Note over Alice,Bob: confusion Note over Bob,Alice: resolution -`; +`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].from).toBe('Alice'); expect(messages[1].to).toBe('Bob'); expect(messages[2].from).toBe('Bob'); expect(messages[2].to).toBe('Alice'); }); it('should handle loop statements', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? @@ -920,21 +889,20 @@ Note right of Bob: Bob thinks loop Multiple happy responses Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(5); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should add a rect around sequence', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment @@ -942,23 +910,22 @@ end`; Note right of Bob: Bob thinks Bob-->Alice: I am good thanks end - `; + `); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); - expect(messages[1].type).toEqual(diagram.db.LINETYPE.RECT_START); + const messages = diagram1.db.getMessages(); + expect(messages[1].type).toEqual(diagram1.db.LINETYPE.RECT_START); expect(messages[1].message).toBe('rgb(200, 255, 200)'); - expect(messages[2].type).toEqual(diagram.db.LINETYPE.NOTE); - expect(messages[3].type).toEqual(diagram.db.LINETYPE.DOTTED_OPEN); - expect(messages[4].type).toEqual(diagram.db.LINETYPE.RECT_END); + expect(messages[2].type).toEqual(diagram1.db.LINETYPE.NOTE); + expect(messages[3].type).toEqual(diagram1.db.LINETYPE.DOTTED_OPEN); + expect(messages[4].type).toEqual(diagram1.db.LINETYPE.RECT_END); }); it('should allow for nested rects', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? %% Comment @@ -968,24 +935,24 @@ end`; end Bob-->Alice: I am good thanks end - `; - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + `); + + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); - expect(messages[1].type).toEqual(diagram.db.LINETYPE.RECT_START); + const messages = diagram1.db.getMessages(); + expect(messages[1].type).toEqual(diagram1.db.LINETYPE.RECT_START); expect(messages[1].message).toBe('rgb(200, 255, 200)'); - expect(messages[2].type).toEqual(diagram.db.LINETYPE.RECT_START); + expect(messages[2].type).toEqual(diagram1.db.LINETYPE.RECT_START); expect(messages[2].message).toBe('rgb(0, 0, 0)'); - expect(messages[3].type).toEqual(diagram.db.LINETYPE.NOTE); - expect(messages[4].type).toEqual(diagram.db.LINETYPE.RECT_END); - expect(messages[5].type).toEqual(diagram.db.LINETYPE.DOTTED_OPEN); - expect(messages[6].type).toEqual(diagram.db.LINETYPE.RECT_END); + expect(messages[3].type).toEqual(diagram1.db.LINETYPE.NOTE); + expect(messages[4].type).toEqual(diagram1.db.LINETYPE.RECT_END); + expect(messages[5].type).toEqual(diagram1.db.LINETYPE.DOTTED_OPEN); + expect(messages[6].type).toEqual(diagram1.db.LINETYPE.RECT_END); }); it('should handle opt statements', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? @@ -994,21 +961,20 @@ Note right of Bob: Bob thinks opt Perhaps a happy response Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(5); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should handle alt statements', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? @@ -1019,22 +985,21 @@ alt isWell Bob-->Alice: I am good thanks! else isSick Bob-->Alice: Feel sick... -end`; +end`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); actors.get('Bob').description = 'Bob'; - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(7); expect(messages[0].from).toBe('Alice'); expect(messages[1].from).toBe('Bob'); }); it('should handle alt statements with multiple elses', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? @@ -1047,41 +1012,40 @@ else isSick Bob-->Alice: Feel sick... else default Bob-->Alice: :-) -end`; - await mermaidAPI.parse(str); - const messages = diagram.db.getMessages(); +end`); + + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(9); expect(messages[1].from).toBe('Bob'); - expect(messages[2].type).toBe(diagram.db.LINETYPE.ALT_START); + expect(messages[2].type).toBe(diagram1.db.LINETYPE.ALT_START); expect(messages[3].from).toBe('Bob'); - expect(messages[4].type).toBe(diagram.db.LINETYPE.ALT_ELSE); + expect(messages[4].type).toBe(diagram1.db.LINETYPE.ALT_ELSE); expect(messages[5].from).toBe('Bob'); - expect(messages[6].type).toBe(diagram.db.LINETYPE.ALT_ELSE); + expect(messages[6].type).toBe(diagram1.db.LINETYPE.ALT_ELSE); expect(messages[7].from).toBe('Bob'); - expect(messages[8].type).toBe(diagram.db.LINETYPE.ALT_END); + expect(messages[8].type).toBe(diagram1.db.LINETYPE.ALT_END); }); it('should handle critical statements without options', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram critical Establish a connection to the DB Service-->DB: connect - end`; + end`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Service').description).toBe('Service'); expect(actors.get('DB').description).toBe('DB'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(3); - expect(messages[0].type).toBe(diagram.db.LINETYPE.CRITICAL_START); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.CRITICAL_START); expect(messages[1].from).toBe('Service'); - expect(messages[2].type).toBe(diagram.db.LINETYPE.CRITICAL_END); + expect(messages[2].type).toBe(diagram1.db.LINETYPE.CRITICAL_END); }); it('should handle critical statements with options', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram critical Establish a connection to the DB Service-->DB: connect @@ -1089,53 +1053,51 @@ sequenceDiagram Service-->Service: Log error option Credentials rejected Service-->Service: Log different error - end`; + end`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Service').description).toBe('Service'); expect(actors.get('DB').description).toBe('DB'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(7); - expect(messages[0].type).toBe(diagram.db.LINETYPE.CRITICAL_START); + expect(messages[0].type).toBe(diagram1.db.LINETYPE.CRITICAL_START); expect(messages[1].from).toBe('Service'); - expect(messages[2].type).toBe(diagram.db.LINETYPE.CRITICAL_OPTION); + expect(messages[2].type).toBe(diagram1.db.LINETYPE.CRITICAL_OPTION); expect(messages[3].from).toBe('Service'); - expect(messages[4].type).toBe(diagram.db.LINETYPE.CRITICAL_OPTION); + expect(messages[4].type).toBe(diagram1.db.LINETYPE.CRITICAL_OPTION); expect(messages[5].from).toBe('Service'); - expect(messages[6].type).toBe(diagram.db.LINETYPE.CRITICAL_END); + expect(messages[6].type).toBe(diagram1.db.LINETYPE.CRITICAL_END); }); it('should handle break statements', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Consumer-->API: Book something API-->BookingService: Start booking process break when the booking process fails API-->Consumer: show failure end - API-->BillingService: Start billing process`; + API-->BillingService: Start billing process`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Consumer').description).toBe('Consumer'); expect(actors.get('API').description).toBe('API'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(6); expect(messages[0].from).toBe('Consumer'); expect(messages[1].from).toBe('API'); - expect(messages[2].type).toBe(diagram.db.LINETYPE.BREAK_START); + expect(messages[2].type).toBe(diagram1.db.LINETYPE.BREAK_START); expect(messages[3].from).toBe('API'); - expect(messages[4].type).toBe(diagram.db.LINETYPE.BREAK_END); + expect(messages[4].type).toBe(diagram1.db.LINETYPE.BREAK_END); expect(messages[5].from).toBe('API'); }); it('should handle par statements a sequenceDiagram', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram par Parallel one Alice->>Bob: Hello Bob, how are you? @@ -1146,15 +1108,14 @@ Bob-->>Alice: Fine! and Parallel three Alice->>Bob: What do you think about it? Bob-->>Alice: It's good! -end`; +end`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(10); expect(messages[0].message).toBe('Parallel one'); @@ -1162,21 +1123,20 @@ end`; expect(messages[2].from).toBe('Bob'); }); it('it should handle par_over statements', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram par_over Parallel overlap Alice ->> Bob: Message Note left of Alice: Alice note Note right of Bob: Bob note -end`; +end`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('Alice').description).toBe('Alice'); expect(actors.get('Bob').description).toBe('Bob'); - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages.length).toBe(5); expect(messages[0].message).toBe('Parallel overlap'); @@ -1185,139 +1145,119 @@ end`; expect(messages[3].from).toBe('Bob'); }); it('should handle special characters in signals', async () => { - const str = 'sequenceDiagram\n' + 'Alice->Bob: -:<>,;# comment'; + const diagram1 = await Diagram.fromText('sequenceDiagram\n' + 'Alice->Bob: -:<>,;# comment'); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[0].message).toBe('-:<>,'); }); it('should handle special characters in notes', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? -Note right of Bob: -:<>,;# comment`; +Note right of Bob: -:<>,;# comment`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); }); it('should handle special characters in loop', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? loop -:<>,;# comment Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); }); it('should handle special characters in opt', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? opt -:<>,;# comment Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); }); it('should handle special characters in alt', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? alt -:<>,;# comment Bob-->Alice: I am good thanks! else ,<>:-#; comment Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); expect(messages[3].message).toBe(',<>:-'); }); it('should handle special characters in par', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? par -:<>,;# comment Bob-->Alice: I am good thanks! and ,<>:-#; comment Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe('-:<>,'); expect(messages[3].message).toBe(',<>:-'); }); it('should handle no-label loop', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? loop Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); }); it('should handle no-label opt', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? opt # comment Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); }); it('should handle no-label alt', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? alt;Bob-->Alice: I am good thanks! else # comment Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); expect(messages[3].message).toBe(''); expect(messages[4].message).toBe('I am good thanks!'); }); it('should handle no-label par', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram Alice->Bob: Hello Bob, how are you? par;Bob-->Alice: I am good thanks! and # comment Bob-->Alice: I am good thanks! -end`; +end`); - await mermaidAPI.parse(str); - - const messages = diagram.db.getMessages(); + const messages = diagram1.db.getMessages(); expect(messages[1].message).toBe(''); expect(messages[2].message).toBe('I am good thanks!'); expect(messages[3].message).toBe(''); @@ -1325,7 +1265,7 @@ end`; }); it('should handle links', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant a as Alice participant b as Bob @@ -1336,10 +1276,9 @@ links a: { "On-Call": "https://oncall.contoso.com/?svc=alice" } link a: Endpoint @ https://alice.contoso.com link a: Swagger @ https://swagger.contoso.com link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com -`; +`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('a').links.Repo).toBe('https://repo.contoso.com/'); expect(actors.get('b').links.Repo).toBe(undefined); expect(actors.get('a').links.Dashboard).toBe('https://dashboard.contoso.com/'); @@ -1353,17 +1292,16 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com it('should handle properties EXPERIMENTAL: USE WITH CAUTION', async () => { //Be aware that the syntax for "properties" is likely to be changed. - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant a as Alice participant b as Bob participant c as Charlie properties a: {"class": "internal-service-actor", "icon": "@clock"} properties b: {"class": "external-service-actor", "icon": "@computer"} -`; +`); - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect(actors.get('a').properties.class).toBe('internal-service-actor'); expect(actors.get('b').properties.class).toBe('external-service-actor'); expect(actors.get('a').properties.icon).toBe('@clock'); @@ -1372,7 +1310,7 @@ properties b: {"class": "external-service-actor", "icon": "@computer"} }); it('should handle box', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram box green Group 1 participant a as Alice @@ -1385,17 +1323,16 @@ links a: { "On-Call": "https://oncall.contoso.com/?svc=alice" } link a: Endpoint @ https://alice.contoso.com link a: Swagger @ https://swagger.contoso.com link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com -`; +`); - await mermaidAPI.parse(str); - const boxes = diagram.db.getBoxes(); + const boxes = diagram1.db.getBoxes(); expect(boxes[0].name).toEqual('Group 1'); expect(boxes[0].actorKeys).toEqual(['a', 'b']); expect(boxes[0].fill).toEqual('green'); }); it('should handle box without color', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram box Group 1 participant a as Alice @@ -1408,17 +1345,16 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com link a: Endpoint @ https://alice.contoso.com link a: Swagger @ https://swagger.contoso.com link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com - `; + `); - await mermaidAPI.parse(str); - const boxes = diagram.db.getBoxes(); + const boxes = diagram1.db.getBoxes(); expect(boxes[0].name).toEqual('Group 1'); expect(boxes[0].actorKeys).toEqual(['a', 'b']); expect(boxes[0].fill).toEqual('transparent'); }); it('should handle box without description', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram box Aqua participant a as Alice @@ -1431,17 +1367,16 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com link a: Endpoint @ https://alice.contoso.com link a: Swagger @ https://swagger.contoso.com link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com - `; + `); - await mermaidAPI.parse(str); - const boxes = diagram.db.getBoxes(); + const boxes = diagram1.db.getBoxes(); expect(boxes[0].name).toBeFalsy(); expect(boxes[0].actorKeys).toEqual(['a', 'b']); expect(boxes[0].fill).toEqual('Aqua'); }); it('should handle simple actor creation', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant a as Alice a ->>b: Hello Bob? @@ -1450,10 +1385,9 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com c ->> b: Hello b? create actor d as Donald a ->> d: Hello Donald? - `; - await mermaidAPI.parse(str); - const actors = diagram.db.getActors(); - const createdActors = diagram.db.getCreatedActors(); + `); + const actors = diagram1.db.getActors(); + const createdActors = diagram1.db.getCreatedActors(); expect(actors.get('c').name).toEqual('c'); expect(actors.get('c').description).toEqual('c'); expect(actors.get('c').type).toEqual('participant'); @@ -1464,7 +1398,7 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com expect(createdActors.get('d')).toEqual(3); }); it('should handle simple actor destruction', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant a as Alice a ->>b: Hello Bob? @@ -1473,14 +1407,13 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com b ->> c: Where is Alice? destroy c b ->> c: Where are you? - `; - await mermaidAPI.parse(str); - const destroyedActors = diagram.db.getDestroyedActors(); + `); + const destroyedActors = diagram1.db.getDestroyedActors(); expect(destroyedActors.get('a')).toEqual(1); expect(destroyedActors.get('c')).toEqual(3); }); it('should handle the creation and destruction of the same actor', async () => { - const str = ` + const diagram2 = await Diagram.fromText(` sequenceDiagram a ->>b: Hello Bob? create participant c @@ -1488,10 +1421,9 @@ link a: Tests @ https://tests.contoso.com/?svc=alice@contoso.com c ->> b: Hello b? destroy c b ->> c : Bye c ! - `; - await mermaidAPI.parse(str); - const createdActors = diagram.db.getCreatedActors(); - const destroyedActors = diagram.db.getDestroyedActors(); + `); + const createdActors = diagram2.db.getCreatedActors(); + const destroyedActors = diagram2.db.getDestroyedActors(); expect(createdActors.get('c')).toEqual(1); expect(destroyedActors.get('c')).toEqual(3); }); @@ -1571,7 +1503,7 @@ describe('when checking the bounds in a sequenceDiagram', function () { expect(bounds.stopx).toBe(300); expect(bounds.stopy).toBe(400); }); - it('should handle multiple loops withtout expanding the bounds', () => { + it('should handle multiple loops without expanding the bounds', () => { diagram.renderer.bounds.insert(100, 100, 1000, 1000); diagram.renderer.bounds.verticalPos = 200; diagram.renderer.bounds.newLoop(); @@ -1676,11 +1608,11 @@ it should handle one actor, when textPlacement is ${textPlacement}`, async () => sequenceDiagram participant Alice`; - await mermaidAPI.parse(str); + const diagram1 = await Diagram.fromText(str); // diagram.renderer.setConf(mermaidAPI.getConfig().sequence); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds } = diagram.renderer.bounds.getBounds(); + const { bounds } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); @@ -1688,16 +1620,14 @@ participant Alice`; }); }); it('should handle same actor with different whitespace properly', async () => { - const str = ` + const diagram1 = await Diagram.fromText(` sequenceDiagram participant Alice participant Alice participant Alice -`; +`); - await mermaidAPI.parse(str); - - const actors = diagram.db.getActors(); + const actors = diagram1.db.getActors(); expect([...actors.keys()]).toEqual(['Alice']); }); it('should handle one actor and a centered note', async () => { @@ -1706,12 +1636,12 @@ sequenceDiagram participant Alice Note over Alice: Alice thinks `; + const diagram1 = await Diagram.fromText(str); expect(mermaidAPI.getConfig().sequence.mirrorActors).toBeFalsy(); - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); @@ -1724,10 +1654,10 @@ sequenceDiagram participant Alice Note left of Alice: Alice thinks`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); @@ -1740,10 +1670,10 @@ sequenceDiagram participant Alice Note right of Alice: Alice thinks`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width / 2 + conf.actorMargin / 2 + conf.width); @@ -1755,10 +1685,10 @@ Note right of Alice: Alice thinks`; sequenceDiagram Alice->Bob: Hello Bob, how are you?`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); @@ -1773,10 +1703,10 @@ participant Bob end Alice->Bob: Hello Bob, how are you?`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin + conf.boxTextMargin * 2); @@ -1787,11 +1717,11 @@ Alice->Bob: Hello Bob, how are you?`; %%{init: {'logLevel': 0}}%% sequenceDiagram Alice->Bob: Hello Bob, how are you?`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); const mermaid = mermaidAPI.getConfig(); expect(mermaid.logLevel).toBe(0); expect(bounds.startx).toBe(0); @@ -1803,16 +1733,15 @@ Alice->Bob: Hello Bob, how are you?`; const str = ` %%{init: { 'logLevel': 0}}%% sequenceDiagram -%%{ -wrap -}%% +%%{wrap}%% Alice->Bob: Hello Bob, how are you?`; await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const msgs = diagram.db.getMessages(); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const msgs = diagram1.db.getMessages(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); const mermaid = mermaidAPI.getConfig(); expect(mermaid.logLevel).toBe(0); expect(bounds.startx).toBe(0); @@ -1828,11 +1757,11 @@ Alice->Bob: Hello Bob, how are you? Note over Alice,Bob: Looks Note over Bob,Alice: Looks back `; + const diagram1 = await Diagram.fromText(str); // mermaidAPI.initialize({logLevel:0}) - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); @@ -1844,10 +1773,10 @@ sequenceDiagram Alice->Bob: Hello Bob, how are you? Bob->Alice: Fine!`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width * 2 + conf.actorMargin); @@ -1860,10 +1789,10 @@ Alice->Bob: Hello Bob, how are you? Note right of Bob: Bob thinks Bob->Alice: Fine!`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); @@ -1879,10 +1808,10 @@ Alice->Bob: Hello Bob, how are you? Note left of Alice: Bob thinks Bob->Alice: Fine!`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); @@ -1896,11 +1825,11 @@ Alice->>Bob:wrap: Hello Bob, how are you? If you are not available right now, I Note left of Alice: Bob thinks Bob->>Alice: Fine!`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); - const msgs = diagram.db.getMessages(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); + const msgs = diagram1.db.getMessages(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); expect(msgs[0].wrap).toBe(true); @@ -1918,10 +1847,11 @@ Note left of Alice: Bob thinks Bob->>Alice: Fine!`; await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); - const msgs = diagram.db.getMessages(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); + const msgs = diagram1.db.getMessages(); const mermaid = mermaidAPI.getConfig(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); @@ -1941,10 +1871,12 @@ Note left of Alice: Bob thinks Bob->>Alice: Fine!`; await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); - const { bounds, models } = diagram.renderer.bounds.getBounds(); - const msgs = diagram.db.getMessages(); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); + + const { bounds, models } = diagram1.renderer.bounds.getBounds(); + const msgs = diagram1.db.getMessages(); const mermaid = mermaidAPI.getConfig(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); @@ -1963,10 +1895,11 @@ Note left of Alice: Bob thinks Bob->>Alice: Fine!`; // mermaidAPI.initialize({ logLevel: 0 }); await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); - const msgs = diagram.db.getMessages(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); + const msgs = diagram1.db.getMessages(); const mermaid = mermaidAPI.getConfig(); expect(bounds.startx).toBe(-(conf.width / 2) - conf.actorMargin / 2); expect(bounds.starty).toBe(0); @@ -1986,10 +1919,10 @@ Alice->Bob: Hello Bob, how are you? loop Cheers Bob->Alice: Fine! end`; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); @@ -2004,9 +1937,9 @@ end`; Bob->Alice: I feel surrounded by darkness end `; - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const diagram1 = await Diagram.fromText(str); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); @@ -2050,11 +1983,11 @@ describe('when rendering a sequenceDiagram with actor mirror activated', () => { const str = ` sequenceDiagram participant Alice`; - diagram.renderer.bounds.init(); - await mermaidAPI.parse(str); - await diagram.renderer.draw(str, 'tst', '1.2.3', diagram); + const diagram1 = await Diagram.fromText(str); + diagram1.renderer.bounds.init(); + await diagram1.renderer.draw(str, 'tst', '1.2.3', diagram1); - const { bounds, models } = diagram.renderer.bounds.getBounds(); + const { bounds, models } = diagram1.renderer.bounds.getBounds(); expect(bounds.startx).toBe(0); expect(bounds.starty).toBe(0); expect(bounds.stopx).toBe(conf.width); From ffa7804af0701b3d044d6794e36bd9132d6c7e8d Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Wed, 12 Feb 2025 16:04:22 +0530 Subject: [PATCH 294/492] added changeset --- .changeset/silver-olives-marry.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silver-olives-marry.md diff --git a/.changeset/silver-olives-marry.md b/.changeset/silver-olives-marry.md new file mode 100644 index 000000000..d709b17ba --- /dev/null +++ b/.changeset/silver-olives-marry.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +fix: `mermaidAPI.getDiagramFromText()` now returns a new different db for each sequence diagram. Added unique IDs for messages. From 6ca8f46d3710e32972544716c9de6f19ad106bae Mon Sep 17 00:00:00 2001 From: saurabhg772244 Date: Wed, 12 Feb 2025 16:15:06 +0530 Subject: [PATCH 295/492] Updated unit tests. --- packages/mermaid/src/mermaidAPI.spec.ts | 29 +++++++++---------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts index e51d419d3..1a2289df2 100644 --- a/packages/mermaid/src/mermaidAPI.spec.ts +++ b/packages/mermaid/src/mermaidAPI.spec.ts @@ -67,10 +67,11 @@ vi.mock('stylis', () => { import { compile, serialize } from 'stylis'; import { Diagram } from './Diagram.js'; -import { decodeEntities, encodeEntities } from './utils.js'; -import { toBase64 } from './utils/base64.js'; import { ClassDB } from './diagrams/class/classDb.js'; import { FlowDB } from './diagrams/flowchart/flowDb.js'; +import { SequenceDB } from './diagrams/sequence/sequenceDb.js'; +import { decodeEntities, encodeEntities } from './utils.js'; +import { toBase64 } from './utils/base64.js'; /** * @see https://vitest.dev/guide/mocking.html Mock part of a module @@ -899,28 +900,18 @@ graph TD;A--x|text including URL space|B;`) ); const sequenceDiagram2 = await mermaidAPI.getDiagramFromText( `sequenceDiagram + actor A1 Alice->>+John: Hello John, how are you? Alice->>+John: John, can you hear me? John-->>-Alice: Hi Alice, I can hear you! John-->>-Alice: I feel great!` ); - // Since sequenceDiagram will return same Db object each time, we can compare the db to be same. - expect(sequenceDiagram1.db).toBe(sequenceDiagram2.db); + + // Since sequenceDiagram will return new Db object each time, we can compare the db to be different. + expect(sequenceDiagram1.db).not.toBe(sequenceDiagram2.db); + assert(sequenceDiagram1.db instanceof SequenceDB); + assert(sequenceDiagram2.db instanceof SequenceDB); + expect(sequenceDiagram1.db.getActors()).not.toEqual(sequenceDiagram2.db.getActors()); }); }); - - // Sequence Diagram currently uses a singleton DB, so this test will fail - it.fails('should not modify db when rendering different sequence diagrams', async () => { - const sequenceDiagram1 = await mermaidAPI.getDiagramFromText( - `sequenceDiagram - Alice->>Bob: Hello Bob, how are you? - Bob-->>John: How about you John?` - ); - const sequenceDiagram2 = await mermaidAPI.getDiagramFromText( - `sequenceDiagram - Alice->>Bob: Hello Bob, how are you? - Bob-->>John: How about you John?` - ); - expect(sequenceDiagram1.db).not.toBe(sequenceDiagram2.db); - }); }); From 5366e8b69251493d107dda743bb330536a738929 Mon Sep 17 00:00:00 2001 From: pranavm2109 Date: Wed, 12 Feb 2025 15:19:37 -0500 Subject: [PATCH 296/492] added first draft of cypress visual tests Co-authored-by: Shahir Ahmed --- cypress/integration/rendering/journey.spec.js | 80 ++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/cypress/integration/rendering/journey.spec.js b/cypress/integration/rendering/journey.spec.js index d8bef6d1b..8e37c8669 100644 --- a/cypress/integration/rendering/journey.spec.js +++ b/cypress/integration/rendering/journey.spec.js @@ -47,7 +47,7 @@ section Checkout from website const style = svg.attr('style'); expect(style).to.match(/^max-width: [\d.]+px;$/); const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join('')); - expect(maxWidthValue).to.eq(700); + //expect(maxWidthValue).to.eq(700); }); }); @@ -63,4 +63,82 @@ section Checkout from website { journey: { useMaxWidth: false } } ); }); + + it('should maintain consistent distance between widest legend label and diagram', () => { + renderGraph( + `journey + title Web hook life cycle + section Darkoob + Make preBuilt:5: Darkoob user + register slug : 5: Darkoob userf + Map slug to a Prebuilt Job:5: Darkoob user + section External Service + set Darkoob slug as hook for an Event : 5 : admin Exjjjnjjjj qwerty + listen to the events : 5 : External Service + call darkoob endpoint : 5 : External Service + section Darkoob + check for inputs : 5 : DarkoobAPI + run the prebuilt job : 5 : DarkoobAPI + `, + { journey: { useMaxWidth: true } } + ); + + let rightEdgeXInitial, leftEdgeXInitial, rightEdgeXFinal, leftEdgeXFinal, initialDifference, finalDifference; + + cy.contains('tspan', 'admin Exjjjnjjjj qwerty') + .invoke('getBBox') + .then((bbox) => { + rightEdgeXInitial = bbox.x + bbox.width; + cy.log(`Right edge x-coordinate: ${rightEdgeXInitial}`); + }); + + cy.contains('div.label', 'Make preBuilt') + .invoke('getBoundingClientRect') + .then((rect) => { + leftEdgeXInitial = rect.left; + cy.log(`Left edge x-coordinate: ${leftEdgeXInitial}`); + initialDifference = leftEdgeXInitial - rightEdgeXInitial; + cy.log(`Initial Difference: ${initialDifference}`); + }); + + // renderGraph( + // `journey + // title Web hook life cycle + // section Darkoob + // Make preBuilt:5: Darkoob user + // register slug : 5: Darkoob userf deliberately increasing the size of this label to check if distance between legend and diagram is maintained + // Map slug to a Prebuilt Job:5: Darkoob user + // section External Service + // set Darkoob slug as hook for an Event : 5 : admin Exjjjnjjjj qwerty + // listen to the events : 5 : External Service + // call darkoob endpoint : 5 : External Service + // section Darkoob + // check for inputs : 5 : DarkoobAPI + // run the prebuilt job : 5 : DarkoobAPI + // `, + // { journey: { useMaxWidth: true } } + // ); + + // cy.contains('tspan', 'Darkoob userf deliberately increasing the size of this label to check if distance between legend and diagram is maintained') + // .invoke('getBBox') + // .then((bbox) => { + // rightEdgeXFinal = bbox.x + bbox.width; + // cy.log(`Right edge x-coordinate final: ${rightEdgeXFinal}`); + // }); + + // cy.contains('div.label', 'Make preBuilt') + // .invoke('getBoundingClientRect') + // .then((rect) => { + // leftEdgeXFinal = rect.left; + // cy.log(`Left edge x-coordinate final: ${leftEdgeXFinal}`); + // finalDifference = leftEdgeXFinal - rightEdgeXFinal; + // cy.log(`Final Difference: ${finalDifference}`); + // }); + + // expect(initialDifference).toEqual(finalDifference); + + + }); + + }); From 72cf84cb40322baec2987cbe27baf2eaf3cc5537 Mon Sep 17 00:00:00 2001 From: Steph <35910788+huynhicode@users.noreply.github.com> Date: Wed, 12 Feb 2025 14:02:01 -0800 Subject: [PATCH 297/492] wip --- .../src/docs/.vitepress/components/TopBar.vue | 118 ++++++++++++++++-- 1 file changed, 107 insertions(+), 11 deletions(-) diff --git a/packages/mermaid/src/docs/.vitepress/components/TopBar.vue b/packages/mermaid/src/docs/.vitepress/components/TopBar.vue index ff0b344c5..51fd413cc 100644 --- a/packages/mermaid/src/docs/.vitepress/components/TopBar.vue +++ b/packages/mermaid/src/docs/.vitepress/components/TopBar.vue @@ -1,40 +1,136 @@