effect 3.11.8 → 3.11.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/cjs/Effect.js +1685 -293
  2. package/dist/cjs/Effect.js.map +1 -1
  3. package/dist/cjs/FiberHandle.js +1 -5
  4. package/dist/cjs/FiberHandle.js.map +1 -1
  5. package/dist/cjs/FiberMap.js +1 -5
  6. package/dist/cjs/FiberMap.js.map +1 -1
  7. package/dist/cjs/FiberSet.js +2 -2
  8. package/dist/cjs/FiberSet.js.map +1 -1
  9. package/dist/cjs/JSONSchema.js +3 -30
  10. package/dist/cjs/JSONSchema.js.map +1 -1
  11. package/dist/cjs/Micro.js +1 -1
  12. package/dist/cjs/Option.js +1 -1
  13. package/dist/cjs/ParseResult.js +15 -2
  14. package/dist/cjs/ParseResult.js.map +1 -1
  15. package/dist/cjs/Schema.js +333 -231
  16. package/dist/cjs/Schema.js.map +1 -1
  17. package/dist/cjs/SchemaAST.js +99 -59
  18. package/dist/cjs/SchemaAST.js.map +1 -1
  19. package/dist/cjs/Stream.js +6 -5
  20. package/dist/cjs/Stream.js.map +1 -1
  21. package/dist/cjs/internal/core-effect.js +4 -4
  22. package/dist/cjs/internal/core-effect.js.map +1 -1
  23. package/dist/cjs/internal/core.js +4 -5
  24. package/dist/cjs/internal/core.js.map +1 -1
  25. package/dist/cjs/internal/doNotation.js.map +1 -1
  26. package/dist/cjs/internal/fiberRuntime.js +5 -5
  27. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  28. package/dist/cjs/internal/mailbox.js.map +1 -1
  29. package/dist/cjs/internal/redacted.js +1 -1
  30. package/dist/cjs/internal/redacted.js.map +1 -1
  31. package/dist/cjs/internal/runtime.js +1 -1
  32. package/dist/cjs/internal/runtime.js.map +1 -1
  33. package/dist/cjs/internal/schema/errors.js +10 -10
  34. package/dist/cjs/internal/schema/errors.js.map +1 -1
  35. package/dist/cjs/internal/schema/util.js +2 -2
  36. package/dist/cjs/internal/schema/util.js.map +1 -1
  37. package/dist/cjs/internal/stm/core.js +2 -3
  38. package/dist/cjs/internal/stm/core.js.map +1 -1
  39. package/dist/cjs/internal/version.js +1 -1
  40. package/dist/cjs/internal/version.js.map +1 -1
  41. package/dist/dts/Effect.d.ts +12053 -8146
  42. package/dist/dts/Effect.d.ts.map +1 -1
  43. package/dist/dts/FiberHandle.d.ts +2 -2
  44. package/dist/dts/FiberHandle.d.ts.map +1 -1
  45. package/dist/dts/FiberMap.d.ts +2 -2
  46. package/dist/dts/FiberMap.d.ts.map +1 -1
  47. package/dist/dts/FiberSet.d.ts +3 -6
  48. package/dist/dts/FiberSet.d.ts.map +1 -1
  49. package/dist/dts/Option.d.ts +1 -1
  50. package/dist/dts/ParseResult.d.ts.map +1 -1
  51. package/dist/dts/Schema.d.ts +18 -8
  52. package/dist/dts/Schema.d.ts.map +1 -1
  53. package/dist/dts/SchemaAST.d.ts +9 -1
  54. package/dist/dts/SchemaAST.d.ts.map +1 -1
  55. package/dist/dts/Stream.d.ts +6 -5
  56. package/dist/dts/Stream.d.ts.map +1 -1
  57. package/dist/dts/internal/core-effect.d.ts.map +1 -1
  58. package/dist/dts/internal/core.d.ts.map +1 -1
  59. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  60. package/dist/esm/Effect.js +1734 -294
  61. package/dist/esm/Effect.js.map +1 -1
  62. package/dist/esm/FiberHandle.js +1 -4
  63. package/dist/esm/FiberHandle.js.map +1 -1
  64. package/dist/esm/FiberMap.js +1 -4
  65. package/dist/esm/FiberMap.js.map +1 -1
  66. package/dist/esm/FiberSet.js +2 -2
  67. package/dist/esm/FiberSet.js.map +1 -1
  68. package/dist/esm/JSONSchema.js +3 -30
  69. package/dist/esm/JSONSchema.js.map +1 -1
  70. package/dist/esm/Micro.js +1 -1
  71. package/dist/esm/Micro.js.map +1 -1
  72. package/dist/esm/Option.js +1 -1
  73. package/dist/esm/ParseResult.js +12 -1
  74. package/dist/esm/ParseResult.js.map +1 -1
  75. package/dist/esm/Schema.js +328 -226
  76. package/dist/esm/Schema.js.map +1 -1
  77. package/dist/esm/SchemaAST.js +96 -57
  78. package/dist/esm/SchemaAST.js.map +1 -1
  79. package/dist/esm/Stream.js +6 -5
  80. package/dist/esm/Stream.js.map +1 -1
  81. package/dist/esm/internal/core-effect.js +4 -4
  82. package/dist/esm/internal/core-effect.js.map +1 -1
  83. package/dist/esm/internal/core.js +1 -2
  84. package/dist/esm/internal/core.js.map +1 -1
  85. package/dist/esm/internal/doNotation.js.map +1 -1
  86. package/dist/esm/internal/fiberRuntime.js +5 -5
  87. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  88. package/dist/esm/internal/mailbox.js.map +1 -1
  89. package/dist/esm/internal/redacted.js +1 -1
  90. package/dist/esm/internal/redacted.js.map +1 -1
  91. package/dist/esm/internal/runtime.js +1 -1
  92. package/dist/esm/internal/runtime.js.map +1 -1
  93. package/dist/esm/internal/schema/errors.js +5 -5
  94. package/dist/esm/internal/schema/errors.js.map +1 -1
  95. package/dist/esm/internal/schema/util.js +2 -2
  96. package/dist/esm/internal/schema/util.js.map +1 -1
  97. package/dist/esm/internal/stm/core.js +1 -2
  98. package/dist/esm/internal/stm/core.js.map +1 -1
  99. package/dist/esm/internal/version.js +1 -1
  100. package/dist/esm/internal/version.js.map +1 -1
  101. package/package.json +1 -1
  102. package/src/Effect.ts +7191 -3280
  103. package/src/FiberHandle.ts +2 -2
  104. package/src/FiberMap.ts +2 -2
  105. package/src/FiberSet.ts +3 -3
  106. package/src/JSONSchema.ts +3 -29
  107. package/src/Micro.ts +1 -1
  108. package/src/Option.ts +1 -1
  109. package/src/ParseResult.ts +19 -3
  110. package/src/Schema.ts +268 -184
  111. package/src/SchemaAST.ts +117 -62
  112. package/src/Stream.ts +6 -5
  113. package/src/internal/core-effect.ts +13 -10
  114. package/src/internal/core.ts +1 -2
  115. package/src/internal/doNotation.ts +1 -1
  116. package/src/internal/fiberRuntime.ts +15 -15
  117. package/src/internal/mailbox.ts +1 -1
  118. package/src/internal/pool.ts +1 -1
  119. package/src/internal/redacted.ts +1 -1
  120. package/src/internal/runtime.ts +1 -1
  121. package/src/internal/schema/errors.ts +6 -5
  122. package/src/internal/schema/util.ts +2 -2
  123. package/src/internal/stm/core.ts +1 -2
  124. package/src/internal/version.ts +1 -1
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isComposeTransformation = exports.isBooleanKeyword = exports.isBigIntKeyword = exports.isAnyKeyword = exports.hasStableFilter = exports.getTransformationFrom = exports.getTitleAnnotation = exports.getTemplateLiteralRegExp = exports.getTemplateLiteralCapturingRegExp = exports.getSurrogateAnnotation = exports.getPropertySignatures = exports.getPropertyKeyIndexedAccess = exports.getParseOptionsAnnotation = exports.getParseIssueTitleAnnotation = exports.getParameterBase = exports.getNumberIndexedAccess = exports.getMissingMessageAnnotation = exports.getMessageAnnotation = exports.getJSONSchemaAnnotation = exports.getJSONIdentifierAnnotation = exports.getJSONIdentifier = exports.getIdentifierAnnotation = exports.getExamplesAnnotation = exports.getDocumentationAnnotation = exports.getDescriptionAnnotation = exports.getDefaultAnnotation = exports.getDecodingFallbackAnnotation = exports.getConcurrencyAnnotation = exports.getCompiler = exports.getBrandAnnotation = exports.getBatchingAnnotation = exports.getAutoTitleAnnotation = exports.getAnnotation = exports.flatten = exports.equals = exports.encodedBoundAST = exports.encodedAST = exports.defaultParseOption = exports.composeTransformation = exports.compose = exports.booleanKeyword = exports.blackListAnnotations = exports.bigIntKeyword = exports.anyKeyword = exports.annotations = exports.VoidKeyword = exports.UnknownKeyword = exports.UniqueSymbol = exports.Union = exports.UndefinedKeyword = exports.TypeLiteralTransformation = exports.TypeLiteral = exports.Type = exports.TupleType = exports.Transformation = exports.TitleAnnotationId = exports.TemplateLiteralSpan = exports.TemplateLiteral = exports.SymbolKeyword = exports.Suspend = exports.SurrogateAnnotationId = exports.StringKeyword = exports.StableFilterAnnotationId = exports.SchemaIdAnnotationId = exports.Refinement = exports.PropertySignatureTransformation = exports.PropertySignature = exports.PrettyAnnotationId = exports.ParseOptionsAnnotationId = exports.ParseJsonSchemaId = exports.ParseIssueTitleAnnotationId = exports.OptionalType = exports.ObjectKeyword = exports.NumberKeyword = exports.NeverKeyword = exports.MissingMessageAnnotationId = exports.MessageAnnotationId = exports.Literal = exports.JSONSchemaAnnotationId = exports.JSONIdentifierAnnotationId = exports.IndexSignature = exports.IdentifierAnnotationId = exports.FinalTransformation = exports.ExamplesAnnotationId = exports.EquivalenceAnnotationId = exports.Enums = exports.DocumentationAnnotationId = exports.DescriptionAnnotationId = exports.DefaultAnnotationId = exports.DecodingFallbackAnnotationId = exports.Declaration = exports.ConcurrencyAnnotationId = exports.ComposeTransformation = exports.BrandAnnotationId = exports.BooleanKeyword = exports.BigIntKeyword = exports.BatchingAnnotationId = exports.AutoTitleAnnotationId = exports.ArbitraryAnnotationId = exports.AnyKeyword = void 0;
7
- exports.whiteListAnnotations = exports.voidKeyword = exports.unknownKeyword = exports.unify = exports.undefinedKeyword = exports.typeAST = exports.symbolKeyword = exports.stringKeyword = exports.required = exports.rename = exports.record = exports.pick = exports.partial = exports.orUndefined = exports.omit = exports.objectKeyword = exports.numberKeyword = exports.null = exports.neverKeyword = exports.mutable = exports.mapMembers = exports.keyof = exports.isVoidKeyword = exports.isUnknownKeyword = exports.isUniqueSymbol = exports.isUnion = exports.isUndefinedKeyword = exports.isTypeLiteralTransformation = exports.isTypeLiteral = exports.isTupleType = exports.isTransformation = exports.isTemplateLiteral = exports.isSymbolKeyword = exports.isSuspend = exports.isStringKeyword = exports.isRefinement = exports.isParameter = exports.isObjectKeyword = exports.isNumberKeyword = exports.isNeverKeyword = exports.isMembers = exports.isLiteral = exports.isFinalTransformation = exports.isEnums = exports.isDeclaration = void 0;
7
+ exports.whiteListAnnotations = exports.voidKeyword = exports.unknownKeyword = exports.unify = exports.undefinedKeyword = exports.typeAST = exports.symbolKeyword = exports.stringKeyword = exports.required = exports.rename = exports.record = exports.pruneUndefined = exports.pick = exports.partial = exports.orUndefined = exports.omit = exports.objectKeyword = exports.numberKeyword = exports.null = exports.neverKeyword = exports.mutable = exports.mapMembers = exports.keyof = exports.isVoidKeyword = exports.isUnknownKeyword = exports.isUniqueSymbol = exports.isUnion = exports.isUndefinedKeyword = exports.isTypeLiteralTransformation = exports.isTypeLiteral = exports.isTupleType = exports.isTransformation = exports.isTemplateLiteral = exports.isSymbolKeyword = exports.isSuspend = exports.isStringKeyword = exports.isRefinement = exports.isParameter = exports.isObjectKeyword = exports.isNumberKeyword = exports.isNeverKeyword = exports.isMembers = exports.isLiteral = exports.isFinalTransformation = exports.isEnums = exports.isDeclaration = void 0;
8
8
  var Arr = _interopRequireWildcard(require("./Array.js"));
9
9
  var _Function = require("./Function.js");
10
10
  var _GlobalValue = require("./GlobalValue.js");
@@ -871,6 +871,7 @@ const isTemplateLiteralSpanType = ast => {
871
871
  case "Literal":
872
872
  case "NumberKeyword":
873
873
  case "StringKeyword":
874
+ case "TemplateLiteral":
874
875
  return true;
875
876
  case "Union":
876
877
  return ast.types.every(isTemplateLiteralSpanType);
@@ -885,6 +886,8 @@ const templateLiteralSpanUnionTypeToString = type => {
885
886
  return "string";
886
887
  case "NumberKeyword":
887
888
  return "number";
889
+ case "TemplateLiteral":
890
+ return String(type);
888
891
  case "Union":
889
892
  return type.types.map(templateLiteralSpanUnionTypeToString).join(" | ");
890
893
  }
@@ -897,6 +900,8 @@ const templateLiteralSpanTypeToString = type => {
897
900
  return "${string}";
898
901
  case "NumberKeyword":
899
902
  return "${number}";
903
+ case "TemplateLiteral":
904
+ return "${" + String(type) + "}";
900
905
  case "Union":
901
906
  return "${" + type.types.map(templateLiteralSpanUnionTypeToString).join(" | ") + "}";
902
907
  }
@@ -1533,7 +1538,10 @@ class Refinement {
1533
1538
  * @since 3.10.0
1534
1539
  */
1535
1540
  toString() {
1536
- return Option.getOrElse(getExpected(this), () => `{ ${this.from} | filter }`);
1541
+ return getIdentifierAnnotation(this).pipe(Option.getOrElse(() => Option.match(getOrElseExpected(this), {
1542
+ onNone: () => `{ ${this.from} | filter }`,
1543
+ onSome: expected => isRefinement(this.from) ? String(this.from) + " & " + expected : expected
1544
+ })));
1537
1545
  }
1538
1546
  /**
1539
1547
  * @since 3.10.0
@@ -1738,66 +1746,63 @@ const keyof = ast => Union.unify(_keyof(ast));
1738
1746
  exports.keyof = keyof;
1739
1747
  const STRING_KEYWORD_PATTERN = ".*";
1740
1748
  const NUMBER_KEYWORD_PATTERN = "[+-]?\\d*\\.?\\d+(?:[Ee][+-]?\\d+)?";
1741
- const getTemplateLiteralPattern = type => {
1749
+ const getTemplateLiteralSpanTypePattern = (type, capture) => {
1742
1750
  switch (type._tag) {
1751
+ case "Literal":
1752
+ return regexp.escape(String(type.literal));
1743
1753
  case "StringKeyword":
1744
1754
  return STRING_KEYWORD_PATTERN;
1745
1755
  case "NumberKeyword":
1746
1756
  return NUMBER_KEYWORD_PATTERN;
1747
- case "Literal":
1748
- return regexp.escape(String(type.literal));
1757
+ case "TemplateLiteral":
1758
+ return getTemplateLiteralPattern(type, capture, false);
1749
1759
  case "Union":
1750
- return type.types.map(getTemplateLiteralPattern).join("|");
1760
+ return type.types.map(type => getTemplateLiteralSpanTypePattern(type, capture)).join("|");
1751
1761
  }
1752
1762
  };
1753
- /**
1754
- * @since 3.10.0
1755
- */
1756
- const getTemplateLiteralRegExp = ast => {
1757
- let pattern = `^`;
1758
- if (ast.head !== "") {
1759
- pattern += regexp.escape(ast.head);
1760
- }
1761
- for (const span of ast.spans) {
1762
- const p = getTemplateLiteralPattern(span.type);
1763
- pattern += isUnion(span.type) ? `(${p})` : p;
1764
- if (span.literal !== "") {
1765
- pattern += regexp.escape(span.literal);
1763
+ const handleTemplateLiteralSpanTypeParens = (type, s, capture, top) => {
1764
+ if (isUnion(type)) {
1765
+ if (capture && !top) {
1766
+ return `(?:${s})`;
1766
1767
  }
1768
+ } else if (!capture || !top) {
1769
+ return s;
1767
1770
  }
1768
- pattern += "$";
1769
- return new RegExp(pattern);
1770
- };
1771
- exports.getTemplateLiteralRegExp = getTemplateLiteralRegExp;
1772
- const getTemplateLiteralCapturingPattern = type => {
1773
- switch (type._tag) {
1774
- case "StringKeyword":
1775
- return STRING_KEYWORD_PATTERN;
1776
- case "NumberKeyword":
1777
- return NUMBER_KEYWORD_PATTERN;
1778
- case "Literal":
1779
- return regexp.escape(String(type.literal));
1780
- case "Union":
1781
- return type.types.map(getTemplateLiteralCapturingPattern).join("|");
1782
- }
1771
+ return `(${s})`;
1783
1772
  };
1784
- /**
1785
- * @since 3.10.0
1786
- */
1787
- const getTemplateLiteralCapturingRegExp = ast => {
1788
- let pattern = `^`;
1773
+ const getTemplateLiteralPattern = (ast, capture, top) => {
1774
+ let pattern = ``;
1789
1775
  if (ast.head !== "") {
1790
- pattern += `(${regexp.escape(ast.head)})`;
1776
+ const head = regexp.escape(ast.head);
1777
+ pattern += capture && top ? `(${head})` : head;
1791
1778
  }
1792
1779
  for (const span of ast.spans) {
1793
- pattern += `(${getTemplateLiteralCapturingPattern(span.type)})`;
1780
+ const spanPattern = getTemplateLiteralSpanTypePattern(span.type, capture);
1781
+ pattern += handleTemplateLiteralSpanTypeParens(span.type, spanPattern, capture, top);
1794
1782
  if (span.literal !== "") {
1795
- pattern += `(${regexp.escape(span.literal)})`;
1783
+ const literal = regexp.escape(span.literal);
1784
+ pattern += capture && top ? `(${literal})` : literal;
1796
1785
  }
1797
1786
  }
1798
- pattern += "$";
1799
- return new RegExp(pattern);
1787
+ return pattern;
1800
1788
  };
1789
+ /**
1790
+ * Generates a regular expression from a `TemplateLiteral` AST node.
1791
+ *
1792
+ * @see {@link getTemplateLiteralCapturingRegExp} for a variant that captures the pattern.
1793
+ *
1794
+ * @since 3.10.0
1795
+ */
1796
+ const getTemplateLiteralRegExp = ast => new RegExp(`^${getTemplateLiteralPattern(ast, false, true)}$`);
1797
+ /**
1798
+ * Generates a regular expression that captures the pattern defined by the given `TemplateLiteral` AST.
1799
+ *
1800
+ * @see {@link getTemplateLiteralRegExp} for a variant that does not capture the pattern.
1801
+ *
1802
+ * @since 3.10.0
1803
+ */
1804
+ exports.getTemplateLiteralRegExp = getTemplateLiteralRegExp;
1805
+ const getTemplateLiteralCapturingRegExp = ast => new RegExp(`^${getTemplateLiteralPattern(ast, true, true)}$`);
1801
1806
  /**
1802
1807
  * @since 3.10.0
1803
1808
  */
@@ -1846,7 +1851,7 @@ const getNumberIndexedAccess = ast => {
1846
1851
  case "Suspend":
1847
1852
  return getNumberIndexedAccess(ast.f());
1848
1853
  }
1849
- throw new Error(errors_.getASTUnsupportedSchema(ast));
1854
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
1850
1855
  };
1851
1856
  exports.getNumberIndexedAccess = getNumberIndexedAccess;
1852
1857
  const getTypeLiteralPropertySignature = (ast, name) => {
@@ -1911,7 +1916,7 @@ const getPropertyKeyIndexedAccess = (ast, name) => {
1911
1916
  case "Refinement":
1912
1917
  return getPropertyKeyIndexedAccess(ast.from, name);
1913
1918
  }
1914
- throw new Error(errors_.getASTUnsupportedSchema(ast));
1919
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
1915
1920
  };
1916
1921
  exports.getPropertyKeyIndexedAccess = getPropertyKeyIndexedAccess;
1917
1922
  const getPropertyKeys = ast => {
@@ -1949,7 +1954,7 @@ const record = (key, value) => {
1949
1954
  if (Predicate.isString(key.literal) || Predicate.isNumber(key.literal)) {
1950
1955
  propertySignatures.push(new PropertySignature(key.literal, value, false, true));
1951
1956
  } else {
1952
- throw new Error(errors_.getASTUnsupportedLiteral(key.literal));
1957
+ throw new Error(errors_.getASTUnsupportedLiteralErrorMessage(key.literal));
1953
1958
  }
1954
1959
  break;
1955
1960
  case "Enums":
@@ -1966,7 +1971,7 @@ const record = (key, value) => {
1966
1971
  key.types.forEach(go);
1967
1972
  break;
1968
1973
  default:
1969
- throw new Error(errors_.getASTUnsupportedKeySchema(key));
1974
+ throw new Error(errors_.getASTUnsupportedKeySchemaErrorMessage(key));
1970
1975
  }
1971
1976
  };
1972
1977
  go(key);
@@ -2036,7 +2041,7 @@ const pick = (ast, keys) => {
2036
2041
  }
2037
2042
  }
2038
2043
  }
2039
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2044
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
2040
2045
  };
2041
2046
  /**
2042
2047
  * Equivalent at runtime to the built-in TypeScript utility type `Omit`.
@@ -2069,15 +2074,14 @@ const partial = (ast, options) => {
2069
2074
  case "Suspend":
2070
2075
  return new Suspend(() => partial(ast.f(), options));
2071
2076
  case "Declaration":
2072
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2073
2077
  case "Refinement":
2074
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2078
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
2075
2079
  case "Transformation":
2076
2080
  {
2077
2081
  if (isTypeLiteralTransformation(ast.transformation) && ast.transformation.propertySignatureTransformations.every(isRenamingPropertySignatureTransformation)) {
2078
2082
  return new Transformation(partial(ast.from, options), partial(ast.to, options), ast.transformation);
2079
2083
  }
2080
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2084
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
2081
2085
  }
2082
2086
  }
2083
2087
  return ast;
@@ -2099,15 +2103,14 @@ const required = ast => {
2099
2103
  case "Suspend":
2100
2104
  return new Suspend(() => required(ast.f()));
2101
2105
  case "Declaration":
2102
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2103
2106
  case "Refinement":
2104
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2107
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
2105
2108
  case "Transformation":
2106
2109
  {
2107
2110
  if (isTypeLiteralTransformation(ast.transformation) && ast.transformation.propertySignatureTransformations.every(isRenamingPropertySignatureTransformation)) {
2108
2111
  return new Transformation(required(ast.from), required(ast.to), ast.transformation);
2109
2112
  }
2110
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2113
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
2111
2114
  }
2112
2115
  }
2113
2116
  return ast;
@@ -2421,7 +2424,7 @@ const _keyof = ast => {
2421
2424
  case "Transformation":
2422
2425
  return _keyof(ast.to);
2423
2426
  }
2424
- throw new Error(errors_.getASTUnsupportedSchema(ast));
2427
+ throw new Error(errors_.getASTUnsupportedSchemaErrorMessage(ast));
2425
2428
  };
2426
2429
  /** @internal */
2427
2430
  const compose = (ab, cd) => new Transformation(ab, cd, composeTransformation);
@@ -2453,11 +2456,48 @@ const rename = (ast, mapping) => {
2453
2456
  case "Transformation":
2454
2457
  return compose(ast, rename(typeAST(ast), mapping));
2455
2458
  }
2456
- throw new Error(errors_.getASTUnsupportedRenameSchema(ast));
2459
+ throw new Error(errors_.getASTUnsupportedRenameSchemaErrorMessage(ast));
2457
2460
  };
2458
2461
  exports.rename = rename;
2459
2462
  const formatKeyword = ast => Option.getOrElse(getExpected(ast), () => ast._tag);
2460
- const getExpected = ast => {
2461
- return getIdentifierAnnotation(ast).pipe(Option.orElse(() => getTitleAnnotation(ast)), Option.orElse(() => getDescriptionAnnotation(ast)), Option.orElse(() => getAutoTitleAnnotation(ast)));
2463
+ function getBrands(ast) {
2464
+ return Option.match(getBrandAnnotation(ast), {
2465
+ onNone: () => "",
2466
+ onSome: brands => brands.map(brand => ` & Brand<${util_.formatUnknown(brand)}>`).join("")
2467
+ });
2468
+ }
2469
+ const getOrElseExpected = ast => getTitleAnnotation(ast).pipe(Option.orElse(() => getDescriptionAnnotation(ast)), Option.orElse(() => getAutoTitleAnnotation(ast)), Option.map(s => s + getBrands(ast)));
2470
+ const getExpected = ast => Option.orElse(getIdentifierAnnotation(ast), () => getOrElseExpected(ast));
2471
+ /** @internal */
2472
+ const pruneUndefined = (ast, self, onTransformation) => {
2473
+ switch (ast._tag) {
2474
+ case "UndefinedKeyword":
2475
+ return neverKeyword;
2476
+ case "Union":
2477
+ {
2478
+ const types = [];
2479
+ let hasUndefined = false;
2480
+ for (const type of ast.types) {
2481
+ const pruned = self(type);
2482
+ if (pruned) {
2483
+ hasUndefined = true;
2484
+ if (!isNeverKeyword(pruned)) {
2485
+ types.push(pruned);
2486
+ }
2487
+ } else {
2488
+ types.push(type);
2489
+ }
2490
+ }
2491
+ if (hasUndefined) {
2492
+ return Union.make(types);
2493
+ }
2494
+ break;
2495
+ }
2496
+ case "Suspend":
2497
+ return self(ast.f());
2498
+ case "Transformation":
2499
+ return onTransformation(ast);
2500
+ }
2462
2501
  };
2502
+ exports.pruneUndefined = pruneUndefined;
2463
2503
  //# sourceMappingURL=SchemaAST.js.map