diff --git a/tools/dgeni/common/decorators.ts b/tools/dgeni/common/decorators.ts index 81aa7c24de55..e5e9a5389802 100644 --- a/tools/dgeni/common/decorators.ts +++ b/tools/dgeni/common/decorators.ts @@ -6,7 +6,7 @@ import {ClassExportDoc} from 'dgeni-packages/typescript/api-doc-types/ClassExportDoc'; import {PropertyMemberDoc} from 'dgeni-packages/typescript/api-doc-types/PropertyMemberDoc'; import {MemberDoc} from 'dgeni-packages/typescript/api-doc-types/MemberDoc'; -import {CategorizedClassDoc} from './dgeni-definitions'; +import {CategorizedClassDoc, DeprecationDoc, HasDecoratorsDoc} from './dgeni-definitions'; const SELECTOR_BLACKLIST = new Set([ '[portal]', @@ -76,16 +76,34 @@ export function hasClassDecorator(doc: ClassExportDoc, decoratorName: string) { return doc.docType == 'class' && hasDecorator(doc, decoratorName); } -export function hasDecorator(doc: {decorators?: {name: string}[]}, decoratorName: string) { +export function hasDecorator(doc: HasDecoratorsDoc, decoratorName: string) { return !!doc.decorators && doc.decorators.length > 0 && doc.decorators.some(d => d.name == decoratorName); } +export function getDeletionTarget(doc: any): string | null { + if (!doc.tags) { + return null; + } + + const deletionTarget = doc.tags.tags.find((t: any) => t.tagName === 'deletion-target'); + + return deletionTarget ? deletionTarget.description : null; +} + /** * Decorates public exposed docs. Creates a property on the doc that indicates whether * the item is deprecated or not. */ -export function decorateDeprecatedDoc(doc: {isDeprecated: boolean}) { +export function decorateDeprecatedDoc(doc: DeprecationDoc) { doc.isDeprecated = isDeprecatedDoc(doc); + doc.deletionTarget = getDeletionTarget(doc); + + if (doc.isDeprecated && !doc.deletionTarget) { + console.warn('Warning: There is a deprecated item without a @deletion-target tag.', doc.id); + } else if (doc.deletionTarget && !doc.isDeprecated) { + console.warn('Warning: There is an item with a @deletion-target which is not deprecated.', + doc.id); + } } diff --git a/tools/dgeni/common/dgeni-definitions.ts b/tools/dgeni/common/dgeni-definitions.ts index 03170ad6c973..63c6c85033b5 100644 --- a/tools/dgeni/common/dgeni-definitions.ts +++ b/tools/dgeni/common/dgeni-definitions.ts @@ -1,13 +1,25 @@ +import {ApiDoc} from 'dgeni-packages/typescript/api-doc-types/ApiDoc'; import {ClassExportDoc} from 'dgeni-packages/typescript/api-doc-types/ClassExportDoc'; import {ClassLikeExportDoc} from 'dgeni-packages/typescript/api-doc-types/ClassLikeExportDoc'; import {PropertyMemberDoc} from 'dgeni-packages/typescript/api-doc-types/PropertyMemberDoc'; +import {ParsedDecorator} from 'dgeni-packages/typescript/services/TsParser/getDecorators'; import {NormalizedMethodMemberDoc} from './normalize-method-parameters'; +/** Interface that describes categorized docs that can be deprecated. */ +export interface DeprecationDoc extends ApiDoc { + isDeprecated: boolean; + deletionTarget: string | null; +} + +/** Interface that describes Dgeni documents that have decorators. */ +export interface HasDecoratorsDoc { + decorators?: ParsedDecorator[] | undefined; +} + /** Extended Dgeni class-like document that includes separated class members. */ -export interface CategorizedClassLikeDoc extends ClassLikeExportDoc { +export interface CategorizedClassLikeDoc extends ClassLikeExportDoc, DeprecationDoc { methods: CategorizedMethodMemberDoc[]; properties: CategorizedPropertyMemberDoc[]; - isDeprecated: boolean; } /** Extended Dgeni class document that includes extracted Angular metadata. */ @@ -22,9 +34,8 @@ export interface CategorizedClassDoc extends ClassExportDoc, CategorizedClassLik } /** Extended Dgeni property-member document that includes extracted Angular metadata. */ -export interface CategorizedPropertyMemberDoc extends PropertyMemberDoc { +export interface CategorizedPropertyMemberDoc extends PropertyMemberDoc, DeprecationDoc { description: string; - isDeprecated: boolean; isDirectiveInput: boolean; isDirectiveOutput: boolean; directiveInputAlias: string; @@ -32,7 +43,6 @@ export interface CategorizedPropertyMemberDoc extends PropertyMemberDoc { } /** Extended Dgeni method-member document that simplifies logic for the Dgeni template. */ -export interface CategorizedMethodMemberDoc extends NormalizedMethodMemberDoc { +export interface CategorizedMethodMemberDoc extends NormalizedMethodMemberDoc, DeprecationDoc { showReturns: boolean; - isDeprecated: boolean; } diff --git a/tools/dgeni/templates/class.template.html b/tools/dgeni/templates/class.template.html index db4b98947c79..36a535563646 100644 --- a/tools/dgeni/templates/class.template.html +++ b/tools/dgeni/templates/class.template.html @@ -1,3 +1,5 @@ +{% import "macros.html" as macros %} +