02aa4bac007c0e8e1c410845c740b9fc05dff7d6ff7cf627cb9a16d66056f37d7d297b14070d987c6b1b0e65da2b04571c770cac8bd8f3c52df9d5e1e92138 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.createUnionTypeAnnotation = createUnionTypeAnnotation;
  4. exports.removeTypeDuplicates = removeTypeDuplicates;
  5. exports.createTypeAnnotationBasedOnTypeof = createTypeAnnotationBasedOnTypeof;
  6. var _index = require("./index");
  7. var t = _interopRequireWildcard(_index);
  8. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  9. function createUnionTypeAnnotation(types) {
  10. var flattened = removeTypeDuplicates(types);
  11. if (flattened.length === 1) {
  12. return flattened[0];
  13. } else {
  14. return t.unionTypeAnnotation(flattened);
  15. }
  16. }
  17. function removeTypeDuplicates(nodes) {
  18. var generics = {};
  19. var bases = {};
  20. var typeGroups = [];
  21. var types = [];
  22. for (var i = 0; i < nodes.length; i++) {
  23. var node = nodes[i];
  24. if (!node) continue;
  25. if (types.indexOf(node) >= 0) {
  26. continue;
  27. }
  28. if (t.isAnyTypeAnnotation(node)) {
  29. return [node];
  30. }
  31. if (t.isFlowBaseAnnotation(node)) {
  32. bases[node.type] = node;
  33. continue;
  34. }
  35. if (t.isUnionTypeAnnotation(node)) {
  36. if (typeGroups.indexOf(node.types) < 0) {
  37. nodes = nodes.concat(node.types);
  38. typeGroups.push(node.types);
  39. }
  40. continue;
  41. }
  42. if (t.isGenericTypeAnnotation(node)) {
  43. var name = node.id.name;
  44. if (generics[name]) {
  45. var existing = generics[name];
  46. if (existing.typeParameters) {
  47. if (node.typeParameters) {
  48. existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params));
  49. }
  50. } else {
  51. existing = node.typeParameters;
  52. }
  53. } else {
  54. generics[name] = node;
  55. }
  56. continue;
  57. }
  58. types.push(node);
  59. }
  60. for (var type in bases) {
  61. types.push(bases[type]);
  62. }
  63. for (var _name in generics) {
  64. types.push(generics[_name]);
  65. }
  66. return types;
  67. }
  68. function createTypeAnnotationBasedOnTypeof(type) {
  69. if (type === "string") {
  70. return t.stringTypeAnnotation();
  71. } else if (type === "number") {
  72. return t.numberTypeAnnotation();
  73. } else if (type === "undefined") {
  74. return t.voidTypeAnnotation();
  75. } else if (type === "boolean") {
  76. return t.booleanTypeAnnotation();
  77. } else if (type === "function") {
  78. return t.genericTypeAnnotation(t.identifier("Function"));
  79. } else if (type === "object") {
  80. return t.genericTypeAnnotation(t.identifier("Object"));
  81. } else if (type === "symbol") {
  82. return t.genericTypeAnnotation(t.identifier("Symbol"));
  83. } else {
  84. throw new Error("Invalid typeof value");
  85. }
  86. }