diff options
Diffstat (limited to 'tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js')
-rw-r--r-- | tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js new file mode 100644 index 0000000000..25defea7ec --- /dev/null +++ b/tools/node_modules/eslint/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js @@ -0,0 +1,54 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = removeTypeDuplicates; + +var _generated = require("../../validators/generated"); + +function removeTypeDuplicates(nodes) { + const generics = {}; + const bases = {}; + const typeGroups = new Set(); + const types = []; + + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (!node) continue; + + if (types.indexOf(node) >= 0) { + continue; + } + + if ((0, _generated.isTSAnyKeyword)(node)) { + return [node]; + } + + if ((0, _generated.isTSBaseType)(node)) { + bases[node.type] = node; + continue; + } + + if ((0, _generated.isTSUnionType)(node)) { + if (!typeGroups.has(node.types)) { + nodes.push(...node.types); + typeGroups.add(node.types); + } + + continue; + } + + types.push(node); + } + + for (const type of Object.keys(bases)) { + types.push(bases[type]); + } + + for (const name of Object.keys(generics)) { + types.push(generics[name]); + } + + return types; +}
\ No newline at end of file |