UNPKG

@compodoc/compodoc

Version:

The missing documentation tool for your Angular application

362 lines (336 loc) 12.8 kB
export interface SessionTemplateMockData { templateVariables: any; additionalContext: any; } export function createSessionTemplateMockData(templateName: string): SessionTemplateMockData { let additionalContext: any = {}; let templateVariables: any; if (templateName.includes('component')) { templateVariables = { // Core component data name: 'UserProfileComponent', description: 'A comprehensive user profile management component that handles user information display and editing capabilities.', file: 'src/app/components/user-profile/user-profile.component.ts', selector: 'app-user-profile', templateUrl: './user-profile.component.html', styleUrls: ['./user-profile.component.scss', './user-profile.theme.scss'], encapsulation: 'ViewEncapsulation.Emulated', changeDetection: 'ChangeDetectionStrategy.OnPush', // Component metadata type: 'component', sourceCode: 'export class UserProfileComponent implements OnInit, OnDestroy { ... }', rawFile: 'user-profile.component.ts', // Template and styles templateData: '<div class="user-profile">\\n <h2>{{user.name}}</h2>\\n <p>{{user.email}}</p>\\n</div>', styleUrlsData: [ '.user-profile { padding: 20px; }\\n.user-profile h2 { color: #333; }' ], stylesData: [':host { display: block; margin: 10px; }'], // Inputs and Outputs inputs: [ { name: 'user', type: 'User', description: 'The user object containing profile information', decorators: ['@Input()'], optional: false, defaultValue: null }, { name: 'editable', type: 'boolean', description: 'Whether the profile can be edited', decorators: ['@Input()'], optional: true, defaultValue: 'false' }, { name: 'showAvatar', type: 'boolean', description: 'Controls avatar visibility', decorators: ['@Input()'], optional: true, defaultValue: 'true' } ], outputs: [ { name: 'userUpdated', type: 'EventEmitter<User>', description: 'Emitted when user profile is updated', decorators: ['@Output()'] }, { name: 'avatarClicked', type: 'EventEmitter<MouseEvent>', description: 'Emitted when user clicks on avatar', decorators: ['@Output()'] } ], // Methods methods: [ { name: 'ngOnInit', type: 'void', description: 'Angular lifecycle hook for component initialization', args: [], returnType: 'void', modifierKind: 'public' }, { name: 'updateProfile', type: 'Promise<void>', description: 'Updates the user profile with new information', args: [{ name: 'userData', type: 'Partial<User>' }], returnType: 'Promise<void>', modifierKind: 'public' }, { name: 'validateForm', type: 'boolean', description: 'Validates the profile form data', args: [], returnType: 'boolean', modifierKind: 'private' } ], // Properties properties: [ { name: 'isLoading', type: 'boolean', description: 'Indicates if component is in loading state', defaultValue: 'false', modifierKind: 'public' }, { name: 'form', type: 'FormGroup', description: 'Reactive form for user profile editing', modifierKind: 'public' } ], // Host listeners and bindings hostListeners: [ { name: 'click', args: ['$event'], description: 'Handles click events on the component' } ], hostBindings: [ { name: 'class.active', value: 'isActive' } ], // Lifecycle hooks implements: ['OnInit', 'OnDestroy', 'AfterViewInit'], // Dependency injection constructorObj: { name: 'constructor', description: 'Component constructor with dependency injection', args: [ { name: 'userService', type: 'UserService' }, { name: 'router', type: 'Router' }, { name: 'cd', type: 'ChangeDetectorRef' } ] }, // Angular-specific metadata providers: ['UserService'], viewProviders: [], queries: [], exportAs: 'userProfile', // Documentation metadata jsdoctags: [ { tagName: { text: 'example' }, comment: '<app-user-profile [user]="currentUser" [editable]="true"></app-user-profile>' } ], // Coverage information (if enabled) coveragePercent: 85, coverageCount: '17/20', status: 'good' }; additionalContext = { depth: 1, breadcrumbs: [ { name: 'Components', url: '../components.html' }, { name: 'UserProfileComponent', url: '#' } ] }; } else if (templateName.includes('service') || templateName.includes('injectable')) { templateVariables = { name: 'UserService', description: 'Service responsible for managing user data and authentication operations', file: 'src/app/services/user.service.ts', type: 'injectable', // Injectable metadata providedIn: 'root', decorators: ['@Injectable()'], // Methods methods: [ { name: 'getUser', type: 'Observable<User>', description: 'Retrieves user data by ID', args: [{ name: 'id', type: 'string' }], returnType: 'Observable<User>', modifierKind: 'public' }, { name: 'updateUser', type: 'Observable<User>', description: 'Updates user information', args: [ { name: 'id', type: 'string' }, { name: 'userData', type: 'Partial<User>' } ], returnType: 'Observable<User>', modifierKind: 'public' }, { name: 'deleteUser', type: 'Observable<void>', description: 'Deletes a user account', args: [{ name: 'id', type: 'string' }], returnType: 'Observable<void>', modifierKind: 'public' } ], // Properties properties: [ { name: 'currentUser$', type: 'BehaviorSubject<User | null>', description: 'Observable stream of current user state', modifierKind: 'private' }, { name: 'apiUrl', type: 'string', description: 'Base URL for user API endpoints', defaultValue: '"/api/users"', modifierKind: 'private' } ], // Constructor constructorObj: { name: 'constructor', description: 'Service constructor with HTTP client injection', args: [ { name: 'http', type: 'HttpClient' }, { name: 'config', type: 'AppConfig' } ] }, // Coverage coveragePercent: 92, coverageCount: '23/25' }; } else if (templateName.includes('module')) { templateVariables = { name: 'UserModule', description: 'Feature module containing user-related components and services', file: 'src/app/modules/user/user.module.ts', type: 'module', // Module metadata declarations: [ { name: 'UserProfileComponent', type: 'component' }, { name: 'UserListComponent', type: 'component' }, { name: 'UserCardDirective', type: 'directive' } ], imports: [ { name: 'CommonModule', type: 'module' }, { name: 'ReactiveFormsModule', type: 'module' }, { name: 'RouterModule', type: 'module' } ], exports: [ { name: 'UserProfileComponent', type: 'component' }, { name: 'UserListComponent', type: 'component' } ], providers: [ { name: 'UserService', type: 'service' }, { name: 'UserResolver', type: 'resolver' } ], bootstrap: [], schemas: [] }; } else if (templateName.includes('interface')) { templateVariables = { name: 'User', description: 'Interface defining the structure of user objects', file: 'src/app/interfaces/user.interface.ts', type: 'interface', // Interface properties properties: [ { name: 'id', type: 'string', description: 'Unique identifier for the user', optional: false }, { name: 'email', type: 'string', description: 'User email address', optional: false }, { name: 'name', type: 'string', description: 'Full name of the user', optional: false }, { name: 'avatar', type: 'string', description: 'URL to user avatar image', optional: true }, { name: 'role', type: 'UserRole', description: 'User role permissions', optional: true } ], // Interface methods (if any) methods: [], // Index signatures indexSignatures: [] }; } else { // Generic data for other templates (directive, pipe, guard, etc.) templateVariables = { name: 'ExampleItem', description: 'A sample item for demonstration purposes', file: 'src/app/example.ts', type: 'class', // Basic properties that most templates would have methods: [ { name: 'ngOnInit', type: 'void', description: 'Lifecycle hook', args: [], returnType: 'void' } ], properties: [ { name: 'isActive', type: 'boolean', description: 'Active state', defaultValue: 'false' } ] }; } return { templateVariables, additionalContext }; }