e8a184e6a5d72e0ed81acfe62595cc6077276e3eef3a2e625ebf3a590e632eb61485093c34f64ebe2f52b776783cd884921476607325fa626edd978fe51b9b 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = removeTypeDuplicates;
  6. var _index = require("../../validators/generated/index.js");
  7. function getQualifiedName(node) {
  8. return (0, _index.isIdentifier)(node) ? node.name : `${node.id.name}.${getQualifiedName(node.qualification)}`;
  9. }
  10. function removeTypeDuplicates(nodesIn) {
  11. const nodes = Array.from(nodesIn);
  12. const generics = new Map();
  13. const bases = new Map();
  14. const typeGroups = new Set();
  15. const types = [];
  16. for (let i = 0; i < nodes.length; i++) {
  17. const node = nodes[i];
  18. if (!node) continue;
  19. if (types.includes(node)) {
  20. continue;
  21. }
  22. if ((0, _index.isAnyTypeAnnotation)(node)) {
  23. return [node];
  24. }
  25. if ((0, _index.isFlowBaseAnnotation)(node)) {
  26. bases.set(node.type, node);
  27. continue;
  28. }
  29. if ((0, _index.isUnionTypeAnnotation)(node)) {
  30. if (!typeGroups.has(node.types)) {
  31. nodes.push(...node.types);
  32. typeGroups.add(node.types);
  33. }
  34. continue;
  35. }
  36. if ((0, _index.isGenericTypeAnnotation)(node)) {
  37. const name = getQualifiedName(node.id);
  38. if (generics.has(name)) {
  39. let existing = generics.get(name);
  40. if (existing.typeParameters) {
  41. if (node.typeParameters) {
  42. existing.typeParameters.params.push(...node.typeParameters.params);
  43. existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params);
  44. }
  45. } else {
  46. existing = node.typeParameters;
  47. }
  48. } else {
  49. generics.set(name, node);
  50. }
  51. continue;
  52. }
  53. types.push(node);
  54. }
  55. for (const [, baseType] of bases) {
  56. types.push(baseType);
  57. }
  58. for (const [, genericName] of generics) {
  59. types.push(genericName);
  60. }
  61. return types;
  62. }
  63. //# sourceMappingURL=removeTypeDuplicates.js.map