diff --git a/.build/common.ts b/.build/common.ts index 86ccd15d1..efd0e3a85 100644 --- a/.build/common.ts +++ b/.build/common.ts @@ -33,4 +33,9 @@ export const packageOptions = { packageName: 'mermaid-layout-elk', file: 'layouts.ts', }, + examples: { + name: 'mermaid-examples', + packageName: 'examples', + file: 'index.ts', + }, } as const satisfies Record; diff --git a/.build/types.ts b/.build/types.ts index 9dec05a68..1d439d87c 100644 --- a/.build/types.ts +++ b/.build/types.ts @@ -10,13 +10,16 @@ const buildType = (packageName: string) => { console.log(out.toString()); } } catch (e) { - console.error(e); if (e.stdout.length > 0) { console.error(e.stdout.toString()); } if (e.stderr.length > 0) { console.error(e.stderr.toString()); } + // Exit the build process if we are in CI + if (process.env.CI) { + throw new Error(`Failed to build types for ${packageName}`); + } } }; diff --git a/.changeset/better-days-bow.md b/.changeset/better-days-bow.md deleted file mode 100644 index b1baf994b..000000000 --- a/.changeset/better-days-bow.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'mermaid': minor -'@mermaid-js/parser': minor ---- - -Adding support for the new diagram type nested treemap diff --git a/.changeset/gold-olives-rule.md b/.changeset/gold-olives-rule.md new file mode 100644 index 000000000..6fe343774 --- /dev/null +++ b/.changeset/gold-olives-rule.md @@ -0,0 +1,5 @@ +--- +'mermaid': minor +--- + +feat: Add `getRegisteredDiagramsMetadata` to `mermaid`, which returns all the registered diagram IDs in mermaid diff --git a/.changeset/platinum-olives-rule.md b/.changeset/platinum-olives-rule.md new file mode 100644 index 000000000..af70d6538 --- /dev/null +++ b/.changeset/platinum-olives-rule.md @@ -0,0 +1,5 @@ +--- +'@mermaid-js/examples': minor +--- + +feat: Add examples for diagrams in the `@mermaid-js/examples` package diff --git a/.changeset/pretty-falcons-say.md b/.changeset/pretty-falcons-say.md new file mode 100644 index 000000000..f1a0a95c3 --- /dev/null +++ b/.changeset/pretty-falcons-say.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +chore: Updated TreeMapDB to use class based approach diff --git a/.changeset/slimy-peaches-win.md b/.changeset/slimy-peaches-win.md new file mode 100644 index 000000000..a0b902e29 --- /dev/null +++ b/.changeset/slimy-peaches-win.md @@ -0,0 +1,7 @@ +--- +'@mermaid-js/examples': patch +'mermaid': patch +'@mermaid-js/parser': patch +--- + +chore: Move packet diagram out of beta diff --git a/.changeset/tangy-ghosts-watch.md b/.changeset/tangy-ghosts-watch.md new file mode 100644 index 000000000..9d69de4d0 --- /dev/null +++ b/.changeset/tangy-ghosts-watch.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +fix: adjust sequence diagram title positioning to prevent overlap with top border in Safari diff --git a/.changeset/weak-files-stare.md b/.changeset/weak-files-stare.md new file mode 100644 index 000000000..c1a8d8f3a --- /dev/null +++ b/.changeset/weak-files-stare.md @@ -0,0 +1,5 @@ +--- +'mermaid': patch +--- + +chore: Update MindmapDB to use class based approach diff --git a/.changeset/wild-areas-lick.md b/.changeset/wild-areas-lick.md new file mode 100644 index 000000000..3653c9b3d --- /dev/null +++ b/.changeset/wild-areas-lick.md @@ -0,0 +1,7 @@ +--- +'mermaid': patch +--- + +fix(timeline): fix loading `leftMargin` from config + +The `timeline.leftMargin` config value should now correctly control the size of the left margin, instead of being ignored. diff --git a/.github/lychee.toml b/.github/lychee.toml index 7e23b2351..fbe7a71a2 100644 --- a/.github/lychee.toml +++ b/.github/lychee.toml @@ -46,9 +46,15 @@ exclude = [ # Drupal 403 "https://(www.)?drupal.org", +# Phbpp 403 +"https://(www.)?phpbb.com", + # Swimm returns 404, even though the link is valid "https://docs.swimm.io", +# Certificate Error +"https://noteshub.app", + # Timeout "https://huehive.co", "https://foswiki.org", diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index 5b1066661..4d2d43408 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -42,4 +42,4 @@ jobs: working-directory: ./packages/mermaid run: pnpm run docs:build - - uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main + - uses: autofix-ci/action@635ffb0c9798bd160680f18fd73371e355b85f27 # main diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml index 44860845f..1d1ed30d6 100644 --- a/.github/workflows/pr-labeler.yml +++ b/.github/workflows/pr-labeler.yml @@ -29,3 +29,29 @@ jobs: disable-releaser: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Add "Sponsored by MermaidChart" label + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const prNumber = context.payload.pull_request.number; + const { data: commits } = await github.rest.pulls.listCommits({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber, + }); + + const isSponsored = commits.every( + (c) => c.commit.author.email?.endsWith('@mermaidchart.com') + ); + + if (isSponsored) { + console.log('PR is sponsored. Adding label.'); + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + labels: ['Sponsored by MermaidChart'], + }); + } diff --git a/__mocks__/d3.ts b/__mocks__/d3.ts deleted file mode 100644 index 97bd01665..000000000 --- a/__mocks__/d3.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { MockedD3 } from '../packages/mermaid/src/tests/MockedD3.js'; - -export const select = function () { - return new MockedD3(); -}; - -export const selectAll = function () { - return new MockedD3(); -}; - -export const curveBasis = 'basis'; -export const curveLinear = 'linear'; -export const curveCardinal = 'cardinal'; diff --git a/cypress.config.ts b/cypress.config.ts index 50ea940e9..cc176b330 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -26,7 +26,10 @@ export default eyesPlugin( config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true'; if (config.env.useArgos) { - registerArgosTask(on, config); + registerArgosTask(on, config, { + // Enable upload to Argos only when it runs on CI. + uploadToArgos: !!process.env.CI, + }); } else { addMatchImageSnapshotPlugin(on, config); } diff --git a/cypress/integration/rendering/packet.spec.ts b/cypress/integration/rendering/packet.spec.ts index c64538875..2a32b9d07 100644 --- a/cypress/integration/rendering/packet.spec.ts +++ b/cypress/integration/rendering/packet.spec.ts @@ -1,7 +1,7 @@ import { imgSnapshotTest } from '../../helpers/util'; describe('packet structure', () => { - it('should render a simple packet diagram', () => { + it('should render a simple packet-beta diagram', () => { imgSnapshotTest( `packet-beta title Hello world @@ -10,9 +10,18 @@ describe('packet structure', () => { ); }); + it('should render a simple packet diagram', () => { + imgSnapshotTest( + `packet + title Hello world + 0-10: "hello" +` + ); + }); + it('should render a simple packet diagram without ranges', () => { imgSnapshotTest( - `packet-beta + `packet 0: "h" 1: "i" ` @@ -21,7 +30,7 @@ describe('packet structure', () => { it('should render a complex packet diagram', () => { imgSnapshotTest( - `packet-beta + `packet 0-15: "Source Port" 16-31: "Destination Port" 32-63: "Sequence Number" @@ -52,7 +61,7 @@ describe('packet structure', () => { packet: showBits: false --- - packet-beta + packet 0-15: "Source Port" 16-31: "Destination Port" 32-63: "Sequence Number" diff --git a/cypress/timings.json b/cypress/timings.json index 03eb22b98..05263ad9f 100644 --- a/cypress/timings.json +++ b/cypress/timings.json @@ -2,35 +2,35 @@ "durations": [ { "spec": "cypress/integration/other/configuration.spec.js", - "duration": 6130 + "duration": 5672 }, { "spec": "cypress/integration/other/external-diagrams.spec.js", - "duration": 1974 + "duration": 1990 }, { "spec": "cypress/integration/other/ghsa.spec.js", - "duration": 3308 + "duration": 3186 }, { "spec": "cypress/integration/other/iife.spec.js", - "duration": 1877 + "duration": 1948 }, { "spec": "cypress/integration/other/interaction.spec.js", - "duration": 10902 + "duration": 11938 }, { "spec": "cypress/integration/other/rerender.spec.js", - "duration": 1836 + "duration": 1932 }, { "spec": "cypress/integration/other/xss.spec.js", - "duration": 26467 + "duration": 27237 }, { "spec": "cypress/integration/rendering/appli.spec.js", - "duration": 3129 + "duration": 3170 }, { "spec": "cypress/integration/rendering/architecture.spec.ts", @@ -38,147 +38,147 @@ }, { "spec": "cypress/integration/rendering/block.spec.js", - "duration": 16230 + "duration": 17390 }, { "spec": "cypress/integration/rendering/c4.spec.js", - "duration": 5231 + "duration": 5296 }, { "spec": "cypress/integration/rendering/classDiagram-elk-v3.spec.js", - "duration": 38113 + "duration": 39004 }, { "spec": "cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js", - "duration": 36423 + "duration": 37653 }, { "spec": "cypress/integration/rendering/classDiagram-v2.spec.js", - "duration": 22509 + "duration": 23278 }, { "spec": "cypress/integration/rendering/classDiagram-v3.spec.js", - "duration": 34933 + "duration": 36645 }, { "spec": "cypress/integration/rendering/classDiagram.spec.js", - "duration": 14681 + "duration": 15418 }, { "spec": "cypress/integration/rendering/conf-and-directives.spec.js", - "duration": 8877 + "duration": 9684 }, { "spec": "cypress/integration/rendering/current.spec.js", - "duration": 2517 + "duration": 2570 }, { "spec": "cypress/integration/rendering/erDiagram-unified.spec.js", - "duration": 81226 + "duration": 84687 }, { "spec": "cypress/integration/rendering/erDiagram.spec.js", - "duration": 14211 + "duration": 14819 }, { "spec": "cypress/integration/rendering/errorDiagram.spec.js", - "duration": 3355 + "duration": 3371 }, { "spec": "cypress/integration/rendering/flowchart-elk.spec.js", - "duration": 38857 + "duration": 39925 }, { "spec": "cypress/integration/rendering/flowchart-handDrawn.spec.js", - "duration": 28570 + "duration": 34694 }, { "spec": "cypress/integration/rendering/flowchart-icon.spec.js", - "duration": 6902 + "duration": 7137 }, { "spec": "cypress/integration/rendering/flowchart-shape-alias.spec.ts", - "duration": 23075 + "duration": 24740 }, { "spec": "cypress/integration/rendering/flowchart-v2.spec.js", - "duration": 40514 + "duration": 42077 }, { "spec": "cypress/integration/rendering/flowchart.spec.js", - "duration": 28611 + "duration": 30642 }, { "spec": "cypress/integration/rendering/gantt.spec.js", - "duration": 16605 + "duration": 18085 }, { "spec": "cypress/integration/rendering/gitGraph.spec.js", - "duration": 47636 + "duration": 50107 }, { "spec": "cypress/integration/rendering/iconShape.spec.ts", - "duration": 262219 + "duration": 276279 }, { "spec": "cypress/integration/rendering/imageShape.spec.ts", - "duration": 54111 + "duration": 56505 }, { "spec": "cypress/integration/rendering/info.spec.ts", - "duration": 3006 + "duration": 3036 }, { "spec": "cypress/integration/rendering/journey.spec.js", - "duration": 6858 + "duration": 6889 }, { "spec": "cypress/integration/rendering/kanban.spec.ts", - "duration": 7281 + "duration": 7353 }, { "spec": "cypress/integration/rendering/katex.spec.js", - "duration": 3579 + "duration": 3580 }, { "spec": "cypress/integration/rendering/marker_unique_id.spec.js", - "duration": 2448 + "duration": 2508 }, { "spec": "cypress/integration/rendering/mindmap.spec.ts", - "duration": 10618 + "duration": 10939 }, { "spec": "cypress/integration/rendering/newShapes.spec.ts", - "duration": 140874 + "duration": 149102 }, { "spec": "cypress/integration/rendering/oldShapes.spec.ts", - "duration": 108015 + "duration": 113987 }, { "spec": "cypress/integration/rendering/packet.spec.ts", - "duration": 4241 + "duration": 4060 }, { "spec": "cypress/integration/rendering/pie.spec.ts", - "duration": 5645 + "duration": 5715 }, { "spec": "cypress/integration/rendering/quadrantChart.spec.js", - "duration": 8524 + "duration": 8945 }, { "spec": "cypress/integration/rendering/radar.spec.js", - "duration": 5203 + "duration": 5337 }, { "spec": "cypress/integration/rendering/requirement.spec.js", - "duration": 2635 + "duration": 2643 }, { "spec": "cypress/integration/rendering/requirementDiagram-unified.spec.js", - "duration": 50512 + "duration": 52072 }, { "spec": "cypress/integration/rendering/sankey.spec.ts", @@ -186,31 +186,35 @@ }, { "spec": "cypress/integration/rendering/sequencediagram.spec.js", - "duration": 34559 + "duration": 35721 }, { "spec": "cypress/integration/rendering/stateDiagram-v2.spec.js", - "duration": 24421 + "duration": 26030 }, { "spec": "cypress/integration/rendering/stateDiagram.spec.js", - "duration": 15316 + "duration": 16333 }, { "spec": "cypress/integration/rendering/theme.spec.js", - "duration": 28240 + "duration": 29287 }, { "spec": "cypress/integration/rendering/timeline.spec.ts", - "duration": 6808 + "duration": 8491 + }, + { + "spec": "cypress/integration/rendering/treemap.spec.ts", + "duration": 12291 }, { "spec": "cypress/integration/rendering/xyChart.spec.js", - "duration": 19359 + "duration": 20651 }, { "spec": "cypress/integration/rendering/zenuml.spec.js", - "duration": 3164 + "duration": 3218 } ] } diff --git a/demos/er-multiline.html b/demos/er-multiline.html index e85b320aa..97cfcc934 100644 --- a/demos/er-multiline.html +++ b/demos/er-multiline.html @@ -4,7 +4,7 @@
-      packet-beta
+      packet
         0-15: "Source Port"
         16-31: "Destination Port"
         32-63: "Sequence Number"
@@ -44,7 +44,7 @@
         packet:
           showBits: false
       ---
-      packet-beta
+      packet
         0-15: "Source Port"
         16-31: "Destination Port"
         32-63: "Sequence Number"
@@ -70,7 +70,7 @@
       config:
         theme: forest
       ---
-      packet-beta
+      packet
         title Forest theme
         0-15: "Source Port"
         16-31: "Destination Port"
@@ -97,7 +97,7 @@
       config:
         theme: dark
       ---
-      packet-beta
+      packet
         title Dark theme
         0-15: "Source Port"
         16-31: "Destination Port"
diff --git a/docs/community/contributing.md b/docs/community/contributing.md
index 596b26430..ce010b316 100644
--- a/docs/community/contributing.md
+++ b/docs/community/contributing.md
@@ -301,7 +301,7 @@ If you are adding a feature, you will definitely need to add tests. Depending on
 
 Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run.
 
-Unit tests are mandatory for all code except the renderers. (The renderers are tested with integration tests.)
+Unit tests are mandatory for all code except the layout tests. (The layouts are tested with integration tests.)
 
 We use [Vitest](https://vitest.dev) to run unit tests.
 
@@ -327,6 +327,30 @@ When using Docker prepend your command with `./run`:
 ./run pnpm test
 ```
 
+##### Testing the DOM
+
+One can use `jsdomIt` to test any part of Mermaid that interacts with the DOM, as long as it is not related to the layout.
+
+The function `jsdomIt` ([developed in utils.ts](../../tests/util.ts)) overrides `it` from `vitest`, and creates a pseudo-browser environment that works almost like the real deal for the duration of the test. It uses JSDOM to create a DOM, and adds objects `window` and `document` to `global` to mock the browser environment.
+
+> \[!NOTE]
+> The layout cannot work in `jsdomIt` tests because JSDOM has no rendering engine, hence the pseudo-browser environment.
+
+Example :
+
+```typescript
+import { ensureNodeFromSelector, jsdomIt } from './tests/util.js';
+
+jsdomIt('should add element "thing" in the SVG', ({ svg }) => {
+  // Code in this block runs in a pseudo-browser environment
+  addThing(svg); // The svg item is the D3 selection of the SVG node
+  const svgNode = ensureNodeFromSelector('svg'); // Retrieve the DOM node using the DOM API
+  expect(svgNode.querySelector('thing')).not.toBeNull(); // Test the structure of the SVG
+});
+```
+
+They can be used to test any method that interacts with the DOM, including for testing renderers. For renderers, additional integration testing is necessary to test the layout though.
+
 #### Integration / End-to-End (E2E) Tests
 
 These test the rendering and visual appearance of the diagrams.
diff --git a/docs/community/new-diagram.md b/docs/community/new-diagram.md
index c214afa64..847f3ef35 100644
--- a/docs/community/new-diagram.md
+++ b/docs/community/new-diagram.md
@@ -111,3 +111,13 @@ const themes = {
 ```
 
 The actual options and values for the colors are defined in **src/theme/theme-\[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups.
+
+## Examples
+
+The `@mermaid-js/examples` package contains a collection of examples that are used by tools like mermaid.live to help users get started with the new diagram.
+
+You can duplicate an existing diagram example file, eg: `packages/examples/src/examples/flowchart.ts`, and modify it with details specific to your diagram.
+
+Then you can import the example in the `packages/examples/src/index.ts` file and add it to the `examples` array.
+
+Each diagram should have at least one example, and that should be marked as default. It is good to add more examples to showcase different features of the diagram.
diff --git a/docs/config/setup/mermaid/interfaces/ExternalDiagramDefinition.md b/docs/config/setup/mermaid/interfaces/ExternalDiagramDefinition.md
index 34e475388..35efcddeb 100644
--- a/docs/config/setup/mermaid/interfaces/ExternalDiagramDefinition.md
+++ b/docs/config/setup/mermaid/interfaces/ExternalDiagramDefinition.md
@@ -10,7 +10,7 @@
 
 # Interface: ExternalDiagramDefinition
 
-Defined in: [packages/mermaid/src/diagram-api/types.ts:99](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L99)
+Defined in: [packages/mermaid/src/diagram-api/types.ts:94](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L94)
 
 ## Properties
 
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:99](https://github.com/me
 
 > **detector**: `DiagramDetector`
 
-Defined in: [packages/mermaid/src/diagram-api/types.ts:101](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L101)
+Defined in: [packages/mermaid/src/diagram-api/types.ts:96](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L96)
 
 ---
 
@@ -26,7 +26,7 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:101](https://github.com/m
 
 > **id**: `string`
 
-Defined in: [packages/mermaid/src/diagram-api/types.ts:100](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L100)
+Defined in: [packages/mermaid/src/diagram-api/types.ts:95](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L95)
 
 ---
 
@@ -34,4 +34,4 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:100](https://github.com/m
 
 > **loader**: `DiagramLoader`
 
-Defined in: [packages/mermaid/src/diagram-api/types.ts:102](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L102)
+Defined in: [packages/mermaid/src/diagram-api/types.ts:97](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L97)
diff --git a/docs/config/setup/mermaid/interfaces/Mermaid.md b/docs/config/setup/mermaid/interfaces/Mermaid.md
index 2e5cc3571..fd15b306b 100644
--- a/docs/config/setup/mermaid/interfaces/Mermaid.md
+++ b/docs/config/setup/mermaid/interfaces/Mermaid.md
@@ -10,7 +10,7 @@
 
 # Interface: Mermaid
 
-Defined in: [packages/mermaid/src/mermaid.ts:418](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L418)
+Defined in: [packages/mermaid/src/mermaid.ts:429](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L429)
 
 ## Properties
 
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:418](https://github.com/mermaid-js/
 
 > **contentLoaded**: () => `void`
 
-Defined in: [packages/mermaid/src/mermaid.ts:436](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L436)
+Defined in: [packages/mermaid/src/mermaid.ts:447](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L447)
 
 \##contentLoaded Callback function that is called when page is loaded. This functions fetches
 configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
@@ -34,7 +34,7 @@ page.
 
 > **detectType**: (`text`, `config`?) => `string`
 
-Defined in: [packages/mermaid/src/mermaid.ts:438](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L438)
+Defined in: [packages/mermaid/src/mermaid.ts:449](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L449)
 
 Detects the type of the graph text.
 
@@ -86,11 +86,28 @@ A graph definition key
 
 ---
 
+### getRegisteredDiagramsMetadata()
+
+> **getRegisteredDiagramsMetadata**: () => `Pick`<[`ExternalDiagramDefinition`](ExternalDiagramDefinition.md), `"id"`>\[]
+
+Defined in: [packages/mermaid/src/mermaid.ts:451](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L451)
+
+Gets the metadata for all registered diagrams.
+Currently only the id is returned.
+
+#### Returns
+
+`Pick`<[`ExternalDiagramDefinition`](ExternalDiagramDefinition.md), `"id"`>\[]
+
+An array of objects with the id of the diagram.
+
+---
+
 ### ~~init()~~
 
 > **init**: (`config`?, `nodes`?, `callback`?) => `Promise`<`void`>
 
-Defined in: [packages/mermaid/src/mermaid.ts:431](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L431)
+Defined in: [packages/mermaid/src/mermaid.ts:442](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L442)
 
 ## init
 
@@ -138,7 +155,7 @@ Use [initialize](Mermaid.md#initialize) and [run](Mermaid.md#run) instead.
 
 > **initialize**: (`config`) => `void`
 
-Defined in: [packages/mermaid/src/mermaid.ts:435](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L435)
+Defined in: [packages/mermaid/src/mermaid.ts:446](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L446)
 
 Used to set configurations for mermaid.
 This function should be called before the run function.
@@ -161,7 +178,7 @@ Configuration object for mermaid.
 
 > **mermaidAPI**: `Readonly`<{ `defaultConfig`: [`MermaidConfig`](MermaidConfig.md); `getConfig`: () => [`MermaidConfig`](MermaidConfig.md); `getDiagramFromText`: (`text`, `metadata`) => `Promise`<`Diagram`>; `getSiteConfig`: () => [`MermaidConfig`](MermaidConfig.md); `globalReset`: () => `void`; `initialize`: (`userOptions`) => `void`; `parse`: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>; `render`: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>; `reset`: () => `void`; `setConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); `updateSiteConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); }>
 
-Defined in: [packages/mermaid/src/mermaid.ts:425](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L425)
+Defined in: [packages/mermaid/src/mermaid.ts:436](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L436)
 
 **`Internal`**
 
@@ -175,7 +192,7 @@ Use [parse](Mermaid.md#parse) and [render](Mermaid.md#render) instead. Please [o
 
 > **parse**: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>
 
-Defined in: [packages/mermaid/src/mermaid.ts:426](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L426)
+Defined in: [packages/mermaid/src/mermaid.ts:437](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L437)
 
 Parse the text and validate the syntax.
 
@@ -243,7 +260,7 @@ Error if the diagram is invalid and parseOptions.suppressErrors is false or not
 
 > `optional` **parseError**: [`ParseErrorFunction`](../type-aliases/ParseErrorFunction.md)
 
-Defined in: [packages/mermaid/src/mermaid.ts:420](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L420)
+Defined in: [packages/mermaid/src/mermaid.ts:431](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L431)
 
 ---
 
@@ -251,7 +268,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:420](https://github.com/mermaid-js/
 
 > **registerExternalDiagrams**: (`diagrams`, `opts`) => `Promise`<`void`>
 
-Defined in: [packages/mermaid/src/mermaid.ts:434](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L434)
+Defined in: [packages/mermaid/src/mermaid.ts:445](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L445)
 
 Used to register external diagram types.
 
@@ -281,7 +298,7 @@ If opts.lazyLoad is false, the diagrams will be loaded immediately.
 
 > **registerIconPacks**: (`iconLoaders`) => `void`
 
-Defined in: [packages/mermaid/src/mermaid.ts:439](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L439)
+Defined in: [packages/mermaid/src/mermaid.ts:450](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L450)
 
 #### Parameters
 
@@ -299,7 +316,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:439](https://github.com/mermaid-js/
 
 > **registerLayoutLoaders**: (`loaders`) => `void`
 
-Defined in: [packages/mermaid/src/mermaid.ts:433](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L433)
+Defined in: [packages/mermaid/src/mermaid.ts:444](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L444)
 
 #### Parameters
 
@@ -317,7 +334,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:433](https://github.com/mermaid-js/
 
 > **render**: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>
 
-Defined in: [packages/mermaid/src/mermaid.ts:427](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L427)
+Defined in: [packages/mermaid/src/mermaid.ts:438](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L438)
 
 #### Parameters
 
@@ -349,7 +366,7 @@ Deprecated for external use.
 
 > **run**: (`options`) => `Promise`<`void`>
 
-Defined in: [packages/mermaid/src/mermaid.ts:432](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L432)
+Defined in: [packages/mermaid/src/mermaid.ts:443](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L443)
 
 ## run
 
@@ -393,7 +410,7 @@ Optional runtime configs
 
 > **setParseErrorHandler**: (`parseErrorHandler`) => `void`
 
-Defined in: [packages/mermaid/src/mermaid.ts:437](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L437)
+Defined in: [packages/mermaid/src/mermaid.ts:448](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L448)
 
 ## setParseErrorHandler Alternative to directly setting parseError using:
 
@@ -424,4 +441,4 @@ New parseError() callback.
 
 > **startOnLoad**: `boolean`
 
-Defined in: [packages/mermaid/src/mermaid.ts:419](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L419)
+Defined in: [packages/mermaid/src/mermaid.ts:430](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L430)
diff --git a/docs/config/setup/mermaid/type-aliases/SVG.md b/docs/config/setup/mermaid/type-aliases/SVG.md
index 2c72882ae..8bfb7bda0 100644
--- a/docs/config/setup/mermaid/type-aliases/SVG.md
+++ b/docs/config/setup/mermaid/type-aliases/SVG.md
@@ -12,4 +12,4 @@
 
 > **SVG**: `d3.Selection`<`SVGSVGElement`, `unknown`, `Element` | `null`, `unknown`>
 
-Defined in: [packages/mermaid/src/diagram-api/types.ts:130](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L130)
+Defined in: [packages/mermaid/src/diagram-api/types.ts:126](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L126)
diff --git a/docs/config/setup/mermaid/type-aliases/SVGGroup.md b/docs/config/setup/mermaid/type-aliases/SVGGroup.md
index 30ada9928..5e53052fd 100644
--- a/docs/config/setup/mermaid/type-aliases/SVGGroup.md
+++ b/docs/config/setup/mermaid/type-aliases/SVGGroup.md
@@ -12,4 +12,4 @@
 
 > **SVGGroup**: `d3.Selection`<`SVGGElement`, `unknown`, `Element` | `null`, `unknown`>
 
-Defined in: [packages/mermaid/src/diagram-api/types.ts:132](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L132)
+Defined in: [packages/mermaid/src/diagram-api/types.ts:128](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L128)
diff --git a/docs/config/setup/mermaid/variables/default.md b/docs/config/setup/mermaid/variables/default.md
index 24ec84128..a953a641b 100644
--- a/docs/config/setup/mermaid/variables/default.md
+++ b/docs/config/setup/mermaid/variables/default.md
@@ -12,4 +12,4 @@
 
 > `const` **default**: [`Mermaid`](../interfaces/Mermaid.md)
 
-Defined in: [packages/mermaid/src/mermaid.ts:442](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L442)
+Defined in: [packages/mermaid/src/mermaid.ts:454](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L454)
diff --git a/docs/syntax/packet.md b/docs/syntax/packet.md
index f789961d2..c42aecc69 100644
--- a/docs/syntax/packet.md
+++ b/docs/syntax/packet.md
@@ -17,7 +17,7 @@ This diagram type is particularly useful for developers, network engineers, educ
 ## Syntax
 
 ```
-packet-beta
+packet
 start: "Block name" %% Single-bit block
 start-end: "Block name" %% Multi-bit blocks
 ... More Fields ...
@@ -28,7 +28,7 @@ start-end: "Block name" %% Multi-bit blocks
 Using start and end bit counts can be difficult, especially when modifying a design. For this we add a bit count field, which starts from the end of the previous field automagically. Use `+` to set the number of bits, thus:
 
 ```
-packet-beta
+packet
 +1: "Block name" %% Single-bit block
 +8: "Block name" %% 8-bit block
 9-15: "Manually set start and end, it's fine to mix and match"
@@ -41,7 +41,7 @@ packet-beta
 ---
 title: "TCP Packet"
 ---
-packet-beta
+packet
 0-15: "Source Port"
 16-31: "Destination Port"
 32-63: "Sequence Number"
@@ -65,7 +65,7 @@ packet-beta
 ---
 title: "TCP Packet"
 ---
-packet-beta
+packet
 0-15: "Source Port"
 16-31: "Destination Port"
 32-63: "Sequence Number"
@@ -86,7 +86,7 @@ packet-beta
 ```
 
 ```mermaid-example
-packet-beta
+packet
 title UDP Packet
 +16: "Source Port"
 +16: "Destination Port"
@@ -96,7 +96,7 @@ title UDP Packet
 ```
 
 ```mermaid
-packet-beta
+packet
 title UDP Packet
 +16: "Source Port"
 +16: "Destination Port"
@@ -144,7 +144,7 @@ config:
     packet:
       startByteColor: red
 ---
-packet-beta
+packet
 0-15: "Source Port"
 16-31: "Destination Port"
 32-63: "Sequence Number"
diff --git a/package.json b/package.json
index 75d577b86..e85e380f9 100644
--- a/package.json
+++ b/package.json
@@ -64,7 +64,7 @@
   },
   "devDependencies": {
     "@applitools/eyes-cypress": "^3.44.9",
-    "@argos-ci/cypress": "^4.0.3",
+    "@argos-ci/cypress": "^5.0.2",
     "@changesets/changelog-github": "^0.5.1",
     "@changesets/cli": "^2.27.12",
     "@cspell/eslint-plugin": "^8.19.3",
@@ -88,8 +88,8 @@
     "cors": "^2.8.5",
     "cpy-cli": "^5.0.0",
     "cross-env": "^7.0.3",
-    "cspell": "^8.6.1",
-    "cypress": "^14.0.3",
+    "cspell": "^9.1.3",
+    "cypress": "^14.5.1",
     "cypress-image-snapshot": "^4.0.1",
     "cypress-split": "^1.24.14",
     "esbuild": "^0.25.0",
@@ -109,25 +109,25 @@
     "globals": "^16.0.0",
     "globby": "^14.0.2",
     "husky": "^9.1.7",
-    "jest": "^29.7.0",
+    "jest": "^30.0.4",
     "jison": "^0.4.18",
     "js-yaml": "^4.1.0",
-    "jsdom": "^26.0.0",
+    "jsdom": "^26.1.0",
     "langium-cli": "3.3.0",
-    "lint-staged": "^15.2.11",
+    "lint-staged": "^16.1.2",
     "markdown-table": "^3.0.4",
     "nyc": "^17.1.0",
     "path-browserify": "^1.0.1",
     "prettier": "^3.5.2",
     "prettier-plugin-jsdoc": "^1.3.2",
     "rimraf": "^6.0.1",
-    "rollup-plugin-visualizer": "^5.14.0",
+    "rollup-plugin-visualizer": "^6.0.3",
     "start-server-and-test": "^2.0.10",
     "tslib": "^2.8.1",
     "tsx": "^4.7.3",
     "typescript": "~5.7.3",
     "typescript-eslint": "^8.32.0",
-    "vite": "^6.1.1",
+    "vite": "^7.0.3",
     "vite-plugin-istanbul": "^7.0.0",
     "vitest": "^3.0.6"
   },
@@ -139,8 +139,13 @@
       "roughjs": "patches/roughjs.patch"
     },
     "onlyBuiltDependencies": [
+      "canvas",
       "cypress",
       "esbuild"
+    ],
+    "ignoredBuiltDependencies": [
+      "sharp",
+      "vue-demi"
     ]
   }
 }
diff --git a/packages/examples/package.json b/packages/examples/package.json
new file mode 100644
index 000000000..90abc9da9
--- /dev/null
+++ b/packages/examples/package.json
@@ -0,0 +1,32 @@
+{
+  "name": "@mermaid-js/examples",
+  "version": "0.0.1-beta.1",
+  "description": "Mermaid examples package",
+  "author": "Sidharth Vinod",
+  "type": "module",
+  "module": "./dist/mermaid-examples.core.mjs",
+  "types": "./dist/mermaid.d.ts",
+  "exports": {
+    ".": {
+      "types": "./dist/index.d.ts",
+      "import": "./dist/mermaid-examples.core.mjs",
+      "default": "./dist/mermaid-examples.core.mjs"
+    }
+  },
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "clean": "rimraf dist"
+  },
+  "dependencies": {},
+  "devDependencies": {
+    "mermaid": "workspace:*"
+  },
+  "peerDependencies": {
+    "mermaid": "workspace:~"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/examples/src/example.spec.ts b/packages/examples/src/example.spec.ts
new file mode 100644
index 000000000..71e3e6fab
--- /dev/null
+++ b/packages/examples/src/example.spec.ts
@@ -0,0 +1,34 @@
+import mermaid from 'mermaid';
+import { diagramData } from './index.js';
+
+describe('examples', () => {
+  beforeAll(async () => {
+    // To trigger the diagram registration
+    await mermaid.registerExternalDiagrams([]);
+  });
+
+  it('should have examples for each diagrams', () => {
+    const skippedDiagrams = [
+      // These diagrams have no examples
+      'error',
+      'info',
+      '---',
+      // These diagrams have v2 versions, with examples
+      'class',
+      'graph',
+      'flowchart-elk',
+      'flowchart',
+      'state',
+    ];
+    const diagrams = mermaid
+      .getRegisteredDiagramsMetadata()
+      .filter((d) => !skippedDiagrams.includes(d.id));
+    expect(diagrams.length).toBeGreaterThan(0);
+    for (const diagram of diagrams) {
+      const data = diagramData.find((d) => d.id === diagram.id)!;
+      expect(data, `Example for ${diagram.id} is not defined`).toBeDefined();
+      expect(data.examples.length).toBeGreaterThan(0);
+      expect(data.examples.filter((e) => e.isDefault).length).toBe(1);
+    }
+  });
+});
diff --git a/packages/examples/src/examples/architecture.ts b/packages/examples/src/examples/architecture.ts
new file mode 100644
index 000000000..d2b53d26c
--- /dev/null
+++ b/packages/examples/src/examples/architecture.ts
@@ -0,0 +1,24 @@
+import type { DiagramMetadata } from '../types.js';
+
+export default {
+  id: 'architecture',
+  name: 'Architecture Diagram',
+  description: 'Visualize system architecture and components',
+  examples: [
+    {
+      title: 'Basic System Architecture',
+      isDefault: true,
+      code: `architecture-beta
+    group api(cloud)[API]
+
+    service db(database)[Database] in api
+    service disk1(disk)[Storage] in api
+    service disk2(disk)[Storage] in api
+    service server(server)[Server] in api
+
+    db:L -- R:server
+    disk1:T -- B:server
+    disk2:T -- B:db`,
+    },
+  ],
+} satisfies DiagramMetadata;
diff --git a/packages/examples/src/examples/block.ts b/packages/examples/src/examples/block.ts
new file mode 100644
index 000000000..4ea374b52
--- /dev/null
+++ b/packages/examples/src/examples/block.ts
@@ -0,0 +1,27 @@
+import type { DiagramMetadata } from '../types.js';
+
+export default {
+  id: 'block',
+  name: 'Block Diagram',
+  description: 'Create block-based visualizations with beta styling',
+  examples: [
+    {
+      title: 'Basic Block Layout',
+      isDefault: true,
+      code: `block-beta
+columns 1
+  db(("DB"))
+  blockArrowId6<["   "]>(down)
+  block:ID
+    A
+    B["A wide one in the middle"]
+    C
+  end
+  space
+  D
+  ID --> D
+  C --> D
+  style B fill:#969,stroke:#333,stroke-width:4px`,
+    },
+  ],
+} satisfies DiagramMetadata;
diff --git a/packages/examples/src/examples/c4.ts b/packages/examples/src/examples/c4.ts
new file mode 100644
index 000000000..40ea86bc8
--- /dev/null
+++ b/packages/examples/src/examples/c4.ts
@@ -0,0 +1,47 @@
+import type { DiagramMetadata } from '../types.js';
+
+export default {
+  id: 'c4',
+  name: 'C4 Diagram',
+  description:
+    'Visualize software architecture using the C4 model (Context, Container, Component, Code)',
+  examples: [
+    {
+      title: 'Internet Banking System Context',
+      isDefault: true,
+      code: `C4Context
+    title System Context diagram for Internet Banking System
+    Enterprise_Boundary(b0, "BankBoundary0") {
+        Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")
+        Person(customerB, "Banking Customer B")
+        Person_Ext(customerC, "Banking Customer C", "desc")
+
+        Person(customerD, "Banking Customer D", "A customer of the bank, 
with personal bank accounts.") + + System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.") + + Enterprise_Boundary(b1, "BankBoundary") { + SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.") + + System_Boundary(b2, "BankBoundary2") { + System(SystemA, "Banking System A") + System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.") + } + + System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.") + SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.") + + Boundary(b3, "BankBoundary3", "boundary") { + SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.") + SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.") + } + } + } + + BiRel(customerA, SystemAA, "Uses") + BiRel(SystemAA, SystemE, "Uses") + Rel(SystemAA, SystemC, "Sends e-mails", "SMTP") + Rel(SystemC, customerA, "Sends e-mails to")`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/class.ts b/packages/examples/src/examples/class.ts new file mode 100644 index 000000000..41d54bb3a --- /dev/null +++ b/packages/examples/src/examples/class.ts @@ -0,0 +1,34 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'classDiagram', + name: 'Class Diagram', + description: 'Visualize class structures and relationships in object-oriented programming', + examples: [ + { + title: 'Basic Class Inheritance', + isDefault: true, + code: `classDiagram + Animal <|-- Duck + 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() + }`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/er.ts b/packages/examples/src/examples/er.ts new file mode 100644 index 000000000..faa36f3c2 --- /dev/null +++ b/packages/examples/src/examples/er.ts @@ -0,0 +1,36 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'er', + name: 'Entity Relationship Diagram', + description: 'Visualize database schemas and relationships between entities', + examples: [ + { + title: 'Basic ER Schema', + isDefault: true, + code: `erDiagram + CUSTOMER ||--o{ ORDER : places + ORDER ||--|{ ORDER_ITEM : contains + PRODUCT ||--o{ ORDER_ITEM : includes + CUSTOMER { + string id + string name + string email + } + ORDER { + string id + date orderDate + string status + } + PRODUCT { + string id + string name + float price + } + ORDER_ITEM { + int quantity + float price + }`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/flowchart.ts b/packages/examples/src/examples/flowchart.ts new file mode 100644 index 000000000..655e5795e --- /dev/null +++ b/packages/examples/src/examples/flowchart.ts @@ -0,0 +1,19 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'flowchart-v2', + name: 'Flowchart', + description: 'Visualize flowcharts and directed graphs', + examples: [ + { + title: 'Basic Flowchart', + isDefault: true, + code: `flowchart TD + A[Christmas] -->|Get money| B(Go shopping) + B --> C{Let me think} + C -->|One| D[Laptop] + C -->|Two| E[iPhone] + C -->|Three| F[fa:fa-car Car]`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/gantt.ts b/packages/examples/src/examples/gantt.ts new file mode 100644 index 000000000..989eac572 --- /dev/null +++ b/packages/examples/src/examples/gantt.ts @@ -0,0 +1,22 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'gantt', + name: 'Gantt Chart', + description: 'Visualize project schedules and timelines', + examples: [ + { + title: 'Basic Project Timeline', + isDefault: true, + code: `gantt + title A Gantt Diagram + dateFormat YYYY-MM-DD + section Section + A task :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/git.ts b/packages/examples/src/examples/git.ts new file mode 100644 index 000000000..64ba5df82 --- /dev/null +++ b/packages/examples/src/examples/git.ts @@ -0,0 +1,28 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'gitGraph', + name: 'Git Graph', + description: 'Visualize Git repository history and branch relationships', + examples: [ + { + title: 'Basic Git Flow', + isDefault: true, + code: `gitGraph + commit + branch develop + checkout develop + commit + commit + checkout main + merge develop + commit + branch feature + checkout feature + commit + commit + checkout main + merge feature`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/kanban.ts b/packages/examples/src/examples/kanban.ts new file mode 100644 index 000000000..480059fb8 --- /dev/null +++ b/packages/examples/src/examples/kanban.ts @@ -0,0 +1,37 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'kanban', + name: 'Kanban Diagram', + description: 'Visualize work items in a Kanban board', + examples: [ + { + title: 'Kanban Diagram', + isDefault: true, + code: `--- +config: + kanban: + ticketBaseUrl: 'https://github.com/mermaid-js/mermaid/issues/#TICKET#' +--- +kanban + Todo + [Create Documentation] + docs[Create Blog about the new diagram] + [In progress] + id6[Create renderer so that it works in all cases. We also add some extra text here for testing purposes. And some more just for the extra flare.] + id9[Ready for deploy] + id8[Design grammar]@{ assigned: 'knsv' } + id10[Ready for test] + id4[Create parsing tests]@{ ticket: 2038, assigned: 'K.Sveidqvist', priority: 'High' } + id66[last item]@{ priority: 'Very Low', assigned: 'knsv' } + id11[Done] + id5[define getData] + id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: 2036, priority: 'Very High'} + id3[Update DB function]@{ ticket: 2037, assigned: knsv, priority: 'High' } + + id12[Can't reproduce] + id3[Weird flickering in Firefox] +`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/mindmap.ts b/packages/examples/src/examples/mindmap.ts new file mode 100644 index 000000000..cba39ef91 --- /dev/null +++ b/packages/examples/src/examples/mindmap.ts @@ -0,0 +1,32 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'mindmap', + name: 'Mindmap', + description: 'Visualize ideas and concepts in a tree-like structure', + examples: [ + { + title: 'Basic Mindmap', + isDefault: true, + code: `mindmap + root((mindmap)) + Origins + Long history + ::icon(fa fa-book) + Popularisation + British popular psychology author Tony Buzan + Research + On effectiveness
and features + On Automatic creation + Uses + Creative techniques + Strategic planning + Argument mapping + Tools + Pen and paper + Mermaid`, + }, + ], +} satisfies DiagramMetadata; + +// cspell:ignore Buzan diff --git a/packages/examples/src/examples/packet.ts b/packages/examples/src/examples/packet.ts new file mode 100644 index 000000000..7acb97256 --- /dev/null +++ b/packages/examples/src/examples/packet.ts @@ -0,0 +1,34 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'packet', + name: 'Packet Diagram', + description: 'Visualize packet data and network traffic', + examples: [ + { + title: 'TCP Packet', + isDefault: true, + code: `--- +title: "TCP Packet" +--- +packet +0-15: "Source Port" +16-31: "Destination Port" +32-63: "Sequence Number" +64-95: "Acknowledgment Number" +96-99: "Data Offset" +100-105: "Reserved" +106: "URG" +107: "ACK" +108: "PSH" +109: "RST" +110: "SYN" +111: "FIN" +112-127: "Window" +128-143: "Checksum" +144-159: "Urgent Pointer" +160-191: "(Options and Padding)" +192-255: "Data (variable length)"`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/pie.ts b/packages/examples/src/examples/pie.ts new file mode 100644 index 000000000..d75fa5cf3 --- /dev/null +++ b/packages/examples/src/examples/pie.ts @@ -0,0 +1,17 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'pie', + name: 'Pie Chart', + description: 'Visualize data as proportional segments of a circle', + examples: [ + { + title: 'Basic Pie Chart', + isDefault: true, + code: `pie title Pets adopted by volunteers + "Dogs" : 386 + "Cats" : 85 + "Rats" : 15`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/quadrant-chart.ts b/packages/examples/src/examples/quadrant-chart.ts new file mode 100644 index 000000000..c013f57d6 --- /dev/null +++ b/packages/examples/src/examples/quadrant-chart.ts @@ -0,0 +1,27 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'quadrantChart', + name: 'Quadrant Chart', + description: 'Visualize items in a 2x2 matrix based on two variables', + examples: [ + { + title: 'Product Positioning', + isDefault: true, + code: `quadrantChart + title Reach and engagement of campaigns + x-axis Low Reach --> High Reach + y-axis Low Engagement --> High Engagement + quadrant-1 We should expand + quadrant-2 Need to promote + quadrant-3 Re-evaluate + quadrant-4 May be improved + Campaign A: [0.3, 0.6] + Campaign B: [0.45, 0.23] + Campaign C: [0.57, 0.69] + Campaign D: [0.78, 0.34] + Campaign E: [0.40, 0.34] + Campaign F: [0.35, 0.78]`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/radar.ts b/packages/examples/src/examples/radar.ts new file mode 100644 index 000000000..4798ffe17 --- /dev/null +++ b/packages/examples/src/examples/radar.ts @@ -0,0 +1,25 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'radar', + name: 'Radar Diagram', + description: 'Visualize data in a radial format', + examples: [ + { + title: 'Student Grades', + isDefault: true, + code: `--- +title: "Grades" +--- +radar-beta + axis m["Math"], s["Science"], e["English"] + axis h["History"], g["Geography"], a["Art"] + curve a["Alice"]{85, 90, 80, 70, 75, 90} + curve b["Bob"]{70, 75, 85, 80, 90, 85} + + max 100 + min 0 +`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/requirement.ts b/packages/examples/src/examples/requirement.ts new file mode 100644 index 000000000..6804ffdf8 --- /dev/null +++ b/packages/examples/src/examples/requirement.ts @@ -0,0 +1,27 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'requirement', + name: 'Requirement Diagram', + description: 'Visualize system requirements and their relationships', + examples: [ + { + title: 'Basic Requirements', + code: `requirementDiagram + + requirement test_req { + id: 1 + text: the test text. + risk: high + verifymethod: test + } + + element test_entity { + type: simulation + } + + test_entity - satisfies -> test_req`, + isDefault: true, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/sankey.ts b/packages/examples/src/examples/sankey.ts new file mode 100644 index 000000000..99a2c07be --- /dev/null +++ b/packages/examples/src/examples/sankey.ts @@ -0,0 +1,88 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'sankey', + name: 'Sankey Diagram', + description: 'Visualize flow quantities between different stages or processes', + examples: [ + { + title: 'Energy Flow', + isDefault: true, + code: `--- +config: + sankey: + showValues: false +--- +sankey-beta + +Agricultural 'waste',Bio-conversion,124.729 +Bio-conversion,Liquid,0.597 +Bio-conversion,Losses,26.862 +Bio-conversion,Solid,280.322 +Bio-conversion,Gas,81.144 +Biofuel imports,Liquid,35 +Biomass imports,Solid,35 +Coal imports,Coal,11.606 +Coal reserves,Coal,63.965 +Coal,Solid,75.571 +District heating,Industry,10.639 +District heating,Heating and cooling - commercial,22.505 +District heating,Heating and cooling - homes,46.184 +Electricity grid,Over generation / exports,104.453 +Electricity grid,Heating and cooling - homes,113.726 +Electricity grid,H2 conversion,27.14 +Electricity grid,Industry,342.165 +Electricity grid,Road transport,37.797 +Electricity grid,Agriculture,4.412 +Electricity grid,Heating and cooling - commercial,40.858 +Electricity grid,Losses,56.691 +Electricity grid,Rail transport,7.863 +Electricity grid,Lighting & appliances - commercial,90.008 +Electricity grid,Lighting & appliances - homes,93.494 +Gas imports,NGas,40.719 +Gas reserves,NGas,82.233 +Gas,Heating and cooling - commercial,0.129 +Gas,Losses,1.401 +Gas,Thermal generation,151.891 +Gas,Agriculture,2.096 +Gas,Industry,48.58 +Geothermal,Electricity grid,7.013 +H2 conversion,H2,20.897 +H2 conversion,Losses,6.242 +H2,Road transport,20.897 +Hydro,Electricity grid,6.995 +Liquid,Industry,121.066 +Liquid,International shipping,128.69 +Liquid,Road transport,135.835 +Liquid,Domestic aviation,14.458 +Liquid,International aviation,206.267 +Liquid,Agriculture,3.64 +Liquid,National navigation,33.218 +Liquid,Rail transport,4.413 +Marine algae,Bio-conversion,4.375 +NGas,Gas,122.952 +Nuclear,Thermal generation,839.978 +Oil imports,Oil,504.287 +Oil reserves,Oil,107.703 +Oil,Liquid,611.99 +Other waste,Solid,56.587 +Other waste,Bio-conversion,77.81 +Pumped heat,Heating and cooling - homes,193.026 +Pumped heat,Heating and cooling - commercial,70.672 +Solar PV,Electricity grid,59.901 +Solar Thermal,Heating and cooling - homes,19.263 +Solar,Solar Thermal,19.263 +Solar,Solar PV,59.901 +Solid,Agriculture,0.882 +Solid,Thermal generation,400.12 +Solid,Industry,46.477 +Thermal generation,Electricity grid,525.531 +Thermal generation,Losses,787.129 +Thermal generation,District heating,79.329 +Tidal,Electricity grid,9.452 +UK land based bioenergy,Bio-conversion,182.01 +Wave,Electricity grid,19.013 +Wind,Electricity grid,289.366`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/sequence.ts b/packages/examples/src/examples/sequence.ts new file mode 100644 index 000000000..7110e6f3d --- /dev/null +++ b/packages/examples/src/examples/sequence.ts @@ -0,0 +1,18 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'sequence', + name: 'Sequence Diagram', + description: 'Visualize interactions between objects over time', + examples: [ + { + title: 'Basic Sequence', + isDefault: true, + code: `sequenceDiagram + 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!`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/state.ts b/packages/examples/src/examples/state.ts new file mode 100644 index 000000000..bfe1c0600 --- /dev/null +++ b/packages/examples/src/examples/state.ts @@ -0,0 +1,20 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'stateDiagram', + name: 'State Diagram', + description: 'Visualize the states and transitions of a system', + examples: [ + { + title: 'Basic State Diagram', + code: `stateDiagram-v2 + [*] --> Still + Still --> [*] + Still --> Moving + Moving --> Still + Moving --> Crash + Crash --> [*]`, + isDefault: true, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/timeline.ts b/packages/examples/src/examples/timeline.ts new file mode 100644 index 000000000..87b604422 --- /dev/null +++ b/packages/examples/src/examples/timeline.ts @@ -0,0 +1,20 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'timeline', + name: 'Timeline Diagram', + description: 'Visualize events and milestones in chronological order', + examples: [ + { + title: 'Project Timeline', + isDefault: true, + code: `timeline + title History of Social Media Platform + 2002 : LinkedIn + 2004 : Facebook + : Google + 2005 : YouTube + 2006 : Twitter`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/treemap.ts b/packages/examples/src/examples/treemap.ts new file mode 100644 index 000000000..a37a95d43 --- /dev/null +++ b/packages/examples/src/examples/treemap.ts @@ -0,0 +1,21 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'treemap', + name: 'Treemap', + description: 'Visualize hierarchical data as nested rectangles', + examples: [ + { + title: 'Treemap', + isDefault: true, + code: `treemap-beta +"Section 1" + "Leaf 1.1": 12 + "Section 1.2" + "Leaf 1.2.1": 12 +"Section 2" + "Leaf 2.1": 20 + "Leaf 2.2": 25`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/user-journey.ts b/packages/examples/src/examples/user-journey.ts new file mode 100644 index 000000000..9c3ccec17 --- /dev/null +++ b/packages/examples/src/examples/user-journey.ts @@ -0,0 +1,22 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'journey', + name: 'User Journey Diagram', + description: 'Visualize user interactions and experiences with a system', + examples: [ + { + title: 'My Working Day', + isDefault: true, + code: `journey + title My working day + section Go to work + Make tea: 5: Me + Go upstairs: 3: Me + Do work: 1: Me, Cat + section Go home + Go downstairs: 5: Me + Sit down: 5: Me`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/examples/xychart.ts b/packages/examples/src/examples/xychart.ts new file mode 100644 index 000000000..5fb692b46 --- /dev/null +++ b/packages/examples/src/examples/xychart.ts @@ -0,0 +1,19 @@ +import type { DiagramMetadata } from '../types.js'; + +export default { + id: 'xychart', + name: 'XY Chart', + description: 'Create scatter plots and line charts with customizable axes', + examples: [ + { + title: 'Sales Revenue', + isDefault: true, + code: `xychart-beta + title "Sales Revenue" + x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec] + y-axis "Revenue (in $)" 4000 --> 11000 + bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000] + line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]`, + }, + ], +} satisfies DiagramMetadata; diff --git a/packages/examples/src/index.ts b/packages/examples/src/index.ts new file mode 100644 index 000000000..eb9160bcf --- /dev/null +++ b/packages/examples/src/index.ts @@ -0,0 +1,48 @@ +import type { DiagramMetadata } from './types.js'; +import flowChart from './examples/flowchart.js'; +import c4 from './examples/c4.js'; +import kanban from './examples/kanban.js'; +import classDiagram from './examples/class.js'; +import sequenceDiagram from './examples/sequence.js'; +import pieDiagram from './examples/pie.js'; +import userJourneyDiagram from './examples/user-journey.js'; +import mindmapDiagram from './examples/mindmap.js'; +import requirementDiagram from './examples/requirement.js'; +import radarDiagram from './examples/radar.js'; +import stateDiagram from './examples/state.js'; +import erDiagram from './examples/er.js'; +import gitDiagram from './examples/git.js'; +import architectureDiagram from './examples/architecture.js'; +import xychartDiagram from './examples/xychart.js'; +import sankeyDiagram from './examples/sankey.js'; +import ganttDiagram from './examples/gantt.js'; +import timelineDiagram from './examples/timeline.js'; +import quadrantChart from './examples/quadrant-chart.js'; +import packetDiagram from './examples/packet.js'; +import blockDiagram from './examples/block.js'; +import treemapDiagram from './examples/treemap.js'; + +export const diagramData: DiagramMetadata[] = [ + flowChart, + c4, + kanban, + classDiagram, + sequenceDiagram, + pieDiagram, + userJourneyDiagram, + mindmapDiagram, + requirementDiagram, + radarDiagram, + stateDiagram, + erDiagram, + gitDiagram, + architectureDiagram, + xychartDiagram, + sankeyDiagram, + ganttDiagram, + timelineDiagram, + quadrantChart, + packetDiagram, + blockDiagram, + treemapDiagram, +]; diff --git a/packages/examples/src/types.ts b/packages/examples/src/types.ts new file mode 100644 index 000000000..1658f588c --- /dev/null +++ b/packages/examples/src/types.ts @@ -0,0 +1,12 @@ +export interface Example { + title: string; + code: string; + isDefault?: boolean; +} + +export interface DiagramMetadata { + id: string; + name: string; + description: string; + examples: Example[]; +} diff --git a/packages/examples/tsconfig.json b/packages/examples/tsconfig.json new file mode 100644 index 000000000..320d730e1 --- /dev/null +++ b/packages/examples/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "module": "Node16", + "moduleResolution": "Node16" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/mermaid/CHANGELOG.md b/packages/mermaid/CHANGELOG.md index 1a266e140..c57e2a6db 100644 --- a/packages/mermaid/CHANGELOG.md +++ b/packages/mermaid/CHANGELOG.md @@ -1,5 +1,25 @@ # mermaid +## 11.8.1 + +### Patch Changes + +- Updated dependencies [[`0da2922`](https://github.com/mermaid-js/mermaid/commit/0da2922ee7f47959e324ec10d3d21ee70594f557)]: + - @mermaid-js/parser@0.6.1 + +## 11.8.0 + +### Minor Changes + +- [#6590](https://github.com/mermaid-js/mermaid/pull/6590) [`f338802`](https://github.com/mermaid-js/mermaid/commit/f338802642cdecf5b7ed6c19a20cf2a81effbbee) Thanks [@knsv](https://github.com/knsv)! - Adding support for the new diagram type nested treemap + +### Patch Changes + +- [#6707](https://github.com/mermaid-js/mermaid/pull/6707) [`592c5bb`](https://github.com/mermaid-js/mermaid/commit/592c5bb880c3b942710a2878d386bcb3eb35c137) Thanks [@darshanr0107](https://github.com/darshanr0107)! - fix: Log a warning when duplicate commit IDs are encountered in gitGraph to help identify and debug rendering issues caused by non-unique IDs. + +- Updated dependencies [[`f338802`](https://github.com/mermaid-js/mermaid/commit/f338802642cdecf5b7ed6c19a20cf2a81effbbee)]: + - @mermaid-js/parser@0.6.0 + ## 11.7.0 ### Minor Changes diff --git a/packages/mermaid/package.json b/packages/mermaid/package.json index 8f8f64766..2dd3248e4 100644 --- a/packages/mermaid/package.json +++ b/packages/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "mermaid", - "version": "11.7.0", + "version": "11.8.1", "description": "Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.", "type": "module", "module": "./dist/mermaid.core.mjs", @@ -79,10 +79,10 @@ "dagre-d3-es": "7.0.11", "dayjs": "^1.11.13", "dompurify": "^3.2.5", - "katex": "^0.16.9", + "katex": "^0.16.22", "khroma": "^2.1.0", "lodash-es": "^4.17.21", - "marked": "^15.0.7", + "marked": "^16.0.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", @@ -105,13 +105,14 @@ "@types/stylis": "^4.2.7", "@types/uuid": "^10.0.0", "ajv": "^8.17.1", + "canvas": "^3.1.0", "chokidar": "3.6.0", "concurrently": "^9.1.2", "csstree-validator": "^4.0.1", "globby": "^14.0.2", "jison": "^0.4.18", "js-base64": "^3.7.7", - "jsdom": "^26.0.0", + "jsdom": "^26.1.0", "json-schema-to-typescript": "^15.0.4", "micromatch": "^4.0.8", "path-browserify": "^1.0.1", diff --git a/packages/mermaid/src/accessibility.spec.ts b/packages/mermaid/src/accessibility.spec.ts index f5998c475..8e4a268df 100644 --- a/packages/mermaid/src/accessibility.spec.ts +++ b/packages/mermaid/src/accessibility.spec.ts @@ -1,28 +1,25 @@ -import { MockedD3 } from './tests/MockedD3.js'; -import { setA11yDiagramInfo, addSVGa11yTitleDescription } from './accessibility.js'; -import type { D3Element } from './types.js'; +import { addSVGa11yTitleDescription, setA11yDiagramInfo } from './accessibility.js'; +import { ensureNodeFromSelector, jsdomIt } from './tests/util.js'; +import { expect } from 'vitest'; describe('accessibility', () => { - const fauxSvgNode: MockedD3 = new MockedD3(); - describe('setA11yDiagramInfo', () => { - it('should set svg element role to "graphics-document document"', () => { - const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - setA11yDiagramInfo(fauxSvgNode, 'flowchart'); - expect(svgAttrSpy).toHaveBeenCalledWith('role', 'graphics-document document'); + jsdomIt('should set svg element role to "graphics-document document"', ({ svg }) => { + setA11yDiagramInfo(svg, 'flowchart'); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('role')).toBe('graphics-document document'); }); - it('should set aria-roledescription to the diagram type', () => { - const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - setA11yDiagramInfo(fauxSvgNode, 'flowchart'); - expect(svgAttrSpy).toHaveBeenCalledWith('aria-roledescription', 'flowchart'); + jsdomIt('should set aria-roledescription to the diagram type', ({ svg }) => { + setA11yDiagramInfo(svg, 'flowchart'); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-roledescription')).toBe('flowchart'); }); - it('should not set aria-roledescription if the diagram type is empty', () => { - const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - setA11yDiagramInfo(fauxSvgNode, ''); - expect(svgAttrSpy).toHaveBeenCalledTimes(1); - expect(svgAttrSpy).toHaveBeenCalledWith('role', expect.anything()); // only called to set the role + jsdomIt('should not set aria-roledescription if the diagram type is empty', ({ svg }) => { + setA11yDiagramInfo(svg, ''); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-roledescription')).toBeNull(); }); }); @@ -39,115 +36,78 @@ describe('accessibility', () => { expect(noInsertAttrSpy).not.toHaveBeenCalled(); }); - // convenience functions to DRY up the spec - - function expectAriaLabelledByItTitleId( - svgD3Node: D3Element, - title: string | undefined, - desc: string | undefined, - givenId: string - ): void { - const svgAttrSpy = vi.spyOn(svgD3Node, 'attr').mockReturnValue(svgD3Node); - addSVGa11yTitleDescription(svgD3Node, title, desc, givenId); - expect(svgAttrSpy).toHaveBeenCalledWith('aria-labelledby', `chart-title-${givenId}`); - } - - function expectAriaDescribedByItDescId( - svgD3Node: D3Element, - title: string | undefined, - desc: string | undefined, - givenId: string - ): void { - const svgAttrSpy = vi.spyOn(svgD3Node, 'attr').mockReturnValue(svgD3Node); - addSVGa11yTitleDescription(svgD3Node, title, desc, givenId); - expect(svgAttrSpy).toHaveBeenCalledWith('aria-describedby', `chart-desc-${givenId}`); - } - - function a11yTitleTagInserted( - svgD3Node: D3Element, - title: string | undefined, - desc: string | undefined, - givenId: string, - callNumber: number - ): void { - a11yTagInserted(svgD3Node, title, desc, givenId, callNumber, 'title', title); - } - - function a11yDescTagInserted( - svgD3Node: D3Element, - title: string | undefined, - desc: string | undefined, - givenId: string, - callNumber: number - ): void { - a11yTagInserted(svgD3Node, title, desc, givenId, callNumber, 'desc', desc); - } - - function a11yTagInserted( - _svgD3Node: D3Element, - title: string | undefined, - desc: string | undefined, - givenId: string, - callNumber: number, - expectedPrefix: string, - expectedText: string | undefined - ): void { - const fauxInsertedD3: MockedD3 = new MockedD3(); - const svginsertpy = vi.spyOn(fauxSvgNode, 'insert').mockReturnValue(fauxInsertedD3); - const titleAttrSpy = vi.spyOn(fauxInsertedD3, 'attr').mockReturnValue(fauxInsertedD3); - const titleTextSpy = vi.spyOn(fauxInsertedD3, 'text'); - - addSVGa11yTitleDescription(fauxSvgNode, title, desc, givenId); - expect(svginsertpy).toHaveBeenCalledWith(expectedPrefix, ':first-child'); - expect(titleAttrSpy).toHaveBeenCalledWith('id', `chart-${expectedPrefix}-${givenId}`); - expect(titleTextSpy).toHaveBeenNthCalledWith(callNumber, expectedText); - } - describe('with a11y title', () => { const a11yTitle = 'a11y title'; describe('with a11y description', () => { const a11yDesc = 'a11y description'; - it('should set aria-labelledby to the title id inserted as a child', () => { - expectAriaLabelledByItTitleId(fauxSvgNode, a11yTitle, a11yDesc, givenId); + jsdomIt('should set aria-labelledby to the title id inserted as a child', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-labelledby')).toBe(`chart-title-${givenId}`); }); - it('should set aria-describedby to the description id inserted as a child', () => { - expectAriaDescribedByItDescId(fauxSvgNode, a11yTitle, a11yDesc, givenId); - }); + jsdomIt( + 'should set aria-describedby to the description id inserted as a child', + ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-describedby')).toBe(`chart-desc-${givenId}`); + } + ); - it('should insert title tag as the first child with the text set to the accTitle given', () => { - a11yTitleTagInserted(fauxSvgNode, a11yTitle, a11yDesc, givenId, 2); - }); + jsdomIt( + 'should insert title tag as the first child with the text set to the accTitle given', + ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const titleNode = ensureNodeFromSelector('title', svgNode); + expect(titleNode?.innerHTML).toBe(a11yTitle); + } + ); - it('should insert desc tag as the 2nd child with the text set to accDescription given', () => { - a11yDescTagInserted(fauxSvgNode, a11yTitle, a11yDesc, givenId, 1); - }); + jsdomIt( + 'should insert desc tag as the 2nd child with the text set to accDescription given', + ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const descNode = ensureNodeFromSelector('desc', svgNode); + expect(descNode?.innerHTML).toBe(a11yDesc); + } + ); }); - describe(`without a11y description`, () => { + describe(`without a11y description`, {}, () => { const a11yDesc = undefined; - it('should set aria-labelledby to the title id inserted as a child', () => { - expectAriaLabelledByItTitleId(fauxSvgNode, a11yTitle, a11yDesc, givenId); + jsdomIt('should set aria-labelledby to the title id inserted as a child', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-labelledby')).toBe(`chart-title-${givenId}`); }); - it('should not set aria-describedby', () => { - const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svgAttrSpy).not.toHaveBeenCalledWith('aria-describedby', expect.anything()); + jsdomIt('should not set aria-describedby', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-describedby')).toBeNull(); }); - it('should insert title tag as the first child with the text set to the accTitle given', () => { - a11yTitleTagInserted(fauxSvgNode, a11yTitle, a11yDesc, givenId, 1); - }); + jsdomIt( + 'should insert title tag as the first child with the text set to the accTitle given', + ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const titleNode = ensureNodeFromSelector('title', svgNode); + expect(titleNode?.innerHTML).toBe(a11yTitle); + } + ); - it('should not insert description tag', () => { - const fauxTitle: MockedD3 = new MockedD3(); - const svginsertpy = vi.spyOn(fauxSvgNode, 'insert').mockReturnValue(fauxTitle); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svginsertpy).not.toHaveBeenCalledWith('desc', ':first-child'); + jsdomIt('should not insert description tag', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const descNode = svgNode.querySelector('desc'); + expect(descNode).toBeNull(); }); }); }); @@ -158,55 +118,66 @@ describe('accessibility', () => { describe('with a11y description', () => { const a11yDesc = 'a11y description'; - it('should not set aria-labelledby', () => { - const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svgAttrSpy).not.toHaveBeenCalledWith('aria-labelledby', expect.anything()); + jsdomIt('should not set aria-labelledby', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-labelledby')).toBeNull(); }); - it('should not insert title tag', () => { - const fauxTitle: MockedD3 = new MockedD3(); - const svginsertpy = vi.spyOn(fauxSvgNode, 'insert').mockReturnValue(fauxTitle); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svginsertpy).not.toHaveBeenCalledWith('title', ':first-child'); + jsdomIt('should not insert title tag', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const titleNode = svgNode.querySelector('title'); + expect(titleNode).toBeNull(); }); - it('should set aria-describedby to the description id inserted as a child', () => { - expectAriaDescribedByItDescId(fauxSvgNode, a11yTitle, a11yDesc, givenId); - }); + jsdomIt( + 'should set aria-describedby to the description id inserted as a child', + ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-describedby')).toBe(`chart-desc-${givenId}`); + } + ); - it('should insert desc tag as the 2nd child with the text set to accDescription given', () => { - a11yDescTagInserted(fauxSvgNode, a11yTitle, a11yDesc, givenId, 1); - }); + jsdomIt( + 'should insert desc tag as the 2nd child with the text set to accDescription given', + ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const descNode = ensureNodeFromSelector('desc', svgNode); + expect(descNode?.innerHTML).toBe(a11yDesc); + } + ); }); describe('without a11y description', () => { const a11yDesc = undefined; - it('should not set aria-labelledby', () => { - const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svgAttrSpy).not.toHaveBeenCalledWith('aria-labelledby', expect.anything()); + jsdomIt('should not set aria-labelledby', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-labelledby')).toBeNull(); }); - it('should not set aria-describedby', () => { - const svgAttrSpy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svgAttrSpy).not.toHaveBeenCalledWith('aria-describedby', expect.anything()); + jsdomIt('should not set aria-describedby', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + expect(svgNode.getAttribute('aria-describedby')).toBeNull(); }); - it('should not insert title tag', () => { - const fauxTitle: MockedD3 = new MockedD3(); - const svginsertpy = vi.spyOn(fauxSvgNode, 'insert').mockReturnValue(fauxTitle); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svginsertpy).not.toHaveBeenCalledWith('title', ':first-child'); + jsdomIt('should not insert title tag', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const titleNode = svgNode.querySelector('title'); + expect(titleNode).toBeNull(); }); - it('should not insert description tag', () => { - const fauxDesc: MockedD3 = new MockedD3(); - const svginsertpy = vi.spyOn(fauxSvgNode, 'insert').mockReturnValue(fauxDesc); - addSVGa11yTitleDescription(fauxSvgNode, a11yTitle, a11yDesc, givenId); - expect(svginsertpy).not.toHaveBeenCalledWith('desc', ':first-child'); + jsdomIt('should not insert description tag', ({ svg }) => { + addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, givenId); + const svgNode = ensureNodeFromSelector('svg'); + const descNode = svgNode.querySelector('desc'); + expect(descNode).toBeNull(); }); }); }); diff --git a/packages/mermaid/src/diagram-api/loadDiagram.ts b/packages/mermaid/src/diagram-api/loadDiagram.ts index 1ec01ec06..b3c1cdb57 100644 --- a/packages/mermaid/src/diagram-api/loadDiagram.ts +++ b/packages/mermaid/src/diagram-api/loadDiagram.ts @@ -7,20 +7,21 @@ export const loadRegisteredDiagrams = async () => { // Load all lazy loaded diagrams in parallel const results = await Promise.allSettled( Object.entries(detectors).map(async ([key, { detector, loader }]) => { - if (loader) { + if (!loader) { + return; + } + try { + getDiagram(key); + } catch { try { - getDiagram(key); - } catch { - try { - // Register diagram if it is not already registered - const { diagram, id } = await loader(); - registerDiagram(id, diagram, detector); - } catch (err) { - // Remove failed diagram from detectors - log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`); - delete detectors[key]; - throw err; - } + // Register diagram if it is not already registered + const { diagram, id } = await loader(); + registerDiagram(id, diagram, detector); + } catch (err) { + // Remove failed diagram from detectors + log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`); + delete detectors[key]; + throw err; } } }) diff --git a/packages/mermaid/src/diagram-api/types.ts b/packages/mermaid/src/diagram-api/types.ts index fdb175e52..56364e9c6 100644 --- a/packages/mermaid/src/diagram-api/types.ts +++ b/packages/mermaid/src/diagram-api/types.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type * as d3 from 'd3'; -import type { SetRequired } from 'type-fest'; +import type { SetOptional, SetRequired } from 'type-fest'; import type { Diagram } from '../Diagram.js'; import type { BaseDiagramConfig, MermaidConfig } from '../config.type.js'; @@ -91,17 +91,13 @@ export interface DiagramDefinition { ) => void; } -export interface DetectorRecord { - detector: DiagramDetector; - loader?: DiagramLoader; -} - export interface ExternalDiagramDefinition { id: string; detector: DiagramDetector; loader: DiagramLoader; } +export type DetectorRecord = SetOptional, 'loader'>; export type DiagramDetector = (text: string, config?: MermaidConfig) => boolean; export type DiagramLoader = () => Promise<{ id: string; diagram: DiagramDefinition }>; diff --git a/packages/mermaid/src/diagrams/architecture/architectureRenderer.ts b/packages/mermaid/src/diagrams/architecture/architectureRenderer.ts index 9479e5108..1505b1950 100644 --- a/packages/mermaid/src/diagrams/architecture/architectureRenderer.ts +++ b/packages/mermaid/src/diagrams/architecture/architectureRenderer.ts @@ -379,6 +379,15 @@ function layoutArchitecture( }, }, ], + layout: { + name: 'grid', + boundingBox: { + x1: 0, + x2: 100, + y1: 0, + y2: 100, + }, + }, }); // Remove element after layout renderEl.remove(); diff --git a/packages/mermaid/src/diagrams/block/blockDB.ts b/packages/mermaid/src/diagrams/block/blockDB.ts index d6e35ed15..854969012 100644 --- a/packages/mermaid/src/diagrams/block/blockDB.ts +++ b/packages/mermaid/src/diagrams/block/blockDB.ts @@ -287,7 +287,7 @@ const setBlock = (block: Block) => { blockDatabase.set(block.id, block); }; -const getLogger = () => console; +const getLogger = () => log; /** * Return all of the style classes diff --git a/packages/mermaid/src/diagrams/git/gitGraph.spec.ts b/packages/mermaid/src/diagrams/git/gitGraph.spec.ts index fed21dd19..ee20a9aaf 100644 --- a/packages/mermaid/src/diagrams/git/gitGraph.spec.ts +++ b/packages/mermaid/src/diagrams/git/gitGraph.spec.ts @@ -1,4 +1,4 @@ -import { rejects } from 'assert'; +import { log } from '../../logger.js'; import { db } from './gitGraphAst.js'; import { parser } from './gitGraphParser.js'; @@ -1319,4 +1319,42 @@ describe('when parsing a gitGraph', function () { } }); }); + it('should log a warning when two commits have the same ID', async () => { + const str = `gitGraph + commit id:"initial commit" + commit id:"work on first release" + commit id:"design freeze from here" + branch v1-rc + checkout v1-rc + commit id:"bugfix 1" + commit id:"bigfix 2" tag:"v1.0.1" + branch FORK-v1.0-MDR + checkout FORK-v1.0-MDR + commit id:"working on MDR" + checkout v1-rc + commit id:"minor design changes for MDR" tag:"v1.0.2" + checkout FORK-v1.0-MDR + merge v1-rc + checkout main + commit id:"new feature for v1.1…" + checkout FORK-v1.0-MDR + commit id:"working on MDR" + commit id:"finishing MDR" + branch v1.0-MDR + checkout v1.0-MDR + commit id:"brush up release" tag:"v1.0.2-MDR" + checkout v1-rc + commit id:"bugfix without MDR" + checkout main + commit id:"work on v1.1" + `; + + const logWarnSpy = vi.spyOn(log, 'warn').mockImplementation(() => undefined); + + await parser.parse(str); + + expect(logWarnSpy).toHaveBeenCalledWith('Commit ID working on MDR already exists'); + + logWarnSpy.mockRestore(); + }); }); diff --git a/packages/mermaid/src/diagrams/git/gitGraphAst.ts b/packages/mermaid/src/diagrams/git/gitGraphAst.ts index 36595eb51..0dbc1ecb0 100644 --- a/packages/mermaid/src/diagrams/git/gitGraphAst.ts +++ b/packages/mermaid/src/diagrams/git/gitGraphAst.ts @@ -125,6 +125,9 @@ export const commit = function (commitDB: CommitDB) { }; state.records.head = newCommit; log.info('main branch', config.mainBranchName); + if (state.records.commits.has(newCommit.id)) { + log.warn(`Commit ID ${newCommit.id} already exists`); + } state.records.commits.set(newCommit.id, newCommit); state.records.branches.set(state.records.currBranch, newCommit.id); log.debug('in pushCommit ' + newCommit.id); diff --git a/packages/mermaid/src/diagrams/mindmap/mindmap-definition.ts b/packages/mermaid/src/diagrams/mindmap/mindmap-definition.ts index 66b44b4f9..c02898954 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmap-definition.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmap-definition.ts @@ -1,12 +1,14 @@ // @ts-ignore: JISON doesn't support types import parser from './parser/mindmap.jison'; -import db from './mindmapDb.js'; +import { MindmapDB } from './mindmapDb.js'; import renderer from './mindmapRenderer.js'; import styles from './styles.js'; import type { DiagramDefinition } from '../../diagram-api/types.js'; export const diagram: DiagramDefinition = { - db, + get db() { + return new MindmapDB(); + }, renderer, parser, styles, diff --git a/packages/mermaid/src/diagrams/mindmap/mindmap.spec.ts b/packages/mermaid/src/diagrams/mindmap/mindmap.spec.ts index d4f2d316e..b912e1b8c 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmap.spec.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmap.spec.ts @@ -1,12 +1,12 @@ // @ts-expect-error No types available for JISON import { parser as mindmap } from './parser/mindmap.jison'; -import mindmapDB from './mindmapDb.js'; +import { MindmapDB } from './mindmapDb.js'; // Todo fix utils functions for tests import { setLogLevel } from '../../diagram-api/diagramAPI.js'; describe('when parsing a mindmap ', function () { beforeEach(function () { - mindmap.yy = mindmapDB; + mindmap.yy = new MindmapDB(); mindmap.yy.clear(); setLogLevel('trace'); }); diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts index e7041e9d6..703ba8434 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapDb.ts @@ -5,70 +5,6 @@ import { log } from '../../logger.js'; import type { MindmapNode } from './mindmapTypes.js'; import defaultConfig from '../../defaultConfig.js'; -let nodes: MindmapNode[] = []; -let cnt = 0; -let elements: Record = {}; - -const clear = () => { - nodes = []; - cnt = 0; - elements = {}; -}; - -const getParent = function (level: number) { - for (let i = nodes.length - 1; i >= 0; i--) { - if (nodes[i].level < level) { - return nodes[i]; - } - } - // No parent found - return null; -}; - -const getMindmap = () => { - return nodes.length > 0 ? nodes[0] : null; -}; - -const addNode = (level: number, id: string, descr: string, type: number) => { - log.info('addNode', level, id, descr, type); - const conf = getConfig(); - let padding: number = conf.mindmap?.padding ?? defaultConfig.mindmap.padding; - switch (type) { - case nodeType.ROUNDED_RECT: - case nodeType.RECT: - case nodeType.HEXAGON: - padding *= 2; - } - - const node = { - id: cnt++, - nodeId: sanitizeText(id, conf), - level, - descr: sanitizeText(descr, conf), - type, - children: [], - width: conf.mindmap?.maxNodeWidth ?? defaultConfig.mindmap.maxNodeWidth, - padding, - } satisfies MindmapNode; - - const parent = getParent(level); - if (parent) { - parent.children.push(node); - // Keep all nodes in the list - nodes.push(node); - } else { - if (nodes.length === 0) { - // First node, the root - nodes.push(node); - } else { - // Syntax error ... there can only bee one root - throw new Error( - 'There can be only one root. No parent could be found for ("' + node.descr + '")' - ); - } - } -}; - const nodeType = { DEFAULT: 0, NO_BORDER: 0, @@ -78,82 +14,149 @@ const nodeType = { CLOUD: 4, BANG: 5, HEXAGON: 6, -}; - -const getType = (startStr: string, endStr: string): number => { - log.debug('In get type', startStr, endStr); - switch (startStr) { - case '[': - return nodeType.RECT; - case '(': - return endStr === ')' ? nodeType.ROUNDED_RECT : nodeType.CLOUD; - case '((': - return nodeType.CIRCLE; - case ')': - return nodeType.CLOUD; - case '))': - return nodeType.BANG; - case '{{': - return nodeType.HEXAGON; - default: - return nodeType.DEFAULT; - } -}; - -const setElementForId = (id: number, element: D3Element) => { - elements[id] = element; -}; - -const decorateNode = (decoration?: { class?: string; icon?: string }) => { - if (!decoration) { - return; - } - const config = getConfig(); - const node = nodes[nodes.length - 1]; - if (decoration.icon) { - node.icon = sanitizeText(decoration.icon, config); - } - if (decoration.class) { - node.class = sanitizeText(decoration.class, config); - } -}; - -const type2Str = (type: number) => { - switch (type) { - case nodeType.DEFAULT: - return 'no-border'; - case nodeType.RECT: - return 'rect'; - case nodeType.ROUNDED_RECT: - return 'rounded-rect'; - case nodeType.CIRCLE: - return 'circle'; - case nodeType.CLOUD: - return 'cloud'; - case nodeType.BANG: - return 'bang'; - case nodeType.HEXAGON: - return 'hexgon'; // cspell: disable-line - default: - return 'no-border'; - } -}; - -// Expose logger to grammar -const getLogger = () => log; -const getElementById = (id: number) => elements[id]; - -const db = { - clear, - addNode, - getMindmap, - nodeType, - getType, - setElementForId, - decorateNode, - type2Str, - getLogger, - getElementById, } as const; -export default db; +export class MindmapDB { + private nodes: MindmapNode[] = []; + private count = 0; + private elements: Record = {}; + public readonly nodeType: typeof nodeType; + + constructor() { + this.getLogger = this.getLogger.bind(this); + this.nodeType = nodeType; + this.clear(); + this.getType = this.getType.bind(this); + this.getMindmap = this.getMindmap.bind(this); + this.getElementById = this.getElementById.bind(this); + this.getParent = this.getParent.bind(this); + this.getMindmap = this.getMindmap.bind(this); + this.addNode = this.addNode.bind(this); + this.decorateNode = this.decorateNode.bind(this); + } + public clear() { + this.nodes = []; + this.count = 0; + this.elements = {}; + } + + public getParent(level: number): MindmapNode | null { + for (let i = this.nodes.length - 1; i >= 0; i--) { + if (this.nodes[i].level < level) { + return this.nodes[i]; + } + } + return null; + } + + public getMindmap(): MindmapNode | null { + return this.nodes.length > 0 ? this.nodes[0] : null; + } + + public addNode(level: number, id: string, descr: string, type: number): void { + log.info('addNode', level, id, descr, type); + + const conf = getConfig(); + let padding = conf.mindmap?.padding ?? defaultConfig.mindmap.padding; + + switch (type) { + case this.nodeType.ROUNDED_RECT: + case this.nodeType.RECT: + case this.nodeType.HEXAGON: + padding *= 2; + break; + } + + const node: MindmapNode = { + id: this.count++, + nodeId: sanitizeText(id, conf), + level, + descr: sanitizeText(descr, conf), + type, + children: [], + width: conf.mindmap?.maxNodeWidth ?? defaultConfig.mindmap.maxNodeWidth, + padding, + }; + + const parent = this.getParent(level); + if (parent) { + parent.children.push(node); + this.nodes.push(node); + } else { + if (this.nodes.length === 0) { + this.nodes.push(node); + } else { + throw new Error( + `There can be only one root. No parent could be found for ("${node.descr}")` + ); + } + } + } + + public getType(startStr: string, endStr: string) { + log.debug('In get type', startStr, endStr); + switch (startStr) { + case '[': + return this.nodeType.RECT; + case '(': + return endStr === ')' ? this.nodeType.ROUNDED_RECT : this.nodeType.CLOUD; + case '((': + return this.nodeType.CIRCLE; + case ')': + return this.nodeType.CLOUD; + case '))': + return this.nodeType.BANG; + case '{{': + return this.nodeType.HEXAGON; + default: + return this.nodeType.DEFAULT; + } + } + + public setElementForId(id: number, element: D3Element): void { + this.elements[id] = element; + } + public getElementById(id: number) { + return this.elements[id]; + } + + public decorateNode(decoration?: { class?: string; icon?: string }): void { + if (!decoration) { + return; + } + + const config = getConfig(); + const node = this.nodes[this.nodes.length - 1]; + if (decoration.icon) { + node.icon = sanitizeText(decoration.icon, config); + } + if (decoration.class) { + node.class = sanitizeText(decoration.class, config); + } + } + + type2Str(type: number): string { + switch (type) { + case this.nodeType.DEFAULT: + return 'no-border'; + case this.nodeType.RECT: + return 'rect'; + case this.nodeType.ROUNDED_RECT: + return 'rounded-rect'; + case this.nodeType.CIRCLE: + return 'circle'; + case this.nodeType.CLOUD: + return 'cloud'; + case this.nodeType.BANG: + return 'bang'; + case this.nodeType.HEXAGON: + return 'hexgon'; // cspell: disable-line + default: + return 'no-border'; + } + } + + public getLogger() { + return log; + } +} diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts b/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts index 708b3cc28..ef9be0565 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapRenderer.ts @@ -9,10 +9,10 @@ import { log } from '../../logger.js'; import type { D3Element } from '../../types.js'; import { selectSvgElement } from '../../rendering-util/selectSvgElement.js'; import { setupGraphViewbox } from '../../setupGraphViewbox.js'; -import type { FilledMindMapNode, MindmapDB, MindmapNode } from './mindmapTypes.js'; +import type { FilledMindMapNode, MindmapNode } from './mindmapTypes.js'; import { drawNode, positionNode } from './svgDraw.js'; import defaultConfig from '../../defaultConfig.js'; - +import type { MindmapDB } from './mindmapDb.js'; // Inject the layout algorithm into cytoscape cytoscape.use(coseBilkent); diff --git a/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts b/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts index e8350477a..be8effab1 100644 --- a/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts +++ b/packages/mermaid/src/diagrams/mindmap/mindmapTypes.ts @@ -1,5 +1,4 @@ import type { RequiredDeep } from 'type-fest'; -import type mindmapDb from './mindmapDb.js'; export interface MindmapNode { id: number; @@ -19,4 +18,3 @@ export interface MindmapNode { } export type FilledMindMapNode = RequiredDeep; -export type MindmapDB = typeof mindmapDb; diff --git a/packages/mermaid/src/diagrams/mindmap/svgDraw.ts b/packages/mermaid/src/diagrams/mindmap/svgDraw.ts index 209a6a0e1..8aee82e30 100644 --- a/packages/mermaid/src/diagrams/mindmap/svgDraw.ts +++ b/packages/mermaid/src/diagrams/mindmap/svgDraw.ts @@ -1,8 +1,9 @@ import { createText } from '../../rendering-util/createText.js'; -import type { FilledMindMapNode, MindmapDB } from './mindmapTypes.js'; +import type { FilledMindMapNode } from './mindmapTypes.js'; import type { Point, D3Element } from '../../types.js'; import { parseFontSize } from '../../utils.js'; import type { MermaidConfig } from '../../config.type.js'; +import type { MindmapDB } from './mindmapDb.js'; const MAX_SECTIONS = 12; diff --git a/packages/mermaid/src/diagrams/packet/detector.ts b/packages/mermaid/src/diagrams/packet/detector.ts index 5aca92e6c..ed3c61054 100644 --- a/packages/mermaid/src/diagrams/packet/detector.ts +++ b/packages/mermaid/src/diagrams/packet/detector.ts @@ -7,7 +7,7 @@ import type { const id = 'packet'; const detector: DiagramDetector = (txt) => { - return /^\s*packet-beta/.test(txt); + return /^\s*packet(-beta)?/.test(txt); }; const loader: DiagramLoader = async () => { diff --git a/packages/mermaid/src/diagrams/packet/packet.spec.ts b/packages/mermaid/src/diagrams/packet/packet.spec.ts index bdd09acec..b03ffe4d1 100644 --- a/packages/mermaid/src/diagrams/packet/packet.spec.ts +++ b/packages/mermaid/src/diagrams/packet/packet.spec.ts @@ -15,8 +15,14 @@ describe('packet diagrams', () => { expect(getPacket()).toMatchInlineSnapshot('[]'); }); + it('should handle a packet definition', async () => { + const str = `packet`; + await expect(parser.parse(str)).resolves.not.toThrow(); + expect(getPacket()).toMatchInlineSnapshot('[]'); + }); + it('should handle diagram with data and title', async () => { - const str = `packet-beta + const str = `packet title Packet diagram accTitle: Packet accTitle accDescr: Packet accDescription @@ -41,7 +47,7 @@ describe('packet diagrams', () => { }); it('should handle single bits', async () => { - const str = `packet-beta + const str = `packet 0-10: "test" 11: "single" `; @@ -67,7 +73,7 @@ describe('packet diagrams', () => { }); it('should handle bit counts', async () => { - const str = `packet-beta + const str = `packet +8: "byte" +16: "word" `; @@ -93,7 +99,7 @@ describe('packet diagrams', () => { }); it('should handle bit counts with bit or bits', async () => { - const str = `packet-beta + const str = `packet +8: "byte" +16: "word" `; @@ -119,7 +125,7 @@ describe('packet diagrams', () => { }); it('should split into multiple rows', async () => { - const str = `packet-beta + const str = `packet 0-10: "test" 11-90: "multiple" `; @@ -161,7 +167,7 @@ describe('packet diagrams', () => { }); it('should split into multiple rows when cut at exact length', async () => { - const str = `packet-beta + const str = `packet 0-16: "test" 17-63: "multiple" `; @@ -195,7 +201,7 @@ describe('packet diagrams', () => { }); it('should throw error if numbers are not continuous', async () => { - const str = `packet-beta + const str = `packet 0-16: "test" 18-20: "error" `; @@ -205,7 +211,7 @@ describe('packet diagrams', () => { }); it('should throw error if numbers are not continuous with bit counts', async () => { - const str = `packet-beta + const str = `packet +16: "test" 18-20: "error" `; @@ -215,7 +221,7 @@ describe('packet diagrams', () => { }); it('should throw error if numbers are not continuous for single packets', async () => { - const str = `packet-beta + const str = `packet 0-16: "test" 18: "error" `; @@ -225,7 +231,7 @@ describe('packet diagrams', () => { }); it('should throw error if numbers are not continuous for single packets with bit counts', async () => { - const str = `packet-beta + const str = `packet +16: "test" 18: "error" `; @@ -235,7 +241,7 @@ describe('packet diagrams', () => { }); it('should throw error if numbers are not continuous for single packets - 2', async () => { - const str = `packet-beta + const str = `packet 0-16: "test" 17: "good" 19: "error" @@ -246,7 +252,7 @@ describe('packet diagrams', () => { }); it('should throw error if end is less than start', async () => { - const str = `packet-beta + const str = `packet 0-16: "test" 25-20: "error" `; @@ -256,7 +262,7 @@ describe('packet diagrams', () => { }); it('should throw error if bit count is 0', async () => { - const str = `packet-beta + const str = `packet +0: "test" `; await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot( diff --git a/packages/mermaid/src/diagrams/sequence/svgDraw.js b/packages/mermaid/src/diagrams/sequence/svgDraw.js index c681c9491..04ccd8a84 100644 --- a/packages/mermaid/src/diagrams/sequence/svgDraw.js +++ b/packages/mermaid/src/diagrams/sequence/svgDraw.js @@ -524,7 +524,7 @@ export const drawBox = function (elem, box, conf) { box.name, g, box.x, - box.y + (box.textMaxHeight || 0) / 2, + box.y + conf.boxTextMargin + (box.textMaxHeight || 0) / 2, box.width, 0, { class: 'text' }, diff --git a/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts b/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts index 7f406b589..a0063a5f0 100644 --- a/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts +++ b/packages/mermaid/src/diagrams/timeline/timelineRenderer.ts @@ -28,8 +28,7 @@ interface TimelineTask { export const draw = function (text: string, id: string, version: string, diagObj: Diagram) { //1. Fetch the configuration const conf = getConfig(); - // @ts-expect-error - wrong config? - const LEFT_MARGIN = conf.leftMargin ?? 50; + const LEFT_MARGIN = conf.timeline?.leftMargin ?? 50; log.debug('timeline', diagObj.db); diff --git a/packages/mermaid/src/diagrams/treemap/db.ts b/packages/mermaid/src/diagrams/treemap/db.ts index 6a68857f7..23326bc85 100644 --- a/packages/mermaid/src/diagrams/treemap/db.ts +++ b/packages/mermaid/src/diagrams/treemap/db.ts @@ -1,10 +1,10 @@ -import { getConfig as commonGetConfig } from '../../config.js'; -import DEFAULT_CONFIG from '../../defaultConfig.js'; +import type { DiagramDB } from '../../diagram-api/types.js'; import type { DiagramStyleClassDef } from '../../diagram-api/types.js'; -import { isLabelStyle } from '../../rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js'; - +import type { TreemapDiagramConfig, TreemapNode } from './types.js'; +import DEFAULT_CONFIG from '../../defaultConfig.js'; +import { getConfig as commonGetConfig } from '../../config.js'; import { cleanAndMerge } from '../../utils.js'; -import { ImperativeState } from '../../utils/imperativeState.js'; +import { isLabelStyle } from '../../rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js'; import { clear as commonClear, getAccDescription, @@ -14,99 +14,82 @@ import { setAccTitle, setDiagramTitle, } from '../common/commonDb.js'; -import type { TreemapDB, TreemapData, TreemapDiagramConfig, TreemapNode } from './types.js'; +export class TreeMapDB implements DiagramDB { + private nodes: TreemapNode[] = []; + private levels: Map = new Map(); + private outerNodes: TreemapNode[] = []; + private classes: Map = new Map(); + private root?: TreemapNode; -const defaultTreemapData: TreemapData = { - nodes: [], - levels: new Map(), - outerNodes: [], - classes: new Map(), -}; - -const state = new ImperativeState(() => structuredClone(defaultTreemapData)); - -const getConfig = (): Required => { - // Use type assertion with unknown as intermediate step - const defaultConfig = DEFAULT_CONFIG as unknown as { treemap: Required }; - const userConfig = commonGetConfig() as unknown as { treemap?: Partial }; - - return cleanAndMerge({ - ...defaultConfig.treemap, - ...(userConfig.treemap ?? {}), - }) as Required; -}; - -const getNodes = (): TreemapNode[] => state.records.nodes; - -const addNode = (node: TreemapNode, level: number) => { - const data = state.records; - data.nodes.push(node); - data.levels.set(node, level); - - if (level === 0) { - data.outerNodes.push(node); + public getNodes() { + return this.nodes; } - // Set the root node if this is a level 0 node and we don't have a root yet - if (level === 0 && !data.root) { - data.root = node; + public getConfig() { + const defaultConfig = DEFAULT_CONFIG as unknown as { treemap: Required }; + const userConfig = commonGetConfig() as unknown as { treemap?: Partial }; + return cleanAndMerge({ + ...defaultConfig.treemap, + ...(userConfig.treemap ?? {}), + }) as Required; } -}; -const getRoot = (): TreemapNode | undefined => ({ name: '', children: state.records.outerNodes }); + public addNode(node: TreemapNode, level: number) { + this.nodes.push(node); + this.levels.set(node, level); + if (level === 0) { + this.outerNodes.push(node); + this.root ??= node; + } + } -const addClass = (id: string, _style: string) => { - const classes = state.records.classes; - const styleClass = classes.get(id) ?? { id, styles: [], textStyles: [] }; - classes.set(id, styleClass); + public getRoot() { + return { name: '', children: this.outerNodes }; + } - const styles = _style.replace(/\\,/g, '§§§').replace(/,/g, ';').replace(/§§§/g, ',').split(';'); - - if (styles) { - styles.forEach((s) => { - if (isLabelStyle(s)) { - if (styleClass?.textStyles) { - styleClass.textStyles.push(s); - } else { - styleClass.textStyles = [s]; + public addClass(id: string, _style: string) { + const styleClass = this.classes.get(id) ?? { id, styles: [], textStyles: [] }; + const styles = _style.replace(/\\,/g, '§§§').replace(/,/g, ';').replace(/§§§/g, ',').split(';'); + if (styles) { + styles.forEach((s) => { + if (isLabelStyle(s)) { + if (styleClass?.textStyles) { + styleClass.textStyles.push(s); + } else { + styleClass.textStyles = [s]; + } } - } - if (styleClass?.styles) { - styleClass.styles.push(s); - } else { - styleClass.styles = [s]; - } - }); + if (styleClass?.styles) { + styleClass.styles.push(s); + } else { + styleClass.styles = [s]; + } + }); + } + this.classes.set(id, styleClass); } - classes.set(id, styleClass); -}; -const getClasses = (): Map => { - return state.records.classes; -}; + public getClasses() { + return this.classes; + } -const getStylesForClass = (classSelector: string): string[] => { - return state.records.classes.get(classSelector)?.styles ?? []; -}; + public getStylesForClass(classSelector: string): string[] { + return this.classes.get(classSelector)?.styles ?? []; + } -const clear = () => { - commonClear(); - state.reset(); -}; + public clear() { + commonClear(); + this.nodes = []; + this.levels = new Map(); + this.outerNodes = []; + this.classes = new Map(); + this.root = undefined; + } -export const db: TreemapDB = { - getNodes, - addNode, - getRoot, - getConfig, - clear, - setAccTitle, - getAccTitle, - setDiagramTitle, - getDiagramTitle, - getAccDescription, - setAccDescription, - addClass, - getClasses, - getStylesForClass, -}; + public setAccTitle = setAccTitle; + public getAccTitle = getAccTitle; + public setDiagramTitle = setDiagramTitle; + public getDiagramTitle = getDiagramTitle; + public getAccDescription = getAccDescription; + public setAccDescription = setAccDescription; +} diff --git a/packages/mermaid/src/diagrams/treemap/diagram.ts b/packages/mermaid/src/diagrams/treemap/diagram.ts index dd599174e..2f8ff92f3 100644 --- a/packages/mermaid/src/diagrams/treemap/diagram.ts +++ b/packages/mermaid/src/diagrams/treemap/diagram.ts @@ -1,12 +1,14 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; -import { db } from './db.js'; +import { TreeMapDB } from './db.js'; import { parser } from './parser.js'; import { renderer } from './renderer.js'; import styles from './styles.js'; export const diagram: DiagramDefinition = { parser, - db, + get db() { + return new TreeMapDB(); + }, renderer, styles, }; diff --git a/packages/mermaid/src/diagrams/treemap/parser.ts b/packages/mermaid/src/diagrams/treemap/parser.ts index 82efb5911..4d71ff470 100644 --- a/packages/mermaid/src/diagrams/treemap/parser.ts +++ b/packages/mermaid/src/diagrams/treemap/parser.ts @@ -2,15 +2,15 @@ import { parse } from '@mermaid-js/parser'; import type { ParserDefinition } from '../../diagram-api/types.js'; import { log } from '../../logger.js'; import { populateCommonDb } from '../common/populateCommonDb.js'; -import { db } from './db.js'; -import type { TreemapNode, TreemapAst } from './types.js'; +import type { TreemapNode, TreemapAst, TreemapDB } from './types.js'; import { buildHierarchy } from './utils.js'; +import { TreeMapDB } from './db.js'; /** * Populates the database with data from the Treemap AST * @param ast - The Treemap AST */ -const populate = (ast: TreemapAst) => { +const populate = (ast: TreemapAst, db: TreemapDB) => { // We need to bypass the type checking for populateCommonDb // eslint-disable-next-line @typescript-eslint/no-explicit-any populateCommonDb(ast as any, db); @@ -84,6 +84,8 @@ const getItemName = (item: { name?: string | number }): string => { }; export const parser: ParserDefinition = { + // @ts-expect-error - TreeMapDB is not assignable to DiagramDB + parser: { yy: undefined }, parse: async (text: string): Promise => { try { // Use a generic parse that accepts any diagram type @@ -91,7 +93,13 @@ export const parser: ParserDefinition = { const parseFunc = parse as (diagramType: string, text: string) => Promise; const ast = await parseFunc('treemap', text); log.debug('Treemap AST:', ast); - populate(ast); + const db = parser.parser?.yy; + if (!(db instanceof TreeMapDB)) { + throw new Error( + 'parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.' + ); + } + populate(ast, db); } catch (error) { log.error('Error parsing treemap:', error); throw error; diff --git a/packages/mermaid/src/docs/community/contributing.md b/packages/mermaid/src/docs/community/contributing.md index 62d06f72f..c35803c23 100644 --- a/packages/mermaid/src/docs/community/contributing.md +++ b/packages/mermaid/src/docs/community/contributing.md @@ -302,7 +302,7 @@ If you are adding a feature, you will definitely need to add tests. Depending on Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run. -Unit tests are mandatory for all code except the renderers. (The renderers are tested with integration tests.) +Unit tests are mandatory for all code except the layout tests. (The layouts are tested with integration tests.) We use [Vitest](https://vitest.dev) to run unit tests. @@ -328,6 +328,30 @@ When using Docker prepend your command with `./run`: ./run pnpm test ``` +##### Testing the DOM + +One can use `jsdomIt` to test any part of Mermaid that interacts with the DOM, as long as it is not related to the layout. + +The function `jsdomIt` ([developed in utils.ts](../../tests/util.ts)) overrides `it` from `vitest`, and creates a pseudo-browser environment that works almost like the real deal for the duration of the test. It uses JSDOM to create a DOM, and adds objects `window` and `document` to `global` to mock the browser environment. + +> [!NOTE] +> The layout cannot work in `jsdomIt` tests because JSDOM has no rendering engine, hence the pseudo-browser environment. + +Example : + +```typescript +import { ensureNodeFromSelector, jsdomIt } from './tests/util.js'; + +jsdomIt('should add element "thing" in the SVG', ({ svg }) => { + // Code in this block runs in a pseudo-browser environment + addThing(svg); // The svg item is the D3 selection of the SVG node + const svgNode = ensureNodeFromSelector('svg'); // Retrieve the DOM node using the DOM API + expect(svgNode.querySelector('thing')).not.toBeNull(); // Test the structure of the SVG +}); +``` + +They can be used to test any method that interacts with the DOM, including for testing renderers. For renderers, additional integration testing is necessary to test the layout though. + #### Integration / End-to-End (E2E) Tests These test the rendering and visual appearance of the diagrams. diff --git a/packages/mermaid/src/docs/community/new-diagram.md b/packages/mermaid/src/docs/community/new-diagram.md index 16504ca32..147caa121 100644 --- a/packages/mermaid/src/docs/community/new-diagram.md +++ b/packages/mermaid/src/docs/community/new-diagram.md @@ -106,3 +106,13 @@ const themes = { ``` The actual options and values for the colors are defined in **src/theme/theme-[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups. + +## Examples + +The `@mermaid-js/examples` package contains a collection of examples that are used by tools like mermaid.live to help users get started with the new diagram. + +You can duplicate an existing diagram example file, eg: `packages/examples/src/examples/flowchart.ts`, and modify it with details specific to your diagram. + +Then you can import the example in the `packages/examples/src/index.ts` file and add it to the `examples` array. + +Each diagram should have at least one example, and that should be marked as default. It is good to add more examples to showcase different features of the diagram. diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json index fb591f9d3..6ec43eb93 100644 --- a/packages/mermaid/src/docs/package.json +++ b/packages/mermaid/src/docs/package.json @@ -27,7 +27,7 @@ "@iconify-json/carbon": "^1.1.37", "@unocss/reset": "^66.0.0", "@vite-pwa/vitepress": "^1.0.0", - "@vitejs/plugin-vue": "^5.0.5", + "@vitejs/plugin-vue": "^6.0.0", "fast-glob": "^3.3.3", "https-localhost": "^4.7.1", "pathe": "^2.0.3", diff --git a/packages/mermaid/src/docs/syntax/packet.md b/packages/mermaid/src/docs/syntax/packet.md index 065909933..375ff81d3 100644 --- a/packages/mermaid/src/docs/syntax/packet.md +++ b/packages/mermaid/src/docs/syntax/packet.md @@ -11,7 +11,7 @@ This diagram type is particularly useful for developers, network engineers, educ ## Syntax ``` -packet-beta +packet start: "Block name" %% Single-bit block start-end: "Block name" %% Multi-bit blocks ... More Fields ... @@ -22,7 +22,7 @@ start-end: "Block name" %% Multi-bit blocks Using start and end bit counts can be difficult, especially when modifying a design. For this we add a bit count field, which starts from the end of the previous field automagically. Use `+` to set the number of bits, thus: ``` -packet-beta +packet +1: "Block name" %% Single-bit block +8: "Block name" %% 8-bit block 9-15: "Manually set start and end, it's fine to mix and match" @@ -35,7 +35,7 @@ packet-beta --- title: "TCP Packet" --- -packet-beta +packet 0-15: "Source Port" 16-31: "Destination Port" 32-63: "Sequence Number" @@ -56,7 +56,7 @@ packet-beta ``` ```mermaid-example -packet-beta +packet title UDP Packet +16: "Source Port" +16: "Destination Port" @@ -104,7 +104,7 @@ config: packet: startByteColor: red --- -packet-beta +packet 0-15: "Source Port" 16-31: "Destination Port" 32-63: "Sequence Number" diff --git a/packages/mermaid/src/mermaid.ts b/packages/mermaid/src/mermaid.ts index 3ab31ee25..46e7cac63 100644 --- a/packages/mermaid/src/mermaid.ts +++ b/packages/mermaid/src/mermaid.ts @@ -5,7 +5,7 @@ import { registerIconPacks } from './rendering-util/icons.js'; import { dedent } from 'ts-dedent'; import type { MermaidConfig } from './config.type.js'; -import { detectType, registerLazyLoadedDiagrams } from './diagram-api/detectType.js'; +import { detectType, detectors, registerLazyLoadedDiagrams } from './diagram-api/detectType.js'; import { addDiagrams } from './diagram-api/diagram-orchestration.js'; import { loadRegisteredDiagrams } from './diagram-api/loadDiagram.js'; import type { ExternalDiagramDefinition, SVG, SVGGroup } from './diagram-api/types.js'; @@ -415,6 +415,17 @@ const render: typeof mermaidAPI.render = (id, text, container) => { }); }; +/** + * Gets the metadata for all registered diagrams. + * Currently only the id is returned. + * @returns An array of objects with the id of the diagram. + */ +const getRegisteredDiagramsMetadata = (): Pick[] => { + return Object.keys(detectors).map((id) => ({ + id, + })); +}; + export interface Mermaid { startOnLoad: boolean; parseError?: ParseErrorFunction; @@ -437,6 +448,7 @@ export interface Mermaid { setParseErrorHandler: typeof setParseErrorHandler; detectType: typeof detectType; registerIconPacks: typeof registerIconPacks; + getRegisteredDiagramsMetadata: typeof getRegisteredDiagramsMetadata; } const mermaid: Mermaid = { @@ -454,6 +466,7 @@ const mermaid: Mermaid = { setParseErrorHandler, detectType, registerIconPacks, + getRegisteredDiagramsMetadata, }; export default mermaid; diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts index 91022516a..ef2ffdc73 100644 --- a/packages/mermaid/src/mermaidAPI.spec.ts +++ b/packages/mermaid/src/mermaidAPI.spec.ts @@ -1,40 +1,5 @@ import { assert, beforeEach, describe, expect, it, vi } from 'vitest'; -// ------------------------------------- -// Mocks and mocking - -import { MockedD3 } from './tests/MockedD3.js'; - -// Note: If running this directly from within an IDE, the mocks directory must be at packages/mermaid/mocks -vi.mock('d3'); -vi.mock('dagre-d3'); - -// mermaidAPI.spec.ts: -import * as accessibility from './accessibility.js'; // Import it this way so we can use spyOn(accessibility,...) -vi.mock('./accessibility.js', () => ({ - setA11yDiagramInfo: vi.fn(), - addSVGa11yTitleDescription: vi.fn(), -})); - -// Mock the renderers specifically so we can test render(). Need to mock draw() for each renderer -vi.mock('./diagrams/c4/c4Renderer.js'); -vi.mock('./diagrams/class/classRenderer.js'); -vi.mock('./diagrams/class/classRenderer-v2.js'); -vi.mock('./diagrams/er/erRenderer.js'); -vi.mock('./diagrams/flowchart/flowRenderer-v2.js'); -vi.mock('./diagrams/git/gitGraphRenderer.js'); -vi.mock('./diagrams/gantt/ganttRenderer.js'); -vi.mock('./diagrams/user-journey/journeyRenderer.js'); -vi.mock('./diagrams/pie/pieRenderer.js'); -vi.mock('./diagrams/packet/renderer.js'); -vi.mock('./diagrams/xychart/xychartRenderer.js'); -vi.mock('./diagrams/requirement/requirementRenderer.js'); -vi.mock('./diagrams/sequence/sequenceRenderer.js'); -vi.mock('./diagrams/radar/renderer.js'); -vi.mock('./diagrams/architecture/architectureRenderer.js'); - -// ------------------------------------- - import assignWithDepth from './assignWithDepth.js'; import type { MermaidConfig } from './config.type.js'; import mermaid from './mermaid.js'; @@ -75,6 +40,9 @@ import { SequenceDB } from './diagrams/sequence/sequenceDb.js'; import { decodeEntities, encodeEntities } from './utils.js'; import { toBase64 } from './utils/base64.js'; import { StateDB } from './diagrams/state/stateDb.js'; +import { ensureNodeFromSelector, jsdomIt } from './tests/util.js'; +import { select } from 'd3'; +import { JSDOM } from 'jsdom'; /** * @see https://vitest.dev/guide/mocking.html Mock part of a module @@ -225,63 +193,49 @@ describe('mermaidAPI', () => { }); }); - const fauxParentNode = new MockedD3(); - const fauxEnclosingDiv = new MockedD3(); - const fauxSvgNode = new MockedD3(); - describe('appendDivSvgG', () => { - const fauxGNode = new MockedD3(); - const parent_append_spy = vi.spyOn(fauxParentNode, 'append').mockReturnValue(fauxEnclosingDiv); - const div_append_spy = vi.spyOn(fauxEnclosingDiv, 'append').mockReturnValue(fauxSvgNode); - // @ts-ignore @todo TODO why is this getting a type error? - const div_attr_spy = vi.spyOn(fauxEnclosingDiv, 'attr').mockReturnValue(fauxEnclosingDiv); - const svg_append_spy = vi.spyOn(fauxSvgNode, 'append').mockReturnValue(fauxGNode); - // @ts-ignore @todo TODO why is this getting a type error? - const svg_attr_spy = vi.spyOn(fauxSvgNode, 'attr').mockReturnValue(fauxSvgNode); - // cspell:ignore dthe - it('appends a div node', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); - expect(parent_append_spy).toHaveBeenCalledWith('div'); - expect(div_append_spy).toHaveBeenCalledWith('svg'); + jsdomIt('appends a div node', ({ body }) => { + appendDivSvgG(body, 'theId', 'dtheId'); + const divNode = ensureNodeFromSelector('div'); + const svgNode = ensureNodeFromSelector('svg', divNode); + ensureNodeFromSelector('g', svgNode); }); - it('the id for the div is "d" with the id appended', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); - expect(div_attr_spy).toHaveBeenCalledWith('id', 'dtheId'); + jsdomIt('the id for the div is "d" with the id appended', ({ body }) => { + appendDivSvgG(body, 'theId', 'dtheId'); + const divNode = ensureNodeFromSelector('div'); + expect(divNode?.getAttribute('id')).toBe('dtheId'); }); - it('sets the style for the div if one is given', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId', 'given div style', 'given x link'); - expect(div_attr_spy).toHaveBeenCalledWith('style', 'given div style'); + jsdomIt('sets the style for the div if one is given', ({ body }) => { + appendDivSvgG(body, 'theId', 'dtheId', 'given div style', 'given x link'); + const divNode = ensureNodeFromSelector('div'); + expect(divNode?.getAttribute('style')).toBe('given div style'); }); - it('appends a svg node to the div node', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); - expect(div_attr_spy).toHaveBeenCalledWith('id', 'dtheId'); + jsdomIt('sets the svg width to 100%', ({ body }) => { + appendDivSvgG(body, 'theId', 'dtheId'); + const svgNode = ensureNodeFromSelector('div > svg'); + expect(svgNode.getAttribute('width')).toBe('100%'); }); - it('sets the svg width to 100%', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); - expect(svg_attr_spy).toHaveBeenCalledWith('width', '100%'); + jsdomIt('the svg id is the id', ({ body }) => { + appendDivSvgG(body, 'theId', 'dtheId'); + const svgNode = ensureNodeFromSelector('div > svg'); + expect(svgNode.getAttribute('id')).toBe('theId'); }); - it('the svg id is the id', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); - expect(svg_attr_spy).toHaveBeenCalledWith('id', 'theId'); + jsdomIt('the svg xml namespace is the 2000 standard', ({ body }) => { + appendDivSvgG(body, 'theId', 'dtheId'); + const svgNode = ensureNodeFromSelector('div > svg'); + expect(svgNode.getAttribute('xmlns')).toBe('http://www.w3.org/2000/svg'); }); - it('the svg xml namespace is the 2000 standard', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); - expect(svg_attr_spy).toHaveBeenCalledWith('xmlns', 'http://www.w3.org/2000/svg'); + jsdomIt('sets the svg xlink if one is given', ({ body }) => { + appendDivSvgG(body, 'theId', 'dtheId', 'div style', 'given x link'); + const svgNode = ensureNodeFromSelector('div > svg'); + expect(svgNode.getAttribute('xmlns:xlink')).toBe('given x link'); }); - it('sets the svg xlink if one is given', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId', 'div style', 'given x link'); - expect(svg_attr_spy).toHaveBeenCalledWith('xmlns:xlink', 'given x link'); - }); - it('appends a g (group) node to the svg node', () => { - appendDivSvgG(fauxParentNode, 'theId', 'dtheId'); - expect(svg_append_spy).toHaveBeenCalledWith('g'); - }); - it('returns the given parentRoot d3 nodes', () => { - expect(appendDivSvgG(fauxParentNode, 'theId', 'dtheId')).toEqual(fauxParentNode); + jsdomIt('returns the given parentRoot d3 nodes', ({ body }) => { + expect(appendDivSvgG(body, 'theId', 'dtheId')).toEqual(body); }); }); @@ -782,9 +736,9 @@ graph TD;A--x|text including URL space|B;`) // render(id, text, cb?, svgContainingElement?) // Test all diagram types. Note that old flowchart 'graph' type will invoke the flowRenderer-v2. (See the flowchart v2 detector.) - // We have to have both the specific textDiagramType and the expected type name because the expected type may be slightly different than was is put in the diagram text (ex: in -v2 diagrams) + // We have to have both the specific textDiagramType and the expected type name because the expected type may be slightly different from what is put in the diagram text (ex: in -v2 diagrams) const diagramTypesAndExpectations = [ - { textDiagramType: 'C4Context', expectedType: 'c4' }, + // { textDiagramType: 'C4Context', expectedType: 'c4' }, TODO : setAccTitle not called in C4 jison parser { textDiagramType: 'classDiagram', expectedType: 'class' }, { textDiagramType: 'classDiagram-v2', expectedType: 'classDiagram' }, { textDiagramType: 'erDiagram', expectedType: 'er' }, @@ -794,8 +748,13 @@ graph TD;A--x|text including URL space|B;`) { textDiagramType: 'gantt', expectedType: 'gantt' }, { textDiagramType: 'journey', expectedType: 'journey' }, { textDiagramType: 'pie', expectedType: 'pie' }, + { textDiagramType: 'packet', expectedType: 'packet' }, { textDiagramType: 'packet-beta', expectedType: 'packet' }, - { textDiagramType: 'xychart-beta', expectedType: 'xychart' }, + { + textDiagramType: 'xychart-beta', + expectedType: 'xychart', + content: 'x-axis "Attempts" 10000 --> 10000\ny-axis "Passing tests" 1 --> 1\nbar [1]', + }, { textDiagramType: 'xychart', expectedType: 'xychart' }, { textDiagramType: 'requirementDiagram', expectedType: 'requirement' }, { textDiagramType: 'sequenceDiagram', expectedType: 'sequence' }, @@ -812,20 +771,25 @@ graph TD;A--x|text including URL space|B;`) diagramTypesAndExpectations.forEach((testedDiagram) => { describe(`${testedDiagram.textDiagramType}`, () => { const diagramType = testedDiagram.textDiagramType; - const diagramText = `${diagramType}\n accTitle: ${a11yTitle}\n accDescr: ${a11yDescr}\n`; + const content = testedDiagram.content || ''; + const diagramText = `${diagramType}\n accTitle: ${a11yTitle}\n accDescr: ${a11yDescr}\n ${content}`; const expectedDiagramType = testedDiagram.expectedType; - it('should set aria-roledescription to the diagram type AND should call addSVGa11yTitleDescription', async () => { - const a11yDiagramInfo_spy = vi.spyOn(accessibility, 'setA11yDiagramInfo'); - const a11yTitleDesc_spy = vi.spyOn(accessibility, 'addSVGa11yTitleDescription'); - const result = await mermaidAPI.render(id, diagramText); - expect(result.diagramType).toBe(expectedDiagramType); - expect(a11yDiagramInfo_spy).toHaveBeenCalledWith( - expect.anything(), - expectedDiagramType - ); - expect(a11yTitleDesc_spy).toHaveBeenCalled(); - }); + jsdomIt( + 'should set aria-roledescription to the diagram type AND should call addSVGa11yTitleDescription', + async () => { + const { svg } = await mermaidAPI.render(id, diagramText); + const dom = new JSDOM(svg); + const svgNode = ensureNodeFromSelector('svg', dom.window.document); + const descNode = ensureNodeFromSelector('desc', svgNode); + const titleNode = ensureNodeFromSelector('title', svgNode); + expect(svgNode.getAttribute('aria-roledescription')).toBe(expectedDiagramType); + expect(svgNode.getAttribute('aria-describedby')).toBe(`chart-desc-${id}`); + expect(descNode.getAttribute('id')).toBe(`chart-desc-${id}`); + expect(descNode.innerHTML).toBe(a11yDescr); + expect(titleNode.innerHTML).toBe(a11yTitle); + } + ); }); }); }); diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/note.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/note.ts index 4a7f66a87..bc1e2d277 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/note.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/note.ts @@ -17,7 +17,7 @@ export async function note( if (!useHtmlLabels) { node.centerLabel = true; } - const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node)); + const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node)); const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0); const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0); const x = -totalWidth / 2; @@ -50,6 +50,11 @@ export async function note( rect.selectAll('path').attr('style', nodeStyles); } + label.attr( + 'transform', + `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})` + ); + updateNodeBounds(node, rect); node.intersect = function (point) { diff --git a/packages/mermaid/src/tests/MockedD3.ts b/packages/mermaid/src/tests/MockedD3.ts deleted file mode 100644 index 019aed124..000000000 --- a/packages/mermaid/src/tests/MockedD3.ts +++ /dev/null @@ -1,150 +0,0 @@ -/** - * This is a mocked/stubbed version of the d3 Selection type. Each of the main functions are all - * mocked (via vi.fn()) so you can track if they have been called, etc. - * - * Note that node() returns a HTML Element with tag 'svg'. It is an empty element (no innerHTML, no children, etc). - * This potentially allows testing of mermaidAPI render(). - */ -export class MockedD3 { - public attribs = new Map(); - public id: string | undefined = ''; - _children: MockedD3[] = []; - - _containingHTMLdoc = new Document(); - - constructor(givenId = 'mock-id') { - this.id = givenId; - } - - /** Helpful utility during development/debugging. This is not a real d3 function */ - public listChildren(): string { - return this._children - .map((child) => { - return child.id; - }) - .join(', '); - } - - select = vi.fn().mockImplementation(({ select_str = '' }): MockedD3 => { - // Get the id from an argument string. if it is of the form [id='some-id'], strip off the - // surrounding id[..] - const stripSurroundRegexp = /\[id='(.*)']/; - const matchedSurrounds = select_str.match(stripSurroundRegexp); - const cleanId = matchedSurrounds ? matchedSurrounds[1] : select_str; - return new MockedD3(cleanId); - }); - - // This has the same implementation as select(). (It calls it.) - selectAll = vi.fn().mockImplementation(({ select_str = '' }): MockedD3 => { - return this.select(select_str); - }); - - append = vi.fn().mockImplementation(function ( - this: MockedD3, - type: string, - id = '' + '-appended' - ): MockedD3 { - const newMock = new MockedD3(id); - newMock.attribs.set('type', type); - this._children.push(newMock); - return newMock; - }); - - // NOTE: The d3 implementation allows for a selector ('beforeSelector' arg below). - // With this mocked implementation, we assume it will always refer to a node id - // and will always be of the form "#[id of the node to insert before]". - // To keep this simple, any leading '#' is removed and the resulting string is the node id searched. - insert = (type: string, beforeSelector?: string, id = this.id + '-inserted'): MockedD3 => { - const newMock = new MockedD3(id); - newMock.attribs.set('type', type); - if (beforeSelector === undefined) { - this._children.push(newMock); - } else { - const idOnly = beforeSelector.startsWith('#') ? beforeSelector.substring(1) : beforeSelector; - const foundIndex = this._children.findIndex((child) => child.id === idOnly); - if (foundIndex < 0) { - this._children.push(newMock); - } else { - this._children.splice(foundIndex, 0, newMock); - } - } - return newMock; - }; - - attr(attrName: string): undefined | string; - attr(attrName: string, attrValue: string): MockedD3; - attr(attrName: string, attrValue?: string): undefined | string | MockedD3 { - if (arguments.length === 1) { - return this.attribs.get(attrName); - } else { - if (attrName === 'id') { - this.id = attrValue; // also set the id explicitly - } - if (attrValue !== undefined) { - this.attribs.set(attrName, attrValue); - } - return this; - } - } - - public lower(attrValue = '') { - this.attribs.set('lower', attrValue); - return this; - } - public style(attrValue = '') { - this.attribs.set('style', attrValue); - return this; - } - public text(attrValue = '') { - this.attribs.set('text', attrValue); - return this; - } - - // NOTE: Returns a HTML Element with tag 'svg' that has _another_ 'svg' element child. - // This allows different tests to succeed -- some need a top level 'svg' and some need a 'svg' element to be the firstChild - // Real implementation returns an HTML Element - public node = vi.fn().mockImplementation(() => { - //create a top level svg element - const topElem = this._containingHTMLdoc.createElement('svg'); - //@ts-ignore - this is a mock SVG element - topElem.getBBox = this.getBBox; - const elem_svgChild = this._containingHTMLdoc.createElement('svg'); // another svg element - topElem.appendChild(elem_svgChild); - return topElem; - }); - - // TODO Is this correct? shouldn't it return a list of HTML Elements? - nodes = vi.fn().mockImplementation(function (this: MockedD3): MockedD3[] { - return this._children; - }); - - // This will try to use attrs that have been set. - getBBox = () => { - const x = this.attribs.has('x') ? this.attribs.get('x') : 20; - const y = this.attribs.has('y') ? this.attribs.get('y') : 30; - const width = this.attribs.has('width') ? this.attribs.get('width') : 140; - const height = this.attribs.has('height') ? this.attribs.get('height') : 250; - return { - x: x, - y: y, - width: width, - height: height, - }; - }; - - // -------------------------------------------------------------------------------- - // The following functions are here for completeness. They simply return a vi.fn() - - insertBefore = vi.fn(); - curveBasis = vi.fn(); - curveBasisClosed = vi.fn(); - curveBasisOpen = vi.fn(); - curveLinear = vi.fn(); - curveLinearClosed = vi.fn(); - curveMonotoneX = vi.fn(); - curveMonotoneY = vi.fn(); - curveNatural = vi.fn(); - curveStep = vi.fn(); - curveStepAfter = vi.fn(); - curveStepBefore = vi.fn(); -} diff --git a/packages/mermaid/src/tests/setup.ts b/packages/mermaid/src/tests/setup.ts deleted file mode 100644 index b3330787c..000000000 --- a/packages/mermaid/src/tests/setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { vi } from 'vitest'; -vi.mock('d3'); -vi.mock('dagre-d3-es'); diff --git a/packages/mermaid/src/tests/util.ts b/packages/mermaid/src/tests/util.ts index 922078876..c5ac9c149 100644 --- a/packages/mermaid/src/tests/util.ts +++ b/packages/mermaid/src/tests/util.ts @@ -26,6 +26,10 @@ ${'2w'} | ${dayjs.duration(2, 'w')} ``` */ +import { JSDOM } from 'jsdom'; +import { expect, it } from 'vitest'; +import { select, type Selection } from 'd3'; + export const convert = (template: TemplateStringsArray, ...params: unknown[]) => { const header = template[0] .trim() @@ -42,3 +46,83 @@ export const convert = (template: TemplateStringsArray, ...params: unknown[]) => } return out; }; + +/** + * Getting rid of linter issues to make {@link jsdomIt} work. + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function setOnProtectedConstant(object: any, key: string, value: unknown): void { + object[key] = value; +} + +export const MOCKED_BBOX = { + x: 0, + y: 0, + width: 666, + height: 666, +}; + +interface JsdomItInput { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + body: Selection; // The `any` here comes from D3'as API. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + svg: Selection; // The `any` here comes from D3'as API. +} + +/** + * Test method borrowed from d3 : https://github.com/d3/d3-selection/blob/v3.0.0/test/jsdom.js + * + * Fools d3 into thinking it's working in a browser with a real DOM. + * + * The DOM is actually an instance of JSDom with monkey-patches for DOM methods that require a + * rendering engine. + * + * The resulting environment is capable of rendering SVGs with the caveat that layouts are + * completely screwed. + * + * This makes it possible to make structural tests instead of mocking everything. + */ +export function jsdomIt(message: string, run: (input: JsdomItInput) => void | Promise) { + return it(message, async (): Promise => { + const oldWindow = global.window; + const oldDocument = global.document; + + try { + const baseHtml = ` + + + + + + `; + const dom = new JSDOM(baseHtml, { + resources: 'usable', + beforeParse(_window) { + // Mocks DOM functions that require rendering, JSDOM doesn't + setOnProtectedConstant(_window.Element.prototype, 'getBBox', () => MOCKED_BBOX); + setOnProtectedConstant(_window.Element.prototype, 'getComputedTextLength', () => 200); + }, + }); + setOnProtectedConstant(global, 'window', dom.window); // Fool D3 into thinking it's in a browser + setOnProtectedConstant(global, 'document', dom.window.document); // Fool D3 into thinking it's in a browser + setOnProtectedConstant(global, 'MutationObserver', undefined); // JSDOM doesn't like cytoscape elements + + const body = select('body'); + const svg = select('svg'); + await run({ body, svg }); + } finally { + setOnProtectedConstant(global, 'window', oldWindow); + setOnProtectedConstant(global, 'document', oldDocument); + } + }); +} + +/** + * Retrieves the node from its parent with ParentNode#querySelector, + * then checks that it exists before returning it. + */ +export function ensureNodeFromSelector(selector: string, parent: ParentNode = document): Element { + const node = parent.querySelector(selector); + expect(node).not.toBeNull(); + return node!; +} diff --git a/packages/mermaid/src/utils.spec.ts b/packages/mermaid/src/utils.spec.ts index df9e6cf9a..35a2dfdd3 100644 --- a/packages/mermaid/src/utils.spec.ts +++ b/packages/mermaid/src/utils.spec.ts @@ -1,11 +1,11 @@ -import { vi } from 'vitest'; +import { expect, vi } from 'vitest'; import utils, { calculatePoint, cleanAndMerge, detectDirective } from './utils.js'; import assignWithDepth from './assignWithDepth.js'; import { detectType } from './diagram-api/detectType.js'; import { addDiagrams } from './diagram-api/diagram-orchestration.js'; import memoize from 'lodash-es/memoize.js'; -import { MockedD3 } from './tests/MockedD3.js'; import { preprocessDiagram } from './preprocess.js'; +import { MOCKED_BBOX, ensureNodeFromSelector, jsdomIt } from './tests/util.js'; addDiagrams(); @@ -369,53 +369,34 @@ describe('when initializing the id generator', function () { }); describe('when inserting titles', function () { - const svg = new MockedD3('svg'); - const mockedElement = { - getBBox: vi.fn().mockReturnValue({ x: 10, y: 11, width: 100, height: 200 }), - }; - const fauxTitle = new MockedD3('title'); - - beforeEach(() => { - svg.node = vi.fn().mockReturnValue(mockedElement); - }); - - it('does nothing if the title is empty', function () { - const svgAppendSpy = vi.spyOn(svg, 'append'); + jsdomIt('does nothing if the title is empty', function ({ svg }) { utils.insertTitle(svg, 'testClass', 0, ''); - expect(svgAppendSpy).not.toHaveBeenCalled(); + const titleNode = document.querySelector('svg > text'); + expect(titleNode).toBeNull(); }); - it('appends the title as a text item with the given title text', function () { - const svgAppendSpy = vi.spyOn(svg, 'append').mockReturnValue(fauxTitle); - const titleTextSpy = vi.spyOn(fauxTitle, 'text'); - + jsdomIt('appends the title as a text item with the given title text', function ({ svg }) { utils.insertTitle(svg, 'testClass', 5, 'test title'); - expect(svgAppendSpy).toHaveBeenCalled(); - expect(titleTextSpy).toHaveBeenCalledWith('test title'); + const titleNode = ensureNodeFromSelector('svg > text'); + expect(titleNode.innerHTML).toBe('test title'); }); - it('x value is the bounds x position + half of the bounds width', () => { - vi.spyOn(svg, 'append').mockReturnValue(fauxTitle); - const titleAttrSpy = vi.spyOn(fauxTitle, 'attr'); - + jsdomIt('x value is the bounds x position + half of the bounds width', ({ svg }) => { utils.insertTitle(svg, 'testClass', 5, 'test title'); - expect(titleAttrSpy).toHaveBeenCalledWith('x', 10 + 100 / 2); + const titleNode = ensureNodeFromSelector('svg > text'); + expect(titleNode.getAttribute('x')).toBe(`${MOCKED_BBOX.x + MOCKED_BBOX.width / 2}`); }); - it('y value is the negative of given title top margin', () => { - vi.spyOn(svg, 'append').mockReturnValue(fauxTitle); - const titleAttrSpy = vi.spyOn(fauxTitle, 'attr'); - + jsdomIt('y value is the negative of given title top margin', ({ svg }) => { utils.insertTitle(svg, 'testClass', 5, 'test title'); - expect(titleAttrSpy).toHaveBeenCalledWith('y', -5); + const titleNode = ensureNodeFromSelector('svg > text'); + expect(titleNode.getAttribute('y')).toBe(`${MOCKED_BBOX.y - 5}`); }); - it('class is the given css class', () => { - vi.spyOn(svg, 'append').mockReturnValue(fauxTitle); - const titleAttrSpy = vi.spyOn(fauxTitle, 'attr'); - + jsdomIt('class is the given css class', ({ svg }) => { utils.insertTitle(svg, 'testClass', 5, 'test title'); - expect(titleAttrSpy).toHaveBeenCalledWith('class', 'testClass'); + const titleNode = ensureNodeFromSelector('svg > text'); + expect(titleNode.getAttribute('class')).toBe('testClass'); }); }); diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index f69a9ddff..da0f244a3 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/CHANGELOG.md @@ -1,5 +1,17 @@ # @mermaid-js/parser +## 0.6.1 + +### Patch Changes + +- [#6725](https://github.com/mermaid-js/mermaid/pull/6725) [`0da2922`](https://github.com/mermaid-js/mermaid/commit/0da2922ee7f47959e324ec10d3d21ee70594f557) Thanks [@shubham-mermaid](https://github.com/shubham-mermaid)! - chore: use Treemap instead of TreemapDoc in parser. + +## 0.6.0 + +### Minor Changes + +- [#6590](https://github.com/mermaid-js/mermaid/pull/6590) [`f338802`](https://github.com/mermaid-js/mermaid/commit/f338802642cdecf5b7ed6c19a20cf2a81effbbee) Thanks [@knsv](https://github.com/knsv)! - Adding support for the new diagram type nested treemap + ## 0.5.0 ### Minor Changes diff --git a/packages/parser/package.json b/packages/parser/package.json index e70b9f9b3..a51229ae8 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@mermaid-js/parser", - "version": "0.5.0", + "version": "0.6.1", "description": "MermaidJS parser", "author": "Yokozuna59", "contributors": [ diff --git a/packages/parser/src/language/index.ts b/packages/parser/src/language/index.ts index c41d7eeb8..9b31af5ba 100644 --- a/packages/parser/src/language/index.ts +++ b/packages/parser/src/language/index.ts @@ -8,7 +8,7 @@ export { Architecture, GitGraph, Radar, - TreemapDoc, + Treemap, Branch, Commit, Merge, @@ -20,7 +20,7 @@ export { isPieSection, isArchitecture, isGitGraph, - isTreemapDoc, + isTreemap, isBranch, isCommit, isMerge, diff --git a/packages/parser/src/language/packet/packet.langium b/packages/parser/src/language/packet/packet.langium index 08cf10596..917cd4710 100644 --- a/packages/parser/src/language/packet/packet.langium +++ b/packages/parser/src/language/packet/packet.langium @@ -3,7 +3,7 @@ import "../common/common"; entry Packet: NEWLINE* - "packet-beta" + ("packet"| "packet-beta") ( TitleAndAccessibilities | blocks+=PacketBlock diff --git a/packages/parser/src/language/packet/tokenBuilder.ts b/packages/parser/src/language/packet/tokenBuilder.ts index accba5675..c0bbdf3ed 100644 --- a/packages/parser/src/language/packet/tokenBuilder.ts +++ b/packages/parser/src/language/packet/tokenBuilder.ts @@ -2,6 +2,6 @@ import { AbstractMermaidTokenBuilder } from '../common/index.js'; export class PacketTokenBuilder extends AbstractMermaidTokenBuilder { public constructor() { - super(['packet-beta']); + super(['packet']); } } diff --git a/packages/parser/src/language/treemap/treemap-validator.ts b/packages/parser/src/language/treemap/treemap-validator.ts index 9a9e5c469..4509b4b58 100644 --- a/packages/parser/src/language/treemap/treemap-validator.ts +++ b/packages/parser/src/language/treemap/treemap-validator.ts @@ -1,5 +1,5 @@ import type { ValidationAcceptor, ValidationChecks } from 'langium'; -import type { MermaidAstType, TreemapDoc } from '../generated/ast.js'; +import type { MermaidAstType, Treemap } from '../generated/ast.js'; import type { TreemapServices } from './module.js'; /** @@ -9,10 +9,10 @@ export function registerValidationChecks(services: TreemapServices) { const validator = services.validation.TreemapValidator; const registry = services.validation.ValidationRegistry; if (registry) { - // Use any to bypass type checking since we know TreemapDoc is part of the AST + // Use any to bypass type checking since we know Treemap is part of the AST // but the type system is having trouble with it const checks: ValidationChecks = { - TreemapDoc: validator.checkSingleRoot.bind(validator), + Treemap: validator.checkSingleRoot.bind(validator), // Remove unused validation for TreemapRow }; registry.register(checks, validator); @@ -27,7 +27,7 @@ export class TreemapValidator { * Validates that a treemap has only one root node. * A root node is defined as a node that has no indentation. */ - checkSingleRoot(doc: TreemapDoc, accept: ValidationAcceptor): void { + checkSingleRoot(doc: Treemap, accept: ValidationAcceptor): void { let rootNodeIndentation; for (const row of doc.TreemapRows) { diff --git a/packages/parser/src/language/treemap/treemap.langium b/packages/parser/src/language/treemap/treemap.langium index 45ee2588f..c35d5f0e9 100644 --- a/packages/parser/src/language/treemap/treemap.langium +++ b/packages/parser/src/language/treemap/treemap.langium @@ -34,14 +34,14 @@ interface ClassDefStatement { className: string styleText: string // Optional style text } -interface TreemapDoc { +interface Treemap { TreemapRows: TreemapRow[] title?: string accTitle?: string accDescr?: string } -entry TreemapDoc returns TreemapDoc: +entry Treemap returns Treemap: TREEMAP_KEYWORD ( TitleAndAccessibilities diff --git a/packages/parser/tests/packet.test.ts b/packages/parser/tests/packet.test.ts index eb2ea303d..1b2e1a496 100644 --- a/packages/parser/tests/packet.test.ts +++ b/packages/parser/tests/packet.test.ts @@ -11,6 +11,12 @@ describe('packet', () => { ` \tpacket-beta `, + `packet`, + ` packet `, + `\tpacket\t`, + ` + \tpacket + `, ])('should handle regular packet', (context: string) => { const result = parse(context); expectNoErrorsOrAlternatives(result); diff --git a/packages/parser/tests/test-util.ts b/packages/parser/tests/test-util.ts index e6b563823..ee7627109 100644 --- a/packages/parser/tests/test-util.ts +++ b/packages/parser/tests/test-util.ts @@ -32,15 +32,10 @@ const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => undefined) * @param result - the result `parse` function. */ export function expectNoErrorsOrAlternatives(result: ParseResult) { - if (result.lexerErrors.length > 0) { - // console.debug(result.lexerErrors); - } - if (result.parserErrors.length > 0) { - // console.debug(result.parserErrors); - } - expect(result.lexerErrors).toHaveLength(0); - expect(result.parserErrors).toHaveLength(0); - + expect.soft(result.lexerErrors).toHaveLength(0); + expect.soft(result.parserErrors).toHaveLength(0); + // To see what the error is, in the logs. + expect(result.lexerErrors[0]).toBeUndefined(); expect(consoleMock).not.toHaveBeenCalled(); consoleMock.mockReset(); } diff --git a/packages/parser/tests/treemap.test.ts b/packages/parser/tests/treemap.test.ts index 6afb6e7db..b05ab39fc 100644 --- a/packages/parser/tests/treemap.test.ts +++ b/packages/parser/tests/treemap.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; import { expectNoErrorsOrAlternatives } from './test-util.js'; -import type { TreemapDoc, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js'; +import type { Treemap, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js'; import type { LangiumParser } from 'langium'; import { createTreemapServices } from '../src/language/treemap/module.js'; @@ -9,21 +9,21 @@ describe('Treemap Parser', () => { const parser: LangiumParser = services.parser.LangiumParser; const parse = (input: string) => { - return parser.parse(input); + return parser.parse(input); }; describe('Basic Parsing', () => { it('should parse empty treemap', () => { const result = parse('treemap'); expectNoErrorsOrAlternatives(result); - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); expect(result.value.TreemapRows).toHaveLength(0); }); it('should parse a section node', () => { const result = parse('treemap\n"Root"'); expectNoErrorsOrAlternatives(result); - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); expect(result.value.TreemapRows).toHaveLength(1); if (result.value.TreemapRows[0].item) { expect(result.value.TreemapRows[0].item.$type).toBe('Section'); @@ -39,7 +39,7 @@ describe('Treemap Parser', () => { "Child2" : 200 `); expectNoErrorsOrAlternatives(result); - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); expect(result.value.TreemapRows).toHaveLength(3); if (result.value.TreemapRows[0].item) { @@ -95,7 +95,7 @@ describe('Treemap Parser', () => { // We're only checking that the multiple root nodes parse successfully // The validation errors would be reported by the validator during validation - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); expect(result.value.TreemapRows).toHaveLength(2); }); }); @@ -104,7 +104,7 @@ describe('Treemap Parser', () => { it('should parse a treemap with title', () => { const result = parse('treemap\ntitle My Treemap Diagram\n"Root"\n "Child": 100'); expectNoErrorsOrAlternatives(result); - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); // We can't directly test the title property due to how Langium processes TitleAndAccessibilities // but we can verify the TreemapRows are parsed correctly expect(result.value.TreemapRows).toHaveLength(2); @@ -113,7 +113,7 @@ describe('Treemap Parser', () => { it('should parse a treemap with accTitle', () => { const result = parse('treemap\naccTitle: Accessible Title\n"Root"\n "Child": 100'); expectNoErrorsOrAlternatives(result); - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); // We can't directly test the accTitle property due to how Langium processes TitleAndAccessibilities expect(result.value.TreemapRows).toHaveLength(2); }); @@ -123,7 +123,7 @@ describe('Treemap Parser', () => { 'treemap\naccDescr: This is an accessible description\n"Root"\n "Child": 100' ); expectNoErrorsOrAlternatives(result); - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); // We can't directly test the accDescr property due to how Langium processes TitleAndAccessibilities expect(result.value.TreemapRows).toHaveLength(2); }); @@ -136,7 +136,7 @@ accDescr: This is an accessible description "Root" "Child": 100`); expectNoErrorsOrAlternatives(result); - expect(result.value.$type).toBe('TreemapDoc'); + expect(result.value.$type).toBe('Treemap'); // We can't directly test these properties due to how Langium processes TitleAndAccessibilities expect(result.value.TreemapRows).toHaveLength(2); }); diff --git a/packages/tiny/CHANGELOG.md b/packages/tiny/CHANGELOG.md index 1a266e140..c57e2a6db 100644 --- a/packages/tiny/CHANGELOG.md +++ b/packages/tiny/CHANGELOG.md @@ -1,5 +1,25 @@ # mermaid +## 11.8.1 + +### Patch Changes + +- Updated dependencies [[`0da2922`](https://github.com/mermaid-js/mermaid/commit/0da2922ee7f47959e324ec10d3d21ee70594f557)]: + - @mermaid-js/parser@0.6.1 + +## 11.8.0 + +### Minor Changes + +- [#6590](https://github.com/mermaid-js/mermaid/pull/6590) [`f338802`](https://github.com/mermaid-js/mermaid/commit/f338802642cdecf5b7ed6c19a20cf2a81effbbee) Thanks [@knsv](https://github.com/knsv)! - Adding support for the new diagram type nested treemap + +### Patch Changes + +- [#6707](https://github.com/mermaid-js/mermaid/pull/6707) [`592c5bb`](https://github.com/mermaid-js/mermaid/commit/592c5bb880c3b942710a2878d386bcb3eb35c137) Thanks [@darshanr0107](https://github.com/darshanr0107)! - fix: Log a warning when duplicate commit IDs are encountered in gitGraph to help identify and debug rendering issues caused by non-unique IDs. + +- Updated dependencies [[`f338802`](https://github.com/mermaid-js/mermaid/commit/f338802642cdecf5b7ed6c19a20cf2a81effbbee)]: + - @mermaid-js/parser@0.6.0 + ## 11.7.0 ### Minor Changes diff --git a/packages/tiny/package.json b/packages/tiny/package.json index 6ae7d440c..79dba051b 100644 --- a/packages/tiny/package.json +++ b/packages/tiny/package.json @@ -1,6 +1,6 @@ { "name": "@mermaid-js/tiny", - "version": "11.7.0", + "version": "11.8.1", "description": "Tiny version of mermaid", "type": "commonjs", "main": "./dist/mermaid.tiny.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 02be1b686..ea7a7dd21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,8 +17,8 @@ importers: specifier: ^3.44.9 version: 3.50.2(encoding@0.1.13)(typescript@5.7.3) '@argos-ci/cypress': - specifier: ^4.0.3 - version: 4.0.3(cypress@14.0.3) + specifier: ^5.0.2 + version: 5.0.2(cypress@14.5.1) '@changesets/changelog-github': specifier: ^0.5.1 version: 0.5.1(encoding@0.1.13) @@ -30,7 +30,7 @@ importers: version: 8.19.3(eslint@9.26.0(jiti@2.4.2)) '@cypress/code-coverage': specifier: ^3.12.49 - version: 3.13.4(@babel/core@7.27.1)(@babel/preset-env@7.27.2(@babel/core@7.27.1))(babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.95.0(esbuild@0.25.0)))(cypress@14.0.3)(webpack@5.95.0(esbuild@0.25.0)) + version: 3.13.4(@babel/core@7.27.1)(@babel/preset-env@7.27.2(@babel/core@7.27.1))(babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.95.0(esbuild@0.25.0)))(cypress@14.5.1)(webpack@5.95.0(esbuild@0.25.0)) '@eslint/js': specifier: ^9.26.0 version: 9.26.0 @@ -89,14 +89,14 @@ importers: specifier: ^7.0.3 version: 7.0.3 cspell: - specifier: ^8.6.1 - version: 8.17.4 + specifier: ^9.1.3 + version: 9.1.3 cypress: - specifier: ^14.0.3 - version: 14.0.3 + specifier: ^14.5.1 + version: 14.5.1 cypress-image-snapshot: specifier: ^4.0.1 - version: 4.0.1(cypress@14.0.3)(jest@29.7.0(@types/node@22.13.5)) + version: 4.0.1(cypress@14.5.1)(jest@30.0.4(@types/node@22.13.5)) cypress-split: specifier: ^1.24.14 version: 1.24.14(@babel/core@7.27.1) @@ -117,7 +117,7 @@ importers: version: 8.1.2 eslint-plugin-jest: specifier: ^28.11.0 - version: 28.11.0(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.13.5))(typescript@5.7.3) + version: 28.11.0(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(jest@30.0.4(@types/node@22.13.5))(typescript@5.7.3) eslint-plugin-jsdoc: specifier: ^50.6.9 version: 50.6.9(eslint@9.26.0(jiti@2.4.2)) @@ -152,8 +152,8 @@ importers: specifier: ^9.1.7 version: 9.1.7 jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.13.5) + specifier: ^30.0.4 + version: 30.0.4(@types/node@22.13.5) jison: specifier: ^0.4.18 version: 0.4.18 @@ -161,14 +161,14 @@ importers: specifier: ^4.1.0 version: 4.1.0 jsdom: - specifier: ^26.0.0 - version: 26.0.0 + specifier: ^26.1.0 + version: 26.1.0(canvas@3.1.2) langium-cli: specifier: 3.3.0 version: 3.3.0 lint-staged: - specifier: ^15.2.11 - version: 15.4.3 + specifier: ^16.1.2 + version: 16.1.2 markdown-table: specifier: ^3.0.4 version: 3.0.4 @@ -188,8 +188,8 @@ importers: specifier: ^6.0.1 version: 6.0.1 rollup-plugin-visualizer: - specifier: ^5.14.0 - version: 5.14.0(rollup@4.40.2) + specifier: ^6.0.3 + version: 6.0.3(rollup@4.40.2) start-server-and-test: specifier: ^2.0.10 version: 2.0.10 @@ -206,14 +206,20 @@ importers: specifier: ^8.32.0 version: 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) vite: - specifier: ^6.1.1 - version: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + specifier: ^7.0.3 + version: 7.0.3(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) vite-plugin-istanbul: specifier: ^7.0.0 - version: 7.0.0(vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1)) + version: 7.0.0(vite@7.0.3(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0)) vitest: specifier: ^3.0.6 - version: 3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.0.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + version: 3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.1.0(canvas@3.1.2))(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) + + packages/examples: + devDependencies: + mermaid: + specifier: workspace:* + version: link:../mermaid packages/mermaid: dependencies: @@ -254,8 +260,8 @@ importers: specifier: ^3.2.5 version: 3.2.5 katex: - specifier: ^0.16.9 - version: 0.16.11 + specifier: ^0.16.22 + version: 0.16.22 khroma: specifier: ^2.1.0 version: 2.1.0 @@ -263,8 +269,8 @@ importers: specifier: ^4.17.21 version: 4.17.21 marked: - specifier: ^15.0.7 - version: 15.0.7 + specifier: ^16.0.0 + version: 16.0.0 roughjs: specifier: ^4.6.6 version: 4.6.6(patch_hash=3543d47108cb41b68ec6a671c0e1f9d0cfe2ce524fea5b0992511ae84c3c6b64) @@ -326,6 +332,9 @@ importers: ajv: specifier: ^8.17.1 version: 8.17.1 + canvas: + specifier: ^3.1.0 + version: 3.1.2 chokidar: specifier: 3.6.0 version: 3.6.0 @@ -345,8 +354,8 @@ importers: specifier: ^3.7.7 version: 3.7.7 jsdom: - specifier: ^26.0.0 - version: 26.0.0 + specifier: ^26.1.0 + version: 26.1.0(canvas@3.1.2) json-schema-to-typescript: specifier: ^15.0.4 version: 15.0.4 @@ -394,10 +403,10 @@ importers: version: 5.0.0 vitepress: specifier: ^1.0.2 - version: 1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3) + version: 1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.6)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3) vitepress-plugin-search: specifier: 1.0.4-alpha.22 - version: 1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)) + version: 1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.6)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)) packages/mermaid-example-diagram: dependencies: @@ -476,10 +485,10 @@ importers: version: 66.0.0 '@vite-pwa/vitepress': specifier: ^1.0.0 - version: 1.0.0(vite-plugin-pwa@1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0)) + version: 1.0.0(vite-plugin-pwa@1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0)) '@vitejs/plugin-vue': - specifier: ^5.0.5 - version: 5.2.1(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3)) + specifier: ^6.0.0 + version: 6.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3)) fast-glob: specifier: ^3.3.3 version: 3.3.3 @@ -491,19 +500,19 @@ importers: version: 2.0.3 unocss: specifier: ^66.0.0 - version: 66.0.0(postcss@8.5.3)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3)) + version: 66.0.0(postcss@8.5.6)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3)) unplugin-vue-components: specifier: ^28.4.0 - version: 28.4.0(@babel/parser@7.27.2)(vue@3.5.13(typescript@5.7.3)) + version: 28.4.0(@babel/parser@7.28.0)(vue@3.5.13(typescript@5.7.3)) vite: specifier: ^6.1.1 - version: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + version: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) vite-plugin-pwa: specifier: ^1.0.0 - version: 1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0) + version: 1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0) vitepress: specifier: 1.6.3 - version: 1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3) + version: 1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.6)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3) workbox-window: specifier: ^7.3.0 version: 7.3.0 @@ -774,22 +783,22 @@ packages: resolution: {integrity: sha512-3IHv7ANSPNO6OwWgwULlHbP9/tFV9kQDu6+nL9jysfPkGj0GgtrOsyBb+iU931c7wSMo1OD+XNujCnRzDD968w==} engines: {node: '>=18.0.0'} - '@argos-ci/browser@4.1.1': - resolution: {integrity: sha512-UyKdnprGftUjWQkb0jqJ0zGHJmcWBzdko8zRy4y+4efukVX4jjC/Px2HvWW8aqwjoR4aplouMZuzhmOkq2SCsA==} + '@argos-ci/browser@4.1.2': + resolution: {integrity: sha512-OljPFzxSNndWSwMBxKGtN3p8lSbt73z+/0CIXbBVTQOPjPMErXWjgtrFL23xqtTq5wdds3uxGv7tjVDWJbgBYg==} engines: {node: '>=18.0.0'} - '@argos-ci/core@3.1.1': - resolution: {integrity: sha512-7iE3o1XGxlfHC5AF05pzT0OxuO387sryrZt3gKGj/e+6R20DXz7J49yI8++nQ2cuT+wLhcJp8+X0ox+SGMYHmw==} + '@argos-ci/core@3.2.1': + resolution: {integrity: sha512-P+tGofNLAtH0+e87M8sZc+juAtbOcnV6z2nA2MwB2OzUVVXGINJHAF2cK0ZUyXC9d8a7RL0+rQWkP4vXDA/gBw==} engines: {node: '>=18.0.0'} - '@argos-ci/cypress@4.0.3': - resolution: {integrity: sha512-JGP48zPwbUGU5ziLP4Okv6mTuLPiEPvQ954BoH78ySlNpDGxyw68yeY4jxz8QpYe+P7vvKmuZiUFPAXTFu8XiQ==} + '@argos-ci/cypress@5.0.2': + resolution: {integrity: sha512-k3h4qZohLh5BM0oVH3S8RcV8xw4ssTpG6/svm/wjucoE4auqfDTrkkPjnuxmbY6qB74V/JWcZIEV0DU6haMhFg==} engines: {node: '>=18.0.0'} peerDependencies: cypress: ^12.0.0 || ^13.0.0 || ^14.0.0 - '@argos-ci/util@2.3.1': - resolution: {integrity: sha512-kE61HU2480fbAnimmA4x9HK45ZJvkoqLdW5GxT5uvwhkclQykVd2S6WfGFUr3JokTXfZ5LZEEfoWgtGA316KSQ==} + '@argos-ci/util@2.3.2': + resolution: {integrity: sha512-xtNHJxpWYNst/sMNn4Jv/vkODuFsJ+APr4FBeoFUdIa+Izjl4ZFHsYA2PUyu+ygIpQCkof8yZLL9U1/VpiyyIw==} engines: {node: '>=18.0.0'} '@asamuzakjp/css-color@2.8.3': @@ -807,10 +816,18 @@ packages: resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} engines: {node: '>=6.9.0'} + '@babel/core@7.28.0': + resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.27.1': resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.1': resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} engines: {node: '>=6.9.0'} @@ -836,6 +853,10 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.27.1': resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} @@ -850,14 +871,16 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} 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'} @@ -906,6 +929,10 @@ packages: resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.26.9': resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} engines: {node: '>=6.0.0'} @@ -916,6 +943,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} @@ -979,12 +1011,6 @@ packages: 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.27.1': resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} @@ -1007,6 +1033,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1049,8 +1081,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.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1388,6 +1420,10 @@ packages: resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.0': + resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.26.9': resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} engines: {node: '>=6.9.0'} @@ -1396,6 +1432,10 @@ packages: resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.0': + resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1482,54 +1522,50 @@ packages: '@chevrotain/utils@11.0.3': resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - - '@cspell/cspell-bundled-dicts@8.17.4': - resolution: {integrity: sha512-oPNQU3Uwc0OnvAmC8Vs7DSCRBhGRbZvO8J57JEnJ6YMNyCJZpKq050OzbAWmNdjjZ7yRLJ+LOcxhzdFg2Qn4Yw==} - engines: {node: '>=18'} - '@cspell/cspell-bundled-dicts@8.19.3': resolution: {integrity: sha512-HRxcvD+fqgq6Ag6K7TMnlsO1Uq2nc3V/ug4huZSKK/+tErB1i/m4N4gkOzO0pFtQsJDhGdlio3Wud2ce6kVpdw==} engines: {node: '>=18'} - '@cspell/cspell-json-reporter@8.17.4': - resolution: {integrity: sha512-O7V2hMt6zPt2Eu5LSxFyD/dcZRUOASeY+8oE1O2xanfJUMOG1EldCt8LERSmU829RQ4VF4H2Z9TbeQzx+4G21w==} - engines: {node: '>=18'} + '@cspell/cspell-bundled-dicts@9.1.3': + resolution: {integrity: sha512-WbOkD32fjxz0hHMP6oTvAgi2VBlzYcqKPNwCo+4b9HefLWV5aiLaxp04d8CeifaAdlYjkjuqRTJXh/HfUeLCVg==} + engines: {node: '>=20'} - '@cspell/cspell-pipe@8.17.4': - resolution: {integrity: sha512-0KzqYetKMT9c3Pt77yRla2/zLDitpztEQ/VPYAbW5DCW+btRe5pAb6VQ7U6HKA2HoM2rhlLTWOBh4jauRFtgxA==} - engines: {node: '>=18'} + '@cspell/cspell-json-reporter@9.1.3': + resolution: {integrity: sha512-FvzlSQuU+bNeo77v0KrA/lkoe324cHvZNhkx7Dtp1aj01FeBr5Y36gozR3DNY6tewBi6hC7uLeeNg/iSBf6CWg==} + engines: {node: '>=20'} '@cspell/cspell-pipe@8.19.3': resolution: {integrity: sha512-Z90x+Kbq1P3A7iOsRe6FnsF2nisMKCY6bln03mTvHW0MmT8F69BEZTSZaL4z+kQ0L8qbjthJ+FqbQKYNNbPZpg==} engines: {node: '>=18'} - '@cspell/cspell-resolver@8.17.4': - resolution: {integrity: sha512-1Z3yZRuhnyGCheD2nt/ZswV+ulXBOfnKCoyfkUKNAR5ALkrqv6bjXXwZrpEi2cIK1km4/59ybT72+r2Ry9dGUw==} - engines: {node: '>=18'} + '@cspell/cspell-pipe@9.1.3': + resolution: {integrity: sha512-Cns37ml7IaXMWBci9XOqdTkP9nFtOO8+sJ4VvtbVO68Zo8v0vq74ApDbPgGI2HzYtn7Jj2hxQqGIBdLnmrMPyA==} + engines: {node: '>=20'} '@cspell/cspell-resolver@8.19.3': resolution: {integrity: sha512-hsEx/7q0tDCOFtMmlkpynlApgAWo4/7q846Y1deyDChtIElmS0dfuzdKzv3jvFi3KdTVgJyhJb+o7/OHH2D/4A==} engines: {node: '>=18'} - '@cspell/cspell-service-bus@8.17.4': - resolution: {integrity: sha512-S8fENifriBW8KdDIvOnsP9gdEyCp1zrs4GT15vmDvm6uoevj2mfmdCj4/EbM1KbmmNAh1tlidAgn2OWdtyW7Lg==} - engines: {node: '>=18'} + '@cspell/cspell-resolver@9.1.3': + resolution: {integrity: sha512-3h9AkbY+YutBG91fQxeSpfIRT50sfrNQ7IAS0N6fCvJ6z0sXed7UPYwf90NauQp/1lN/bVlHFFAgxDEyG720Yg==} + engines: {node: '>=20'} '@cspell/cspell-service-bus@8.19.3': resolution: {integrity: sha512-K66Vj8O+SWjPUTFq1wfpq5uoDLmZcB7tY3m154WQa94RNpW+/z9kLXVPxW1FctRXfjxfc7bqfLq4LF6Yiu72fg==} engines: {node: '>=18'} - '@cspell/cspell-types@8.17.4': - resolution: {integrity: sha512-1K6tXEMXSaoUXhH3TiaCyh3Nh8ZE0wPej0+wa5HAMtdcY1B3FGvHZ9DltkgZxbzs3bGNXIySFE5ITqULbhweBA==} - engines: {node: '>=18'} + '@cspell/cspell-service-bus@9.1.3': + resolution: {integrity: sha512-Ss4cCnkJI3IHDSOQKxhtAfypvZZDzuJeXbZFVimLvO22/8GdVH+vQxAFm3kBY+ACVUAe13MQIYzZxuFHaM9y8g==} + engines: {node: '>=20'} '@cspell/cspell-types@8.19.3': resolution: {integrity: sha512-q6aUHJSvUe0Bt57djQN7qQ/AVV9O6nVNO7Nj0rZxFsv/73CtUvJseSrpjlZgkHTRCjOL0iRsVG+B8IPaxjczgw==} engines: {node: '>=18'} + '@cspell/cspell-types@9.1.3': + resolution: {integrity: sha512-JPLFMp6qKj4fjsEDvMjVXFZg+j3HaRQ7raFtR2RPidYyKcUHPCVhX0wfJ0vuYxkC0Yst+99tgVxR8Wi57xs2Ew==} + engines: {node: '>=20'} + '@cspell/dict-ada@4.1.0': resolution: {integrity: sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg==} @@ -1539,20 +1575,17 @@ packages: '@cspell/dict-aws@4.0.10': resolution: {integrity: sha512-0qW4sI0GX8haELdhfakQNuw7a2pnWXz3VYQA2MpydH2xT2e6EN9DWFpKAi8DfcChm8MgDAogKkoHtIo075iYng==} - '@cspell/dict-aws@4.0.9': - resolution: {integrity: sha512-bDYdnnJGwSkIZ4gzrauu7qzOs/ZAY/FnU4k11LgdMI8BhwMfsbsy2EI1iS+sD/BI5ZnNT9kU5YR3WADeNOmhRg==} + '@cspell/dict-aws@4.0.12': + resolution: {integrity: sha512-k1F48eYlX+LsCK2QjqpfHBrjNwNwRyut/XsGumyhUXZsm+j9NVuxQaFCjiEwXi81KE0YE3GBVdwSjqhuUOkpnQ==} '@cspell/dict-bash@4.2.0': resolution: {integrity: sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg==} - '@cspell/dict-companies@3.1.14': - resolution: {integrity: sha512-iqo1Ce4L7h0l0GFSicm2wCLtfuymwkvgFGhmu9UHyuIcTbdFkDErH+m6lH3Ed+QuskJlpQ9dM7puMIGqUlVERw==} - '@cspell/dict-companies@3.1.15': resolution: {integrity: sha512-vnGYTJFrqM9HdtgpZFOThFTjlPyJWqPi0eidMKyZxMKTHhP7yg6mD5X9WPEPvfiysmJYMnA6KKYQEBqoKFPU9g==} - '@cspell/dict-cpp@6.0.3': - resolution: {integrity: sha512-OFrVXdxCeGKnon36Pe3yFjBuY4kzzEwWFf3vDz+cJTodZDkjFkBifQeTtt5YfimgF8cfAJZXkBCsxjipAgmAiw==} + '@cspell/dict-companies@3.2.2': + resolution: {integrity: sha512-iIuEBPfWzSQugIOn+OKOVsdfE9UloON5SKl57TbvC//D5mgIwPAMZGYT69yv20cjc5E6oMu353hCV3WFy9XO9A==} '@cspell/dict-cpp@6.0.8': resolution: {integrity: sha512-BzurRZilWqaJt32Gif6/yCCPi+FtrchjmnehVEIFzbWyeBd/VOUw77IwrEzehZsu5cRU91yPWuWp5fUsKfDAXA==} @@ -1569,21 +1602,21 @@ packages: '@cspell/dict-dart@2.3.0': resolution: {integrity: sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg==} - '@cspell/dict-data-science@2.0.7': - resolution: {integrity: sha512-XhAkK+nSW6zmrnWzusmZ1BpYLc62AWYHZc2p17u4nE2Z9XG5DleG55PCZxXQTKz90pmwlhFM9AfpkJsYaBWATA==} - '@cspell/dict-data-science@2.0.8': resolution: {integrity: sha512-uyAtT+32PfM29wRBeAkUSbkytqI8bNszNfAz2sGPtZBRmsZTYugKMEO9eDjAIE/pnT9CmbjNuoiXhk+Ss4fCOg==} + '@cspell/dict-data-science@2.0.9': + resolution: {integrity: sha512-wTOFMlxv06veIwKdXUwdGxrQcK44Zqs426m6JGgHIB/GqvieZQC5n0UI+tUm5OCxuNyo4OV6mylT4cRMjtKtWQ==} + '@cspell/dict-django@4.1.4': resolution: {integrity: sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==} - '@cspell/dict-docker@1.1.12': - resolution: {integrity: sha512-6d25ZPBnYZaT9D9An/x6g/4mk542R8bR3ipnby3QFCxnfdd6xaWiTcwDPsCgwN2aQZIQ1jX/fil9KmBEqIK/qA==} - '@cspell/dict-docker@1.1.13': resolution: {integrity: sha512-85X+ZC/CPT3ie26DcfeMFkZSNuhS8DlAqPXzAjilHtGE/Nj+QnS3jyBz0spDJOJrjh8wx1+ro2oCK98sbVcztw==} + '@cspell/dict-docker@1.1.15': + resolution: {integrity: sha512-wYthMAbEbqDBr9P90VC9aT3zjErrJbUtIr91pDmse7Y5WUvQtAwFhiJHgmNrtx2fZ2idII0eYvpMqoEO+FYFxw==} + '@cspell/dict-dotnet@5.0.9': resolution: {integrity: sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==} @@ -1593,14 +1626,17 @@ packages: '@cspell/dict-en-common-misspellings@2.0.10': resolution: {integrity: sha512-80mXJLtr0tVEtzowrI7ycVae/ULAYImZUlr0kUTpa8i57AUk7Zy3pYBs44EYIKW7ZC9AHu4Qjjfq4vriAtyTDQ==} - '@cspell/dict-en-common-misspellings@2.0.9': - resolution: {integrity: sha512-O/jAr1VNtuyCFckbTmpeEf43ZFWVD9cJFvWaA6rO2IVmLirJViHWJUyBZOuQcesSplzEIw80MAYmnK06/MDWXQ==} + '@cspell/dict-en-common-misspellings@2.1.3': + resolution: {integrity: sha512-v1I97Hr1OrK+mwHsVzbY4vsPxx6mA5quhxzanF6XuRofz00wH4HPz8Q3llzRHxka5Wl/59gyan04UkUrvP4gdA==} + + '@cspell/dict-en-gb-mit@3.1.4': + resolution: {integrity: sha512-uFMrMEyT/cq3JwDjkarqlX2CPpYQjaHJtmZmKAcrltkXIQdnQF1o6McAXXdUO1xsNJKs7+LsykNsn28rvIxc5Q==} '@cspell/dict-en-gb@1.1.33': resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} - '@cspell/dict-en_us@4.3.31': - resolution: {integrity: sha512-MDc+1B0aFwQONS0JZ6w7ks2KFGkUcaNTFJ8kI6GHvFRmEl3zP5NJDwFEXFsoEdLDb86j2myauSWMJXR3JFuwbA==} + '@cspell/dict-en_us@4.4.14': + resolution: {integrity: sha512-3JYC4XTc1I88ZC1SlZE9MssWljgJ1SmEVSfA8JiQDY5Mv7X9zo7Jvwjjq795oIJTkmdIW9yNX8ikKRt+cV7CIQ==} '@cspell/dict-en_us@4.4.3': resolution: {integrity: sha512-KnsS19kL5lYEk2P9xGNwvZF5ZbDYv1Tkv4BKIx4n4jKlgUj9iHv7L0Q+2cCvllKDGjuP715G/3Rg0McKdHR1Xg==} @@ -1608,6 +1644,9 @@ packages: '@cspell/dict-filetypes@3.0.11': resolution: {integrity: sha512-bBtCHZLo7MiSRUqx5KEiPdGOmXIlDGY+L7SJEtRWZENpAKE+96rT7hj+TUUYWBbCzheqHr0OXZJFEKDgsG/uZg==} + '@cspell/dict-filetypes@3.0.13': + resolution: {integrity: sha512-g6rnytIpQlMNKGJT1JKzWkC+b3xCliDKpQ3ANFSq++MnR4GaLiifaC4JkVON11Oh/UTplYOR1nY3BR4X30bswA==} + '@cspell/dict-flutter@1.1.0': resolution: {integrity: sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA==} @@ -1617,27 +1656,24 @@ packages: '@cspell/dict-fsharp@1.1.0': resolution: {integrity: sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw==} - '@cspell/dict-fullstack@3.2.4': - resolution: {integrity: sha512-JRRvaOLBZ13BO9sP395W+06tyO1Jy/87aFlKe9xQiCWMiwpCo2kGq0xBGq0PDWe253lYLs+GKrNmLU0fSxrObg==} - '@cspell/dict-fullstack@3.2.6': resolution: {integrity: sha512-cSaq9rz5RIU9j+0jcF2vnKPTQjxGXclntmoNp4XB7yFX2621PxJcekGjwf/lN5heJwVxGLL9toR0CBlGKwQBgA==} - '@cspell/dict-gaming-terms@1.1.0': - resolution: {integrity: sha512-46AnDs9XkgJ2f1Sqol1WgfJ8gOqp60fojpc9Wxch7x+BA63g4JfMV5/M5x0sI0TLlLY8EBSglcr8wQF/7C80AQ==} - '@cspell/dict-gaming-terms@1.1.1': resolution: {integrity: sha512-tb8GFxjTLDQstkJcJ90lDqF4rKKlMUKs5/ewePN9P+PYRSehqDpLI5S5meOfPit8LGszeOrjUdBQ4zXo7NpMyQ==} '@cspell/dict-git@3.0.4': resolution: {integrity: sha512-C44M+m56rYn6QCsLbiKiedyPTMZxlDdEYAsPwwlL5bhMDDzXZ3Ic8OCQIhMbiunhCOJJT+er4URmOmM+sllnjg==} - '@cspell/dict-golang@6.0.18': - resolution: {integrity: sha512-Mt+7NwfodDwUk7423DdaQa0YaA+4UoV3XSxQwZioqjpFBCuxfvvv4l80MxCTAAbK6duGj0uHbGTwpv8fyKYPKg==} + '@cspell/dict-git@3.0.7': + resolution: {integrity: sha512-odOwVKgfxCQfiSb+nblQZc4ErXmnWEnv8XwkaI4sNJ7cNmojnvogYVeMqkXPjvfrgEcizEEA4URRD2Ms5PDk1w==} '@cspell/dict-golang@6.0.20': resolution: {integrity: sha512-b7nd9XXs+apMMzNSWorjirQsbmlwcTC0ViQJU8u+XNose3z0y7oNeEpbTPTVoN1+1sO9aOHuFwfwoOMFCDS14Q==} + '@cspell/dict-golang@6.0.23': + resolution: {integrity: sha512-oXqUh/9dDwcmVlfUF5bn3fYFqbUzC46lXFQmi5emB0vYsyQXdNWsqi6/yH3uE7bdRE21nP7Yo0mR1jjFNyLamg==} + '@cspell/dict-google@1.0.8': resolution: {integrity: sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A==} @@ -1659,6 +1695,9 @@ packages: '@cspell/dict-k8s@1.0.10': resolution: {integrity: sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==} + '@cspell/dict-k8s@1.0.12': + resolution: {integrity: sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==} + '@cspell/dict-kotlin@1.1.0': resolution: {integrity: sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ==} @@ -1682,29 +1721,26 @@ packages: '@cspell/dict-html-symbol-entities': ^4.0.3 '@cspell/dict-typescript': ^3.2.1 - '@cspell/dict-markdown@2.0.9': - resolution: {integrity: sha512-j2e6Eg18BlTb1mMP1DkyRFMM/FLS7qiZjltpURzDckB57zDZbUyskOFdl4VX7jItZZEeY0fe22bSPOycgS1Z5A==} + '@cspell/dict-markdown@2.0.12': + resolution: {integrity: sha512-ufwoliPijAgWkD/ivAMC+A9QD895xKiJRF/fwwknQb7kt7NozTLKFAOBtXGPJAB4UjhGBpYEJVo2elQ0FCAH9A==} 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-css': ^4.0.18 + '@cspell/dict-html': ^4.0.12 + '@cspell/dict-html-symbol-entities': ^4.0.4 + '@cspell/dict-typescript': ^3.2.3 '@cspell/dict-monkeyc@1.0.10': resolution: {integrity: sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw==} - '@cspell/dict-node@5.0.6': - resolution: {integrity: sha512-CEbhPCpxGvRNByGolSBTrXXW2rJA4bGqZuTx1KKO85mwR6aadeOmUE7xf/8jiCkXSy+qvr9aJeh+jlfXcsrziQ==} - '@cspell/dict-node@5.0.7': resolution: {integrity: sha512-ZaPpBsHGQCqUyFPKLyCNUH2qzolDRm1/901IO8e7btk7bEDF56DN82VD43gPvD4HWz3yLs/WkcLa01KYAJpnOw==} - '@cspell/dict-npm@5.1.26': - resolution: {integrity: sha512-JU0/9P4nLPPC3Py+sF42tUKm9J4KAvwXaJubp2a4QwhCPzFVlOJTP2tTseFlLbdZn23d61pt0hZ+Jhyy7N76Mg==} - '@cspell/dict-npm@5.2.1': resolution: {integrity: sha512-aqcit8e/Hsnsmd2QoDDAaai+l80bQItwLggmlio/e5NTAfUu7qIVmx+/VFtUlXQH6sMKp+aAvxPC3K8tH86+qg==} + '@cspell/dict-npm@5.2.11': + resolution: {integrity: sha512-ImgO82P2rQlE7gjOZSmBT/ZHuR1qGklkt7WINwT73qaKepgz14k/xq1qYzQScl15Vuc3cUXi5OZNqYlTiquIHQ==} + '@cspell/dict-php@4.0.14': resolution: {integrity: sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==} @@ -1714,18 +1750,15 @@ packages: '@cspell/dict-public-licenses@2.0.13': resolution: {integrity: sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ==} - '@cspell/dict-python@4.2.15': - resolution: {integrity: sha512-VNXhj0Eh+hdHN89MgyaoSAexBQKmYtJaMhucbMI7XmBs4pf8fuFFN3xugk51/A4TZJr8+RImdFFsGMOw+I4bDA==} - '@cspell/dict-python@4.2.17': resolution: {integrity: sha512-xqMKfVc8d7yDaOChFdL2uWAN3Mw9qObB/Zr6t5w1OHbi23gWs7V1lI9d0mXAoqSK6N3mosbum4OIq/FleQDnlw==} + '@cspell/dict-python@4.2.19': + resolution: {integrity: sha512-9S2gTlgILp1eb6OJcVZeC8/Od83N8EqBSg5WHVpx97eMMJhifOzePkE0kDYjyHMtAFznCQTUu0iQEJohNQ5B0A==} + '@cspell/dict-r@2.1.0': resolution: {integrity: sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA==} - '@cspell/dict-ruby@5.0.7': - resolution: {integrity: sha512-4/d0hcoPzi5Alk0FmcyqlzFW9lQnZh9j07MJzPcyVO62nYJJAGKaPZL2o4qHeCS/od/ctJC5AHRdoUm0ktsw6Q==} - '@cspell/dict-ruby@5.0.8': resolution: {integrity: sha512-ixuTneU0aH1cPQRbWJvtvOntMFfeQR2KxT8LuAv5jBKqQWIHSxzGlp+zX3SVyoeR0kOWiu64/O5Yn836A5yMcQ==} @@ -1738,12 +1771,12 @@ packages: '@cspell/dict-shell@1.1.0': resolution: {integrity: sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==} - '@cspell/dict-software-terms@4.2.5': - resolution: {integrity: sha512-CaRzkWti3AgcXoxuRcMijaNG7YUk/MH1rHjB8VX34v3UdCxXXeqvRyElRKnxhFeVLB/robb2UdShqh/CpskxRg==} - '@cspell/dict-software-terms@5.0.5': resolution: {integrity: sha512-ZjAOa8FI8/JrxaRqKT3eS7AQXFjU174xxQoKYMkmdwSyNIj7WUCAg10UeLqeMjFVv36zIO0Hm0dD2+Bvn18SLA==} + '@cspell/dict-software-terms@5.1.4': + resolution: {integrity: sha512-zeinnVFfha+Snh8hMk4hRJTYWNLcRNaHRSvMMVe1DU8oljb1agfq6ouBt/uypIzwgGgAopPz9ArGyc/gVn9y8w==} + '@cspell/dict-sql@2.2.0': resolution: {integrity: sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==} @@ -1753,59 +1786,59 @@ packages: '@cspell/dict-swift@2.0.5': resolution: {integrity: sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==} - '@cspell/dict-terraform@1.1.0': - resolution: {integrity: sha512-G55pcUUxeXAhejstmD35B47SkFd4uqCQimc+CMgq8Nx0dr03guL2iMsz8faRWQGkCnGimX8S91rbOhDv9p/heg==} - '@cspell/dict-terraform@1.1.1': resolution: {integrity: sha512-07KFDwCU7EnKl4hOZLsLKlj6Zceq/IsQ3LRWUyIjvGFfZHdoGtFdCp3ZPVgnFaAcd/DKv+WVkrOzUBSYqHopQQ==} - '@cspell/dict-typescript@3.2.0': - resolution: {integrity: sha512-Pk3zNePLT8qg51l0M4g1ISowYAEGxTuNfZlgkU5SvHa9Cu7x/BWoyYq9Fvc3kAyoisCjRPyvWF4uRYrPitPDFw==} + '@cspell/dict-terraform@1.1.3': + resolution: {integrity: sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==} '@cspell/dict-typescript@3.2.1': resolution: {integrity: sha512-jdnKg4rBl75GUBTsUD6nTJl7FGvaIt5wWcWP7TZSC3rV1LfkwvbUiY3PiGpfJlAIdnLYSeFWIpYU9gyVgz206w==} + '@cspell/dict-typescript@3.2.3': + resolution: {integrity: sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==} + '@cspell/dict-vue@3.0.4': resolution: {integrity: sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==} - '@cspell/dynamic-import@8.17.4': - resolution: {integrity: sha512-rUwFOVPnfEGzhzCRnE4esTTMgWtTORXfa5FJJR8653KwcvD6HJQfPTYepBG6n6Bmu3TssMa4ktq+ZJk4o1BF9A==} - engines: {node: '>=18.0'} - '@cspell/dynamic-import@8.19.3': resolution: {integrity: sha512-haAl+/HOLAPc6Cs7YkbpyIK1Htomp3/D42scl2FCe4PU860uFyjyOWeq99u2wetDI/SQn1Ry3sSOKRCjIGlHWA==} engines: {node: '>=18.0'} + '@cspell/dynamic-import@9.1.3': + resolution: {integrity: sha512-+8PxTslsh+oTxmhYdnfQZ/brYGFAnfqLR9xotWE4Ks3HoaLOhZsp6FF9kvlEp/gNOjpyhHn1UhT/Gr5fT4+QhQ==} + engines: {node: '>=20'} + '@cspell/eslint-plugin@8.19.3': resolution: {integrity: sha512-5eZQYF5rG2WRgEpZM80XsYr0/LWx/VNRrVRIGHphd0geWLK8z/THyRCN8MV9EWn6txXIDZW2mEU2VWvv5rOAUg==} engines: {node: '>=18'} peerDependencies: eslint: ^7 || ^8 || ^9 - '@cspell/filetypes@8.17.4': - resolution: {integrity: sha512-zzYm0hr+lvctsy/65hjI0vsQJj2CAwSOTnVk+5ubJCkCaWH/rayI/SaVZA0Xynf08B/x0r/36nPH0lO2iMJ4aw==} - engines: {node: '>=18'} - '@cspell/filetypes@8.19.3': resolution: {integrity: sha512-j6WEjuvh3t2zsBUvZm6leGhcpQtuCMroSjyGLSE7xNM5SRYOdd+KkO81erwyA/yAweTGlI6wYyXofUd+mRVFMw==} engines: {node: '>=18'} - '@cspell/strong-weak-map@8.17.4': - resolution: {integrity: sha512-Io4ffbMI9hQz+9CLe/oU1Om0H3SqAlvFTaS7ZQOg7joyJSXuGBsCcCg03uTRKWD+NoaxPNUlZOkucUBGil6djw==} - engines: {node: '>=18'} + '@cspell/filetypes@9.1.3': + resolution: {integrity: sha512-HRJEggDo6OJJmCc/gq7oriMqkqVDema+oLpGBh1a/M7ulw+CzoHkOa//1ohpAJh5KsWj9Tej9Va4BUZ/SaCwUA==} + engines: {node: '>=20'} '@cspell/strong-weak-map@8.19.3': resolution: {integrity: sha512-IKzzbVDEjAprH0vH16heKbqCMqNtdU4tZXbp7mjJ3P3Xodl4csERrFRNqSwlyQMqfpjVU5n+wO7BSq/2S/uzRg==} engines: {node: '>=18'} - '@cspell/url@8.17.4': - resolution: {integrity: sha512-vWLySh0ARsI0+TdvA8W6btdeeQbSjBhDE8kwGlzIrOCLIfkeO9Bu++mkc1To1/uogkS2T5icmA24D0rL8ZqjNw==} - engines: {node: '>=18.0'} + '@cspell/strong-weak-map@9.1.3': + resolution: {integrity: sha512-+96SI9R6TOY+xGBOK5LiOgX/W/9gAKus1Cvngh2LdtDVZwgVqpqvm5LoXxLhUT+Vs5UsndRBzblSdNpziSwZtA==} + engines: {node: '>=20'} '@cspell/url@8.19.3': resolution: {integrity: sha512-EATITl9WlmOuhdlUluHlYXCV7LFPuSw9CZ4gejPpjyDwQJUQg4ktHVNfy3hJ5I3h4SEiW0GWd68Gd61McmTO2A==} engines: {node: '>=18.0'} + '@cspell/url@9.1.3': + resolution: {integrity: sha512-LQQKY0O4QYUNKyDod8VfEBvqeJNGHJlx1v0gDq00eMvaClnkIz+y2ObGdtDlF7ZbG7TgI6PQ3ahJdlqfRPe3ZQ==} + engines: {node: '>=20'} + '@csstools/color-helpers@5.0.1': resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==} engines: {node: '>=18'} @@ -1843,8 +1876,8 @@ packages: cypress: '*' webpack: ^4 || ^5 - '@cypress/request@3.0.7': - resolution: {integrity: sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==} + '@cypress/request@3.0.8': + resolution: {integrity: sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==} engines: {node: '>= 6'} '@cypress/webpack-preprocessor@6.0.2': @@ -1889,8 +1922,14 @@ packages: search-insights: optional: true - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/core@1.4.4': + resolution: {integrity: sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==} + + '@emnapi/runtime@1.4.4': + resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==} + + '@emnapi/wasi-threads@1.0.3': + resolution: {integrity: sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==} '@es-joy/jsdoccomment@0.49.0': resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} @@ -2582,71 +2621,90 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/console@30.0.4': + resolution: {integrity: sha512-tMLCDvBJBwPqMm4OAiuKm2uF5y5Qe26KgcMn+nrDSWpEW+eeFmqA0iO4zJfL16GP7gE3bUUQ3hIuUJ22AqVRnw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/core@30.0.4': + resolution: {integrity: sha512-MWScSO9GuU5/HoWjpXAOBs6F/iobvK1XlioelgOM9St7S0Z5WTI9kjCQLPeo4eQRRYusyLW25/J7J5lbFkrYXw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/diff-sequences@30.0.1': + resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/environment@30.0.4': + resolution: {integrity: sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect-utils@30.0.4': + resolution: {integrity: sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect@30.0.4': + resolution: {integrity: sha512-Z/DL7t67LBHSX4UzDyeYKqOxE/n7lbrrgEwWM3dGiH5Dgn35nk+YtgzKudmfIrBI8DRRrKYY5BCo3317HZV1Fw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/fake-timers@30.0.4': + resolution: {integrity: sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/get-type@30.0.1': + resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/globals@30.0.4': + resolution: {integrity: sha512-avyZuxEHF2EUhFF6NEWVdxkRRV6iXXcIES66DLhuLlU7lXhtFG/ySq/a8SRZmEJSsLkNAFX6z6mm8KWyXe9OEA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/pattern@30.0.1': + resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/reporters@30.0.4': + resolution: {integrity: sha512-6ycNmP0JSJEEys1FbIzHtjl9BP0tOZ/KN6iMeAKrdvGmUsa1qfRdlQRUDKJ4P84hJ3xHw1yTqJt4fvPNHhyE+g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/schemas@30.0.1': + resolution: {integrity: sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/snapshot-utils@30.0.4': + resolution: {integrity: sha512-BEpX8M/Y5lG7MI3fmiO+xCnacOrVsnbqVrcDZIT8aSGkKV1w2WwvRQxSWw5SIS8ozg7+h8tSj5EO1Riqqxcdag==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/source-map@30.0.1': + resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@30.0.4': + resolution: {integrity: sha512-Mfpv8kjyKTHqsuu9YugB6z1gcdB3TSSOaKlehtVaiNlClMkEHY+5ZqCY2CrEE3ntpBMlstX/ShDAf84HKWsyIw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@30.0.4': + resolution: {integrity: sha512-bj6ePmqi4uxAE8EHE0Slmk5uBYd9Vd/PcVt06CsBxzH4bbA8nGsI1YbXl/NH+eii4XRtyrRx+Cikub0x8H4vDg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@30.0.4': + resolution: {integrity: sha512-atvy4hRph/UxdCIBp+UB2jhEA/jJiUeGZ7QPgBi9jUUKNgi3WEoMXGNG7zbbELG2+88PMabUNCDchmqgJy3ELg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/types@30.0.1': + resolution: {integrity: sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} @@ -2669,6 +2727,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -2694,6 +2755,9 @@ packages: resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} engines: {node: '>=18'} + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2721,6 +2785,9 @@ packages: '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@rolldown/pluginutils@1.0.0-beta.19': + resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rollup/plugin-babel@5.3.1': resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} @@ -3017,8 +3084,8 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sinclair/typebox@0.34.37': + resolution: {integrity: sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==} '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} @@ -3031,8 +3098,8 @@ packages: '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@sinonjs/fake-timers@13.0.5': + resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} '@surma/rollup-plugin-off-main-thread@2.2.3': resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} @@ -3053,6 +3120,9 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/assert@1.5.11': resolution: {integrity: sha512-FjS1mxq2dlGr9N4z72/DO+XmyRS3ZZIoVn998MEopAN/OmyN28F4yumRL5pOw2z+hbFLuWGYuF2rrw5p11xM5A==} @@ -3230,9 +3300,6 @@ packages: '@types/glob@8.1.0': resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -3577,6 +3644,101 @@ packages: peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + cpu: [x64] + os: [win32] + '@vite-pwa/vitepress@1.0.0': resolution: {integrity: sha512-i5RFah4urA6tZycYlGyBslVx8cVzbZBcARJLDg5rWMfAkRmyLtpRU6usGfVOwyN9kjJ2Bkm+gBHXF1hhr7HptQ==} peerDependencies: @@ -3593,6 +3755,13 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 + '@vitejs/plugin-vue@6.0.0': + resolution: {integrity: sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vue: ^3.2.25 + '@vitest/coverage-v8@3.0.6': resolution: {integrity: sha512-JRTlR8Bw+4BcmVTICa7tJsxqphAktakiLsAmibVLAWbu1lauFddY/tXeM6sAyl1cgkPuXtpnUgaCPhTdz1Qapg==} peerDependencies: @@ -3899,10 +4068,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} - agent-base@7.1.3: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} @@ -4132,11 +4297,11 @@ packages: axios@1.8.4: resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-jest@30.0.4: + resolution: {integrity: sha512-UjG2j7sAOqsp2Xua1mS/e+ekddkSu3wpf4nZUSvXNHuVWdaOUXQ77+uyjJLDE9i0atm5x4kds8K9yb5lRsRtcA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: - '@babel/core': ^7.8.0 + '@babel/core': ^7.11.0 babel-loader@9.2.1: resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} @@ -4145,13 +4310,13 @@ packages: '@babel/core': ^7.12.0 webpack: '>=5' - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@7.0.0: + resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} + engines: {node: '>=12'} - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-jest-hoist@30.0.1: + resolution: {integrity: sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} babel-plugin-polyfill-corejs2@0.4.13: resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} @@ -4173,11 +4338,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-preset-jest@30.0.1: + resolution: {integrity: sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.11.0 bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -4211,6 +4376,9 @@ packages: birpc@0.2.19: resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blob-util@2.0.2: resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} @@ -4340,6 +4508,10 @@ packages: caniuse-lite@1.0.30001700: resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} + canvas@3.1.2: + resolution: {integrity: sha512-Z/tzFAcBzoCvJlOSlCnoekh1Gu8YMn0J51+UAuXJAbW1Z6I9l2mZgdD7738MepoeeIcUdDtbMnOg6cC7GJxy/g==} + engines: {node: ^18.12.0 || >= 20.9.0} + caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4426,6 +4598,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -4434,16 +4609,12 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.1.0: - resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} - engines: {node: '>=8'} - ci-info@4.2.0: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} - cjs-module-lexer@1.4.1: - resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + cjs-module-lexer@2.1.0: + resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} cjson@0.3.0: resolution: {integrity: sha512-bBRQcCIHzI1IVH59fR0bwGrFmi3Btb/JNwM/n401i1DnYgWndpsUBiQRAddLflkZage20A2d25OAWZZk0vBRlA==} @@ -4481,8 +4652,8 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + cli-table3@0.6.1: + resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==} engines: {node: 10.* || >= 12.*} cli-truncate@2.1.0: @@ -4545,6 +4716,10 @@ packages: resolution: {integrity: sha512-XjsuUwpDeY98+yz959OlUK6m7mLBM+1MEG5oaenfuQnNnrQk1WvtcvFgN3FNDP3f2NmZ211t0mNEfSEN1h0eIg==} engines: {node: '>=0.1.90'} + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -4560,9 +4735,9 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4708,11 +4883,6 @@ packages: resolution: {integrity: sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==} engines: {node: '>=16'} - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -4734,72 +4904,72 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - cspell-config-lib@8.17.4: - resolution: {integrity: sha512-vOi3B5gnngGeI1HMVDosHTBCRROx7XQXpD6rcKFxxehrs3hw1/EGGEKPKWX5R1UKhOiUNVmvicpqTXU+4/tbZA==} - engines: {node: '>=18'} - cspell-config-lib@8.19.3: resolution: {integrity: sha512-GjSrLU1KFLVzFa5qQA8DMF04BXW6r3xnfhwHFqU/8tEqtQXxKemGWnc9mt42Ey5hoe366lvhbIoh+vUhGf/IKA==} engines: {node: '>=18'} - cspell-dictionary@8.17.4: - resolution: {integrity: sha512-nzFc/+r6Q0wP5KpvKnjtnI+C2HMaLfrzMaY4VtoCzyqEF8inYQz430e6sSReBDzjshoU9YUxhShXl18aA3eAqA==} - engines: {node: '>=18'} + cspell-config-lib@9.1.3: + resolution: {integrity: sha512-B3DdOTZNIOQahSkOYqaq2fOc8fq/jFkrOFd36kge/GAyEpY2Um/Kp/GQ6caOcev+ju0h3iGaO24OLCx6QJ3YoQ==} + engines: {node: '>=20'} cspell-dictionary@8.19.3: resolution: {integrity: sha512-tycnHhLHvqKl4a2hVg/tIIai0wmcHHSAlgBAXAnSl+0g2DRrQ5GDT+9tHJ8B373o62jD8f5jHwbfJrLgHiNXWg==} engines: {node: '>=18'} - cspell-gitignore@8.17.4: - resolution: {integrity: sha512-9KwnXwNwE1eXYRyqHAMFPowJd3yFh2pQnnrfdQRvdculqFY39G4g/d4OQV9W/iMpcednL9K01IhxuUvbF7ZrIA==} - engines: {node: '>=18'} - hasBin: true + cspell-dictionary@9.1.3: + resolution: {integrity: sha512-BXWwYQ64LaSOd7+8TLZax3AeUnTJUuIl+Tl32/dqcVpgDF4P0eAUVE5xap+QZ2rzKRVFjD8r5M6IR2QrA23o0g==} + engines: {node: '>=20'} - cspell-glob@8.17.4: - resolution: {integrity: sha512-HbAyg/t6l2Um0kgeTZeTEyXgVkIQX/ir2uLW/W3T9foOkSZ016Os6GRYDRJX7ebfREk8cCZ0uFtOi1Yn56INEQ==} - engines: {node: '>=18'} + cspell-gitignore@9.1.3: + resolution: {integrity: sha512-yc7Td6L7ZHejm1OzwY/hyfBgyz3gpToMPDyztwbwOdrxXNLRIgDZVPvjVS67XvNf3dv55J19A/8r5Xd7yaV60w==} + engines: {node: '>=20'} + hasBin: true cspell-glob@8.19.3: resolution: {integrity: sha512-Fv4coZmCmqaNq2UfXhVqQbHschhAcm3rwoxPyBqQcDYpvCQ4Q2+qnHQkK1nAxmDjus4KFM/QKrBoxSlD90bD9g==} engines: {node: '>=18'} - cspell-grammar@8.17.4: - resolution: {integrity: sha512-RgnpQPVSOdWxq7fLHUkjGJCkMNay4p2cZXRYwhTBJf2kWNsDC39tjRhugFweyxxZPamEbLERgkCaFzE54enuMw==} - engines: {node: '>=18'} - hasBin: true + cspell-glob@9.1.3: + resolution: {integrity: sha512-If7gSgbWlUhLcmNA9zPflWzdUZs4wyRKB/Ze584wrht7zJR4yJm2Rptk2+M8kXEhx3zYS6UGhSL0alPbVAbjgQ==} + engines: {node: '>=20'} cspell-grammar@8.19.3: resolution: {integrity: sha512-5VJjqTPRpJZpQvoGj0W88yo0orY/YVuG5P8NVIwnfMAMRAnw2PAb7fsDydO9bPdFKdGPQ4CWoO++ed0g/Ra6jQ==} engines: {node: '>=18'} hasBin: true - cspell-io@8.17.4: - resolution: {integrity: sha512-lHvkxquov5XfIXSenzXrWcOWPiW79+uySoExb20UXHvPSMz0Bk7ZIqDf6lMwTquXbM4BvGGsKQbQE/D4SLD9jw==} - engines: {node: '>=18'} + cspell-grammar@9.1.3: + resolution: {integrity: sha512-L1OVY9RyZXPT+qesw0c7aRKTxQIC7nrLKDQ97hRrQhK23hv5Q8o7GVs1S7pXRNZ/oA8V+VNG2CgjLiKnVM2jnw==} + engines: {node: '>=20'} + hasBin: true cspell-io@8.19.3: resolution: {integrity: sha512-kJa4ZQdr6QwFEo3TxcyXBLAs2DiogrdtYa4tK87Wzyg3+Am1l7Z9AN8gZWQ+tZIi3BC0FYj4PsBdZ4qdmcY98g==} engines: {node: '>=18'} - cspell-lib@8.17.4: - resolution: {integrity: sha512-BxQy4MDFSjMQ74SYptWJOLLPsNC8XDtKyey0IfMQaqeFmuxrz727GWcONQ2KROrPPs9dnmccDs6Kn8Tx7Wug4A==} - engines: {node: '>=18'} + cspell-io@9.1.3: + resolution: {integrity: sha512-fdgAVrthOY1pPsBZHWVjEVn6uHMAshj2n75eu2rvUd6EcmMuLR13EcIXHoMcQo/1Az05x2UgG7HuK+0MuRcikQ==} + engines: {node: '>=20'} cspell-lib@8.19.3: resolution: {integrity: sha512-tVxrZYG7VCjjzARoTBQ7F/3FCjIGbzN0YbFcB3g4KLvbEuH83uLXm2MNdN9yDMaiD1XZ0CzP14eKiwpSMT7tjQ==} engines: {node: '>=18'} - cspell-trie-lib@8.17.4: - resolution: {integrity: sha512-Ou2MGBnZyC+Hti57m4T4D/Tq1P3G570rFPkxgi32f325xsLz1AVEvqrM5oVHDilFH2guUYFaelmL0UcGeP3L6w==} - engines: {node: '>=18'} + cspell-lib@9.1.3: + resolution: {integrity: sha512-egESsnErAPtC/wuqbHWW28eRKChkg5h+vFQQuZ0iThuOSZ65jeSM0ESOt8W3TH2JD7EGo2pvPED/7rZjjnMIcQ==} + engines: {node: '>=20'} cspell-trie-lib@8.19.3: resolution: {integrity: sha512-Z33vT0M/Vi10L9XaxKPTQu0AA0nmq91QWY5CzBymZY7LhOf6yGYcCgoTHluQms8YLCWaiX9pgTOF2/W1wlNiVg==} engines: {node: '>=18'} - cspell@8.17.4: - resolution: {integrity: sha512-cQ6KyYB7itXxc+roxvozIKksbOyBO1NY5Dt5RWHl1Uh4OO++RJAKxmVWrY0g1ubBxKWGXk8TvuunK1+L/jvjIQ==} - engines: {node: '>=18'} + cspell-trie-lib@9.1.3: + resolution: {integrity: sha512-fvI0ede/rPr+SB0zX8le426c5lroNdmMTkl4fFk2e0w5/JZRHIfkuenhWe0MZeb18d1NPRIiLgxoD87zswLynw==} + engines: {node: '>=20'} + + cspell@9.1.3: + resolution: {integrity: sha512-QxpQn9rGIZN/neMU4hx9T4s9AL5nyRhumNCdYHjjU8Pi4ztZOzuVWbOQD1Oq5ygb92Aci76/DwbJQ1dmb4631Q==} + engines: {node: '>=20'} hasBin: true css-tree@3.1.0: @@ -4839,8 +5009,8 @@ packages: cypress-wait-until@3.0.2: resolution: {integrity: sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==} - cypress@14.0.3: - resolution: {integrity: sha512-yIdvobANw3kS+KF/t5vwjjPNufBA8ux7iQHaWxPTkUw2yCKI72m9mKM24eOwE84Wk4ALPsSvEcGbDrwgmhr4RA==} + cypress@14.5.1: + resolution: {integrity: sha512-vYBeZKW3UAtxwv5mFuSlOBCYhyO0H86TeDKRJ7TgARyHiREIaiDjeHtqjzrXRFrdz9KnNavqlm+z+hklC7v8XQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -5082,12 +5252,21 @@ packages: supports-color: optional: true + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@1.2.0: 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.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -5096,8 +5275,8 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + dedent@1.6.0: + resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -5112,6 +5291,10 @@ packages: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -5244,10 +5427,6 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -5653,25 +5832,25 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + exit-x@0.2.2: + resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} engines: {node: '>= 0.8.0'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + expect-type@1.1.0: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect@30.0.4: + resolution: {integrity: sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} express-rate-limit@7.5.0: resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} @@ -5785,6 +5964,14 @@ packages: picomatch: optional: true + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + ferrum@1.9.4: resolution: {integrity: sha512-ooNerLoIht/dK4CQJux93z/hnt9JysrXniJCI3r6YRgmHeXC57EJ8XaTCT1Gm8LfhIAeWxyJA0O7d/W3pqDYRg==} @@ -5855,10 +6042,6 @@ packages: resolution: {integrity: sha512-PsD3qx5miZKhT/766UGAgmApU8NwGAqUKPwIRVOuYgjKHOvWzL5OYbHJIhKC0nVvhVedIOvH1SwJG/Df8EN/8w==} hasBin: true - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} - engines: {node: '>=18'} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -5958,6 +6141,9 @@ packages: fromentries@1.3.2: resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} @@ -6042,10 +6228,6 @@ packages: resolution: {integrity: sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==} engines: {node: '>=0.12.0'} - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - get-stream@4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} @@ -6058,10 +6240,6 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -6075,6 +6253,9 @@ packages: getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -6326,10 +6507,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - humanize-duration@3.32.1: resolution: {integrity: sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g==} @@ -6394,6 +6571,9 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ini@2.0.0: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} engines: {node: '>=10'} @@ -6605,10 +6785,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -6691,10 +6867,6 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - istanbul-lib-instrument@6.0.3: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} @@ -6735,17 +6907,17 @@ packages: engines: {node: '>=10'} hasBin: true - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-changed-files@30.0.2: + resolution: {integrity: sha512-Ius/iRST9FKfJI+I+kpiDh8JuUlAISnRszF9ixZDIqJF17FckH5sOzKC8a0wd0+D+8em5ADRHA5V5MnfeDk2WA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-circus@30.0.4: + resolution: {integrity: sha512-o6UNVfbXbmzjYgmVPtSQrr5xFZCtkDZGdTlptYvGFSN80RuOOlTe73djvMrs+QAuSERZWcHBNIOMH+OEqvjWuw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-cli@30.0.4: + resolution: {integrity: sha512-3dOrP3zqCWBkjoVG1zjYJpD9143N9GUCbwaF2pFF5brnIgRLHmKcCIw+83BvF1LxggfMWBA0gxkn6RuQVuRhIQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -6753,41 +6925,40 @@ packages: node-notifier: optional: true - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-config@30.0.4: + resolution: {integrity: sha512-3dzbO6sh34thAGEjJIW0fgT0GA0EVlkski6ZzMcbW6dzhenylXAE/Mj2MI4HonroWbkKc6wU6bLVQ8dvBSZ9lA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} peerDependencies: '@types/node': '*' + esbuild-register: '>=3.4.0' ts-node: '>=9.0.0' peerDependenciesMeta: '@types/node': optional: true + esbuild-register: + optional: true ts-node: optional: true - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-diff@30.0.4: + resolution: {integrity: sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-docblock@30.0.1: + resolution: {integrity: sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@30.0.2: + resolution: {integrity: sha512-ZFRsTpe5FUWFQ9cWTMguCaiA6kkW5whccPy9JjD1ezxh+mJeqmz8naL8Fl/oSbNJv3rgB0x87WBIkA5CObIUZQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-node@30.0.4: + resolution: {integrity: sha512-p+rLEzC2eThXqiNh9GHHTC0OW5Ca4ZfcURp7scPjYBcmgpR9HG6750716GuUipYf2AcThU3k20B31USuiaaIEg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@30.0.2: + resolution: {integrity: sha512-telJBKpNLeCb4MaX+I5k496556Y2FiKR/QLZc0+MGBYl4k3OO0472drlV2LUe7c1Glng5HuAu+5GLYp//GpdOQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-image-snapshot@4.2.0: resolution: {integrity: sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ==} @@ -6795,21 +6966,21 @@ packages: peerDependencies: jest: '>=20 <=26' - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-leak-detector@30.0.2: + resolution: {integrity: sha512-U66sRrAYdALq+2qtKffBLDWsQ/XoNNs2Lcr83sc9lvE/hEpNafJlq2lXCPUBMNqamMECNxSIekLfe69qg4KMIQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@30.0.4: + resolution: {integrity: sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@30.0.2: + resolution: {integrity: sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@30.0.2: + resolution: {integrity: sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-pnp-resolver@1.2.3: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} @@ -6820,53 +6991,53 @@ packages: jest-resolve: optional: true - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-regex-util@30.0.1: + resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve-dependencies@30.0.4: + resolution: {integrity: sha512-EQBYow19B/hKr4gUTn+l8Z+YLlP2X0IoPyp0UydOtrcPbIOYzJ8LKdFd+yrbwztPQvmlBFUwGPPEzHH1bAvFAw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@30.0.2: + resolution: {integrity: sha512-q/XT0XQvRemykZsvRopbG6FQUT6/ra+XV6rPijyjT6D0msOyCvR2A5PlWZLd+fH0U8XWKZfDiAgrUNDNX2BkCw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@30.0.4: + resolution: {integrity: sha512-mxY0vTAEsowJwvFJo5pVivbCpuu6dgdXRmt3v3MXjBxFly7/lTk3Td0PaMyGOeNQUFmSuGEsGYqhbn7PA9OekQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@30.0.4: + resolution: {integrity: sha512-tUQrZ8+IzoZYIHoPDQEB4jZoPyzBjLjq7sk0KVyd5UPRjRDOsN7o6UlvaGF8ddpGsjznl9PW+KRgWqCNO+Hn7w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-snapshot@30.0.4: + resolution: {integrity: sha512-S/8hmSkeUib8WRUq9pWEb5zMfsOjiYWDWzFzKnjX7eDyKKgimsu9hcmsUEg8a7dPAw8s/FacxsXquq71pDgPjQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@30.0.2: + resolution: {integrity: sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-validate@30.0.2: + resolution: {integrity: sha512-noOvul+SFER4RIvNAwGn6nmV2fXqBq67j+hKGHKGFCmK4ks/Iy1FSrqQNBLGKlu4ZZIRL6Kg1U72N1nxuRCrGQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@30.0.4: + resolution: {integrity: sha512-YESbdHDs7aQOCSSKffG8jXqOKFqw4q4YqR+wHYpR5GWEQioGvL0BfbcjvKIvPEM0XGfsfJrka7jJz3Cc3gI4VQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@30.0.2: + resolution: {integrity: sha512-RN1eQmx7qSLFA+o9pfJKlqViwL5wt+OL3Vff/A+/cPsmuw7NPwfgl33AP+/agRmHzPOFgXviRycR9kYwlcRQXg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest@30.0.4: + resolution: {integrity: sha512-9QE0RS4WwTj/TtTC4h/eFVmFAhGNVerSB9XpJh8sqaXlP73ILcPcZ7JWjjEtJJe2m8QyBLKKfPQuK+3F+Xij/g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -6922,8 +7093,8 @@ packages: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} - jsdom@26.0.0: - resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} peerDependencies: canvas: ^3.0.0 @@ -7004,8 +7175,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.22: + resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} hasBin: true keyv@4.5.4: @@ -7018,10 +7189,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} @@ -7085,9 +7252,9 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@15.4.3: - resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==} - engines: {node: '>=18.12.0'} + lint-staged@16.1.2: + resolution: {integrity: sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==} + engines: {node: '>=20.17'} hasBin: true listr2@3.14.0: @@ -7099,8 +7266,8 @@ packages: enquirer: optional: true - listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + listr2@8.3.3: + resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} engines: {node: '>=18.0.0'} loader-runner@4.3.0: @@ -7239,9 +7406,9 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked@15.0.7: - resolution: {integrity: sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==} - engines: {node: '>= 18'} + marked@16.0.0: + resolution: {integrity: sha512-MUKMXDjsD/eptB7GPzxo4xcnLS6oo7/RHimUMHEDRhUooPwmN9BEpMl7AEOJv3bmso169wHI2wUF9VQgL7zfmA==} + engines: {node: '>= 20'} hasBin: true marked@4.3.0: @@ -7475,10 +7642,6 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -7526,6 +7689,9 @@ packages: mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -7567,11 +7733,23 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nano-spawn@1.0.2: + resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} + engines: {node: '>=20.17'} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + + napi-postinstall@0.3.0: + resolution: {integrity: sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -7592,6 +7770,13 @@ packages: nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + node-abi@3.75.0: + resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} + engines: {node: '>=10'} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-cleanup@2.1.2: resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} @@ -7663,10 +7848,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nwsapi@2.2.16: resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} @@ -7732,10 +7913,6 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -7924,10 +8101,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -8024,6 +8197,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + pixelmatch@5.3.0: resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} hasBin: true @@ -8123,9 +8300,18 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + preact@10.26.2: resolution: {integrity: sha512-0gNmv4qpS9HaN3+40CLBAnKe0ZfyE4ZWo5xKlC1rVrr0ckkEvJvAQqKaHANdFKsGstoxrY4AItZ7kZSGVoVjgg==} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + precinct@12.1.2: resolution: {integrity: sha512-x2qVN3oSOp3D05ihCd8XdkIPuEQsyte7PSxzLqiRgktu79S5Dr1I75/S+zAup8/0cwjoiJTQztE9h0/sWp9bJQ==} engines: {node: '>=18'} @@ -8159,9 +8345,9 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@30.0.2: + resolution: {integrity: sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -8180,10 +8366,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - property-information@7.0.0: resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} @@ -8213,17 +8395,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pure-rand@7.0.1: + resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} qs@6.13.0: 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'} - qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} @@ -8265,6 +8443,10 @@ packages: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} engines: {node: '>= 0.8'} + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -8419,10 +8601,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -8472,12 +8650,12 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup-plugin-visualizer@5.14.0: - resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==} + rollup-plugin-visualizer@6.0.3: + resolution: {integrity: sha512-ZU41GwrkDcCpVoffviuM9Clwjy5fcUxlz0oMoTXTYsK+tcIFzbdacnrr2n8TXcHxbGKKXtOdjxM2HUS4HjkwIw==} engines: {node: '>=18'} hasBin: true peerDependencies: - rolldown: 1.x + rolldown: 1.x || ^1.0.0-beta rollup: 2.x || 3.x || 4.x peerDependenciesMeta: rolldown: @@ -8599,6 +8777,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -8712,6 +8895,12 @@ packages: resolution: {integrity: sha512-0LxHn+P1lF5r2WwVB/za3hLRIsYoLaNq1CXqjbrs3ZvLuvlWnRKrUjEWzV7umZL7hpQ7xULiQMV+0iXdRa5iFg==} engines: {node: '>=14.16'} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -8719,9 +8908,6 @@ packages: resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -8756,6 +8942,10 @@ packages: smob@1.5.0: resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + smol-toml@1.4.1: + resolution: {integrity: sha512-CxdwHXyYTONGHThDbq5XdwbFsuY4wlClRGejfE2NtwUtiHYsP1QtNsHb/hnj31jKYSchztJsaA8pSQoVzkfCFg==} + engines: {node: '>= 18'} + sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} @@ -8962,14 +9152,14 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-indent@4.0.0: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -9018,6 +9208,10 @@ packages: resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==} engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.11.8: + resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} + engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.2: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -9034,6 +9228,13 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + teen_process@1.16.0: resolution: {integrity: sha512-RnW7HHZD1XuhSTzD3djYOdIl1adE3oNEprE3HOFFxWs5m4FZsqYRhKJ4mDU2udtNGMLUS7jV7l8vVRLWAvmPDw==} engines: {'0': node} @@ -9123,6 +9324,10 @@ packages: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -9459,6 +9664,9 @@ packages: resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} engines: {node: '>=18.12.0'} + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -9646,6 +9854,46 @@ packages: yaml: optional: true + vite@7.0.3: + resolution: {integrity: sha512-y2L5oJZF7bj4c0jgGYgBNSdIu+5HF+m68rn2cQXFbGoShdhV1phX9rbnxy9YXj82aS8MMsCLAAFkRxZeWdldrQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vitepress-plugin-search@1.0.4-alpha.22: resolution: {integrity: sha512-IAOEJu+kjVY+0pb6/PeRjIbr175HFFbnMdLmLjqcy7VWxkabIRZbLoQL1VUYDZl804o/Or+GaX02gsiMOnVxFA==} engines: {node: ^14.13.1 || ^16.7.0 || >=18} @@ -9868,10 +10116,6 @@ 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==} - engines: {node: '>=18'} - whatwg-url@14.1.1: resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==} engines: {node: '>=18'} @@ -10007,9 +10251,9 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} @@ -10073,6 +10317,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -10535,37 +10784,37 @@ snapshots: '@argos-ci/api-client@0.8.1': dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) openapi-fetch: 0.13.5 transitivePeerDependencies: - supports-color - '@argos-ci/browser@4.1.1': {} + '@argos-ci/browser@4.1.2': {} - '@argos-ci/core@3.1.1': + '@argos-ci/core@3.2.1': dependencies: '@argos-ci/api-client': 0.8.1 - '@argos-ci/util': 2.3.1 - axios: 1.8.4(debug@4.4.0) + '@argos-ci/util': 2.3.2 + axios: 1.8.4(debug@4.4.1) convict: 6.2.4 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) fast-glob: 3.3.3 sharp: 0.33.5 tmp: 0.2.3 transitivePeerDependencies: - supports-color - '@argos-ci/cypress@4.0.3(cypress@14.0.3)': + '@argos-ci/cypress@5.0.2(cypress@14.5.1)': dependencies: - '@argos-ci/browser': 4.1.1 - '@argos-ci/core': 3.1.1 - '@argos-ci/util': 2.3.1 - cypress: 14.0.3 + '@argos-ci/browser': 4.1.2 + '@argos-ci/core': 3.2.1 + '@argos-ci/util': 2.3.2 + cypress: 14.5.1 cypress-wait-until: 3.0.2 transitivePeerDependencies: - supports-color - '@argos-ci/util@2.3.1': {} + '@argos-ci/util@2.3.2': {} '@asamuzakjp/css-color@2.8.3': dependencies: @@ -10596,7 +10845,27 @@ snapshots: '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 convert-source-map: 2.0.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.28.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 + convert-source-map: 2.0.0 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -10611,9 +10880,17 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.28.0': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.0 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.1': dependencies: - '@babel/types': 7.27.1 + '@babel/types': 7.28.0 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -10631,7 +10908,20 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -10643,21 +10933,41 @@ snapshots: regexpu-core: 6.2.0 semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.1 + regexpu-core: 6.2.0 + semver: 6.3.1 + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -10677,11 +10987,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.1 - - '@babel/helper-plugin-utils@7.25.7': {} + '@babel/types': 7.28.0 '@babel/helper-plugin-utils@7.26.5': {} @@ -10692,7 +11018,16 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-wrap-function': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -10701,14 +11036,23 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -10723,8 +11067,8 @@ snapshots: '@babel/helper-wrap-function@7.27.1': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.0 transitivePeerDependencies: - supports-color @@ -10733,6 +11077,11 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.27.1 + '@babel/helpers@7.27.6': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.0 + '@babel/parser@7.26.9': dependencies: '@babel/types': 7.27.1 @@ -10741,11 +11090,23 @@ snapshots: dependencies: '@babel/types': 7.27.1 + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -10754,11 +11115,21 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -10768,11 +11139,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -10780,100 +11168,114 @@ snapshots: dependencies: '@babel/core': 7.27.1 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.1)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.1)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.1)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.1)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.1)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.1)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.1)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.27.1)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.0)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)': dependencies: @@ -10881,17 +11283,37 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.0) + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -10904,16 +11326,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -10922,6 +11363,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -10930,6 +11379,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -10937,7 +11394,19 @@ snapshots: '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/traverse': 7.28.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -10948,43 +11417,86 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 + '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -10993,12 +11505,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color @@ -11007,25 +11536,53 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -11033,7 +11590,15 @@ snapshots: '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -11041,17 +11606,35 @@ snapshots: '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - supports-color '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color @@ -11062,21 +11645,42 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -11085,6 +11689,14 @@ snapshots: '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -11093,11 +11705,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -11106,11 +11731,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -11119,6 +11757,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -11128,32 +11774,67 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -11162,44 +11843,90 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/preset-env@7.27.2(@babel/core@7.27.1)': dependencies: '@babel/compat-data': 7.27.2 @@ -11275,11 +12002,93 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-env@7.27.2(@babel/core@7.28.0)': + dependencies: + '@babel/compat-data': 7.27.2 + '@babel/core': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.28.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.0) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.28.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.28.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.28.0) + core-js-compat: 3.42.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.27.1 + '@babel/types': 7.28.0 + esutils: 2.0.3 + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.28.0 esutils: 2.0.3 '@babel/runtime@7.26.9': @@ -11301,11 +12110,23 @@ snapshots: '@babel/parser': 7.27.2 '@babel/template': 7.27.2 '@babel/types': 7.27.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color + '@babel/traverse@7.28.0': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.9': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -11316,6 +12137,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@bcoe/v8-coverage@0.2.3': {} '@bcoe/v8-coverage@1.0.2': {} @@ -11496,70 +12322,6 @@ snapshots: '@chevrotain/utils@11.0.3': {} - '@colors/colors@1.5.0': - optional: true - - '@cspell/cspell-bundled-dicts@8.17.4': - dependencies: - '@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.14 - '@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.31 - '@cspell/dict-filetypes': 3.0.11 - '@cspell/dict-flutter': 1.1.0 - '@cspell/dict-fonts': 4.0.4 - '@cspell/dict-fsharp': 1.1.0 - '@cspell/dict-fullstack': 3.2.4 - '@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.26 - '@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.5 - '@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-bundled-dicts@8.19.3': dependencies: '@cspell/dict-ada': 4.1.0 @@ -11621,47 +12383,106 @@ snapshots: '@cspell/dict-typescript': 3.2.1 '@cspell/dict-vue': 3.0.4 - '@cspell/cspell-json-reporter@8.17.4': + '@cspell/cspell-bundled-dicts@9.1.3': dependencies: - '@cspell/cspell-types': 8.17.4 + '@cspell/dict-ada': 4.1.0 + '@cspell/dict-al': 1.1.0 + '@cspell/dict-aws': 4.0.12 + '@cspell/dict-bash': 4.2.0 + '@cspell/dict-companies': 3.2.2 + '@cspell/dict-cpp': 6.0.8 + '@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.8 + '@cspell/dict-django': 4.1.4 + '@cspell/dict-docker': 1.1.15 + '@cspell/dict-dotnet': 5.0.9 + '@cspell/dict-elixir': 4.0.7 + '@cspell/dict-en-common-misspellings': 2.1.3 + '@cspell/dict-en-gb-mit': 3.1.4 + '@cspell/dict-en_us': 4.4.14 + '@cspell/dict-filetypes': 3.0.13 + '@cspell/dict-flutter': 1.1.0 + '@cspell/dict-fonts': 4.0.4 + '@cspell/dict-fsharp': 1.1.0 + '@cspell/dict-fullstack': 3.2.6 + '@cspell/dict-gaming-terms': 1.1.1 + '@cspell/dict-git': 3.0.7 + '@cspell/dict-golang': 6.0.23 + '@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.12 + '@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.12(@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.3) + '@cspell/dict-monkeyc': 1.0.10 + '@cspell/dict-node': 5.0.7 + '@cspell/dict-npm': 5.2.11 + '@cspell/dict-php': 4.0.14 + '@cspell/dict-powershell': 5.0.14 + '@cspell/dict-public-licenses': 2.0.13 + '@cspell/dict-python': 4.2.19 + '@cspell/dict-r': 2.1.0 + '@cspell/dict-ruby': 5.0.8 + '@cspell/dict-rust': 4.0.11 + '@cspell/dict-scala': 5.0.7 + '@cspell/dict-shell': 1.1.0 + '@cspell/dict-software-terms': 5.1.4 + '@cspell/dict-sql': 2.2.0 + '@cspell/dict-svelte': 1.0.6 + '@cspell/dict-swift': 2.0.5 + '@cspell/dict-terraform': 1.1.3 + '@cspell/dict-typescript': 3.2.3 + '@cspell/dict-vue': 3.0.4 - '@cspell/cspell-pipe@8.17.4': {} + '@cspell/cspell-json-reporter@9.1.3': + dependencies: + '@cspell/cspell-types': 9.1.3 '@cspell/cspell-pipe@8.19.3': {} - '@cspell/cspell-resolver@8.17.4': - dependencies: - global-directory: 4.0.1 + '@cspell/cspell-pipe@9.1.3': {} '@cspell/cspell-resolver@8.19.3': dependencies: global-directory: 4.0.1 - '@cspell/cspell-service-bus@8.17.4': {} + '@cspell/cspell-resolver@9.1.3': + dependencies: + global-directory: 4.0.1 '@cspell/cspell-service-bus@8.19.3': {} - '@cspell/cspell-types@8.17.4': {} + '@cspell/cspell-service-bus@9.1.3': {} '@cspell/cspell-types@8.19.3': {} + '@cspell/cspell-types@9.1.3': {} + '@cspell/dict-ada@4.1.0': {} '@cspell/dict-al@1.1.0': {} '@cspell/dict-aws@4.0.10': {} - '@cspell/dict-aws@4.0.9': {} + '@cspell/dict-aws@4.0.12': {} '@cspell/dict-bash@4.2.0': dependencies: '@cspell/dict-shell': 1.1.0 - '@cspell/dict-companies@3.1.14': {} - '@cspell/dict-companies@3.1.15': {} - '@cspell/dict-cpp@6.0.3': {} + '@cspell/dict-companies@3.2.2': {} '@cspell/dict-cpp@6.0.8': {} @@ -11673,52 +12494,54 @@ snapshots: '@cspell/dict-dart@2.3.0': {} - '@cspell/dict-data-science@2.0.7': {} - '@cspell/dict-data-science@2.0.8': {} + '@cspell/dict-data-science@2.0.9': {} + '@cspell/dict-django@4.1.4': {} - '@cspell/dict-docker@1.1.12': {} - '@cspell/dict-docker@1.1.13': {} + '@cspell/dict-docker@1.1.15': {} + '@cspell/dict-dotnet@5.0.9': {} '@cspell/dict-elixir@4.0.7': {} '@cspell/dict-en-common-misspellings@2.0.10': {} - '@cspell/dict-en-common-misspellings@2.0.9': {} + '@cspell/dict-en-common-misspellings@2.1.3': {} + + '@cspell/dict-en-gb-mit@3.1.4': {} '@cspell/dict-en-gb@1.1.33': {} - '@cspell/dict-en_us@4.3.31': {} + '@cspell/dict-en_us@4.4.14': {} '@cspell/dict-en_us@4.4.3': {} '@cspell/dict-filetypes@3.0.11': {} + '@cspell/dict-filetypes@3.0.13': {} + '@cspell/dict-flutter@1.1.0': {} '@cspell/dict-fonts@4.0.4': {} '@cspell/dict-fsharp@1.1.0': {} - '@cspell/dict-fullstack@3.2.4': {} - '@cspell/dict-fullstack@3.2.6': {} - '@cspell/dict-gaming-terms@1.1.0': {} - '@cspell/dict-gaming-terms@1.1.1': {} '@cspell/dict-git@3.0.4': {} - '@cspell/dict-golang@6.0.18': {} + '@cspell/dict-git@3.0.7': {} '@cspell/dict-golang@6.0.20': {} + '@cspell/dict-golang@6.0.23': {} + '@cspell/dict-google@1.0.8': {} '@cspell/dict-haskell@4.0.5': {} @@ -11733,6 +12556,8 @@ snapshots: '@cspell/dict-k8s@1.0.10': {} + '@cspell/dict-k8s@1.0.12': {} + '@cspell/dict-kotlin@1.1.0': {} '@cspell/dict-latex@4.0.3': {} @@ -11750,40 +12575,36 @@ snapshots: '@cspell/dict-html-symbol-entities': 4.0.3 '@cspell/dict-typescript': 3.2.1 - '@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-markdown@2.0.12(@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.3)': dependencies: '@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-typescript': 3.2.3 '@cspell/dict-monkeyc@1.0.10': {} - '@cspell/dict-node@5.0.6': {} - '@cspell/dict-node@5.0.7': {} - '@cspell/dict-npm@5.1.26': {} - '@cspell/dict-npm@5.2.1': {} + '@cspell/dict-npm@5.2.11': {} + '@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': - dependencies: - '@cspell/dict-data-science': 2.0.8 - '@cspell/dict-python@4.2.17': dependencies: '@cspell/dict-data-science': 2.0.8 - '@cspell/dict-r@2.1.0': {} + '@cspell/dict-python@4.2.19': + dependencies: + '@cspell/dict-data-science': 2.0.9 - '@cspell/dict-ruby@5.0.7': {} + '@cspell/dict-r@2.1.0': {} '@cspell/dict-ruby@5.0.8': {} @@ -11793,36 +12614,36 @@ snapshots: '@cspell/dict-shell@1.1.0': {} - '@cspell/dict-software-terms@4.2.5': {} - '@cspell/dict-software-terms@5.0.5': {} + '@cspell/dict-software-terms@5.1.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-terraform@1.1.1': {} - '@cspell/dict-typescript@3.2.0': {} + '@cspell/dict-terraform@1.1.3': {} '@cspell/dict-typescript@3.2.1': {} - '@cspell/dict-vue@3.0.4': {} + '@cspell/dict-typescript@3.2.3': {} - '@cspell/dynamic-import@8.17.4': - dependencies: - '@cspell/url': 8.17.4 - import-meta-resolve: 4.1.0 + '@cspell/dict-vue@3.0.4': {} '@cspell/dynamic-import@8.19.3': dependencies: '@cspell/url': 8.19.3 import-meta-resolve: 4.1.0 + '@cspell/dynamic-import@9.1.3': + dependencies: + '@cspell/url': 9.1.3 + import-meta-resolve: 4.1.0 + '@cspell/eslint-plugin@8.19.3(eslint@9.26.0(jiti@2.4.2))': dependencies: '@cspell/cspell-types': 8.19.3 @@ -11831,18 +12652,18 @@ snapshots: eslint: 9.26.0(jiti@2.4.2) synckit: 0.11.4 - '@cspell/filetypes@8.17.4': {} - '@cspell/filetypes@8.19.3': {} - '@cspell/strong-weak-map@8.17.4': {} + '@cspell/filetypes@9.1.3': {} '@cspell/strong-weak-map@8.19.3': {} - '@cspell/url@8.17.4': {} + '@cspell/strong-weak-map@9.1.3': {} '@cspell/url@8.19.3': {} + '@cspell/url@9.1.3': {} + '@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)': @@ -11863,14 +12684,14 @@ snapshots: '@csstools/css-tokenizer@3.0.3': {} - '@cypress/code-coverage@3.13.4(@babel/core@7.27.1)(@babel/preset-env@7.27.2(@babel/core@7.27.1))(babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.95.0(esbuild@0.25.0)))(cypress@14.0.3)(webpack@5.95.0(esbuild@0.25.0))': + '@cypress/code-coverage@3.13.4(@babel/core@7.27.1)(@babel/preset-env@7.27.2(@babel/core@7.27.1))(babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.95.0(esbuild@0.25.0)))(cypress@14.5.1)(webpack@5.95.0(esbuild@0.25.0))': dependencies: '@babel/core': 7.27.1 '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.27.1)(@babel/preset-env@7.27.2(@babel/core@7.27.1))(babel-loader@9.2.1(@babel/core@7.27.1)(webpack@5.95.0(esbuild@0.25.0)))(webpack@5.95.0(esbuild@0.25.0)) babel-loader: 9.2.1(@babel/core@7.27.1)(webpack@5.95.0(esbuild@0.25.0)) chalk: 4.1.2 - cypress: 14.0.3 + cypress: 14.5.1 dayjs: 1.11.13 debug: 4.3.7 execa: 4.1.0 @@ -11882,7 +12703,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@cypress/request@3.0.7': + '@cypress/request@3.0.8': dependencies: aws-sign2: 0.7.0 aws4: 1.13.2 @@ -11897,7 +12718,7 @@ snapshots: json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 - qs: 6.13.1 + qs: 6.14.0 safe-buffer: 5.2.1 tough-cookie: 5.1.1 tunnel-agent: 0.6.0 @@ -11909,7 +12730,7 @@ snapshots: '@babel/preset-env': 7.27.2(@babel/core@7.27.1) babel-loader: 9.2.1(@babel/core@7.27.1)(webpack@5.95.0(esbuild@0.25.0)) bluebird: 3.7.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 lodash: 4.17.21 webpack: 5.95.0(esbuild@0.25.0) transitivePeerDependencies: @@ -11953,7 +12774,18 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@emnapi/runtime@1.3.1': + '@emnapi/core@1.4.4': + dependencies: + '@emnapi/wasi-threads': 1.0.3 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.4': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.3': dependencies: tslib: 2.8.1 optional: true @@ -12198,7 +13030,7 @@ snapshots: '@eslint/config-array@0.20.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -12212,7 +13044,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -12329,7 +13161,7 @@ snapshots: '@antfu/install-pkg': 1.0.0 '@antfu/utils': 8.1.1 '@iconify/types': 2.0.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 globals: 15.15.0 kolorist: 1.8.0 local-pkg: 1.0.0 @@ -12403,7 +13235,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.3.1 + '@emnapi/runtime': 1.4.4 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -12431,168 +13263,190 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jest/console@29.7.0': + '@jest/console@30.0.4': dependencies: - '@jest/types': 29.6.3 + '@jest/types': 30.0.1 '@types/node': 22.13.5 chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 + jest-message-util: 30.0.2 + jest-util: 30.0.2 slash: 3.0.0 - '@jest/core@29.7.0': + '@jest/core@30.0.4': dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 + '@jest/console': 30.0.4 + '@jest/pattern': 30.0.1 + '@jest/reporters': 30.0.4 + '@jest/test-result': 30.0.4 + '@jest/transform': 30.0.4 + '@jest/types': 30.0.1 '@types/node': 22.13.5 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 + ci-info: 4.2.0 + exit-x: 0.2.2 graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.5) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 + jest-changed-files: 30.0.2 + jest-config: 30.0.4(@types/node@22.13.5) + jest-haste-map: 30.0.2 + jest-message-util: 30.0.2 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.2 + jest-resolve-dependencies: 30.0.4 + jest-runner: 30.0.4 + jest-runtime: 30.0.4 + jest-snapshot: 30.0.4 + jest-util: 30.0.2 + jest-validate: 30.0.2 + jest-watcher: 30.0.4 micromatch: 4.0.8 - pretty-format: 29.7.0 + pretty-format: 30.0.2 slash: 3.0.0 - strip-ansi: 6.0.1 transitivePeerDependencies: - babel-plugin-macros + - esbuild-register - supports-color - ts-node - '@jest/environment@29.7.0': + '@jest/diff-sequences@30.0.1': {} + + '@jest/environment@30.0.4': dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 + '@jest/fake-timers': 30.0.4 + '@jest/types': 30.0.1 '@types/node': 22.13.5 - jest-mock: 29.7.0 + jest-mock: 30.0.2 - '@jest/expect-utils@29.7.0': + '@jest/expect-utils@30.0.4': dependencies: - jest-get-type: 29.6.3 + '@jest/get-type': 30.0.1 - '@jest/expect@29.7.0': + '@jest/expect@30.0.4': dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 + expect: 30.0.4 + jest-snapshot: 30.0.4 transitivePeerDependencies: - supports-color - '@jest/fake-timers@29.7.0': + '@jest/fake-timers@30.0.4': dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 + '@jest/types': 30.0.1 + '@sinonjs/fake-timers': 13.0.5 '@types/node': 22.13.5 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 + jest-message-util: 30.0.2 + jest-mock: 30.0.2 + jest-util: 30.0.2 - '@jest/globals@29.7.0': + '@jest/get-type@30.0.1': {} + + '@jest/globals@30.0.4': dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 + '@jest/environment': 30.0.4 + '@jest/expect': 30.0.4 + '@jest/types': 30.0.1 + jest-mock: 30.0.2 transitivePeerDependencies: - supports-color - '@jest/reporters@29.7.0': + '@jest/pattern@30.0.1': + dependencies: + '@types/node': 22.13.5 + jest-regex-util: 30.0.1 + + '@jest/reporters@30.0.4': dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 + '@jest/console': 30.0.4 + '@jest/test-result': 30.0.4 + '@jest/transform': 30.0.4 + '@jest/types': 30.0.1 '@jridgewell/trace-mapping': 0.3.25 '@types/node': 22.13.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 + exit-x: 0.2.2 + glob: 10.4.5 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 + istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 + jest-message-util: 30.0.2 + jest-util: 30.0.2 + jest-worker: 30.0.2 slash: 3.0.0 string-length: 4.0.2 - strip-ansi: 6.0.1 v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color - '@jest/schemas@29.6.3': + '@jest/schemas@30.0.1': dependencies: - '@sinclair/typebox': 0.27.8 + '@sinclair/typebox': 0.34.37 - '@jest/source-map@29.6.3': + '@jest/snapshot-utils@30.0.4': + dependencies: + '@jest/types': 30.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + natural-compare: 1.4.0 + + '@jest/source-map@30.0.1': dependencies: '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 - '@jest/test-result@29.7.0': + '@jest/test-result@30.0.4': dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 + '@jest/console': 30.0.4 + '@jest/types': 30.0.1 '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 - '@jest/test-sequencer@29.7.0': + '@jest/test-sequencer@30.0.4': dependencies: - '@jest/test-result': 29.7.0 + '@jest/test-result': 30.0.4 graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 + jest-haste-map: 30.0.2 slash: 3.0.0 - '@jest/transform@29.7.0': + '@jest/transform@30.0.4': dependencies: - '@babel/core': 7.27.1 - '@jest/types': 29.6.3 + '@babel/core': 7.28.0 + '@jest/types': 30.0.1 '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1 + babel-plugin-istanbul: 7.0.0 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 + jest-haste-map: 30.0.2 + jest-regex-util: 30.0.1 + jest-util: 30.0.2 micromatch: 4.0.8 - pirates: 4.0.6 + pirates: 4.0.7 slash: 3.0.0 - write-file-atomic: 4.0.2 + write-file-atomic: 5.0.1 transitivePeerDependencies: - supports-color - '@jest/types@29.6.3': + '@jest/types@30.0.1': dependencies: - '@jest/schemas': 29.6.3 + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.1 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 22.13.5 '@types/yargs': 17.0.33 chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -12615,6 +13469,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jsdevtools/ono@7.1.3': {} '@leichtgewicht/ip-codec@2.0.5': {} @@ -12661,6 +13520,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@napi-rs/wasm-runtime@0.2.11': + dependencies: + '@emnapi/core': 1.4.4 + '@emnapi/runtime': 1.4.4 + '@tybys/wasm-util': 0.9.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -12682,9 +13548,11 @@ snapshots: '@polka/url@1.0.0-next.28': {} - '@rollup/plugin-babel@5.3.1(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@2.79.2)': + '@rolldown/pluginutils@1.0.0-beta.19': {} + + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.0)(@types/babel__core@7.20.5)(rollup@2.79.2)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.0 '@babel/helper-module-imports': 7.27.1 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 @@ -12924,7 +13792,7 @@ snapshots: '@sideway/pinpoint@2.0.0': {} - '@sinclair/typebox@0.27.8': {} + '@sinclair/typebox@0.34.37': {} '@sindresorhus/is@4.6.0': {} @@ -12934,7 +13802,7 @@ snapshots: dependencies: type-detect: 4.0.8 - '@sinonjs/fake-timers@10.3.0': + '@sinonjs/fake-timers@13.0.5': dependencies: '@sinonjs/commons': 3.0.1 @@ -12958,6 +13826,11 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/assert@1.5.11': {} '@types/babel__core@7.20.5': @@ -13192,10 +14065,6 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 22.13.5 - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 22.13.5 - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -13306,7 +14175,7 @@ snapshots: '@types/rollup-plugin-visualizer@5.0.3(rollup@4.40.2)': dependencies: - rollup-plugin-visualizer: 5.14.0(rollup@4.40.2) + rollup-plugin-visualizer: 6.0.3(rollup@4.40.2) transitivePeerDependencies: - rolldown - rollup @@ -13394,7 +14263,7 @@ snapshots: '@typescript-eslint/types': 8.32.0 '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.32.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 eslint: 9.26.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: @@ -13414,7 +14283,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.7.3) '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 eslint: 9.26.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 @@ -13431,7 +14300,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -13446,7 +14315,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.24.1 '@typescript-eslint/visitor-keys': 8.24.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -13460,7 +14329,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.32.0 '@typescript-eslint/visitor-keys': 8.32.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -13509,13 +14378,13 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@unocss/astro@66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3))': + '@unocss/astro@66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@unocss/core': 66.0.0 '@unocss/reset': 66.0.0 - '@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3)) + '@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3)) optionalDependencies: - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - vue @@ -13557,13 +14426,13 @@ snapshots: transitivePeerDependencies: - vue - '@unocss/postcss@66.0.0(postcss@8.5.3)': + '@unocss/postcss@66.0.0(postcss@8.5.6)': dependencies: '@unocss/config': 66.0.0 '@unocss/core': 66.0.0 '@unocss/rule-utils': 66.0.0 css-tree: 3.1.0 - postcss: 8.5.3 + postcss: 8.5.6 tinyglobby: 0.2.12 '@unocss/preset-attributify@66.0.0': @@ -13640,7 +14509,7 @@ snapshots: dependencies: '@unocss/core': 66.0.0 - '@unocss/vite@66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3))': + '@unocss/vite@66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3))': dependencies: '@ampproject/remapping': 2.3.0 '@unocss/config': 66.0.0 @@ -13650,29 +14519,89 @@ snapshots: magic-string: 0.30.17 tinyglobby: 0.2.12 unplugin-utils: 0.2.4 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - vue - '@vite-pwa/vitepress@1.0.0(vite-plugin-pwa@1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0))': + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: - vite-plugin-pwa: 1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0) + '@napi-rs/wasm-runtime': 0.2.11 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + optional: true + + '@vite-pwa/vitepress@1.0.0(vite-plugin-pwa@1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0))': + dependencies: + vite-plugin-pwa: 1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0) '@vitejs/plugin-vue@5.2.1(vite@5.4.19(@types/node@22.13.5)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3))': dependencies: vite: 5.4.19(@types/node@22.13.5)(terser@5.39.0) vue: 3.5.13(typescript@5.7.3) - '@vitejs/plugin-vue@5.2.1(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3))': + '@vitejs/plugin-vue@6.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3))': dependencies: - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + '@rolldown/pluginutils': 1.0.0-beta.19 + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) vue: 3.5.13(typescript@5.7.3) '@vitest/coverage-v8@3.0.6(vitest@3.0.6)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -13682,7 +14611,7 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.0.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vitest: 3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.1.0(canvas@3.1.2))(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -13693,13 +14622,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.6(vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))': + '@vitest/mocker@3.0.6(vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.0.6 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) '@vitest/pretty-format@3.0.6': dependencies: @@ -13729,7 +14658,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.12 tinyrainbow: 2.0.0 - vitest: 3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.0.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vitest: 3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.1.0(canvas@3.1.2))(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) '@vitest/utils@3.0.6': dependencies: @@ -13840,7 +14769,7 @@ snapshots: '@vueuse/shared': 12.7.0(typescript@5.7.3) vue: 3.5.13(typescript@5.7.3) optionalDependencies: - axios: 1.8.4(debug@4.4.0) + axios: 1.8.4(debug@4.4.1) focus-trap: 7.6.4 transitivePeerDependencies: - typescript @@ -14058,13 +14987,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.0(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - - agent-base@7.1.1: - dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -14274,21 +15197,21 @@ snapshots: transitivePeerDependencies: - debug - axios@1.8.4(debug@4.4.0): + axios@1.8.4(debug@4.4.1): dependencies: - follow-redirects: 1.15.9(debug@4.4.0) + follow-redirects: 1.15.9(debug@4.4.1) form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - babel-jest@29.7.0(@babel/core@7.27.1): + babel-jest@30.0.4(@babel/core@7.28.0): dependencies: - '@babel/core': 7.27.1 - '@jest/transform': 29.7.0 + '@babel/core': 7.28.0 + '@jest/transform': 30.0.4 '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.27.1) + babel-plugin-istanbul: 7.0.0 + babel-preset-jest: 30.0.1(@babel/core@7.28.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -14302,22 +15225,21 @@ snapshots: schema-utils: 4.3.2 webpack: 5.95.0(esbuild@0.25.0) - babel-plugin-istanbul@6.1.1: + babel-plugin-istanbul@7.0.0: dependencies: - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 + istanbul-lib-instrument: 6.0.3 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - babel-plugin-jest-hoist@29.6.3: + babel-plugin-jest-hoist@30.0.1: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.1 + '@babel/types': 7.28.0 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1): dependencies: @@ -14328,6 +15250,15 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.28.0): + dependencies: + '@babel/compat-data': 7.27.2 + '@babel/core': 7.28.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.28.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.1): dependencies: '@babel/core': 7.27.1 @@ -14336,6 +15267,14 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.28.0): + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.28.0) + core-js-compat: 3.42.0 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.1): dependencies: '@babel/core': 7.27.1 @@ -14343,30 +15282,37 @@ snapshots: transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.1): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.28.0): dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.1) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.1) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.1) - '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.27.1) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.1) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.1) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.1) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.1) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.1) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.1) + '@babel/core': 7.28.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color - babel-preset-jest@29.6.3(@babel/core@7.27.1): + babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.0): dependencies: - '@babel/core': 7.27.1 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1) + '@babel/core': 7.28.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.0) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.0) + + babel-preset-jest@30.0.1(@babel/core@7.28.0): + dependencies: + '@babel/core': 7.28.0 + babel-plugin-jest-hoist: 30.0.1 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) bail@2.0.2: {} @@ -14395,6 +15341,12 @@ snapshots: birpc@0.2.19: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + blob-util@2.0.2: {} bluebird@3.7.1: {} @@ -14424,7 +15376,7 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 @@ -14553,6 +15505,11 @@ snapshots: caniuse-lite@1.0.30001700: {} + canvas@3.1.2: + dependencies: + node-addon-api: 7.1.1 + prebuild-install: 7.1.3 + caseless@0.12.0: {} ccount@2.0.1: {} @@ -14647,15 +15604,15 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@1.1.4: {} + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} - ci-info@4.1.0: {} - ci-info@4.2.0: {} - cjs-module-lexer@1.4.1: {} + cjs-module-lexer@2.1.0: {} cjson@0.3.0: dependencies: @@ -14690,11 +15647,11 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-table3@0.6.5: + cli-table3@0.6.1: dependencies: string-width: 4.2.3 optionalDependencies: - '@colors/colors': 1.5.0 + colors: 1.4.0 cli-truncate@2.1.0: dependencies: @@ -14761,6 +15718,9 @@ snapshots: colors@0.5.1: {} + colors@1.4.0: + optional: true + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -14771,7 +15731,7 @@ snapshots: commander@12.1.0: {} - commander@13.1.0: {} + commander@14.0.0: {} commander@2.20.3: {} @@ -14915,21 +15875,6 @@ snapshots: p-filter: 3.0.0 p-map: 6.0.0 - create-jest@29.7.0(@types/node@22.13.5): - 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@22.13.5) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - cross-env@7.0.3: dependencies: cross-spawn: 7.0.3 @@ -14956,24 +15901,18 @@ snapshots: crypto-random-string@2.0.0: {} - cspell-config-lib@8.17.4: - dependencies: - '@cspell/cspell-types': 8.17.4 - comment-json: 4.2.5 - yaml: 2.7.0 - cspell-config-lib@8.19.3: dependencies: '@cspell/cspell-types': 8.19.3 comment-json: 4.2.5 yaml: 2.7.1 - cspell-dictionary@8.17.4: + cspell-config-lib@9.1.3: dependencies: - '@cspell/cspell-pipe': 8.17.4 - '@cspell/cspell-types': 8.17.4 - cspell-trie-lib: 8.17.4 - fast-equals: 5.2.2 + '@cspell/cspell-types': 9.1.3 + comment-json: 4.2.5 + smol-toml: 1.4.1 + yaml: 2.8.0 cspell-dictionary@8.19.3: dependencies: @@ -14982,69 +15921,48 @@ snapshots: cspell-trie-lib: 8.19.3 fast-equals: 5.2.2 - cspell-gitignore@8.17.4: + cspell-dictionary@9.1.3: dependencies: - '@cspell/url': 8.17.4 - cspell-glob: 8.17.4 - cspell-io: 8.17.4 - find-up-simple: 1.0.0 + '@cspell/cspell-pipe': 9.1.3 + '@cspell/cspell-types': 9.1.3 + cspell-trie-lib: 9.1.3 + fast-equals: 5.2.2 - cspell-glob@8.17.4: + cspell-gitignore@9.1.3: dependencies: - '@cspell/url': 8.17.4 - micromatch: 4.0.8 + '@cspell/url': 9.1.3 + cspell-glob: 9.1.3 + cspell-io: 9.1.3 cspell-glob@8.19.3: dependencies: '@cspell/url': 8.19.3 picomatch: 4.0.2 - cspell-grammar@8.17.4: + cspell-glob@9.1.3: dependencies: - '@cspell/cspell-pipe': 8.17.4 - '@cspell/cspell-types': 8.17.4 + '@cspell/url': 9.1.3 + picomatch: 4.0.2 cspell-grammar@8.19.3: dependencies: '@cspell/cspell-pipe': 8.19.3 '@cspell/cspell-types': 8.19.3 - cspell-io@8.17.4: + cspell-grammar@9.1.3: dependencies: - '@cspell/cspell-service-bus': 8.17.4 - '@cspell/url': 8.17.4 + '@cspell/cspell-pipe': 9.1.3 + '@cspell/cspell-types': 9.1.3 cspell-io@8.19.3: dependencies: '@cspell/cspell-service-bus': 8.19.3 '@cspell/url': 8.19.3 - cspell-lib@8.17.4: + cspell-io@9.1.3: dependencies: - '@cspell/cspell-bundled-dicts': 8.17.4 - '@cspell/cspell-pipe': 8.17.4 - '@cspell/cspell-resolver': 8.17.4 - '@cspell/cspell-types': 8.17.4 - '@cspell/dynamic-import': 8.17.4 - '@cspell/filetypes': 8.17.4 - '@cspell/strong-weak-map': 8.17.4 - '@cspell/url': 8.17.4 - clear-module: 4.1.2 - comment-json: 4.2.5 - cspell-config-lib: 8.17.4 - cspell-dictionary: 8.17.4 - cspell-glob: 8.17.4 - cspell-grammar: 8.17.4 - cspell-io: 8.17.4 - cspell-trie-lib: 8.17.4 - env-paths: 3.0.0 - fast-equals: 5.2.2 - gensequence: 7.0.0 - import-fresh: 3.3.1 - resolve-from: 5.0.0 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.1.0 - xdg-basedir: 5.1.0 + '@cspell/cspell-service-bus': 9.1.3 + '@cspell/url': 9.1.3 cspell-lib@8.19.3: dependencies: @@ -15073,11 +15991,32 @@ snapshots: vscode-uri: 3.1.0 xdg-basedir: 5.1.0 - cspell-trie-lib@8.17.4: + cspell-lib@9.1.3: dependencies: - '@cspell/cspell-pipe': 8.17.4 - '@cspell/cspell-types': 8.17.4 + '@cspell/cspell-bundled-dicts': 9.1.3 + '@cspell/cspell-pipe': 9.1.3 + '@cspell/cspell-resolver': 9.1.3 + '@cspell/cspell-types': 9.1.3 + '@cspell/dynamic-import': 9.1.3 + '@cspell/filetypes': 9.1.3 + '@cspell/strong-weak-map': 9.1.3 + '@cspell/url': 9.1.3 + clear-module: 4.1.2 + comment-json: 4.2.5 + cspell-config-lib: 9.1.3 + cspell-dictionary: 9.1.3 + cspell-glob: 9.1.3 + cspell-grammar: 9.1.3 + cspell-io: 9.1.3 + cspell-trie-lib: 9.1.3 + env-paths: 3.0.0 + fast-equals: 5.2.2 gensequence: 7.0.0 + import-fresh: 3.3.1 + resolve-from: 5.0.0 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.1.0 + xdg-basedir: 5.1.0 cspell-trie-lib@8.19.3: dependencies: @@ -15085,26 +16024,32 @@ snapshots: '@cspell/cspell-types': 8.19.3 gensequence: 7.0.0 - cspell@8.17.4: + cspell-trie-lib@9.1.3: dependencies: - '@cspell/cspell-json-reporter': 8.17.4 - '@cspell/cspell-pipe': 8.17.4 - '@cspell/cspell-types': 8.17.4 - '@cspell/dynamic-import': 8.17.4 - '@cspell/url': 8.17.4 + '@cspell/cspell-pipe': 9.1.3 + '@cspell/cspell-types': 9.1.3 + gensequence: 7.0.0 + + cspell@9.1.3: + dependencies: + '@cspell/cspell-json-reporter': 9.1.3 + '@cspell/cspell-pipe': 9.1.3 + '@cspell/cspell-types': 9.1.3 + '@cspell/dynamic-import': 9.1.3 + '@cspell/url': 9.1.3 chalk: 5.4.1 chalk-template: 1.1.0 - commander: 13.1.0 - cspell-dictionary: 8.17.4 - cspell-gitignore: 8.17.4 - cspell-glob: 8.17.4 - cspell-io: 8.17.4 - cspell-lib: 8.17.4 + commander: 14.0.0 + cspell-config-lib: 9.1.3 + cspell-dictionary: 9.1.3 + cspell-gitignore: 9.1.3 + cspell-glob: 9.1.3 + cspell-io: 9.1.3 + cspell-lib: 9.1.3 fast-json-stable-stringify: 2.1.0 file-entry-cache: 9.1.0 - get-stdin: 9.0.0 - semver: 7.7.1 - tinyglobby: 0.2.12 + semver: 7.7.2 + tinyglobby: 0.2.14 css-tree@3.1.0: dependencies: @@ -15128,13 +16073,13 @@ snapshots: cuint@0.2.2: {} - cypress-image-snapshot@4.0.1(cypress@14.0.3)(jest@29.7.0(@types/node@22.13.5)): + cypress-image-snapshot@4.0.1(cypress@14.5.1)(jest@30.0.4(@types/node@22.13.5)): dependencies: chalk: 2.4.2 - cypress: 14.0.3 + cypress: 14.5.1 fs-extra: 7.0.1 glob: 7.2.3 - jest-image-snapshot: 4.2.0(jest@29.7.0(@types/node@22.13.5)) + jest-image-snapshot: 4.2.0(jest@30.0.4(@types/node@22.13.5)) pkg-dir: 3.0.0 term-img: 4.1.0 transitivePeerDependencies: @@ -15145,7 +16090,7 @@ snapshots: '@actions/core': 1.11.1 arg: 5.0.2 console.table: 0.10.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 fast-shuffle: 6.1.0 find-cypress-specs: 1.47.9(@babel/core@7.27.1) globby: 11.1.0 @@ -15156,9 +16101,9 @@ snapshots: cypress-wait-until@3.0.2: {} - cypress@14.0.3: + cypress@14.5.1: dependencies: - '@cypress/request': 3.0.7 + '@cypress/request': 3.0.8 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) '@types/sinonjs__fake-timers': 8.1.1 '@types/sizzle': 2.3.9 @@ -15169,13 +16114,13 @@ snapshots: cachedir: 2.4.0 chalk: 4.1.2 check-more-types: 2.24.0 - ci-info: 4.1.0 + ci-info: 4.2.0 cli-cursor: 3.1.0 - cli-table3: 0.6.5 + cli-table3: 0.6.1 commander: 6.2.1 common-tags: 1.8.2 dayjs: 1.11.13 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) enquirer: 2.4.1 eventemitter2: 6.4.7 execa: 4.1.0 @@ -15184,6 +16129,7 @@ snapshots: figures: 3.2.0 fs-extra: 9.1.0 getos: 3.2.1 + hasha: 5.2.2 is-installed-globally: 0.4.0 lazy-ass: 1.6.0 listr2: 3.14.0(enquirer@2.4.1) @@ -15195,7 +16141,7 @@ snapshots: process: 0.11.10 proxy-from-env: 1.0.0 request-progress: 3.0.0 - semver: 7.7.1 + semver: 7.7.2 supports-color: 8.1.1 tmp: 0.2.3 tree-kill: 1.2.2 @@ -15395,7 +16341,7 @@ snapshots: data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 + whatwg-url: 14.1.1 data-view-buffer@1.0.2: dependencies: @@ -15441,7 +16387,11 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0(supports-color@8.1.1): + debug@4.4.0: + dependencies: + ms: 2.1.3 + + debug@4.4.1(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: @@ -15449,7 +16399,7 @@ snapshots: decamelize@1.2.0: {} - decimal.js@10.4.3: {} + decimal.js@10.6.0: {} decode-named-character-reference@1.0.2: dependencies: @@ -15459,7 +16409,7 @@ snapshots: dependencies: mimic-response: 3.1.0 - dedent@1.5.3: {} + dedent@1.6.0: {} deep-eql@5.0.2: {} @@ -15484,6 +16434,8 @@ snapshots: which-collection: 1.0.2 which-typed-array: 1.1.18 + deep-extend@0.6.0: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -15613,8 +16565,6 @@ snapshots: didyoumean@1.2.2: {} - diff-sequences@29.6.3: {} - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -15948,13 +16898,13 @@ snapshots: dependencies: htmlparser2: 9.1.0 - eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.13.5))(typescript@5.7.3): + eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(jest@30.0.4(@types/node@22.13.5))(typescript@5.7.3): dependencies: '@typescript-eslint/utils': 8.24.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.26.0(jiti@2.4.2) optionalDependencies: '@typescript-eslint/eslint-plugin': 8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) - jest: 29.7.0(@types/node@22.13.5) + jest: 30.0.4(@types/node@22.13.5) transitivePeerDependencies: - supports-color - typescript @@ -15964,7 +16914,7 @@ snapshots: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint: 9.26.0(jiti@2.4.2) espree: 10.3.0 @@ -16054,7 +17004,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 @@ -16177,33 +17127,24 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - executable@4.1.1: dependencies: pify: 2.3.0 - exit@0.1.2: {} + exit-x@0.2.2: {} + + expand-template@2.0.3: {} expect-type@1.1.0: {} - expect@29.7.0: + expect@30.0.4: dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 + '@jest/expect-utils': 30.0.4 + '@jest/get-type': 30.0.1 + jest-matcher-utils: 30.0.4 + jest-message-util: 30.0.2 + jest-mock: 30.0.2 + jest-util: 30.0.2 express-rate-limit@7.5.0(express@5.1.0): dependencies: @@ -16253,7 +17194,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -16289,7 +17230,7 @@ snapshots: extract-zip@2.0.1(supports-color@8.1.1): dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -16392,6 +17333,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + ferrum@1.9.4: dependencies: fastestsmallesttextencoderdecoder: 1.0.22 @@ -16455,7 +17400,7 @@ snapshots: finalhandler@2.1.0: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -16480,7 +17425,7 @@ snapshots: '@actions/core': 1.11.1 arg: 5.0.2 console.table: 0.10.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 find-test-names: 1.29.5(@babel/core@7.27.1) globby: 11.1.0 minimatch: 3.1.2 @@ -16510,15 +17455,13 @@ snapshots: '@babel/parser': 7.27.2 '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.27.1) acorn-walk: 8.3.4 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 globby: 11.1.0 simple-bin-help: 1.8.0 transitivePeerDependencies: - '@babel/core' - supports-color - find-up-simple@1.0.0: {} - find-up-simple@1.0.1: {} find-up@3.0.0: @@ -16562,7 +17505,11 @@ snapshots: follow-redirects@1.15.9(debug@4.4.0): optionalDependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 + + follow-redirects@1.15.9(debug@4.4.1): + optionalDependencies: + debug: 4.4.1(supports-color@8.1.1) font-awesome@4.7.0: {} @@ -16605,6 +17552,8 @@ snapshots: fromentries@1.3.2: {} + fs-constants@1.0.0: {} + fs-extra@11.1.1: dependencies: graceful-fs: 4.2.11 @@ -16706,8 +17655,6 @@ snapshots: get-stdin@5.0.1: {} - get-stdin@9.0.0: {} - get-stream@4.1.0: dependencies: pump: 3.0.2 @@ -16718,8 +17665,6 @@ snapshots: get-stream@6.0.1: {} - get-stream@8.0.1: {} - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -16738,6 +17683,8 @@ snapshots: dependencies: assert-plus: 1.0.0 + github-from-package@0.0.0: {} + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -16974,14 +17921,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.1 - debug: 4.4.0(supports-color@8.1.1) + agent-base: 7.1.3 + debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17000,7 +17947,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.4.0) + follow-redirects: 1.15.9(debug@4.4.1) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -17030,14 +17977,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17047,8 +17994,6 @@ snapshots: human-signals@2.1.0: {} - human-signals@5.0.0: {} - humanize-duration@3.32.1: {} husky@9.1.7: {} @@ -17096,6 +18041,8 @@ snapshots: inherits@2.0.4: {} + ini@1.3.8: {} + ini@2.0.0: {} ini@3.0.1: {} @@ -17270,8 +18217,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -17343,16 +18288,6 @@ snapshots: transitivePeerDependencies: - supports-color - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.27.1 - '@babel/parser': 7.27.2 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.27.1 @@ -17380,7 +18315,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -17389,7 +18324,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -17421,79 +18356,81 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 - jest-changed-files@29.7.0: + jest-changed-files@30.0.2: dependencies: execa: 5.1.1 - jest-util: 29.7.0 + jest-util: 30.0.2 p-limit: 3.1.0 - jest-circus@29.7.0: + jest-circus@30.0.4: dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 + '@jest/environment': 30.0.4 + '@jest/expect': 30.0.4 + '@jest/test-result': 30.0.4 + '@jest/types': 30.0.1 '@types/node': 22.13.5 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.3 + dedent: 1.6.0 is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 + jest-each: 30.0.2 + jest-matcher-utils: 30.0.4 + jest-message-util: 30.0.2 + jest-runtime: 30.0.4 + jest-snapshot: 30.0.4 + jest-util: 30.0.2 p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 + pretty-format: 30.0.2 + pure-rand: 7.0.1 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.13.5): + jest-cli@30.0.4(@types/node@22.13.5): dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 + '@jest/core': 30.0.4 + '@jest/test-result': 30.0.4 + '@jest/types': 30.0.1 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.5) - exit: 0.1.2 + exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.13.5) - jest-util: 29.7.0 - jest-validate: 29.7.0 + jest-config: 30.0.4(@types/node@22.13.5) + jest-util: 30.0.2 + jest-validate: 30.0.2 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - babel-plugin-macros + - esbuild-register - supports-color - ts-node - jest-config@29.7.0(@types/node@22.13.5): + jest-config@30.0.4(@types/node@22.13.5): dependencies: - '@babel/core': 7.27.1 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.27.1) + '@babel/core': 7.28.0 + '@jest/get-type': 30.0.1 + '@jest/pattern': 30.0.1 + '@jest/test-sequencer': 30.0.4 + '@jest/types': 30.0.1 + babel-jest: 30.0.4(@babel/core@7.28.0) chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 4.2.0 deepmerge: 4.3.1 - glob: 7.2.3 + glob: 10.4.5 graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 + jest-circus: 30.0.4 + jest-docblock: 30.0.1 + jest-environment-node: 30.0.4 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.2 + jest-runner: 30.0.4 + jest-util: 30.0.2 + jest-validate: 30.0.2 micromatch: 4.0.8 parse-json: 5.2.0 - pretty-format: 29.7.0 + pretty-format: 30.0.2 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: @@ -17502,58 +18439,56 @@ snapshots: - babel-plugin-macros - supports-color - jest-diff@29.7.0: + jest-diff@30.0.4: dependencies: + '@jest/diff-sequences': 30.0.1 + '@jest/get-type': 30.0.1 chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + pretty-format: 30.0.2 - jest-docblock@29.7.0: + jest-docblock@30.0.1: dependencies: detect-newline: 3.1.0 - jest-each@29.7.0: + jest-each@30.0.2: dependencies: - '@jest/types': 29.6.3 + '@jest/get-type': 30.0.1 + '@jest/types': 30.0.1 chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 + jest-util: 30.0.2 + pretty-format: 30.0.2 - jest-environment-node@29.7.0: + jest-environment-node@30.0.4: dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 + '@jest/environment': 30.0.4 + '@jest/fake-timers': 30.0.4 + '@jest/types': 30.0.1 '@types/node': 22.13.5 - jest-mock: 29.7.0 - jest-util: 29.7.0 + jest-mock: 30.0.2 + jest-util: 30.0.2 + jest-validate: 30.0.2 - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: + jest-haste-map@30.0.2: dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 + '@jest/types': 30.0.1 '@types/node': 22.13.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 + jest-regex-util: 30.0.1 + jest-util: 30.0.2 + jest-worker: 30.0.2 micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - jest-image-snapshot@4.2.0(jest@29.7.0(@types/node@22.13.5)): + jest-image-snapshot@4.2.0(jest@30.0.4(@types/node@22.13.5)): dependencies: chalk: 1.1.3 get-stdin: 5.0.1 glur: 1.1.2 - jest: 29.7.0(@types/node@22.13.5) + jest: 30.0.4(@types/node@22.13.5) lodash: 4.17.21 mkdirp: 0.5.6 pixelmatch: 5.3.0 @@ -17561,166 +18496,167 @@ snapshots: rimraf: 2.7.1 ssim.js: 3.5.0 - jest-leak-detector@29.7.0: + jest-leak-detector@30.0.2: dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + '@jest/get-type': 30.0.1 + pretty-format: 30.0.2 - jest-matcher-utils@29.7.0: + jest-matcher-utils@30.0.4: dependencies: + '@jest/get-type': 30.0.1 chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + jest-diff: 30.0.4 + pretty-format: 30.0.2 - jest-message-util@29.7.0: + jest-message-util@30.0.2: dependencies: '@babel/code-frame': 7.27.1 - '@jest/types': 29.6.3 + '@jest/types': 30.0.1 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.8 - pretty-format: 29.7.0 + pretty-format: 30.0.2 slash: 3.0.0 stack-utils: 2.0.6 - jest-mock@29.7.0: + jest-mock@30.0.2: dependencies: - '@jest/types': 29.6.3 + '@jest/types': 30.0.1 '@types/node': 22.13.5 - jest-util: 29.7.0 + jest-util: 30.0.2 - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + jest-pnp-resolver@1.2.3(jest-resolve@30.0.2): optionalDependencies: - jest-resolve: 29.7.0 + jest-resolve: 30.0.2 - jest-regex-util@29.6.3: {} + jest-regex-util@30.0.1: {} - jest-resolve-dependencies@29.7.0: + jest-resolve-dependencies@30.0.4: dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 + jest-regex-util: 30.0.1 + jest-snapshot: 30.0.4 transitivePeerDependencies: - supports-color - jest-resolve@29.7.0: + jest-resolve@30.0.2: dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.10 - resolve.exports: 2.0.2 + jest-haste-map: 30.0.2 + jest-pnp-resolver: 1.2.3(jest-resolve@30.0.2) + jest-util: 30.0.2 + jest-validate: 30.0.2 slash: 3.0.0 + unrs-resolver: 1.11.1 - jest-runner@29.7.0: + jest-runner@30.0.4: dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 + '@jest/console': 30.0.4 + '@jest/environment': 30.0.4 + '@jest/test-result': 30.0.4 + '@jest/transform': 30.0.4 + '@jest/types': 30.0.1 '@types/node': 22.13.5 chalk: 4.1.2 emittery: 0.13.1 + exit-x: 0.2.2 graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 + jest-docblock: 30.0.1 + jest-environment-node: 30.0.4 + jest-haste-map: 30.0.2 + jest-leak-detector: 30.0.2 + jest-message-util: 30.0.2 + jest-resolve: 30.0.2 + jest-runtime: 30.0.4 + jest-util: 30.0.2 + jest-watcher: 30.0.4 + jest-worker: 30.0.2 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - jest-runtime@29.7.0: + jest-runtime@30.0.4: dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 + '@jest/environment': 30.0.4 + '@jest/fake-timers': 30.0.4 + '@jest/globals': 30.0.4 + '@jest/source-map': 30.0.1 + '@jest/test-result': 30.0.4 + '@jest/transform': 30.0.4 + '@jest/types': 30.0.1 '@types/node': 22.13.5 chalk: 4.1.2 - cjs-module-lexer: 1.4.1 + cjs-module-lexer: 2.1.0 collect-v8-coverage: 1.0.2 - glob: 7.2.3 + glob: 10.4.5 graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 + jest-haste-map: 30.0.2 + jest-message-util: 30.0.2 + jest-mock: 30.0.2 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.2 + jest-snapshot: 30.0.4 + jest-util: 30.0.2 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - jest-snapshot@29.7.0: + jest-snapshot@30.0.4: dependencies: - '@babel/core': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.27.1) - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.27.1) - '@babel/types': 7.27.1 - '@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.27.1) + '@babel/core': 7.28.0 + '@babel/generator': 7.28.0 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0) + '@babel/types': 7.28.0 + '@jest/expect-utils': 30.0.4 + '@jest/get-type': 30.0.1 + '@jest/snapshot-utils': 30.0.4 + '@jest/transform': 30.0.4 + '@jest/types': 30.0.1 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) chalk: 4.1.2 - expect: 29.7.0 + expect: 30.0.4 graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.7.1 + jest-diff: 30.0.4 + jest-matcher-utils: 30.0.4 + jest-message-util: 30.0.2 + jest-util: 30.0.2 + pretty-format: 30.0.2 + semver: 7.7.2 + synckit: 0.11.8 transitivePeerDependencies: - supports-color - jest-util@29.7.0: + jest-util@30.0.2: dependencies: - '@jest/types': 29.6.3 + '@jest/types': 30.0.1 '@types/node': 22.13.5 chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 4.2.0 graceful-fs: 4.2.11 - picomatch: 2.3.1 + picomatch: 4.0.2 - jest-validate@29.7.0: + jest-validate@30.0.2: dependencies: - '@jest/types': 29.6.3 + '@jest/get-type': 30.0.1 + '@jest/types': 30.0.1 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 29.6.3 leven: 3.1.0 - pretty-format: 29.7.0 + pretty-format: 30.0.2 - jest-watcher@29.7.0: + jest-watcher@30.0.4: dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 + '@jest/test-result': 30.0.4 + '@jest/types': 30.0.1 '@types/node': 22.13.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.7.0 + jest-util: 30.0.2 string-length: 4.0.2 jest-worker@27.5.1: @@ -17729,22 +18665,24 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@29.7.0: + jest-worker@30.0.2: dependencies: '@types/node': 22.13.5 - jest-util: 29.7.0 + '@ungap/structured-clone': 1.3.0 + jest-util: 30.0.2 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.13.5): + jest@30.0.4(@types/node@22.13.5): dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 + '@jest/core': 30.0.4 + '@jest/types': 30.0.1 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.13.5) + jest-cli: 30.0.4(@types/node@22.13.5) transitivePeerDependencies: - '@types/node' - babel-plugin-macros + - esbuild-register - supports-color - ts-node @@ -17797,12 +18735,11 @@ snapshots: jsdoc-type-pratt-parser@4.1.0: {} - jsdom@26.0.0: + jsdom@26.1.0(canvas@3.1.2): dependencies: cssstyle: 4.2.1 data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.2 + decimal.js: 10.6.0 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -17820,6 +18757,8 @@ snapshots: whatwg-url: 14.1.1 ws: 8.18.0 xml-name-validator: 5.0.0 + optionalDependencies: + canvas: 3.1.2 transitivePeerDependencies: - bufferutil - supports-color @@ -17891,7 +18830,7 @@ snapshots: junk@4.0.1: {} - katex@0.16.11: + katex@0.16.22: dependencies: commander: 8.3.0 @@ -17903,8 +18842,6 @@ snapshots: kind-of@6.0.3: {} - kleur@3.0.3: {} - kolorist@1.8.0: {} ky@0.30.0: {} @@ -17972,18 +18909,18 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@15.4.3: + lint-staged@16.1.2: dependencies: chalk: 5.4.1 - commander: 13.1.0 - debug: 4.4.0(supports-color@8.1.1) - execa: 8.0.1 + commander: 14.0.0 + debug: 4.4.1(supports-color@8.1.1) lilconfig: 3.1.3 - listr2: 8.2.5 + listr2: 8.3.3 micromatch: 4.0.8 + nano-spawn: 1.0.2 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.7.0 + yaml: 2.8.0 transitivePeerDependencies: - supports-color @@ -18000,7 +18937,7 @@ snapshots: optionalDependencies: enquirer: 2.4.1 - listr2@8.2.5: + listr2@8.3.3: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -18144,7 +19081,7 @@ snapshots: markdown-table@3.0.4: {} - marked@15.0.7: {} + marked@16.0.0: {} marked@4.3.0: {} @@ -18505,7 +19442,7 @@ snapshots: micromark@2.11.4: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -18513,7 +19450,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -18553,8 +19490,6 @@ snapshots: mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} - mimic-function@5.0.1: {} mimic-response@1.0.1: {} @@ -18589,6 +19524,8 @@ snapshots: mitt@3.0.1: {} + mkdirp-classic@0.5.3: {} + mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -18633,8 +19570,14 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nano-spawn@1.0.2: {} + nanoid@3.3.11: {} + napi-build-utils@2.0.0: {} + + napi-postinstall@0.3.0: {} + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -18647,6 +19590,12 @@ snapshots: nice-try@1.0.5: {} + node-abi@3.75.0: + dependencies: + semver: 7.7.2 + + node-addon-api@7.1.1: {} + node-cleanup@2.1.2: {} node-domexception@1.0.0: {} @@ -18702,10 +19651,6 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - nwsapi@2.2.16: {} nyc@15.1.0: @@ -18820,10 +19765,6 @@ snapshots: dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -19002,8 +19943,6 @@ snapshots: path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} path-scurry@1.11.1: @@ -19098,6 +20037,8 @@ snapshots: pirates@4.0.6: {} + pirates@4.0.7: {} + pixelmatch@5.3.0: dependencies: pngjs: 6.0.0 @@ -19189,8 +20130,29 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + preact@10.26.2: {} + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.75.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.3 + tunnel-agent: 0.6.0 + precinct@12.1.2: dependencies: '@dependents/detective-less': 5.0.0 @@ -19230,9 +20192,9 @@ snapshots: pretty-bytes@6.1.1: {} - pretty-format@29.7.0: + pretty-format@30.0.2: dependencies: - '@jest/schemas': 29.6.3 + '@jest/schemas': 30.0.1 ansi-styles: 5.2.0 react-is: 18.3.1 @@ -19248,11 +20210,6 @@ snapshots: process@0.11.10: {} - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - property-information@7.0.0: {} proxy-addr@2.0.7: @@ -19277,16 +20234,12 @@ snapshots: punycode@2.3.1: {} - pure-rand@6.1.0: {} + pure-rand@7.0.1: {} qs@6.13.0: dependencies: side-channel: 1.1.0 - qs@6.13.1: - dependencies: - side-channel: 1.1.0 - qs@6.14.0: dependencies: side-channel: 1.1.0 @@ -19325,6 +20278,13 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + react-is@18.3.1: {} read-cache@1.0.0: @@ -19520,8 +20480,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} - resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -19565,7 +20523,7 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-visualizer@5.14.0(rollup@4.40.2): + rollup-plugin-visualizer@6.0.3(rollup@4.40.2): dependencies: open: 8.4.2 picomatch: 4.0.2 @@ -19638,7 +20596,7 @@ snapshots: router@2.2.0: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -19736,6 +20694,8 @@ snapshots: semver@7.7.1: {} + semver@7.7.2: {} + send@0.19.0: dependencies: debug: 2.6.9 @@ -19756,7 +20716,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -19842,7 +20802,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.7.1 + semver: 7.7.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -19931,6 +20891,14 @@ snapshots: simple-bin-help@1.8.0: {} + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -19941,8 +20909,6 @@ snapshots: mrmime: 2.0.0 totalist: 3.0.1 - sisteransi@1.0.5: {} - slash@3.0.0: {} slash@4.0.0: {} @@ -19975,6 +20941,8 @@ snapshots: smob@1.5.0: {} + smol-toml@1.4.1: {} + sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 @@ -20045,7 +21013,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -20056,7 +21024,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -20069,7 +21037,7 @@ snapshots: spec-change@1.11.11: dependencies: arg: 5.0.2 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 deep-equal: 2.2.3 dependency-tree: 11.0.1 lazy-ass: 2.0.3 @@ -20110,7 +21078,7 @@ snapshots: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 @@ -20237,12 +21205,12 @@ snapshots: strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} - strip-indent@4.0.0: dependencies: min-indent: 1.0.1 + strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} stylis@4.3.6: {} @@ -20288,6 +21256,10 @@ snapshots: '@pkgr/core': 0.2.4 tslib: 2.8.1 + synckit@0.11.8: + dependencies: + '@pkgr/core': 0.2.4 + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 @@ -20324,6 +21296,21 @@ snapshots: tapable@2.2.1: {} + tar-fs@2.1.3: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + teen_process@1.16.0: dependencies: '@babel/runtime': 7.26.9 @@ -20430,6 +21417,11 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@1.0.2: {} tinyrainbow@2.0.0: {} @@ -20717,12 +21709,12 @@ snapshots: universalify@2.0.1: {} - unocss@66.0.0(postcss@8.5.3)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3)): + unocss@66.0.0(postcss@8.5.6)(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3)): dependencies: - '@unocss/astro': 66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3)) + '@unocss/astro': 66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3)) '@unocss/cli': 66.0.0 '@unocss/core': 66.0.0 - '@unocss/postcss': 66.0.0(postcss@8.5.3) + '@unocss/postcss': 66.0.0(postcss@8.5.6) '@unocss/preset-attributify': 66.0.0 '@unocss/preset-icons': 66.0.0 '@unocss/preset-mini': 66.0.0 @@ -20736,9 +21728,9 @@ snapshots: '@unocss/transformer-compile-class': 66.0.0 '@unocss/transformer-directives': 66.0.0 '@unocss/transformer-variant-group': 66.0.0 - '@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(vue@3.5.13(typescript@5.7.3)) + '@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(vue@3.5.13(typescript@5.7.3)) optionalDependencies: - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - postcss - supports-color @@ -20751,10 +21743,10 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.2 - unplugin-vue-components@28.4.0(@babel/parser@7.27.2)(vue@3.5.13(typescript@5.7.3)): + unplugin-vue-components@28.4.0(@babel/parser@7.28.0)(vue@3.5.13(typescript@5.7.3)): dependencies: chokidar: 3.6.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 local-pkg: 1.0.0 magic-string: 0.30.17 mlly: 1.7.4 @@ -20763,7 +21755,7 @@ snapshots: unplugin-utils: 0.2.4 vue: 3.5.13(typescript@5.7.3) optionalDependencies: - '@babel/parser': 7.27.2 + '@babel/parser': 7.28.0 transitivePeerDependencies: - supports-color @@ -20772,6 +21764,30 @@ snapshots: acorn: 8.14.1 webpack-virtual-modules: 0.6.2 + unrs-resolver@1.11.1: + dependencies: + napi-postinstall: 0.3.0 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + untildify@4.0.0: {} upath@1.2.0: {} @@ -20826,13 +21842,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1): + vite-node@3.0.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0): dependencies: cac: 6.7.14 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -20847,7 +21863,7 @@ snapshots: - tsx - yaml - vite-plugin-istanbul@7.0.0(vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1)): + vite-plugin-istanbul@7.0.0(vite@7.0.3(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0)): dependencies: '@istanbuljs/load-nyc-config': 1.1.0 espree: 10.3.0 @@ -20855,16 +21871,16 @@ snapshots: picocolors: 1.1.1 source-map: 0.7.4 test-exclude: 7.0.1 - vite: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 7.0.3(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) transitivePeerDependencies: - supports-color - vite-plugin-pwa@1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0): + vite-plugin-pwa@1.0.0(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.3.0): dependencies: - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 pretty-bytes: 6.1.1 tinyglobby: 0.2.12 - vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) workbox-build: 7.1.1(@types/babel__core@7.20.5) workbox-window: 7.3.0 transitivePeerDependencies: @@ -20873,14 +21889,14 @@ snapshots: vite@5.4.19(@types/node@22.13.5)(terser@5.39.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.3 + postcss: 8.5.6 rollup: 4.40.2 optionalDependencies: '@types/node': 22.13.5 fsevents: 2.3.3 terser: 5.39.0 - vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1): + vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0): dependencies: esbuild: 0.24.2 postcss: 8.5.3 @@ -20891,12 +21907,12 @@ snapshots: jiti: 2.4.2 terser: 5.39.0 tsx: 4.19.3 - yaml: 2.7.1 + yaml: 2.8.0 - vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1): + vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0): dependencies: esbuild: 0.24.2 - postcss: 8.5.3 + postcss: 8.5.6 rollup: 4.40.2 optionalDependencies: '@types/node': 22.13.5 @@ -20904,19 +21920,35 @@ snapshots: jiti: 2.4.2 terser: 5.39.0 tsx: 4.19.3 - yaml: 2.7.1 + yaml: 2.8.0 - vitepress-plugin-search@1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)): + vite@7.0.3(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0): + dependencies: + esbuild: 0.25.0 + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + postcss: 8.5.6 + rollup: 4.40.2 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 22.13.5 + fsevents: 2.3.3 + jiti: 2.4.2 + terser: 5.39.0 + tsx: 4.19.3 + yaml: 2.8.0 + + vitepress-plugin-search@1.0.4-alpha.22(flexsearch@0.7.43)(vitepress@1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.6)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)): 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.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3) + vitepress: 1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.6)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3) vue: 3.5.13(typescript@5.7.3) - vitepress@1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.3)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3): + vitepress@1.6.3(@algolia/client-search@5.20.3)(@types/node@22.13.5)(axios@1.8.4)(postcss@8.5.6)(search-insights@2.17.2)(terser@5.39.0)(typescript@5.7.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.20.3)(search-insights@2.17.2) @@ -20937,7 +21969,7 @@ snapshots: vite: 5.4.19(@types/node@22.13.5)(terser@5.39.0) vue: 3.5.13(typescript@5.7.3) optionalDependencies: - postcss: 8.5.3 + postcss: 8.5.6 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -20965,17 +21997,17 @@ snapshots: - typescript - universal-cookie - vitest@3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.0.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1): + vitest@3.0.6(@types/debug@4.1.12)(@types/node@22.13.5)(@vitest/ui@3.0.6)(jiti@2.4.2)(jsdom@26.1.0(canvas@3.1.2))(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0): dependencies: '@vitest/expect': 3.0.6 - '@vitest/mocker': 3.0.6(vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1)) + '@vitest/mocker': 3.0.6(vite@6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0)) '@vitest/pretty-format': 3.0.6 '@vitest/runner': 3.0.6 '@vitest/snapshot': 3.0.6 '@vitest/spy': 3.0.6 '@vitest/utils': 3.0.6 chai: 5.2.0 - debug: 4.4.0(supports-color@8.1.1) + debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 pathe: 2.0.3 @@ -20984,14 +22016,14 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) - vite-node: 3.0.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.1) + vite: 6.1.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) + vite-node: 3.0.6(@types/node@22.13.5)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.3)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.13.5 '@vitest/ui': 3.0.6(vitest@3.0.6) - jsdom: 26.0.0 + jsdom: 26.1.0(canvas@3.1.2) transitivePeerDependencies: - jiti - less @@ -21266,11 +22298,6 @@ snapshots: whatwg-mimetype@4.0.0: {} - whatwg-url@14.0.0: - dependencies: - tr46: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-url@14.1.1: dependencies: tr46: 5.0.0 @@ -21372,10 +22399,10 @@ snapshots: workbox-build@7.1.1(@types/babel__core@7.20.5): dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.27.1 - '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/core': 7.28.0 + '@babel/preset-env': 7.27.2(@babel/core@7.28.0) '@babel/runtime': 7.27.1 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@2.79.2) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.0)(@types/babel__core@7.20.5)(rollup@2.79.2) '@rollup/plugin-node-resolve': 15.3.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) @@ -21513,10 +22540,10 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - write-file-atomic@4.0.2: + write-file-atomic@5.0.1: dependencies: imurmurhash: 0.1.4 - signal-exit: 3.0.7 + signal-exit: 4.1.0 ws@8.17.1: {} @@ -21544,6 +22571,8 @@ snapshots: yaml@2.7.1: {} + yaml@2.8.0: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 diff --git a/renovate.json b/renovate.json index 8a35d9d50..095f74c32 100644 --- a/renovate.json +++ b/renovate.json @@ -40,6 +40,10 @@ { "groupName": "dompurify", "matchPackagePatterns": ["dompurify"] + }, + { + "matchPackageNames": ["chokidar"], + "enabled": false } ], "dependencyDashboard": false, diff --git a/vite.config.ts b/vite.config.ts index 0930de5b6..c4738458e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -16,7 +16,6 @@ export default defineConfig({ environment: 'jsdom', globals: true, // TODO: should we move this to a mermaid-core package? - setupFiles: ['packages/mermaid/src/tests/setup.ts'], coverage: { provider: 'v8', reporter: ['text', 'json', 'html', 'lcov'],