diff --git a/.changeset/quiet-hotels-shine.md b/.changeset/quiet-hotels-shine.md new file mode 100644 index 000000000..d9b6cb39e --- /dev/null +++ b/.changeset/quiet-hotels-shine.md @@ -0,0 +1,6 @@ +--- +'mermaid': minor +'@mermaid-js/parser': minor +--- + +feat: Add shorter `+: Label` syntax in packet diagram diff --git a/.esbuild/build.ts b/.esbuild/build.ts index 05002cb16..6bf5f6017 100644 --- a/.esbuild/build.ts +++ b/.esbuild/build.ts @@ -1,5 +1,5 @@ import { build } from 'esbuild'; -import { mkdir, writeFile } from 'node:fs/promises'; +import { mkdir, readFile, rename, writeFile } from 'node:fs/promises'; import { packageOptions } from '../.build/common.js'; import { generateLangium } from '../.build/generateLangium.js'; import type { MermaidBuildOptions } from './util.js'; @@ -31,7 +31,15 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => { // mermaid.js { ...iifeOptions }, // mermaid.min.js - { ...iifeOptions, minify: true, metafile: shouldVisualize } + { ...iifeOptions, minify: true, metafile: shouldVisualize }, + // mermaid.tiny.min.js + { + ...iifeOptions, + minify: true, + includeLargeFeatures: false, + metafile: shouldVisualize, + sourcemap: false, + } ); } if (entryName === 'mermaid-zenuml') { @@ -70,6 +78,20 @@ const handler = (e) => { process.exit(1); }; +const buildTinyMermaid = async () => { + await mkdir('./packages/tiny/dist', { recursive: true }); + await rename( + './packages/mermaid/dist/mermaid.tiny.min.js', + './packages/tiny/dist/mermaid.tiny.js' + ); + // Copy version from mermaid's package.json to tiny's package.json + const mermaidPkg = JSON.parse(await readFile('./packages/mermaid/package.json', 'utf8')); + const tinyPkg = JSON.parse(await readFile('./packages/tiny/package.json', 'utf8')); + tinyPkg.version = mermaidPkg.version; + + await writeFile('./packages/tiny/package.json', JSON.stringify(tinyPkg, null, 2) + '\n'); +}; + const main = async () => { await generateLangium(); await mkdir('stats', { recursive: true }); @@ -78,6 +100,7 @@ const main = async () => { for (const pkg of packageNames) { await buildPackage(pkg).catch(handler); } + await buildTinyMermaid(); }; void main(); diff --git a/.esbuild/util.ts b/.esbuild/util.ts index dde0352af..3a0ec6b41 100644 --- a/.esbuild/util.ts +++ b/.esbuild/util.ts @@ -14,6 +14,7 @@ export interface MermaidBuildOptions extends BuildOptions { metafile: boolean; format: 'esm' | 'iife'; options: PackageOptions; + includeLargeFeatures: boolean; } export const defaultOptions: Omit = { @@ -21,6 +22,7 @@ export const defaultOptions: Omit metafile: false, core: false, format: 'esm', + includeLargeFeatures: true, } as const; const buildOptions = (override: BuildOptions): BuildOptions => { @@ -39,12 +41,18 @@ const buildOptions = (override: BuildOptions): BuildOptions => { }; }; -const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOptions) => { +const getFileName = ( + fileName: string, + { core, format, minify, includeLargeFeatures }: MermaidBuildOptions +) => { if (core) { fileName += '.core'; } else if (format === 'esm') { fileName += '.esm'; } + if (!includeLargeFeatures) { + fileName += '.tiny'; + } if (minify) { fileName += '.min'; } @@ -54,25 +62,27 @@ const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOpt export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => { const { core, - metafile, format, - minify, options: { name, file, packageName }, globalName = 'mermaid', + includeLargeFeatures, + ...rest } = options; + const external: string[] = ['require', 'fs', 'path']; const outFileName = getFileName(name, options); const output: BuildOptions = buildOptions({ + ...rest, absWorkingDir: resolve(__dirname, `../packages/${packageName}`), entryPoints: { [outFileName]: `src/${file}`, }, - metafile, - minify, globalName, logLevel: 'info', chunkNames: `chunks/${outFileName}/[name]-[hash]`, define: { + // This needs to be stringified for esbuild + includeLargeFeatures: `${includeLargeFeatures}`, 'import.meta.vitest': 'undefined', }, }); diff --git a/.github/workflows/e2e-timings.yml b/.github/workflows/e2e-timings.yml index ca78d0b3a..00e733c48 100644 --- a/.github/workflows/e2e-timings.yml +++ b/.github/workflows/e2e-timings.yml @@ -58,7 +58,7 @@ jobs: echo "EOF" >> $GITHUB_OUTPUT - name: Commit and create pull request - uses: peter-evans/create-pull-request@3b1f4bffdc97d7b055dd96732d7348e585ad2c4e + uses: peter-evans/create-pull-request@889dce9eaba7900ce30494f5e1ac7220b27e5c81 with: add-paths: | cypress/timings.json diff --git a/.vite/build.ts b/.vite/build.ts index 486d59452..480dd6b30 100644 --- a/.vite/build.ts +++ b/.vite/build.ts @@ -94,6 +94,10 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions) }), ...visualizerOptions(packageName, core), ], + define: { + // Needs to be string + includeLargeFeatures: 'true', + }, }; if (watch && config.build) { diff --git a/cypress/integration/rendering/flowchart.spec.js b/cypress/integration/rendering/flowchart.spec.js index 7b986cd2f..40713ac4e 100644 --- a/cypress/integration/rendering/flowchart.spec.js +++ b/cypress/integration/rendering/flowchart.spec.js @@ -934,4 +934,43 @@ graph TD } ); }); + it('68: should honor subgraph direction when inheritDir is false', () => { + imgSnapshotTest( + ` + %%{init: {"flowchart": { "inheritDir": false }}}%% + flowchart TB + direction LR + subgraph A + direction TB + a --> b + end + subgraph B + c --> d + end + `, + { + fontFamily: 'courier', + } + ); + }); + + it('69: should inherit global direction when inheritDir is true', () => { + imgSnapshotTest( + ` + %%{init: {"flowchart": { "inheritDir": true }}}%% + flowchart TB + direction LR + subgraph A + direction TB + a --> b + end + subgraph B + c --> d + end + `, + { + fontFamily: 'courier', + } + ); + }); }); diff --git a/demos/er-multiline.html b/demos/er-multiline.html new file mode 100644 index 000000000..e85b320aa --- /dev/null +++ b/demos/er-multiline.html @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + +
+
+              erDiagram
+              CAR ||--o{ NAMED-DRIVER : allows
+              CAR ::: Pine {
+                  string registrationNumber PK "Primary Key
Unique registration number" + string make "Car make
e.g., Toyota" + string model "Model of the car
e.g., Corolla" + string[] parts "List of parts
Stored as array" + } + PERSON ||--o{ NAMED-DRIVER : is + PERSON ::: someclass { + string driversLicense PK "The license #
Primary Key" + string(99) firstName "Only 99 characters
are allowed
e.g., Smith" + string lastName "Last name of person
e.g., Smith" + string phone UK "Unique phone number
Used for contact" + int age "Age of the person
Must be numeric" + } + NAMED-DRIVER { + string carRegistrationNumber PK, FK, UK, PK "Foreign key to CAR
Also part of PK" + string driverLicence PK, FK "Foreign key to PERSON
Also part of PK" + } + MANUFACTURER only one to zero or more CAR : makesx +
+
+
+                  erDiagram
+                  _**testẽζ➕Ø😀㌕ぼ**_ {
+                    *__List~List~int~~sdfds__* **driversLicense** PK "***The l😀icense #***"
+                    string last*Name*
+                    string __phone__ UK
+                    *string(99)~T~~~~~~* firstName "Only __99__ 
characters are a
llowed dsfsdfsdfsdfs" + int _age_ + } +
+
+ + + + diff --git a/docs/config/setup/defaultConfig/variables/configKeys.md b/docs/config/setup/defaultConfig/variables/configKeys.md index 8ece37f17..98f738815 100644 --- a/docs/config/setup/defaultConfig/variables/configKeys.md +++ b/docs/config/setup/defaultConfig/variables/configKeys.md @@ -12,4 +12,4 @@ > `const` **configKeys**: `Set`<`string`> -Defined in: [packages/mermaid/src/defaultConfig.ts:285](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L285) +Defined in: [packages/mermaid/src/defaultConfig.ts:289](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L289) diff --git a/docs/config/usage.md b/docs/config/usage.md index 2e207213c..e157d1827 100644 --- a/docs/config/usage.md +++ b/docs/config/usage.md @@ -98,6 +98,12 @@ Mermaid can load multiple diagrams, in the same page. > Try it out, save this code as HTML and load it using any browser. > (Except Internet Explorer, please don't use Internet Explorer.) +## Tiny Mermaid + +We offer a smaller version of Mermaid that's approximately half the size of the full library. This tiny version doesn't support Mindmap Diagrams, Architecture Diagrams, KaTeX rendering, or lazy loading. + +If you need a more lightweight version without these features, you can use [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny). + ## Enabling Click Event and Tags in Nodes A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use. diff --git a/docs/intro/index.md b/docs/intro/index.md index 06a408268..51dd9f9d4 100644 --- a/docs/intro/index.md +++ b/docs/intro/index.md @@ -354,6 +354,7 @@ To Deploy Mermaid: - [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) +- [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) diff --git a/docs/syntax/classDiagram.md b/docs/syntax/classDiagram.md index 20fdef0ed..2067cc97c 100644 --- a/docs/syntax/classDiagram.md +++ b/docs/syntax/classDiagram.md @@ -545,6 +545,38 @@ It is possible to annotate classes with markers to provide additional metadata a Annotations are defined within the opening `<<` and closing `>>`. There are two ways to add an annotation to a class, and either way the output will be same: +> **Tip:**\ +> In Mermaid class diagrams, annotations like `<>` can be attached in two ways: +> +> - **Inline with the class definition** (Recommended for consistency): +> +> ```mermaid-example +> classDiagram +> class Shape <> +> ``` +> +> ```mermaid +> classDiagram +> class Shape <> +> ``` +> +> - **Separate line after the class definition**: +> +> ```mermaid-example +> classDiagram +> class Shape +> <> Shape +> ``` +> +> ```mermaid +> classDiagram +> class Shape +> <> Shape +> ``` +> +> Both methods are fully supported and produce identical diagrams.\ +> However, it is recommended to use the **inline style** for better readability and consistent formatting across diagrams. + - In a **_separate line_** after a class is defined: ```mermaid-example diff --git a/docs/syntax/packet.md b/docs/syntax/packet.md index 5eab81910..efe305f3b 100644 --- a/docs/syntax/packet.md +++ b/docs/syntax/packet.md @@ -16,13 +16,25 @@ This diagram type is particularly useful for developers, network engineers, educ ## Syntax -```md +``` packet-beta start: "Block name" %% Single-bit block start-end: "Block name" %% Multi-bit blocks ... More Fields ... ``` +### Bits Syntax (v\+) + +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 ++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" +... More Fields ... +``` + ## Examples ```mermaid-example @@ -76,8 +88,8 @@ packet-beta ```mermaid-example packet-beta title UDP Packet -0-15: "Source Port" -16-31: "Destination Port" ++16: "Source Port" ++16: "Destination Port" 32-47: "Length" 48-63: "Checksum" 64-95: "Data (variable length)" @@ -86,8 +98,8 @@ title UDP Packet ```mermaid packet-beta title UDP Packet -0-15: "Source Port" -16-31: "Destination Port" ++16: "Source Port" ++16: "Destination Port" 32-47: "Length" 48-63: "Checksum" 64-95: "Data (variable length)" diff --git a/package.json b/package.json index 3811fb375..75d577b86 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "@changesets/cli": "^2.27.12", "@cspell/eslint-plugin": "^8.19.3", "@cypress/code-coverage": "^3.12.49", - "@eslint/js": "^9.25.1", + "@eslint/js": "^9.26.0", "@rollup/plugin-typescript": "^12.1.2", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", @@ -93,7 +93,7 @@ "cypress-image-snapshot": "^4.0.1", "cypress-split": "^1.24.14", "esbuild": "^0.25.0", - "eslint": "^9.25.1", + "eslint": "^9.26.0", "eslint-config-prettier": "^10.1.1", "eslint-plugin-cypress": "^4.3.0", "eslint-plugin-html": "^8.1.2", @@ -126,7 +126,7 @@ "tslib": "^2.8.1", "tsx": "^4.7.3", "typescript": "~5.7.3", - "typescript-eslint": "^8.31.1", + "typescript-eslint": "^8.32.0", "vite": "^6.1.1", "vite-plugin-istanbul": "^7.0.0", "vitest": "^3.0.6" diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts index cc2bdc432..8cd451c16 100644 --- a/packages/mermaid/src/config.type.ts +++ b/packages/mermaid/src/config.type.ts @@ -295,6 +295,12 @@ export interface FlowchartDiagramConfig extends BaseDiagramConfig { * */ wrappingWidth?: number; + /** + * If true, subgraphs without explicit direction will inherit the global graph direction + * (e.g., LR, TB, RL, BT). Defaults to false to preserve legacy layout behavior. + * + */ + inheritDir?: boolean; } /** * This interface was referenced by `MermaidConfig`'s JSON-Schema diff --git a/packages/mermaid/src/defaultConfig.ts b/packages/mermaid/src/defaultConfig.ts index 85779736c..4d306a89e 100644 --- a/packages/mermaid/src/defaultConfig.ts +++ b/packages/mermaid/src/defaultConfig.ts @@ -71,6 +71,10 @@ const config: RequiredDeep = { fontWeight: this.personFontWeight, }; }, + flowchart: { + ...defaultConfigJson.flowchart, + inheritDir: false, // default to legacy behavior + }, external_personFont: function () { return { diff --git a/packages/mermaid/src/diagram-api/diagram-orchestration.ts b/packages/mermaid/src/diagram-api/diagram-orchestration.ts index 64112e999..97b9852ff 100644 --- a/packages/mermaid/src/diagram-api/diagram-orchestration.ts +++ b/packages/mermaid/src/diagram-api/diagram-orchestration.ts @@ -28,6 +28,7 @@ import architecture from '../diagrams/architecture/architectureDetector.js'; import { registerLazyLoadedDiagrams } from './detectType.js'; import { registerDiagram } from './diagramAPI.js'; import { treemap } from '../diagrams/treemap/detector.js'; +import '../type.d.ts'; let hasLoadedDiagrams = false; export const addDiagrams = () => { @@ -70,6 +71,11 @@ export const addDiagrams = () => { return text.toLowerCase().trimStart().startsWith('---'); } ); + + if (includeLargeFeatures) { + registerLazyLoadedDiagrams(flowchartElk, mindmap, architecture); + } + // Ordering of detectors is important. The first one to return true will be used. registerLazyLoadedDiagrams( c4, @@ -82,10 +88,8 @@ export const addDiagrams = () => { pie, requirement, sequence, - flowchartElk, flowchartV2, flowchart, - mindmap, timeline, git, stateV2, @@ -96,7 +100,6 @@ export const addDiagrams = () => { packet, xychart, block, - architecture, radar, treemap ); diff --git a/packages/mermaid/src/diagrams/common/common.ts b/packages/mermaid/src/diagrams/common/common.ts index fd76d0a45..14c88a0fc 100644 --- a/packages/mermaid/src/diagrams/common/common.ts +++ b/packages/mermaid/src/diagrams/common/common.ts @@ -341,29 +341,36 @@ export const renderKatex = async (text: string, config: MermaidConfig): Promise< return text.replace(katexRegex, 'MathML is unsupported in this environment.'); } - const { default: katex } = await import('katex'); - const outputMode = - config.forceLegacyMathML || (!isMathMLSupported() && config.legacyMathML) - ? 'htmlAndMathml' - : 'mathml'; - return text - .split(lineBreakRegex) - .map((line) => - hasKatex(line) - ? `
${line}
` - : `
${line}
` - ) - .join('') - .replace(katexRegex, (_, c) => - katex - .renderToString(c, { - throwOnError: true, - displayMode: true, - output: outputMode, - }) - .replace(/\n/g, ' ') - .replace(//g, '') - ); + if (includeLargeFeatures) { + const { default: katex } = await import('katex'); + const outputMode = + config.forceLegacyMathML || (!isMathMLSupported() && config.legacyMathML) + ? 'htmlAndMathml' + : 'mathml'; + return text + .split(lineBreakRegex) + .map((line) => + hasKatex(line) + ? `
${line}
` + : `
${line}
` + ) + .join('') + .replace(katexRegex, (_, c) => + katex + .renderToString(c, { + throwOnError: true, + displayMode: true, + output: outputMode, + }) + .replace(/\n/g, ' ') + .replace(//g, '') + ); + } + + return text.replace( + katexRegex, + 'Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.' + ); }; export default { diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts index 3eb1b13a7..65f8c4a05 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts @@ -651,7 +651,8 @@ You have to call mermaid.initialize.` const prims: any = { boolean: {}, number: {}, string: {} }; const objs: any[] = []; - let dir; // = undefined; direction.trim(); + let dir: string | undefined; + const nodeList = a.filter(function (item) { const type = typeof item; if (item.stmt && item.stmt === 'dir') { @@ -670,7 +671,16 @@ You have to call mermaid.initialize.` return { nodeList, dir }; }; - const { nodeList, dir } = uniq(list.flat()); + const result = uniq(list.flat()); + const nodeList = result.nodeList; + let dir = result.dir; + const flowchartConfig = getConfig().flowchart ?? {}; + dir = + dir ?? + (flowchartConfig.inheritDir + ? (this.getDirection() ?? (getConfig() as any).direction ?? undefined) + : undefined); + if (this.version === 'gen-1') { for (let i = 0; i < nodeList.length; i++) { nodeList[i] = this.lookUpDomId(nodeList[i]); @@ -681,6 +691,7 @@ You have to call mermaid.initialize.` title = title || ''; title = this.sanitizeText(title); this.subCount = this.subCount + 1; + const subGraph = { id: id, nodes: nodeList, diff --git a/packages/mermaid/src/diagrams/info/infoDb.ts b/packages/mermaid/src/diagrams/info/infoDb.ts index 5616a0ab9..169ceaf27 100644 --- a/packages/mermaid/src/diagrams/info/infoDb.ts +++ b/packages/mermaid/src/diagrams/info/infoDb.ts @@ -1,7 +1,9 @@ import type { InfoFields, InfoDB } from './infoTypes.js'; import packageJson from '../../../package.json' assert { type: 'json' }; -export const DEFAULT_INFO_DB: InfoFields = { version: packageJson.version } as const; +export const DEFAULT_INFO_DB: InfoFields = { + version: packageJson.version + (includeLargeFeatures ? '' : '-tiny'), +} as const; export const getVersion = (): string => DEFAULT_INFO_DB.version; diff --git a/packages/mermaid/src/diagrams/packet/packet.spec.ts b/packages/mermaid/src/diagrams/packet/packet.spec.ts index 2d7b278cd..bdd09acec 100644 --- a/packages/mermaid/src/diagrams/packet/packet.spec.ts +++ b/packages/mermaid/src/diagrams/packet/packet.spec.ts @@ -30,6 +30,7 @@ describe('packet diagrams', () => { [ [ { + "bits": 11, "end": 10, "label": "test", "start": 0, @@ -49,11 +50,13 @@ describe('packet diagrams', () => { [ [ { + "bits": 11, "end": 10, "label": "test", "start": 0, }, { + "bits": 1, "end": 11, "label": "single", "start": 11, @@ -63,6 +66,58 @@ describe('packet diagrams', () => { `); }); + it('should handle bit counts', async () => { + const str = `packet-beta + +8: "byte" + +16: "word" + `; + await expect(parser.parse(str)).resolves.not.toThrow(); + expect(getPacket()).toMatchInlineSnapshot(` + [ + [ + { + "bits": 8, + "end": 7, + "label": "byte", + "start": 0, + }, + { + "bits": 16, + "end": 23, + "label": "word", + "start": 8, + }, + ], + ] + `); + }); + + it('should handle bit counts with bit or bits', async () => { + const str = `packet-beta + +8: "byte" + +16: "word" + `; + await expect(parser.parse(str)).resolves.not.toThrow(); + expect(getPacket()).toMatchInlineSnapshot(` + [ + [ + { + "bits": 8, + "end": 7, + "label": "byte", + "start": 0, + }, + { + "bits": 16, + "end": 23, + "label": "word", + "start": 8, + }, + ], + ] + `); + }); + it('should split into multiple rows', async () => { const str = `packet-beta 0-10: "test" @@ -73,11 +128,13 @@ describe('packet diagrams', () => { [ [ { + "bits": 11, "end": 10, "label": "test", "start": 0, }, { + "bits": 20, "end": 31, "label": "multiple", "start": 11, @@ -85,6 +142,7 @@ describe('packet diagrams', () => { ], [ { + "bits": 31, "end": 63, "label": "multiple", "start": 32, @@ -92,6 +150,7 @@ describe('packet diagrams', () => { ], [ { + "bits": 26, "end": 90, "label": "multiple", "start": 64, @@ -111,11 +170,13 @@ describe('packet diagrams', () => { [ [ { + "bits": 17, "end": 16, "label": "test", "start": 0, }, { + "bits": 14, "end": 31, "label": "multiple", "start": 17, @@ -123,6 +184,7 @@ describe('packet diagrams', () => { ], [ { + "bits": 31, "end": 63, "label": "multiple", "start": 32, @@ -142,6 +204,16 @@ describe('packet diagrams', () => { ); }); + it('should throw error if numbers are not continuous with bit counts', async () => { + const str = `packet-beta + +16: "test" + 18-20: "error" + `; + await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot( + `[Error: Packet block 18 - 20 is not contiguous. It should start from 16.]` + ); + }); + it('should throw error if numbers are not continuous for single packets', async () => { const str = `packet-beta 0-16: "test" @@ -152,6 +224,16 @@ describe('packet diagrams', () => { ); }); + it('should throw error if numbers are not continuous for single packets with bit counts', async () => { + const str = `packet-beta + +16: "test" + 18: "error" + `; + await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot( + `[Error: Packet block 18 - 18 is not contiguous. It should start from 16.]` + ); + }); + it('should throw error if numbers are not continuous for single packets - 2', async () => { const str = `packet-beta 0-16: "test" @@ -172,4 +254,13 @@ describe('packet diagrams', () => { `[Error: Packet block 25 - 20 is invalid. End must be greater than start.]` ); }); + + it('should throw error if bit count is 0', async () => { + const str = `packet-beta + +0: "test" + `; + await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot( + `[Error: Packet block 0 is invalid. Cannot have a zero bit field.]` + ); + }); }); diff --git a/packages/mermaid/src/diagrams/packet/parser.ts b/packages/mermaid/src/diagrams/packet/parser.ts index 06d180dfd..1dcccd636 100644 --- a/packages/mermaid/src/diagrams/packet/parser.ts +++ b/packages/mermaid/src/diagrams/packet/parser.ts @@ -10,26 +10,33 @@ const maxPacketSize = 10_000; const populate = (ast: Packet) => { populateCommonDb(ast, db); - let lastByte = -1; + let lastBit = -1; let word: PacketWord = []; let row = 1; const { bitsPerRow } = db.getConfig(); - for (let { start, end, label } of ast.blocks) { - if (end && end < start) { + + for (let { start, end, bits, label } of ast.blocks) { + if (start !== undefined && end !== undefined && end < start) { throw new Error(`Packet block ${start} - ${end} is invalid. End must be greater than start.`); } - if (start !== lastByte + 1) { + start ??= lastBit + 1; + if (start !== lastBit + 1) { throw new Error( `Packet block ${start} - ${end ?? start} is not contiguous. It should start from ${ - lastByte + 1 + lastBit + 1 }.` ); } - lastByte = end ?? start; - log.debug(`Packet block ${start} - ${lastByte} with label ${label}`); + if (bits === 0) { + throw new Error(`Packet block ${start} is invalid. Cannot have a zero bit field.`); + } + end ??= start + (bits ?? 1) - 1; + bits ??= end - start + 1; + lastBit = end; + log.debug(`Packet block ${start} - ${lastBit} with label ${label}`); while (word.length <= bitsPerRow + 1 && db.getPacket().length < maxPacketSize) { - const [block, nextBlock] = getNextFittingBlock({ start, end, label }, row, bitsPerRow); + const [block, nextBlock] = getNextFittingBlock({ start, end, bits, label }, row, bitsPerRow); word.push(block); if (block.end + 1 === row * bitsPerRow) { db.pushWord(word); @@ -39,7 +46,7 @@ const populate = (ast: Packet) => { if (!nextBlock) { break; } - ({ start, end, label } = nextBlock); + ({ start, end, bits, label } = nextBlock); } } db.pushWord(word); @@ -50,8 +57,11 @@ const getNextFittingBlock = ( row: number, bitsPerRow: number ): [Required, PacketBlock | undefined] => { + if (block.start === undefined) { + throw new Error('start should have been set during first phase'); + } if (block.end === undefined) { - block.end = block.start; + throw new Error('end should have been set during first phase'); } if (block.start > block.end) { @@ -62,16 +72,20 @@ const getNextFittingBlock = ( return [block as Required, undefined]; } + const rowEnd = row * bitsPerRow - 1; + const rowStart = row * bitsPerRow; return [ { start: block.start, - end: row * bitsPerRow - 1, + end: rowEnd, label: block.label, + bits: rowEnd - block.start, }, { - start: row * bitsPerRow, + start: rowStart, end: block.end, label: block.label, + bits: block.end - rowStart, }, ]; }; diff --git a/packages/mermaid/src/docs/config/usage.md b/packages/mermaid/src/docs/config/usage.md index 0886a0e44..9e82ab87a 100644 --- a/packages/mermaid/src/docs/config/usage.md +++ b/packages/mermaid/src/docs/config/usage.md @@ -92,6 +92,12 @@ Mermaid can load multiple diagrams, in the same page. > Try it out, save this code as HTML and load it using any browser. > (Except Internet Explorer, please don't use Internet Explorer.) +## Tiny Mermaid + +We offer a smaller version of Mermaid that's approximately half the size of the full library. This tiny version doesn't support Mindmap Diagrams, Architecture Diagrams, KaTeX rendering, or lazy loading. + +If you need a more lightweight version without these features, you can use [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny). + ## Enabling Click Event and Tags in Nodes A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use. diff --git a/packages/mermaid/src/docs/intro/index.md b/packages/mermaid/src/docs/intro/index.md index ff37d549b..f8aef36f1 100644 --- a/packages/mermaid/src/docs/intro/index.md +++ b/packages/mermaid/src/docs/intro/index.md @@ -109,6 +109,7 @@ To Deploy Mermaid: - [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor) - [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli) +- [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny) - [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo) - [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo) diff --git a/packages/mermaid/src/docs/syntax/classDiagram.md b/packages/mermaid/src/docs/syntax/classDiagram.md index 33a1f9f6d..7ef81b96f 100644 --- a/packages/mermaid/src/docs/syntax/classDiagram.md +++ b/packages/mermaid/src/docs/syntax/classDiagram.md @@ -360,6 +360,27 @@ It is possible to annotate classes with markers to provide additional metadata a Annotations are defined within the opening `<<` and closing `>>`. There are two ways to add an annotation to a class, and either way the output will be same: +> **Tip:** +> In Mermaid class diagrams, annotations like `<>` can be attached in two ways: +> +> - **Inline with the class definition** (Recommended for consistency): +> +> ```mermaid-example +> classDiagram +> class Shape <> +> ``` +> +> - **Separate line after the class definition**: +> +> ```mermaid-example +> classDiagram +> class Shape +> <> Shape +> ``` +> +> Both methods are fully supported and produce identical diagrams. +> However, it is recommended to use the **inline style** for better readability and consistent formatting across diagrams. + - In a **_separate line_** after a class is defined: ```mermaid-example diff --git a/packages/mermaid/src/docs/syntax/packet.md b/packages/mermaid/src/docs/syntax/packet.md index c7b6cb71b..09beb27a6 100644 --- a/packages/mermaid/src/docs/syntax/packet.md +++ b/packages/mermaid/src/docs/syntax/packet.md @@ -10,13 +10,25 @@ This diagram type is particularly useful for developers, network engineers, educ ## Syntax -```md +``` packet-beta start: "Block name" %% Single-bit block start-end: "Block name" %% Multi-bit blocks ... More Fields ... ``` +### Bits Syntax (v+) + +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 ++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" +... More Fields ... +``` + ## Examples ```mermaid-example @@ -46,8 +58,8 @@ packet-beta ```mermaid-example packet-beta title UDP Packet -0-15: "Source Port" -16-31: "Destination Port" ++16: "Source Port" ++16: "Destination Port" 32-47: "Length" 48-63: "Checksum" 64-95: "Data (variable length)" diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts index 8fa02679b..cf08d02f8 100644 --- a/packages/mermaid/src/mermaidAPI.ts +++ b/packages/mermaid/src/mermaidAPI.ts @@ -5,7 +5,6 @@ // @ts-ignore TODO: Investigate D3 issue import { select } from 'd3'; import { compile, serialize, stringify } from 'stylis'; -// @ts-ignore: TODO Fix ts errors import DOMPurify from 'dompurify'; import isEmpty from 'lodash-es/isEmpty.js'; import packageJson from '../package.json' assert { type: 'json' }; diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts index af1e9945a..23c6fb091 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/erBox.ts @@ -89,6 +89,7 @@ export async function erBox(parent: D3Selection nameBBox.height += TEXT_PADDING; let yOffset = 0; const yOffsets = []; + const rows = []; let maxTypeWidth = 0; let maxNameWidth = 0; let maxKeysWidth = 0; @@ -137,12 +138,12 @@ export async function erBox(parent: D3Selection ); maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING); - yOffset += + const rowHeight = Math.max(typeBBox.height, nameBBox.height, keysBBox.height, commentBBox.height) + TEXT_PADDING; - yOffsets.push(yOffset); + rows.push({ yOffset, rowHeight }); + yOffset += rowHeight; } - yOffsets.pop(); let totalWidthSections = 4; if (maxKeysWidth <= PADDING) { @@ -185,8 +186,12 @@ export async function erBox(parent: D3Selection options.fillStyle = 'solid'; } + let totalShapeBBoxHeight = 0; + if (rows.length > 0) { + totalShapeBBoxHeight = rows.reduce((sum, row) => sum + (row?.rowHeight ?? 0), 0); + } const w = Math.max(shapeBBox.width + PADDING * 2, node?.width || 0, maxWidth); - const h = Math.max(shapeBBox.height + (yOffsets[0] || yOffset) + TEXT_PADDING, node?.height || 0); + const h = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node?.height || 0); const x = -w / 2; const y = -h / 2; @@ -232,13 +237,10 @@ export async function erBox(parent: D3Selection yOffsets.push(0); // Draw row rects - for (const [i, yOffset] of yOffsets.entries()) { - if (i === 0 && yOffsets.length > 1) { - continue; - // Skip first row - } - const isEven = i % 2 === 0 && yOffset !== 0; - const roughRect = rc.rectangle(x, nameBBox.height + y + yOffset, w, nameBBox.height, { + for (const [i, row] of rows.entries()) { + const contentRowIndex = i + 1; // Adjusted index to skip the header (name) row + const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0; + const roughRect = rc.rectangle(x, nameBBox.height + y + row?.yOffset, w, row?.rowHeight, { ...options, fill: isEven ? rowEven : rowOdd, stroke: nodeBorder, @@ -246,7 +248,7 @@ export async function erBox(parent: D3Selection shapeSvg .insert(() => roughRect, 'g.label') .attr('style', cssStyles!.join('')) - .attr('class', `row-rect-${i % 2 === 0 ? 'even' : 'odd'}`); + .attr('class', `row-rect-${isEven ? 'even' : 'odd'}`); } // Draw divider lines diff --git a/packages/mermaid/src/schemas/config.schema.yaml b/packages/mermaid/src/schemas/config.schema.yaml index c22d0aebc..6dd21e884 100644 --- a/packages/mermaid/src/schemas/config.schema.yaml +++ b/packages/mermaid/src/schemas/config.schema.yaml @@ -2124,6 +2124,13 @@ $defs: # JSON Schema definition (maybe we should move these to a separate file) type: number default: 200 + inheritDir: + type: boolean + default: false + description: | + If true, subgraphs without explicit direction will inherit the global graph direction + (e.g., LR, TB, RL, BT). Defaults to false to preserve legacy layout behavior. + SankeyLinkColor: description: | Picks the color of the sankey diagram links, using the colors of the source and/or target of the links. diff --git a/packages/mermaid/src/type.d.ts b/packages/mermaid/src/type.d.ts new file mode 100644 index 000000000..0c88e4866 --- /dev/null +++ b/packages/mermaid/src/type.d.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line no-var +declare var includeLargeFeatures: boolean; diff --git a/packages/parser/src/language/packet/packet.langium b/packages/parser/src/language/packet/packet.langium index 91d6501ed..08cf10596 100644 --- a/packages/parser/src/language/packet/packet.langium +++ b/packages/parser/src/language/packet/packet.langium @@ -12,5 +12,10 @@ entry Packet: ; PacketBlock: - start=INT('-' end=INT)? ':' label=STRING EOL -; \ No newline at end of file + ( + start=INT('-' end=INT)? + | '+' bits=INT + ) + ':' label=STRING + EOL +; diff --git a/packages/tiny/README.md b/packages/tiny/README.md new file mode 100644 index 000000000..707cc4307 --- /dev/null +++ b/packages/tiny/README.md @@ -0,0 +1,35 @@ +# Tiny Mermaid + +This is a tiny version of mermaid that is optimized for the web. It is a subset of the mermaid library and is designed to be used in the browser via CDN. + +## Lazy loading + +The original mermaid library supports lazy loading, so it will be faster on the initial load, and only load the required diagrams. +This is not supported in the tiny mermaid library. So it's always recommended to use the full mermaid library unless you have a very specific reason to reduce the bundle size. + +## Removals from mermaid + +This does not support + +- Mindmap Diagram +- Architecture Diagram +- Katex rendering +- Lazy loading + +## Usage via NPM + +This package is not meant to be installed directly from npm. It is designed to be used via CDN. +If you need to use mermaid in your project, please install the full [`mermaid` package](https://www.npmjs.com/package/mermaid) instead. + +## Usage via CDN + +```html + + + + + + + + +``` diff --git a/packages/tiny/package.json b/packages/tiny/package.json new file mode 100644 index 000000000..0460850c6 --- /dev/null +++ b/packages/tiny/package.json @@ -0,0 +1,25 @@ +{ + "name": "@mermaid-js/tiny", + "version": "11.6.0", + "description": "Tiny version of mermaid", + "type": "commonjs", + "main": "./dist/mermaid.tiny.js", + "scripts": { + "clean": "rimraf dist" + }, + "repository": { + "type": "git", + "url": "https://github.com/mermaid-js/mermaid" + }, + "author": "Sidharth Vinod", + "license": "MIT", + "dependencies": {}, + "devDependencies": {}, + "files": [ + "dist/", + "README.md" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bb933a3a..886eb0657 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,16 +27,16 @@ importers: version: 2.28.1 '@cspell/eslint-plugin': specifier: ^8.19.3 - version: 8.19.3(eslint@9.25.1(jiti@2.4.2)) + 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.26.9)(@babel/preset-env@7.27.1(@babel/core@7.26.9))(babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)))(cypress@14.0.3)(webpack@5.95.0(esbuild@0.25.0)) '@eslint/js': - specifier: ^9.25.1 - version: 9.25.1 + specifier: ^9.26.0 + version: 9.26.0 '@rollup/plugin-typescript': specifier: ^12.1.2 - version: 12.1.2(rollup@4.40.1)(tslib@2.8.1)(typescript@5.7.3) + version: 12.1.2(rollup@4.40.2)(tslib@2.8.1)(typescript@5.7.3) '@types/cors': specifier: ^2.8.17 version: 2.8.17 @@ -60,7 +60,7 @@ importers: version: 22.13.5 '@types/rollup-plugin-visualizer': specifier: ^5.0.3 - version: 5.0.3(rollup@4.40.1) + version: 5.0.3(rollup@4.40.2) '@vitest/coverage-v8': specifier: ^3.0.6 version: 3.0.6(vitest@3.0.6) @@ -104,32 +104,32 @@ importers: specifier: ^0.25.0 version: 0.25.0 eslint: - specifier: ^9.25.1 - version: 9.25.1(jiti@2.4.2) + specifier: ^9.26.0 + version: 9.26.0(jiti@2.4.2) eslint-config-prettier: specifier: ^10.1.1 - version: 10.1.1(eslint@9.25.1(jiti@2.4.2)) + version: 10.1.1(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-cypress: specifier: ^4.3.0 - version: 4.3.0(eslint@9.25.1(jiti@2.4.2)) + version: 4.3.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-html: specifier: ^8.1.2 version: 8.1.2 eslint-plugin-jest: specifier: ^28.11.0 - version: 28.11.0(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.25.1(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@29.7.0(@types/node@22.13.5))(typescript@5.7.3) eslint-plugin-jsdoc: specifier: ^50.6.9 - version: 50.6.9(eslint@9.25.1(jiti@2.4.2)) + version: 50.6.9(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-json: specifier: ^4.0.1 version: 4.0.1 eslint-plugin-lodash: specifier: ^8.0.0 - version: 8.0.0(eslint@9.25.1(jiti@2.4.2)) + version: 8.0.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-markdown: specifier: ^5.1.0 - version: 5.1.0(eslint@9.25.1(jiti@2.4.2)) + version: 5.1.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-no-only-tests: specifier: ^3.3.0 version: 3.3.0 @@ -138,7 +138,7 @@ importers: version: 0.4.0 eslint-plugin-unicorn: specifier: ^59.0.0 - version: 59.0.0(eslint@9.25.1(jiti@2.4.2)) + version: 59.0.0(eslint@9.26.0(jiti@2.4.2)) express: specifier: ^5.1.0 version: 5.1.0 @@ -189,7 +189,7 @@ importers: version: 6.0.1 rollup-plugin-visualizer: specifier: ^5.14.0 - version: 5.14.0(rollup@4.40.1) + version: 5.14.0(rollup@4.40.2) start-server-and-test: specifier: ^2.0.10 version: 2.0.10 @@ -203,8 +203,8 @@ importers: specifier: ~5.7.3 version: 5.7.3 typescript-eslint: - specifier: ^8.31.1 - version: 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) + 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) @@ -494,7 +494,7 @@ importers: 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)) unplugin-vue-components: specifier: ^28.4.0 - version: 28.4.0(@babel/parser@7.27.1)(vue@3.5.13(typescript@5.7.3)) + version: 28.4.0(@babel/parser@7.27.2)(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) @@ -579,6 +579,8 @@ importers: specifier: ^11.0.3 version: 11.0.3 + packages/tiny: {} + tests/webpack: dependencies: '@mermaid-js/mermaid-example-diagram': @@ -866,8 +868,8 @@ packages: resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.1': - resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} + '@babel/compat-data@7.27.2': + resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} '@babel/core@7.26.9': @@ -894,8 +896,8 @@ packages: resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.1': - resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.27.1': @@ -1008,8 +1010,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.1': - resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} + '@babel/parser@7.27.2': + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} engines: {node: '>=6.0.0'} hasBin: true @@ -1338,8 +1340,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.27.1': - resolution: {integrity: sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA==} + '@babel/plugin-transform-object-rest-spread@7.27.2': + resolution: {integrity: sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1458,6 +1460,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/preset-env@7.27.1': resolution: {integrity: sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA==} engines: {node: '>=6.9.0'} @@ -1481,8 +1489,8 @@ packages: resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.1': - resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} '@babel/traverse@7.26.9': @@ -2445,6 +2453,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -2465,8 +2479,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.25.1': - resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} + '@eslint/js@9.26.0': + resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -2789,6 +2803,10 @@ packages: '@microsoft/tsdoc@0.15.1': resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + '@modelcontextprotocol/sdk@1.11.0': + resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} + engines: {node: '>=18'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2883,8 +2901,8 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.40.1': - resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} + '@rollup/rollup-android-arm-eabi@4.40.2': + resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==} cpu: [arm] os: [android] @@ -2893,8 +2911,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.40.1': - resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} + '@rollup/rollup-android-arm64@4.40.2': + resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==} cpu: [arm64] os: [android] @@ -2903,8 +2921,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.40.1': - resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} + '@rollup/rollup-darwin-arm64@4.40.2': + resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==} cpu: [arm64] os: [darwin] @@ -2913,8 +2931,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.40.1': - resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} + '@rollup/rollup-darwin-x64@4.40.2': + resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==} cpu: [x64] os: [darwin] @@ -2923,8 +2941,8 @@ packages: cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.40.1': - resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} + '@rollup/rollup-freebsd-arm64@4.40.2': + resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==} cpu: [arm64] os: [freebsd] @@ -2933,8 +2951,8 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.40.1': - resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} + '@rollup/rollup-freebsd-x64@4.40.2': + resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==} cpu: [x64] os: [freebsd] @@ -2943,8 +2961,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': - resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} + '@rollup/rollup-linux-arm-gnueabihf@4.40.2': + resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==} cpu: [arm] os: [linux] @@ -2953,8 +2971,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.40.1': - resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} + '@rollup/rollup-linux-arm-musleabihf@4.40.2': + resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==} cpu: [arm] os: [linux] @@ -2963,8 +2981,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.40.1': - resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} + '@rollup/rollup-linux-arm64-gnu@4.40.2': + resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==} cpu: [arm64] os: [linux] @@ -2973,8 +2991,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.40.1': - resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} + '@rollup/rollup-linux-arm64-musl@4.40.2': + resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==} cpu: [arm64] os: [linux] @@ -2983,8 +3001,8 @@ packages: cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': - resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.40.2': + resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==} cpu: [loong64] os: [linux] @@ -2993,8 +3011,8 @@ packages: cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': - resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} + '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': + resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==} cpu: [ppc64] os: [linux] @@ -3003,13 +3021,13 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.40.1': - resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} + '@rollup/rollup-linux-riscv64-gnu@4.40.2': + resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.40.1': - resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} + '@rollup/rollup-linux-riscv64-musl@4.40.2': + resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==} cpu: [riscv64] os: [linux] @@ -3018,8 +3036,8 @@ packages: cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.40.1': - resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} + '@rollup/rollup-linux-s390x-gnu@4.40.2': + resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==} cpu: [s390x] os: [linux] @@ -3028,8 +3046,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.40.1': - resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} + '@rollup/rollup-linux-x64-gnu@4.40.2': + resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==} cpu: [x64] os: [linux] @@ -3038,8 +3056,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.40.1': - resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} + '@rollup/rollup-linux-x64-musl@4.40.2': + resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==} cpu: [x64] os: [linux] @@ -3048,8 +3066,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.40.1': - resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} + '@rollup/rollup-win32-arm64-msvc@4.40.2': + resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==} cpu: [arm64] os: [win32] @@ -3058,8 +3076,8 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.40.1': - resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} + '@rollup/rollup-win32-ia32-msvc@4.40.2': + resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==} cpu: [ia32] os: [win32] @@ -3068,8 +3086,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.40.1': - resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} + '@rollup/rollup-win32-x64-msvc@4.40.2': + resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==} cpu: [x64] os: [win32] @@ -3497,16 +3515,16 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.31.1': - resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} + '@typescript-eslint/eslint-plugin@8.32.0': + resolution: {integrity: sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.31.1': - resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} + '@typescript-eslint/parser@8.32.0': + resolution: {integrity: sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3516,12 +3534,12 @@ packages: resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.31.1': - resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} + '@typescript-eslint/scope-manager@8.32.0': + resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.31.1': - resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} + '@typescript-eslint/type-utils@8.32.0': + resolution: {integrity: sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3535,8 +3553,8 @@ packages: resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.31.1': - resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} + '@typescript-eslint/types@8.32.0': + resolution: {integrity: sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -3554,8 +3572,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@8.31.1': - resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} + '@typescript-eslint/typescript-estree@8.32.0': + resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -3567,8 +3585,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.31.1': - resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} + '@typescript-eslint/utils@8.32.0': + resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3582,8 +3600,8 @@ packages: resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.31.1': - resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} + '@typescript-eslint/visitor-keys@8.32.0': + resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -5652,8 +5670,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.25.1: - resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} + eslint@9.26.0: + resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -5737,6 +5755,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.1: + resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.6: + resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} + engines: {node: '>=18.0.0'} + execa@1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} @@ -5769,6 +5795,12 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + express@4.21.0: resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} engines: {node: '>= 0.10.0'} @@ -8118,6 +8150,10 @@ packages: resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} hasBin: true + pkce-challenge@5.0.0: + resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + engines: {node: '>=16.20.0'} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -8581,8 +8617,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.40.1: - resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} + rollup@4.40.2: + resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -9294,6 +9330,12 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -9394,8 +9436,8 @@ packages: peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x - typescript-eslint@8.31.1: - resolution: {integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==} + typescript-eslint@8.32.0: + resolution: {integrity: sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10196,6 +10238,14 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + zod-to-json-schema@3.24.5: + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + peerDependencies: + zod: ^3.24.1 + + zod@3.24.4: + resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -10673,7 +10723,7 @@ snapshots: '@babel/compat-data@7.26.8': {} - '@babel/compat-data@7.27.1': {} + '@babel/compat-data@7.27.2': {} '@babel/core@7.26.9': dependencies: @@ -10700,11 +10750,11 @@ snapshots: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.1 - '@babel/helper-compilation-targets': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) '@babel/helpers': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 convert-source-map: 2.0.0 @@ -10725,7 +10775,7 @@ snapshots: '@babel/generator@7.27.1': dependencies: - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 @@ -10743,9 +10793,9 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-compilation-targets@7.27.1': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.27.1 + '@babel/compat-data': 7.27.2 '@babel/helper-validator-option': 7.27.1 browserslist: 4.24.4 lru-cache: 5.1.1 @@ -10794,7 +10844,7 @@ snapshots: '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.9)': dependencies: '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 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) lodash.debounce: 4.0.8 @@ -10805,7 +10855,7 @@ snapshots: '@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.1 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.0(supports-color@8.1.1) lodash.debounce: 4.0.8 @@ -10926,7 +10976,7 @@ snapshots: '@babel/helper-wrap-function@7.27.1': dependencies: - '@babel/template': 7.27.1 + '@babel/template': 7.27.2 '@babel/traverse': 7.27.1 '@babel/types': 7.27.1 transitivePeerDependencies: @@ -10939,14 +10989,14 @@ snapshots: '@babel/helpers@7.27.1': dependencies: - '@babel/template': 7.27.1 + '@babel/template': 7.27.2 '@babel/types': 7.27.1 '@babel/parser@7.26.9': dependencies: '@babel/types': 7.27.1 - '@babel/parser@7.27.1': + '@babel/parser@7.27.2': dependencies: '@babel/types': 7.27.1 @@ -11247,7 +11297,7 @@ snapshots: dependencies: '@babel/core': 7.26.9 '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-compilation-targets': 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.26.9) '@babel/traverse': 7.27.1 @@ -11259,7 +11309,7 @@ snapshots: dependencies: '@babel/core': 7.27.1 '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-compilation-targets': 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.27.1) '@babel/traverse': 7.27.1 @@ -11271,13 +11321,13 @@ snapshots: dependencies: '@babel/core': 7.26.9 '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.27.1 + '@babel/template': 7.27.2 '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/template': 7.27.1 + '@babel/template': 7.27.2 '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.26.9)': dependencies: @@ -11372,7 +11422,7 @@ snapshots: '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.26.9)': dependencies: '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.27.1 transitivePeerDependencies: @@ -11381,7 +11431,7 @@ snapshots: '@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.1 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.27.1 transitivePeerDependencies: @@ -11537,18 +11587,20 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.27.1(@babel/core@7.26.9)': + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.26.9)': dependencies: '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.26.9) '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.26.9) - '@babel/plugin-transform-object-rest-spread@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 - '@babel/helper-compilation-targets': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 + '@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-super@7.27.1(@babel/core@7.26.9)': @@ -11781,11 +11833,11 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.27.1(@babel/core@7.26.9)': + '@babel/preset-env@7.26.9(@babel/core@7.26.9)': dependencies: - '@babel/compat-data': 7.27.1 + '@babel/compat-data': 7.27.2 '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 7.27.1 + '@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.26.9) @@ -11827,7 +11879,7 @@ snapshots: '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.26.9) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.26.9) '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.26.9) - '@babel/plugin-transform-object-rest-spread': 7.27.1(@babel/core@7.26.9) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.26.9) '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.26.9) '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.26.9) '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.26.9) @@ -11856,11 +11908,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-env@7.27.1(@babel/core@7.27.1)': + '@babel/preset-env@7.27.2(@babel/core@7.27.1)': dependencies: - '@babel/compat-data': 7.27.1 + '@babel/compat-data': 7.27.2 '@babel/core': 7.27.1 - '@babel/helper-compilation-targets': 7.27.1 + '@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.27.1) @@ -11902,7 +11954,7 @@ snapshots: '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-object-rest-spread': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.27.1) '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) @@ -11957,10 +12009,10 @@ snapshots: '@babel/parser': 7.27.1 '@babel/types': 7.27.1 - '@babel/template@7.27.1': + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 '@babel/types': 7.27.1 '@babel/traverse@7.26.9': @@ -11979,8 +12031,8 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.1 - '@babel/parser': 7.27.1 - '@babel/template': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 '@babel/types': 7.27.1 debug: 4.4.0(supports-color@8.1.1) globals: 11.12.0 @@ -12504,12 +12556,12 @@ snapshots: '@cspell/url': 8.19.3 import-meta-resolve: 4.1.0 - '@cspell/eslint-plugin@8.19.3(eslint@9.25.1(jiti@2.4.2))': + '@cspell/eslint-plugin@8.19.3(eslint@9.26.0(jiti@2.4.2))': dependencies: '@cspell/cspell-types': 8.19.3 '@cspell/url': 8.19.3 cspell-lib: 8.19.3 - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) synckit: 0.11.4 '@cspell/filetypes@8.17.4': {} @@ -12544,11 +12596,11 @@ snapshots: '@csstools/css-tokenizer@3.0.3': {} - '@cypress/code-coverage@3.13.4(@babel/core@7.26.9)(@babel/preset-env@7.27.1(@babel/core@7.26.9))(babel-loader@9.2.1(@babel/core@7.26.9)(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.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)))(cypress@14.0.3)(webpack@5.95.0(esbuild@0.25.0))': dependencies: '@babel/core': 7.26.9 - '@babel/preset-env': 7.27.1(@babel/core@7.26.9) - '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.26.9)(@babel/preset-env@7.27.1(@babel/core@7.26.9))(babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)))(webpack@5.95.0(esbuild@0.25.0)) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) + '@cypress/webpack-preprocessor': 6.0.2(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)))(webpack@5.95.0(esbuild@0.25.0)) babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)) chalk: 4.1.2 cypress: 14.0.3 @@ -12584,10 +12636,10 @@ snapshots: tunnel-agent: 0.6.0 uuid: 8.3.2 - '@cypress/webpack-preprocessor@6.0.2(@babel/core@7.26.9)(@babel/preset-env@7.27.1(@babel/core@7.26.9))(babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)))(webpack@5.95.0(esbuild@0.25.0))': + '@cypress/webpack-preprocessor@6.0.2(@babel/core@7.26.9)(@babel/preset-env@7.26.9(@babel/core@7.26.9))(babel-loader@9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)))(webpack@5.95.0(esbuild@0.25.0))': dependencies: '@babel/core': 7.26.9 - '@babel/preset-env': 7.27.1(@babel/core@7.26.9) + '@babel/preset-env': 7.26.9(@babel/core@7.26.9) babel-loader: 9.2.1(@babel/core@7.26.9)(webpack@5.95.0(esbuild@0.25.0)) bluebird: 3.7.1 debug: 4.4.0(supports-color@8.1.1) @@ -12864,9 +12916,14 @@ snapshots: '@esbuild/win32-x64@0.25.0': optional: true - '@eslint-community/eslint-utils@4.5.1(eslint@9.25.1(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.5.1(eslint@9.26.0(jiti@2.4.2))': dependencies: - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0(jiti@2.4.2))': + dependencies: + eslint: 9.26.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -12899,7 +12956,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.25.1': {} + '@eslint/js@9.26.0': {} '@eslint/object-schema@2.1.6': {} @@ -13322,6 +13379,21 @@ snapshots: '@microsoft/tsdoc@0.15.1': {} + '@modelcontextprotocol/sdk@1.11.0': + dependencies: + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.6 + express: 5.1.0 + express-rate-limit: 7.5.0(express@5.1.0) + pkce-challenge: 5.0.0 + raw-body: 3.0.0 + zod: 3.24.4 + zod-to-json-schema: 3.24.5(zod@3.24.4) + transitivePeerDependencies: + - supports-color + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -13378,13 +13450,13 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/plugin-typescript@12.1.2(rollup@4.40.1)(tslib@2.8.1)(typescript@5.7.3)': + '@rollup/plugin-typescript@12.1.2(rollup@4.40.2)(tslib@2.8.1)(typescript@5.7.3)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.40.1) + '@rollup/pluginutils': 5.1.4(rollup@4.40.2) resolve: 1.22.10 typescript: 5.7.3 optionalDependencies: - rollup: 4.40.1 + rollup: 4.40.2 tslib: 2.8.1 '@rollup/pluginutils@3.1.0(rollup@2.79.2)': @@ -13402,129 +13474,129 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/pluginutils@5.1.4(rollup@4.40.1)': + '@rollup/pluginutils@5.1.4(rollup@4.40.2)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.40.1 + rollup: 4.40.2 '@rollup/rollup-android-arm-eabi@4.34.8': optional: true - '@rollup/rollup-android-arm-eabi@4.40.1': + '@rollup/rollup-android-arm-eabi@4.40.2': optional: true '@rollup/rollup-android-arm64@4.34.8': optional: true - '@rollup/rollup-android-arm64@4.40.1': + '@rollup/rollup-android-arm64@4.40.2': optional: true '@rollup/rollup-darwin-arm64@4.34.8': optional: true - '@rollup/rollup-darwin-arm64@4.40.1': + '@rollup/rollup-darwin-arm64@4.40.2': optional: true '@rollup/rollup-darwin-x64@4.34.8': optional: true - '@rollup/rollup-darwin-x64@4.40.1': + '@rollup/rollup-darwin-x64@4.40.2': optional: true '@rollup/rollup-freebsd-arm64@4.34.8': optional: true - '@rollup/rollup-freebsd-arm64@4.40.1': + '@rollup/rollup-freebsd-arm64@4.40.2': optional: true '@rollup/rollup-freebsd-x64@4.34.8': optional: true - '@rollup/rollup-freebsd-x64@4.40.1': + '@rollup/rollup-freebsd-x64@4.40.2': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.34.8': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': + '@rollup/rollup-linux-arm-gnueabihf@4.40.2': optional: true '@rollup/rollup-linux-arm-musleabihf@4.34.8': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.40.1': + '@rollup/rollup-linux-arm-musleabihf@4.40.2': optional: true '@rollup/rollup-linux-arm64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-arm64-gnu@4.40.1': + '@rollup/rollup-linux-arm64-gnu@4.40.2': optional: true '@rollup/rollup-linux-arm64-musl@4.34.8': optional: true - '@rollup/rollup-linux-arm64-musl@4.40.1': + '@rollup/rollup-linux-arm64-musl@4.40.2': optional: true '@rollup/rollup-linux-loongarch64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': + '@rollup/rollup-linux-loongarch64-gnu@4.40.2': optional: true '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.40.2': optional: true '@rollup/rollup-linux-riscv64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.40.1': + '@rollup/rollup-linux-riscv64-gnu@4.40.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.40.1': + '@rollup/rollup-linux-riscv64-musl@4.40.2': optional: true '@rollup/rollup-linux-s390x-gnu@4.34.8': optional: true - '@rollup/rollup-linux-s390x-gnu@4.40.1': + '@rollup/rollup-linux-s390x-gnu@4.40.2': optional: true '@rollup/rollup-linux-x64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-x64-gnu@4.40.1': + '@rollup/rollup-linux-x64-gnu@4.40.2': optional: true '@rollup/rollup-linux-x64-musl@4.34.8': optional: true - '@rollup/rollup-linux-x64-musl@4.40.1': + '@rollup/rollup-linux-x64-musl@4.40.2': optional: true '@rollup/rollup-win32-arm64-msvc@4.34.8': optional: true - '@rollup/rollup-win32-arm64-msvc@4.40.1': + '@rollup/rollup-win32-arm64-msvc@4.40.2': optional: true '@rollup/rollup-win32-ia32-msvc@4.34.8': optional: true - '@rollup/rollup-win32-ia32-msvc@4.40.1': + '@rollup/rollup-win32-ia32-msvc@4.40.2': optional: true '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true - '@rollup/rollup-win32-x64-msvc@4.40.1': + '@rollup/rollup-win32-x64-msvc@4.40.2': optional: true '@shikijs/core@2.5.0': @@ -13965,9 +14037,9 @@ snapshots: '@types/retry@0.12.0': {} - '@types/rollup-plugin-visualizer@5.0.3(rollup@4.40.1)': + '@types/rollup-plugin-visualizer@5.0.3(rollup@4.40.2)': dependencies: - rollup-plugin-visualizer: 5.14.0(rollup@4.40.1) + rollup-plugin-visualizer: 5.14.0(rollup@4.40.2) transitivePeerDependencies: - rolldown - rollup @@ -14032,31 +14104,31 @@ snapshots: '@types/node': 22.13.5 optional: true - '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3)': + '@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)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.31.1 - eslint: 9.25.1(jiti@2.4.2) + '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.32.0 + '@typescript-eslint/type-utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.32.0 + eslint: 9.26.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.31.1 + '@typescript-eslint/scope-manager': 8.32.0 + '@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) - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -14066,18 +14138,18 @@ snapshots: '@typescript-eslint/types': 8.24.1 '@typescript-eslint/visitor-keys': 8.24.1 - '@typescript-eslint/scope-manager@8.31.1': + '@typescript-eslint/scope-manager@8.32.0': dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/visitor-keys': 8.31.1 + '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/visitor-keys': 8.32.0 - '@typescript-eslint/type-utils@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) + '@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) - eslint: 9.25.1(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) + eslint: 9.26.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -14086,7 +14158,7 @@ snapshots: '@typescript-eslint/types@8.24.1': {} - '@typescript-eslint/types@8.31.1': {} + '@typescript-eslint/types@8.32.0': {} '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.3)': dependencies: @@ -14117,38 +14189,38 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.31.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.32.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/visitor-keys': 8.31.1 + '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/visitor-keys': 8.32.0 debug: 4.4.0(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.24.1 '@typescript-eslint/types': 8.24.1 '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.7.3) - eslint: 9.25.1(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.32.0 + '@typescript-eslint/types': 8.32.0 + '@typescript-eslint/typescript-estree': 8.32.0(typescript@5.7.3) + eslint: 9.26.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -14163,9 +14235,9 @@ snapshots: '@typescript-eslint/types': 8.24.1 eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.31.1': + '@typescript-eslint/visitor-keys@8.32.0': dependencies: - '@typescript-eslint/types': 8.31.1 + '@typescript-eslint/types': 8.32.0 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.3.0': {} @@ -15015,7 +15087,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.9): dependencies: - '@babel/compat-data': 7.27.1 + '@babel/compat-data': 7.27.2 '@babel/core': 7.26.9 '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.9) semver: 6.3.1 @@ -15024,7 +15096,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1): dependencies: - '@babel/compat-data': 7.27.1 + '@babel/compat-data': 7.27.2 '@babel/core': 7.27.1 '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) semver: 6.3.1 @@ -16653,38 +16725,38 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.1(eslint@9.25.1(jiti@2.4.2)): + eslint-config-prettier@10.1.1(eslint@9.26.0(jiti@2.4.2)): dependencies: - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) - eslint-plugin-cypress@4.3.0(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-cypress@4.3.0(eslint@9.26.0(jiti@2.4.2)): dependencies: - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) globals: 15.15.0 eslint-plugin-html@8.1.2: dependencies: htmlparser2: 9.1.0 - eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.25.1(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@29.7.0(@types/node@22.13.5))(typescript@5.7.3): dependencies: - '@typescript-eslint/utils': 8.24.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.25.1(jiti@2.4.2) + '@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.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) + '@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) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.6.9(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-jsdoc@50.6.9(eslint@9.26.0(jiti@2.4.2)): dependencies: '@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) escape-string-regexp: 4.0.0 - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 @@ -16699,14 +16771,14 @@ snapshots: lodash: 4.17.21 vscode-json-languageservice: 4.2.1 - eslint-plugin-lodash@8.0.0(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-lodash@8.0.0(eslint@9.26.0(jiti@2.4.2)): dependencies: - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) lodash: 4.17.21 - eslint-plugin-markdown@5.1.0(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-markdown@5.1.0(eslint@9.26.0(jiti@2.4.2)): dependencies: - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color @@ -16718,15 +16790,15 @@ snapshots: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - eslint-plugin-unicorn@59.0.0(eslint@9.25.1(jiti@2.4.2)): + eslint-plugin-unicorn@59.0.0(eslint@9.26.0(jiti@2.4.2)): dependencies: '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@2.4.2)) '@eslint/plugin-kit': 0.2.8 ci-info: 4.2.0 clean-regexp: 1.0.0 core-js-compat: 3.41.0 - eslint: 9.25.1(jiti@2.4.2) + eslint: 9.26.0(jiti@2.4.2) esquery: 1.6.0 find-up-simple: 1.0.1 globals: 16.0.0 @@ -16753,19 +16825,20 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.25.1(jiti@2.4.2): + eslint@9.26.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.5.1(eslint@9.25.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.26.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.20.0 '@eslint/config-helpers': 0.2.1 '@eslint/core': 0.13.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.25.1 + '@eslint/js': 9.26.0 '@eslint/plugin-kit': 0.2.8 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.2 + '@modelcontextprotocol/sdk': 1.11.0 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -16790,6 +16863,7 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + zod: 3.24.4 optionalDependencies: jiti: 2.4.2 transitivePeerDependencies: @@ -16853,6 +16927,12 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.0.1: {} + + eventsource@3.0.6: + dependencies: + eventsource-parser: 3.0.1 + execa@1.0.0: dependencies: cross-spawn: 6.0.6 @@ -16915,6 +16995,10 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 + express-rate-limit@7.5.0(express@5.1.0): + dependencies: + express: 5.1.0 + express@4.21.0: dependencies: accepts: 1.3.8 @@ -19808,6 +19892,8 @@ snapshots: dependencies: pngjs: 6.0.0 + pkce-challenge@5.0.0: {} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -20269,14 +20355,14 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-visualizer@5.14.0(rollup@4.40.1): + rollup-plugin-visualizer@5.14.0(rollup@4.40.2): dependencies: open: 8.4.2 picomatch: 4.0.2 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.40.1 + rollup: 4.40.2 rollup@2.79.2: optionalDependencies: @@ -20307,30 +20393,30 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.8 fsevents: 2.3.3 - rollup@4.40.1: + rollup@4.40.2: dependencies: '@types/estree': 1.0.7 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.1 - '@rollup/rollup-android-arm64': 4.40.1 - '@rollup/rollup-darwin-arm64': 4.40.1 - '@rollup/rollup-darwin-x64': 4.40.1 - '@rollup/rollup-freebsd-arm64': 4.40.1 - '@rollup/rollup-freebsd-x64': 4.40.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 - '@rollup/rollup-linux-arm-musleabihf': 4.40.1 - '@rollup/rollup-linux-arm64-gnu': 4.40.1 - '@rollup/rollup-linux-arm64-musl': 4.40.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-musl': 4.40.1 - '@rollup/rollup-linux-s390x-gnu': 4.40.1 - '@rollup/rollup-linux-x64-gnu': 4.40.1 - '@rollup/rollup-linux-x64-musl': 4.40.1 - '@rollup/rollup-win32-arm64-msvc': 4.40.1 - '@rollup/rollup-win32-ia32-msvc': 4.40.1 - '@rollup/rollup-win32-x64-msvc': 4.40.1 + '@rollup/rollup-android-arm-eabi': 4.40.2 + '@rollup/rollup-android-arm64': 4.40.2 + '@rollup/rollup-darwin-arm64': 4.40.2 + '@rollup/rollup-darwin-x64': 4.40.2 + '@rollup/rollup-freebsd-arm64': 4.40.2 + '@rollup/rollup-freebsd-x64': 4.40.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.40.2 + '@rollup/rollup-linux-arm-musleabihf': 4.40.2 + '@rollup/rollup-linux-arm64-gnu': 4.40.2 + '@rollup/rollup-linux-arm64-musl': 4.40.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.40.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2 + '@rollup/rollup-linux-riscv64-gnu': 4.40.2 + '@rollup/rollup-linux-riscv64-musl': 4.40.2 + '@rollup/rollup-linux-s390x-gnu': 4.40.2 + '@rollup/rollup-linux-x64-gnu': 4.40.2 + '@rollup/rollup-linux-x64-musl': 4.40.2 + '@rollup/rollup-win32-arm64-msvc': 4.40.2 + '@rollup/rollup-win32-ia32-msvc': 4.40.2 + '@rollup/rollup-win32-x64-msvc': 4.40.2 fsevents: 2.3.3 roughjs@4.6.6(patch_hash=3543d47108cb41b68ec6a671c0e1f9d0cfe2ce524fea5b0992511ae84c3c6b64): @@ -21194,6 +21280,10 @@ snapshots: dependencies: typescript: 5.7.3 + ts-api-utils@2.1.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} @@ -21300,12 +21390,12 @@ snapshots: typescript: 5.7.3 yaml: 2.7.0 - typescript-eslint@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.25.1(jiti@2.4.2) + '@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) + '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 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 transitivePeerDependencies: - supports-color @@ -21478,7 +21568,7 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.2 - unplugin-vue-components@28.4.0(@babel/parser@7.27.1)(vue@3.5.13(typescript@5.7.3)): + unplugin-vue-components@28.4.0(@babel/parser@7.27.2)(vue@3.5.13(typescript@5.7.3)): dependencies: chokidar: 3.6.0 debug: 4.4.0(supports-color@8.1.1) @@ -21490,7 +21580,7 @@ snapshots: unplugin-utils: 0.2.4 vue: 3.5.13(typescript@5.7.3) optionalDependencies: - '@babel/parser': 7.27.1 + '@babel/parser': 7.27.2 transitivePeerDependencies: - supports-color @@ -21612,7 +21702,7 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.5.3 - rollup: 4.40.1 + rollup: 4.40.2 optionalDependencies: '@types/node': 22.13.5 fsevents: 2.3.3 @@ -21635,7 +21725,7 @@ snapshots: dependencies: esbuild: 0.24.2 postcss: 8.5.3 - rollup: 4.40.1 + rollup: 4.40.2 optionalDependencies: '@types/node': 22.13.5 fsevents: 2.3.3 @@ -22111,7 +22201,7 @@ snapshots: dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) '@babel/core': 7.27.1 - '@babel/preset-env': 7.27.1(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) '@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-node-resolve': 15.3.1(rollup@2.79.2) @@ -22324,4 +22414,10 @@ snapshots: yocto-queue@1.2.1: {} + zod-to-json-schema@3.24.5(zod@3.24.4): + dependencies: + zod: 3.24.4 + + zod@3.24.4: {} + zwitch@2.0.4: {} diff --git a/vite.config.ts b/vite.config.ts index 923e2d24e..0930de5b6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -35,6 +35,8 @@ export default defineConfig({ }, }, define: { + // Needs to be string + includeLargeFeatures: 'true', 'import.meta.vitest': 'undefined', }, });