Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 1x 1x 1x 1x 1x 226x 1028x 333x 695x 695x 695x 695x 302x 302x 142x 142x 30x 30x 30x 160x 160x 120x 120x 302x 695x | /* eslint-disable @typescript-eslint/no-explicit-any */ import type { R3ComponentMetadata, R3DirectiveDependencyMetadata, R3DirectiveMetadata, SelectorMatcher, } from '@angular/compiler'; import type { ImportedFile, Reference, } from '@angular/compiler-cli/src/ngtsc/imports'; import { Injectable } from 'static-injector'; import ts from 'typescript'; import * as t from '../../angular-internal/ast.type'; import { createCssSelector } from '../../angular-internal/template'; import { getAttrsForDirectiveMatching } from '../../angular-internal/util'; import type { DirectiveMetaFromLibrary, MetaFromLibrary } from '../type'; import type { MatchedDirective, MatchedMeta } from './type'; @Injectable() export class ComponentContext { constructor(private directiveMatcher: SelectorMatcher | undefined) {} matchDirective(node: t.Element): MatchedMeta[] { if (!this.directiveMatcher) { return []; } const name: string = node.name; const selector = createCssSelector( name, getAttrsForDirectiveMatching(node) ); const result: MatchedMeta[] = []; this.directiveMatcher.match( selector, ( selector, meta: { directive: R3DirectiveDependencyMetadata & { ref: Reference<ts.ClassDeclaration>; importedFile: ImportedFile; }; componentMeta: R3ComponentMetadata<any>; directiveMeta: R3DirectiveMetadata; libraryMeta: MetaFromLibrary; } ) => { let item: Partial<MatchedMeta>; const isComponent: boolean = !!meta.directive.isComponent; if (isComponent) { item = { isComponent, outputs: meta.directive.outputs, filePath: (meta.directive.importedFile as ts.SourceFile).fileName, selector: meta.directive.selector, className: meta.directive.ref.node.name!.getText(), listeners: Object.keys(meta.componentMeta?.host?.listeners || {}) || [], inputs: meta.directive.inputs, }; if (meta.libraryMeta?.isComponent) { item.exportPath = meta.libraryMeta.exportPath; item.listeners = meta.libraryMeta.listeners; item.properties = meta.libraryMeta.properties; } } else { item = { isComponent, listeners: Object.keys(meta.directiveMeta?.host?.listeners || {}) || [], properties: Object.keys(meta.directiveMeta?.host?.properties || {}) || [], inputs: meta.directive.inputs, outputs: meta.directive.outputs, }; if (meta.libraryMeta && !meta.libraryMeta.isComponent) { (item as MatchedDirective).listeners = ( meta.libraryMeta as DirectiveMetaFromLibrary ).listeners!; (item as MatchedDirective).properties = ( meta.libraryMeta as DirectiveMetaFromLibrary ).properties!; } } result.push(item as MatchedMeta); } ); return result; } } |