@compodoc/compodoc
Version:
The missing documentation tool for your Angular application
691 lines (668 loc) • 23.3 kB
text/typescript
/**
* Example data structure for template playground
* Contains mock data for all supported template types
*/
export interface ExampleData {
component: any;
module: any;
interface: any;
class: any;
injectable: any;
directive: any;
pipe: any;
guard: any;
interceptor: any;
entity: any;
controller: any;
miscellaneous: any;
overview: any;
index: any;
}
export const EXAMPLE_DATA: ExampleData = {
component: {
name: 'UserProfileComponent',
file: 'src/app/components/user-profile.component.ts',
deprecated: false,
selector: 'app-user-profile',
templateUrl: './user-profile.component.html',
styleUrls: ['./user-profile.component.scss'],
description: 'Component for displaying and editing user profile information',
inputs: [
{
name: 'user',
type: 'User',
description: 'The user object to display',
line: 15,
defaultValue: 'null'
},
{
name: 'editable',
type: 'boolean',
description: 'Whether the profile can be edited',
line: 18,
defaultValue: 'false'
}
],
outputs: [
{
name: 'userUpdated',
type: 'EventEmitter<User>',
description: 'Emitted when user profile is updated',
line: 21
}
],
properties: [
{
name: 'isLoading',
type: 'boolean',
defaultValue: 'false',
description: 'Loading state indicator',
line: 25,
modifierKind: [119] // public
}
],
methods: [
{
name: 'saveProfile',
type: 'void',
description: 'Saves the user profile changes',
line: 30,
modifierKind: [119], // public
args: [
{
name: 'userData',
type: 'Partial<User>',
description: 'Updated user data'
}
]
}
],
implements: ['OnInit', 'OnDestroy'],
hostListeners: [
{
name: 'window:resize',
args: ['$event'],
argsDecorator: ['$event'],
description: 'Handle window resize events'
}
],
template: '<div class="user-profile">...</div>',
styles: ['.user-profile { padding: 1rem; }'],
readme: 'This component provides a comprehensive user profile management interface.',
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' },
{ href: '#template', id: 'template', label: 'template', 'data-link': 'template' },
{ href: '#styles', id: 'styles', label: 'styles', 'data-link': 'styles' },
{ href: '#dom-tree', id: 'dom-tree', label: 'dom-tree', 'data-link': 'dom-tree' }
]
},
module: {
name: 'UserModule',
file: 'src/app/modules/user/user.module.ts',
deprecated: false,
description: 'Module containing all user-related components and services',
declarations: [
{ name: 'UserProfileComponent', type: 'component' },
{ name: 'UserListComponent', type: 'component' },
{ name: 'UserDirective', type: 'directive' }
],
imports: [
{ name: 'CommonModule', type: 'module' },
{ name: 'FormsModule', type: 'module' },
{ name: 'HttpClientModule', type: 'module' }
],
exports: [
{ name: 'UserProfileComponent', type: 'component' },
{ name: 'UserListComponent', type: 'component' }
],
providers: [
{ name: 'UserService', type: 'service' },
{ name: 'UserResolver', type: 'resolver' }
],
bootstrap: [],
graph: '<svg>...</svg>', // SVG dependency graph
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
interface: {
name: 'User',
file: 'src/app/interfaces/user.interface.ts',
deprecated: false,
description: 'Interface defining the structure of a user object',
properties: [
{
name: 'id',
type: 'string',
description: 'Unique identifier for the user',
line: 3,
optional: false
},
{
name: 'email',
type: 'string',
description: 'User email address',
line: 4,
optional: false
},
{
name: 'firstName',
type: 'string',
description: 'User first name',
line: 5,
optional: true
},
{
name: 'lastName',
type: 'string',
description: 'User last name',
line: 6,
optional: true
},
{
name: 'avatar',
type: 'string',
description: 'URL to user avatar image',
line: 7,
optional: true
}
],
indexSignatures: [],
kind: 'interface',
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
class: {
name: 'UserRepository',
file: 'src/app/repositories/user.repository.ts',
deprecated: false,
description: 'Repository class for managing user data operations',
constructorObj: {
name: 'constructor',
description: 'Creates an instance of UserRepository',
args: [
{
name: 'httpClient',
type: 'HttpClient',
description: 'HTTP client for API requests'
}
]
},
properties: [
{
name: 'baseUrl',
type: 'string',
defaultValue: "'/api/users'",
description: 'Base URL for user API endpoints',
line: 10,
modifierKind: [121] // private
}
],
methods: [
{
name: 'getUser',
type: 'Observable<User>',
description: 'Retrieves a user by ID',
line: 15,
modifierKind: [119], // public
args: [
{
name: 'id',
type: 'string',
description: 'User ID'
}
]
},
{
name: 'updateUser',
type: 'Observable<User>',
description: 'Updates user information',
line: 20,
modifierKind: [119], // public
args: [
{
name: 'id',
type: 'string',
description: 'User ID'
},
{
name: 'userData',
type: 'Partial<User>',
description: 'Updated user data'
}
]
}
],
extends: ['BaseRepository'],
implements: ['UserRepositoryInterface'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
injectable: {
name: 'UserService',
file: 'src/app/services/user.service.ts',
deprecated: false,
description: 'Service for managing user-related business logic',
properties: [
{
name: 'currentUser$',
type: 'BehaviorSubject<User | null>',
defaultValue: 'new BehaviorSubject(null)',
description: 'Observable stream of the current user',
line: 12,
modifierKind: [121] // private
}
],
methods: [
{
name: 'getCurrentUser',
type: 'Observable<User | null>',
description: 'Returns the current user as an observable',
line: 18,
modifierKind: [119] // public
},
{
name: 'login',
type: 'Observable<User>',
description: 'Authenticates a user',
line: 25,
modifierKind: [119], // public
args: [
{
name: 'credentials',
type: 'LoginCredentials',
description: 'User login credentials'
}
]
}
],
constructorObj: {
name: 'constructor',
description: 'Creates an instance of UserService',
args: [
{
name: 'userRepository',
type: 'UserRepository',
description: 'Repository for user data operations'
}
]
},
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
directive: {
name: 'HighlightDirective',
file: 'src/app/directives/highlight.directive.ts',
deprecated: false,
selector: '[appHighlight]',
description: 'Directive for highlighting elements on hover',
inputs: [
{
name: 'highlightColor',
type: 'string',
description: 'Color to use for highlighting',
line: 10,
defaultValue: "'yellow'"
}
],
hostListeners: [
{
name: 'mouseenter',
args: [],
description: 'Handle mouse enter events'
},
{
name: 'mouseleave',
args: [],
description: 'Handle mouse leave events'
}
],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
pipe: {
name: 'TruncatePipe',
file: 'src/app/pipes/truncate.pipe.ts',
deprecated: false,
description: 'Pipe for truncating text to a specified length',
methods: [
{
name: 'transform',
type: 'string',
description: 'Transforms the input text by truncating it',
line: 8,
modifierKind: [119], // public
args: [
{
name: 'value',
type: 'string',
description: 'Text to truncate'
},
{
name: 'limit',
type: 'number',
description: 'Maximum length'
},
{
name: 'ellipsis',
type: 'string',
description: 'Ellipsis string to append'
}
]
}
],
implements: ['PipeTransform'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
guard: {
name: 'AuthGuard',
file: 'src/app/guards/auth.guard.ts',
deprecated: false,
description: 'Guard for protecting routes that require authentication',
methods: [
{
name: 'canActivate',
type: 'Observable<boolean> | Promise<boolean> | boolean',
description: 'Determines if the route can be activated',
line: 12,
modifierKind: [119], // public
args: [
{
name: 'route',
type: 'ActivatedRouteSnapshot',
description: 'Current route snapshot'
},
{
name: 'state',
type: 'RouterStateSnapshot',
description: 'Current router state'
}
]
}
],
implements: ['CanActivate'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
interceptor: {
name: 'AuthInterceptor',
file: 'src/app/interceptors/auth.interceptor.ts',
deprecated: false,
description: 'HTTP interceptor for adding authentication headers',
methods: [
{
name: 'intercept',
type: 'Observable<HttpEvent<any>>',
description: 'Intercepts HTTP requests to add auth headers',
line: 10,
modifierKind: [119], // public
args: [
{
name: 'req',
type: 'HttpRequest<any>',
description: 'HTTP request to intercept'
},
{
name: 'next',
type: 'HttpHandler',
description: 'Next handler in the chain'
}
]
}
],
implements: ['HttpInterceptor'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
entity: {
name: 'UserEntity',
file: 'src/app/entities/user.entity.ts',
deprecated: false,
description: 'Entity class representing a user in the database',
properties: [
{
name: 'id',
type: 'string',
description: 'Primary key identifier',
line: 5,
decorators: ['@PrimaryGeneratedColumn()']
},
{
name: 'email',
type: 'string',
description: 'User email address',
line: 8,
decorators: ['@Column({ unique: true })']
}
],
decorators: ['@Entity()'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
controller: {
name: 'UserController',
file: 'src/app/controllers/user.controller.ts',
deprecated: false,
description: 'REST controller for user operations',
methods: [
{
name: 'getUsers',
type: 'Promise<User[]>',
description: 'Get all users',
line: 12,
modifierKind: [119], // public
decorators: ['@Get()']
},
{
name: 'getUserById',
type: 'Promise<User>',
description: 'Get user by ID',
line: 18,
modifierKind: [119], // public
decorators: ['@Get(":id")'],
args: [
{
name: 'id',
type: 'string',
description: 'User ID'
}
]
}
],
decorators: ['@Controller("users")'],
navTabs: [
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
]
},
miscellaneous: {
variables: [
{
name: 'API_BASE_URL',
type: 'string',
defaultValue: "'https://api.example.com'",
description: 'Base URL for API endpoints',
file: 'src/app/constants/api.constants.ts'
}
],
functions: [
{
name: 'formatDate',
type: '(date: Date, format?: string) => string',
description: 'Formats a date according to the specified format',
file: 'src/app/utils/date.utils.ts'
}
],
typeAliases: [
{
name: 'UserId',
type: 'string',
description: 'Type alias for user identifier',
file: 'src/app/types/user.types.ts'
}
],
enumerations: [
{
name: 'UserRole',
description: 'Enumeration of user roles',
file: 'src/app/enums/user-role.enum.ts',
childs: [
{ name: 'ADMIN', value: 'admin' },
{ name: 'USER', value: 'user' },
{ name: 'GUEST', value: 'guest' }
]
}
]
},
overview: {
modules: [
{ name: 'AppModule', file: 'src/app/app.module.ts' },
{ name: 'UserModule', file: 'src/app/modules/user/user.module.ts' }
],
components: [
{ name: 'AppComponent', file: 'src/app/app.component.ts' },
{ name: 'UserProfileComponent', file: 'src/app/components/user-profile.component.ts' }
],
injectables: [
{ name: 'UserService', file: 'src/app/services/user.service.ts' }
],
pipes: [
{ name: 'TruncatePipe', file: 'src/app/pipes/truncate.pipe.ts' }
],
directives: [
{ name: 'HighlightDirective', file: 'src/app/directives/highlight.directive.ts' }
],
classes: [
{ name: 'UserRepository', file: 'src/app/repositories/user.repository.ts' }
],
interfaces: [
{ name: 'User', file: 'src/app/interfaces/user.interface.ts' }
],
guards: [
{ name: 'AuthGuard', file: 'src/app/guards/auth.guard.ts' }
],
interceptors: [
{ name: 'AuthInterceptor', file: 'src/app/interceptors/auth.interceptor.ts' }
]
},
index: {
modules: 2,
components: 2,
injectables: 1,
pipes: 1,
directives: 1,
classes: 1,
interfaces: 1,
guards: 1,
interceptors: 1
}
};
// Global template context that's available to all templates
export const TEMPLATE_CONTEXT = {
// Translation function
t: (key: string) => {
const translations: { [key: string]: string } = {
'components': 'Components',
'modules': 'Modules',
'interfaces': 'Interfaces',
'classes': 'Classes',
'injectables': 'Injectables',
'pipes': 'Pipes',
'directives': 'Directives',
'guards': 'Guards',
'interceptors': 'Interceptors',
'entities': 'Entities',
'controllers': 'Controllers',
'info': 'Info',
'readme': 'Readme',
'source': 'Source',
'template': 'Template',
'styles': 'Styles',
'dom-tree': 'DOM Tree',
'file': 'File',
'overview': 'Overview',
'getting-started': 'Getting Started',
'properties': 'Properties',
'methods': 'Methods',
'inputs': 'Inputs',
'outputs': 'Outputs',
'accessors': 'Accessors',
'constructor': 'Constructor',
'zoomin': 'Zoom In',
'zoomout': 'Zoom Out',
'reset': 'Reset'
};
return translations[key] || key;
},
// Relative URL helper
relativeURL: (depth: number | string, ...args: string[]) => {
const baseUrl = typeof depth === 'number' ? '../'.repeat(depth) : depth;
return baseUrl + args.join('/');
},
// Template helpers
compare: (a: any, operator: string, b: any) => {
switch (operator) {
case '===': return a === b;
case '!==': return a !== b;
case '==': return a == b;
case '!=': return a != b;
case '<': return a < b;
case '>': return a > b;
case '<=': return a <= b;
case '>=': return a >= b;
default: return false;
}
},
// Check if tab is enabled
isTabEnabled: (navTabs: any[], tabId: string) => {
return navTabs.some(tab => tab.id === tabId);
},
// Check if tab is initial/active
isInitialTab: (navTabs: any[], tabId: string) => {
return navTabs.length > 0 && navTabs[0].id === tabId;
},
// Depth for relative URLs
depth: 0,
// Global flags
disableSearch: false,
disableGraph: false,
disableCoverage: false,
disableLifeCycleHooks: false,
disableProperties: false,
disableDomTree: false,
disableTemplateTab: false,
disableStyleTab: false,
disablePrivate: false,
disableProtected: false,
disableInternal: false
};