From 2f64c192fa8a3fdda180fe73f20b198265c385dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 10 Jun 2022 15:03:01 -0400 Subject: [PATCH] fix(inferer): allow {} prototype name in generics --- .../flow/removeTypeDuplicates.ts | 22 +++++++++---------- .../typescript/removeTypeDuplicates.ts | 20 ++++++++--------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/babel-types/src/modifications/flow/removeTypeDuplicates.ts b/packages/babel-types/src/modifications/flow/removeTypeDuplicates.ts index 717b993d5a0d..22e3b4db2780 100644 --- a/packages/babel-types/src/modifications/flow/removeTypeDuplicates.ts +++ b/packages/babel-types/src/modifications/flow/removeTypeDuplicates.ts @@ -20,13 +20,13 @@ export default function removeTypeDuplicates( // todo(babel-8): change type to Array<...> nodes: ReadonlyArray, ): t.FlowType[] { - const generics = {}; - const bases = {}; + const generics = new Map(); + const bases = new Map(); // store union type groups to circular references const typeGroups = new Set(); - const types = []; + const types: t.FlowType[] = []; for (let i = 0; i < nodes.length; i++) { const node = nodes[i]; @@ -43,7 +43,7 @@ export default function removeTypeDuplicates( } if (isFlowBaseAnnotation(node)) { - bases[node.type] = node; + bases.set(node.type, node); continue; } @@ -60,8 +60,8 @@ export default function removeTypeDuplicates( if (isGenericTypeAnnotation(node)) { const name = getQualifiedName(node.id); - if (generics[name]) { - let existing = generics[name]; + if (generics.has(name)) { + let existing: t.Flow = generics.get(name); if (existing.typeParameters) { if (node.typeParameters) { existing.typeParameters.params = removeTypeDuplicates( @@ -72,7 +72,7 @@ export default function removeTypeDuplicates( existing = node.typeParameters; } } else { - generics[name] = node; + generics.set(name, node); } continue; @@ -82,13 +82,13 @@ export default function removeTypeDuplicates( } // add back in bases - for (const type of Object.keys(bases)) { - types.push(bases[type]); + for (const [, baseType] of bases) { + types.push(baseType); } // add back in generics - for (const name of Object.keys(generics)) { - types.push(generics[name]); + for (const [, genericName] of generics) { + types.push(genericName); } return types; diff --git a/packages/babel-types/src/modifications/typescript/removeTypeDuplicates.ts b/packages/babel-types/src/modifications/typescript/removeTypeDuplicates.ts index 1328f7f87551..b275fada569c 100644 --- a/packages/babel-types/src/modifications/typescript/removeTypeDuplicates.ts +++ b/packages/babel-types/src/modifications/typescript/removeTypeDuplicates.ts @@ -19,8 +19,8 @@ function getQualifiedName(node: t.TSTypeReference["typeName"]) { export default function removeTypeDuplicates( nodes: Array, ): Array { - const generics = {}; - const bases = {}; + const generics = new Map(); + const bases = new Map(); // store union type groups to circular references const typeGroups = new Set(); @@ -43,7 +43,7 @@ export default function removeTypeDuplicates( // Analogue of FlowBaseAnnotation if (isTSBaseType(node)) { - bases[node.type] = node; + bases.set(node.type, node); continue; } @@ -59,8 +59,8 @@ export default function removeTypeDuplicates( if (isTSTypeReference(node) && node.typeParameters) { const name = getQualifiedName(node.typeName); - if (generics[name]) { - let existing = generics[name]; + if (generics.has(name)) { + let existing: t.TypeScript = generics.get(name); if (existing.typeParameters) { if (node.typeParameters) { existing.typeParameters.params = removeTypeDuplicates( @@ -71,7 +71,7 @@ export default function removeTypeDuplicates( existing = node.typeParameters; } } else { - generics[name] = node; + generics.set(name, node); } continue; @@ -81,13 +81,13 @@ export default function removeTypeDuplicates( } // add back in bases - for (const type of Object.keys(bases)) { - types.push(bases[type]); + for (const [, baseType] of bases) { + types.push(baseType); } // add back in generics - for (const name of Object.keys(generics)) { - types.push(generics[name]); + for (const [, genericName] of generics) { + types.push(genericName); } return types;