@compodoc/compodoc
Version:
The missing documentation tool for your Angular application
90 lines (75 loc) • 2.74 kB
text/typescript
import * as _ from '../../../../../utils/collection.util';
import { ts, SyntaxKind } from 'ts-morph';
export class MemberVisibilityPolicy {
constructor(private readonly hasJSDocTag: (member: ts.Node, tagName: string) => boolean) {}
public extractModifierKinds(node: any): number[] | undefined {
if (!node.modifiers || node.modifiers.length === 0) {
return undefined;
}
let kinds = node.modifiers.map((modifier: any) => modifier.kind);
if (
_.indexOf(kinds, SyntaxKind.PublicKeyword) !== -1 &&
_.indexOf(kinds, SyntaxKind.StaticKeyword) !== -1
) {
kinds = kinds.filter((kind: number) => kind !== SyntaxKind.PublicKeyword);
}
return kinds;
}
public ensurePrivateKeyword(result: any, node: any): void {
if (!this.isPrivate(node)) {
return;
}
if (!result.modifierKind) {
result.modifierKind = [];
}
const hasAlreadyPrivateKeyword = result.modifierKind.includes(SyntaxKind.PrivateKeyword);
if (!hasAlreadyPrivateKeyword) {
result.modifierKind.push(SyntaxKind.PrivateKeyword);
}
}
public isPrivate(member: any): boolean {
if (member.modifiers) {
const isPrivate: boolean = member.modifiers.some(
(modifier: any) => modifier.kind === SyntaxKind.PrivateKeyword
);
if (isPrivate) {
return true;
}
}
if (member.name && member.name.escapedText) {
const isPrivate: boolean = member.name.escapedText.indexOf('#') === 0;
if (isPrivate) {
return true;
}
}
return this.isHiddenMember(member);
}
public isProtected(member: any): boolean {
if (member.modifiers) {
const isProtected: boolean = member.modifiers.some(
(modifier: any) => modifier.kind === SyntaxKind.ProtectedKeyword
);
if (isProtected) {
return true;
}
}
return this.isHiddenMember(member);
}
public isInternal(member: any): boolean {
return this.hasJSDocTag(member, 'internal');
}
public isPublic(member: any): boolean {
if (member.modifiers) {
const isPublic: boolean = member.modifiers.some(
(modifier: any) => modifier.kind === SyntaxKind.PublicKeyword
);
if (isPublic) {
return true;
}
}
return this.isHiddenMember(member);
}
public isHiddenMember(member: any): boolean {
return this.hasJSDocTag(member, 'hidden');
}
}