Compare commits

..

2 Commits

Author SHA1 Message Date
darshanr0107
256e81bcd2 fix: added E2E test
on-behalf-of: @Mermaid-Chart <hello@mermaidchart.com>
2025-11-12 12:04:49 +05:30
darshanr0107
513a3eef98 fix: handle merging master/main into other branches in GitGraph
on-behalf-of: @Mermaid-Chart <hello@mermaidchart.com>
2025-11-11 20:17:40 +05:30
6 changed files with 190 additions and 208 deletions

View File

@@ -0,0 +1,5 @@
---
'mermaid': patch
---
fix: Handle master/main merges correctly in GitGraph diagrams

View File

@@ -1569,4 +1569,14 @@ gitGraph TB:
{}
);
});
it('77: should render a gitGraph merging main into a newly created branch', () => {
imgSnapshotTest(
`gitGraph
commit
branch stable
checkout stable
merge main`,
{}
);
});
});

View File

@@ -69,7 +69,7 @@
"@changesets/cli": "^2.29.7",
"@cspell/eslint-plugin": "^9.3.0",
"@cypress/code-coverage": "^3.14.7",
"@eslint/js": "^9.39.1",
"@eslint/js": "^9.26.0",
"@rollup/plugin-typescript": "^12.1.4",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.5",
@@ -93,7 +93,7 @@
"cypress-image-snapshot": "^4.0.1",
"cypress-split": "^1.24.25",
"esbuild": "^0.25.12",
"eslint": "^9.39.1",
"eslint": "^9.26.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-cypress": "^5.2.0",
"eslint-plugin-html": "^8.1.3",
@@ -126,7 +126,7 @@
"tslib": "^2.8.1",
"tsx": "^4.20.6",
"typescript": "~5.7.3",
"typescript-eslint": "^8.46.3",
"typescript-eslint": "^8.38.0",
"vite": "^7.0.7",
"vite-plugin-istanbul": "^7.0.0",
"vitest": "^3.2.4"

View File

@@ -1,6 +1,7 @@
import { log } from '../../logger.js';
import { db } from './gitGraphAst.js';
import { parser } from './gitGraphParser.js';
import { commitType } from './gitGraphTypes.js';
describe('when parsing a gitGraph', function () {
beforeEach(function () {
@@ -843,6 +844,39 @@ describe('when parsing a gitGraph', function () {
expect(db.getBranchesAsObjArray()).toStrictEqual([{ name: 'main' }, { name: 'testBranch' }]);
});
it('should handle merging the same branch multiple times', async () => {
const str = `gitGraph:
commit
branch stable
checkout stable
merge main
checkout main
commit
commit
checkout stable
merge main
`;
await parser.parse(str);
const commits = db.getCommits();
expect(commits.size).toBe(5);
expect(db.getCurrentBranch()).toBe('stable');
expect(db.getDirection()).toBe('LR');
expect(db.getBranches().size).toBe(2);
const commitsArray = db.getCommitsArray();
expect(commitsArray[0].branch).toBe('main');
expect(commitsArray[0].parents).toStrictEqual([]);
expect(commitsArray[1].branch).toBe('stable');
expect(commitsArray[1].type).toBe(commitType.MERGE);
expect(commitsArray[1].parents.length).toBe(2);
expect(commitsArray[2].branch).toBe('main');
expect(commitsArray[3].branch).toBe('main');
expect(commitsArray[4].branch).toBe('stable');
expect(commitsArray[4].type).toBe(commitType.MERGE);
expect(commitsArray[4].parents.length).toBe(2);
});
it('should handle merge with custom ids, tags and type', async () => {
const str = `gitGraph:
commit
@@ -1236,7 +1270,7 @@ describe('when parsing a gitGraph', function () {
);
}
});
it('should throw error when trying to merge branches having same heads', async () => {
it('should allow merging branches having same heads', async () => {
const str = `gitGraph
commit
branch testBranch
@@ -1244,13 +1278,19 @@ describe('when parsing a gitGraph', function () {
merge testBranch
`;
try {
await parser.parse(str);
// Fail test if above expression doesn't throw anything.
expect(true).toBe(false);
} catch (e: any) {
expect(e.message).toBe('Incorrect usage of "merge". Both branches have same head');
}
await parser.parse(str);
const commits = db.getCommits();
expect(commits.size).toBe(2);
expect(db.getCurrentBranch()).toBe('main');
const commitsArray = db.getCommitsArray();
expect(commitsArray[0].branch).toBe('main');
expect(commitsArray[0].parents).toStrictEqual([]);
expect(commitsArray[1].branch).toBe('main');
expect(commitsArray[1].type).toBe(commitType.MERGE);
expect(commitsArray[1].parents.length).toBe(2);
expect(commitsArray[1].parents[0]).toBe(commitsArray[0].id);
expect(commitsArray[1].parents[1]).toBe(commitsArray[0].id);
});
it('should throw error when trying to merge branch which has no commits', async () => {
const str = `gitGraph

View File

@@ -167,9 +167,6 @@ export const merge = (mergeDB: MergeDB): void => {
const otherCommit: Commit | undefined = otherBranchCheck
? state.records.commits.get(otherBranchCheck)
: undefined;
if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {
throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);
}
if (state.records.currBranch === otherBranch) {
const error: any = new Error('Incorrect usage of "merge". Cannot merge a branch to itself');
error.hash = {
@@ -212,15 +209,6 @@ export const merge = (mergeDB: MergeDB): void => {
};
throw error;
}
if (currentCommit === otherCommit) {
const error: any = new Error('Incorrect usage of "merge". Both branches have same head');
error.hash = {
text: `merge ${otherBranch}`,
token: `merge ${otherBranch}`,
expected: ['branch abc'],
};
throw error;
}
if (customId && state.records.commits.has(customId)) {
const error: any = new Error(
'Incorrect usage of "merge". Commit with id:' +

309
pnpm-lock.yaml generated
View File

@@ -27,13 +27,13 @@ importers:
version: 2.29.7(@types/node@22.19.0)
'@cspell/eslint-plugin':
specifier: ^9.3.0
version: 9.3.0(eslint@9.39.1(jiti@2.5.1))
version: 9.3.0(eslint@9.35.0(jiti@2.5.1))
'@cypress/code-coverage':
specifier: ^3.14.7
version: 3.14.7(@babel/core@7.28.4)(@babel/preset-env@7.28.5(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(cypress@14.5.4)(webpack@5.101.3(esbuild@0.25.12))
version: 3.14.7(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(cypress@14.5.4)(webpack@5.101.3(esbuild@0.25.12))
'@eslint/js':
specifier: ^9.39.1
version: 9.39.1
specifier: ^9.26.0
version: 9.35.0
'@rollup/plugin-typescript':
specifier: ^12.1.4
version: 12.1.4(rollup@4.52.5)(tslib@2.8.1)(typescript@5.7.3)
@@ -104,32 +104,32 @@ importers:
specifier: ^0.25.12
version: 0.25.12
eslint:
specifier: ^9.39.1
version: 9.39.1(jiti@2.5.1)
specifier: ^9.26.0
version: 9.35.0(jiti@2.5.1)
eslint-config-prettier:
specifier: ^10.1.8
version: 10.1.8(eslint@9.39.1(jiti@2.5.1))
version: 10.1.8(eslint@9.35.0(jiti@2.5.1))
eslint-plugin-cypress:
specifier: ^5.2.0
version: 5.2.0(eslint@9.39.1(jiti@2.5.1))
version: 5.2.0(eslint@9.35.0(jiti@2.5.1))
eslint-plugin-html:
specifier: ^8.1.3
version: 8.1.3
eslint-plugin-jest:
specifier: ^29.0.1
version: 29.0.1(@typescript-eslint/eslint-plugin@8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3))(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3))(eslint@9.39.1(jiti@2.5.1))(jest@30.1.3(@types/node@22.19.0))(typescript@5.7.3)
version: 29.0.1(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.5.1))(jest@30.1.3(@types/node@22.19.0))(typescript@5.7.3)
eslint-plugin-jsdoc:
specifier: ^61.1.12
version: 61.1.12(eslint@9.39.1(jiti@2.5.1))
version: 61.1.12(eslint@9.35.0(jiti@2.5.1))
eslint-plugin-json:
specifier: ^4.0.1
version: 4.0.1
eslint-plugin-lodash:
specifier: ^8.0.0
version: 8.0.0(eslint@9.39.1(jiti@2.5.1))
version: 8.0.0(eslint@9.35.0(jiti@2.5.1))
eslint-plugin-markdown:
specifier: ^5.1.0
version: 5.1.0(eslint@9.39.1(jiti@2.5.1))
version: 5.1.0(eslint@9.35.0(jiti@2.5.1))
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: ^62.0.0
version: 62.0.0(eslint@9.39.1(jiti@2.5.1))
version: 62.0.0(eslint@9.35.0(jiti@2.5.1))
express:
specifier: ^5.1.0
version: 5.1.0
@@ -203,8 +203,8 @@ importers:
specifier: ~5.7.3
version: 5.7.3
typescript-eslint:
specifier: ^8.46.3
version: 8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
specifier: ^8.38.0
version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
vite:
specifier: ^7.0.7
version: 7.1.11(@types/node@22.19.0)(jiti@2.5.1)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)
@@ -1389,6 +1389,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
'@babel/preset-env@7.28.3':
resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/preset-env@7.28.5':
resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==}
engines: {node: '>=6.9.0'}
@@ -2143,12 +2149,16 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.21.1':
resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
'@eslint/config-array@0.21.0':
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/config-helpers@0.4.2':
resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
'@eslint/config-helpers@0.3.1':
resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.15.2':
resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.17.0':
@@ -2159,12 +2169,16 @@ packages:
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.39.1':
resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
'@eslint/js@9.35.0':
resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.3.5':
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.4.1':
@@ -3334,16 +3348,16 @@ packages:
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
'@typescript-eslint/eslint-plugin@8.46.3':
resolution: {integrity: sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==}
'@typescript-eslint/eslint-plugin@8.43.0':
resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.46.3
'@typescript-eslint/parser': ^8.43.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.46.3':
resolution: {integrity: sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==}
'@typescript-eslint/parser@8.43.0':
resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -3355,34 +3369,18 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.46.3':
resolution: {integrity: sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.43.0':
resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/scope-manager@8.46.3':
resolution: {integrity: sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.43.0':
resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/tsconfig-utils@8.46.3':
resolution: {integrity: sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.46.3':
resolution: {integrity: sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==}
'@typescript-eslint/type-utils@8.43.0':
resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -3402,12 +3400,6 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/typescript-estree@8.46.3':
resolution: {integrity: sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.43.0':
resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -3415,21 +3407,10 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.46.3':
resolution: {integrity: sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.43.0':
resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/visitor-keys@8.46.3':
resolution: {integrity: sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
@@ -5594,8 +5575,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.39.1:
resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
eslint@9.35.0:
resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -9321,8 +9302,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 || 5.8.x || 5.9.x
typescript-eslint@8.46.3:
resolution: {integrity: sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==}
typescript-eslint@8.43.0:
resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -11635,7 +11616,7 @@ snapshots:
'@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
'@babel/preset-env@7.28.5(@babel/core@7.28.4)':
'@babel/preset-env@7.28.3(@babel/core@7.28.4)':
dependencies:
'@babel/compat-data': 7.28.5
'@babel/core': 7.28.4
@@ -12242,12 +12223,12 @@ snapshots:
'@cspell/url': 9.3.0
import-meta-resolve: 4.2.0
'@cspell/eslint-plugin@9.3.0(eslint@9.39.1(jiti@2.5.1))':
'@cspell/eslint-plugin@9.3.0(eslint@9.35.0(jiti@2.5.1))':
dependencies:
'@cspell/cspell-types': 9.3.0
'@cspell/url': 9.3.0
cspell-lib: 9.3.0
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
synckit: 0.11.11
'@cspell/filetypes@9.3.0': {}
@@ -12276,11 +12257,11 @@ snapshots:
'@csstools/css-tokenizer@3.0.4': {}
'@cypress/code-coverage@3.14.7(@babel/core@7.28.4)(@babel/preset-env@7.28.5(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(cypress@14.5.4)(webpack@5.101.3(esbuild@0.25.12))':
'@cypress/code-coverage@3.14.7(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(cypress@14.5.4)(webpack@5.101.3(esbuild@0.25.12))':
dependencies:
'@babel/core': 7.28.4
'@babel/preset-env': 7.28.5(@babel/core@7.28.4)
'@cypress/webpack-preprocessor': 6.0.4(@babel/core@7.28.4)(@babel/preset-env@7.28.5(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(webpack@5.101.3(esbuild@0.25.12))
'@babel/preset-env': 7.28.3(@babel/core@7.28.4)
'@cypress/webpack-preprocessor': 6.0.4(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(webpack@5.101.3(esbuild@0.25.12))
babel-loader: 10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12))
chalk: 4.1.2
cypress: 14.5.4
@@ -12316,10 +12297,10 @@ snapshots:
tunnel-agent: 0.6.0
uuid: 8.3.2
'@cypress/webpack-preprocessor@6.0.4(@babel/core@7.28.4)(@babel/preset-env@7.28.5(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(webpack@5.101.3(esbuild@0.25.12))':
'@cypress/webpack-preprocessor@6.0.4(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(babel-loader@10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12)))(webpack@5.101.3(esbuild@0.25.12))':
dependencies:
'@babel/core': 7.28.4
'@babel/preset-env': 7.28.5(@babel/core@7.28.4)
'@babel/preset-env': 7.28.3(@babel/core@7.28.4)
babel-loader: 10.0.0(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.12))
bluebird: 3.7.1
debug: 4.4.3(supports-color@8.1.1)
@@ -12540,24 +12521,26 @@ snapshots:
'@esbuild/win32-x64@0.25.12':
optional: true
'@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.5.1))':
'@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.5.1))':
dependencies:
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
'@eslint/config-array@0.21.1':
'@eslint/config-array@0.21.0':
dependencies:
'@eslint/object-schema': 2.1.7
'@eslint/object-schema': 2.1.6
debug: 4.4.3(supports-color@8.1.1)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
'@eslint/config-helpers@0.4.2':
'@eslint/config-helpers@0.3.1': {}
'@eslint/core@0.15.2':
dependencies:
'@eslint/core': 0.17.0
'@types/json-schema': 7.0.15
'@eslint/core@0.17.0':
dependencies:
@@ -12577,9 +12560,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@9.39.1': {}
'@eslint/js@9.35.0': {}
'@eslint/object-schema@2.1.7': {}
'@eslint/object-schema@2.1.6': {}
'@eslint/plugin-kit@0.3.5':
dependencies:
'@eslint/core': 0.15.2
levn: 0.4.1
'@eslint/plugin-kit@0.4.1':
dependencies:
@@ -13864,15 +13852,15 @@ snapshots:
'@types/node': 22.19.0
optional: true
'@typescript-eslint/eslint-plugin@8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3))(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)':
'@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/scope-manager': 8.46.3
'@typescript-eslint/type-utils': 8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.46.3
eslint: 9.39.1(jiti@2.5.1)
'@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.43.0
eslint: 9.35.0(jiti@2.5.1)
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -13881,14 +13869,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)':
'@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.46.3
'@typescript-eslint/types': 8.46.3
'@typescript-eslint/typescript-estree': 8.46.3(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.46.3
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.43.0
debug: 4.4.3(supports-color@8.1.1)
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -13896,16 +13884,7 @@ snapshots:
'@typescript-eslint/project-service@8.43.0(typescript@5.7.3)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.7.3)
'@typescript-eslint/types': 8.46.3
debug: 4.4.3(supports-color@8.1.1)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/project-service@8.46.3(typescript@5.7.3)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.7.3)
'@typescript-eslint/types': 8.46.3
'@typescript-eslint/types': 8.43.0
debug: 4.4.3(supports-color@8.1.1)
typescript: 5.7.3
transitivePeerDependencies:
@@ -13916,26 +13895,17 @@ snapshots:
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/visitor-keys': 8.43.0
'@typescript-eslint/scope-manager@8.46.3':
dependencies:
'@typescript-eslint/types': 8.46.3
'@typescript-eslint/visitor-keys': 8.46.3
'@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.7.3)':
dependencies:
typescript: 5.7.3
'@typescript-eslint/tsconfig-utils@8.46.3(typescript@5.7.3)':
'@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)':
dependencies:
typescript: 5.7.3
'@typescript-eslint/type-utils@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/types': 8.46.3
'@typescript-eslint/typescript-estree': 8.46.3(typescript@5.7.3)
'@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.3)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
debug: 4.4.3(supports-color@8.1.1)
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
ts-api-utils: 2.1.0(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
@@ -13961,40 +13931,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@8.46.3(typescript@5.7.3)':
'@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/project-service': 8.46.3(typescript@5.7.3)
'@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.7.3)
'@typescript-eslint/types': 8.46.3
'@typescript-eslint/visitor-keys': 8.46.3
debug: 4.4.3(supports-color@8.1.1)
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.3
ts-api-utils: 2.1.0(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.43.0(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.5.1))
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.3)
eslint: 9.39.1(jiti@2.5.1)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.46.3
'@typescript-eslint/types': 8.46.3
'@typescript-eslint/typescript-estree': 8.46.3(typescript@5.7.3)
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@@ -14004,11 +13947,6 @@ snapshots:
'@typescript-eslint/types': 8.43.0
eslint-visitor-keys: 4.2.1
'@typescript-eslint/visitor-keys@8.46.3':
dependencies:
'@typescript-eslint/types': 8.46.3
eslint-visitor-keys: 4.2.1
'@ungap/structured-clone@1.3.0': {}
'@unocss/astro@66.5.4(vite@7.1.11(@types/node@22.19.0)(jiti@2.5.1)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1))':
@@ -16526,31 +16464,31 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.5.1)):
eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)):
dependencies:
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
eslint-plugin-cypress@5.2.0(eslint@9.39.1(jiti@2.5.1)):
eslint-plugin-cypress@5.2.0(eslint@9.35.0(jiti@2.5.1)):
dependencies:
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
globals: 16.4.0
eslint-plugin-html@8.1.3:
dependencies:
htmlparser2: 10.0.0
eslint-plugin-jest@29.0.1(@typescript-eslint/eslint-plugin@8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3))(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3))(eslint@9.39.1(jiti@2.5.1))(jest@30.1.3(@types/node@22.19.0))(typescript@5.7.3):
eslint-plugin-jest@29.0.1(@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.5.1))(jest@30.1.3(@types/node@22.19.0))(typescript@5.7.3):
dependencies:
'@typescript-eslint/utils': 8.43.0(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
eslint: 9.39.1(jiti@2.5.1)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
eslint: 9.35.0(jiti@2.5.1)
optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3))(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
jest: 30.1.3(@types/node@22.19.0)
transitivePeerDependencies:
- supports-color
- typescript
eslint-plugin-jsdoc@61.1.12(eslint@9.39.1(jiti@2.5.1)):
eslint-plugin-jsdoc@61.1.12(eslint@9.35.0(jiti@2.5.1)):
dependencies:
'@es-joy/jsdoccomment': 0.76.0
'@es-joy/resolve.exports': 1.2.0
@@ -16558,7 +16496,7 @@ snapshots:
comment-parser: 1.4.1
debug: 4.4.3(supports-color@8.1.1)
escape-string-regexp: 4.0.0
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
espree: 10.4.0
esquery: 1.6.0
html-entities: 2.6.0
@@ -16575,14 +16513,14 @@ snapshots:
lodash: 4.17.21
vscode-json-languageservice: 4.2.1
eslint-plugin-lodash@8.0.0(eslint@9.39.1(jiti@2.5.1)):
eslint-plugin-lodash@8.0.0(eslint@9.35.0(jiti@2.5.1)):
dependencies:
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
lodash: 4.17.21
eslint-plugin-markdown@5.1.0(eslint@9.39.1(jiti@2.5.1)):
eslint-plugin-markdown@5.1.0(eslint@9.35.0(jiti@2.5.1)):
dependencies:
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
mdast-util-from-markdown: 0.8.5
transitivePeerDependencies:
- supports-color
@@ -16594,16 +16532,16 @@ snapshots:
'@microsoft/tsdoc': 0.15.1
'@microsoft/tsdoc-config': 0.17.1
eslint-plugin-unicorn@62.0.0(eslint@9.39.1(jiti@2.5.1)):
eslint-plugin-unicorn@62.0.0(eslint@9.35.0(jiti@2.5.1)):
dependencies:
'@babel/helper-validator-identifier': 7.28.5
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.5.1))
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1))
'@eslint/plugin-kit': 0.4.1
change-case: 5.4.4
ci-info: 4.3.1
clean-regexp: 1.0.0
core-js-compat: 3.46.0
eslint: 9.39.1(jiti@2.5.1)
eslint: 9.35.0(jiti@2.5.1)
esquery: 1.6.0
find-up-simple: 1.0.1
globals: 16.4.0
@@ -16630,20 +16568,21 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
eslint@9.39.1(jiti@2.5.1):
eslint@9.35.0(jiti@2.5.1):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.5.1))
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.1
'@eslint/config-helpers': 0.4.2
'@eslint/core': 0.17.0
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1
'@eslint/core': 0.15.2
'@eslint/eslintrc': 3.3.1
'@eslint/js': 9.39.1
'@eslint/plugin-kit': 0.4.1
'@eslint/js': 9.35.0
'@eslint/plugin-kit': 0.3.5
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
@@ -21159,13 +21098,13 @@ snapshots:
typescript: 5.7.3
yaml: 2.8.1
typescript-eslint@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3):
typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3))(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/parser': 8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/typescript-estree': 8.46.3(typescript@5.7.3)
'@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.5.1))(typescript@5.7.3)
eslint: 9.39.1(jiti@2.5.1)
'@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3))(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.7.3)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.7.3)
eslint: 9.35.0(jiti@2.5.1)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color