From 56d10a6a57cde83e87333b9727ad47b6ba481c65 Mon Sep 17 00:00:00 2001 From: Quramy Date: Wed, 13 Mar 2024 08:09:39 +0900 Subject: [PATCH] fix: Don't push multiple items whose text are same to valuesNotChanged list --- src/gql-ast-util/fragment-registry.test.ts | 24 ++++++++++++++++++++++ src/gql-ast-util/fragment-registry.ts | 8 +++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/gql-ast-util/fragment-registry.test.ts b/src/gql-ast-util/fragment-registry.test.ts index b622774f..6372d64d 100644 --- a/src/gql-ast-util/fragment-registry.test.ts +++ b/src/gql-ast-util/fragment-registry.test.ts @@ -214,6 +214,30 @@ describe(DefinitionFileStore, () => { }); }); + describe('file1: ["A:0"] -> file1: ["A:0", "A:0"] -> file1: ["B:0", "A:0"]', () => { + let store: TestingStore; + beforeEach(() => { + store = createTestingStore(); + store.update('main.ts', ['A:0']); + store.update('main.ts', ['A:0', 'A:0']); + store.update('main.ts', ['B:0', 'A:0']); + }); + + test('correct history', () => { + expect([...store.getDetailedAffectedDefinitions(2)[0].updated.values()]).toEqual([]); + expect([...store.getDetailedAffectedDefinitions(2)[0].appeared.values()]).toEqual(['B', 'A']); + expect([...store.getDetailedAffectedDefinitions(2)[0].disappeared.values()]).toEqual([]); + }); + + test('correct unique definition', () => { + expect([...store.getUniqueDefinitonMap().keys()]).toEqual(['B', 'A']); + }); + + test('correct duplicated definition', () => { + expect([...store.getDuplicatedDefinitonMap().keys()]).toEqual([]); + }); + }); + describe.each` file1Docs | file2Docs | affected | unique | duplicated ${['A:0', 'B:0']} | ${['A:1']} | ${['B', 'A']} | ${['B']} | ${['A']} diff --git a/src/gql-ast-util/fragment-registry.ts b/src/gql-ast-util/fragment-registry.ts index 5fe427f9..64926b3b 100644 --- a/src/gql-ast-util/fragment-registry.ts +++ b/src/gql-ast-util/fragment-registry.ts @@ -135,11 +135,9 @@ export class DefinitionFileStore { for (const doc of documents) { const alreadyParsedItems = currentValueMapByText.get(doc.text); - if (alreadyParsedItems) { - alreadyParsedItems.forEach(v => { - v.extra = doc.extra; - valuesNotChanged.push(v); - }); + if (alreadyParsedItems && alreadyParsedItems.length === 1) { + alreadyParsedItems[0].extra = doc.extra; + valuesNotChanged.push(alreadyParsedItems[0]); currentValueMapByText.delete(doc.text); continue; }