@@ -18625,33 +18625,36 @@ namespace ts {
1862518625 }
1862618626 }
1862718627
18628+ /**
18629+ * This function marks the type used for metadata decorator as referenced if it is import
18630+ * from external module.
18631+ * This is different from markTypeNodeAsReferenced because it tries to simplify type nodes in
18632+ * union and intersection type
18633+ * @param node
18634+ */
1862818635 function markDecoratorMedataDataTypeNodeAsReferenced(node: TypeNode): void {
18629- const entityNameOrToken = getEntityNameForDecoratoryMetadata (node);
18630- if (entityNameOrToken && isEntityName(entityNameOrToken )) {
18631- markEntityNameOrEntityExpressionAsReference(entityNameOrToken );
18636+ const entityName = getEntityNameForDecoratorMetadata (node);
18637+ if (entityName && isEntityName(entityName )) {
18638+ markEntityNameOrEntityExpressionAsReference(entityName );
1863218639 }
1863318640 }
1863418641
18635- type voidUndefinedNullOrNeverTypeNode = Token<SyntaxKind.VoidKeyword | SyntaxKind.UndefinedKeyword | SyntaxKind.NullKeyword | SyntaxKind.NeverKeyword>;
18636-
18637- function getEntityNameForDecoratoryMetadata(node: TypeNode): EntityName | voidUndefinedNullOrNeverTypeNode {
18642+ function getEntityNameForDecoratorMetadata(node: TypeNode): EntityName {
1863818643 if (node) {
1863918644 switch (node.kind) {
1864018645 case SyntaxKind.IntersectionType:
1864118646 case SyntaxKind.UnionType:
18642- let commonEntityName: EntityName | voidUndefinedNullOrNeverTypeNode ;
18647+ let commonEntityName: EntityName;
1864318648 for (const typeNode of (<UnionOrIntersectionTypeNode>node).types) {
18644- const individualEntityName = getEntityNameForDecoratoryMetadata (typeNode);
18649+ const individualEntityName = getEntityNameForDecoratorMetadata (typeNode);
1864518650 if (!individualEntityName) {
18646- // Individual is something like string number
18647- // So it would be serialized to either that type or object
18651+ // Individual is something like string number
18652+ // So it would be serialized to either that type or object
1864818653 // Safe to return here
1864918654 return undefined;
1865018655 }
1865118656
18652- const isCommonEntityName = commonEntityName && isEntityName(commonEntityName);
18653- const isIndividualEntityName = isEntityName(individualEntityName);
18654- if (isCommonEntityName && isIndividualEntityName) {
18657+ if (commonEntityName) {
1865518658 // Note this is in sync with the transformation that happens for type node.
1865618659 // Keep this in sync with serializeUnionOrIntersectionType
1865718660 // Verify if they refer to same entity and is identifier
@@ -18662,24 +18665,17 @@ namespace ts {
1866218665 return undefined;
1866318666 }
1866418667 }
18665- else if (!isCommonEntityName) {
18668+ else {
1866618669 commonEntityName = individualEntityName;
1866718670 }
1866818671 }
1866918672 return commonEntityName;
1867018673
1867118674 case SyntaxKind.ParenthesizedType:
18672- return getEntityNameForDecoratoryMetadata ((<ParenthesizedTypeNode>node).type);
18675+ return getEntityNameForDecoratorMetadata ((<ParenthesizedTypeNode>node).type);
1867318676
1867418677 case SyntaxKind.TypeReference:
1867518678 return (<TypeReferenceNode>node).typeName;
18676-
18677- case SyntaxKind.VoidKeyword:
18678- case SyntaxKind.UndefinedKeyword:
18679- case SyntaxKind.NullKeyword:
18680- case SyntaxKind.NeverKeyword:
18681- return <voidUndefinedNullOrNeverTypeNode>node;
18682-
1868318679 }
1868418680 }
1868518681 }
0 commit comments