UNPKG

@angular/compiler-cli

Version:
58 lines (57 loc) 2.67 kB
/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ import { ParseError, ParseSourceFile, R3TargetBinder, SchemaMetadata, TmplAstNode } from '@angular/compiler'; import ts from 'typescript'; import { Reference } from '../../imports'; import { PipeMeta } from '../../metadata'; import { ClassDeclaration } from '../../reflection'; import { SourceMapping, TypeCheckableDirectiveMeta } from './api'; /** Contextuable data for type checking the template of a component. */ export interface TemplateContext { /** AST nodes representing the template. */ nodes: TmplAstNode[]; /** Describes the origin of the template text. Used for mapping errors back. */ sourceMapping: SourceMapping; /** `ParseSourceFile` associated with the template. */ file: ParseSourceFile; /** Errors produced while parsing the template. */ parseErrors: ParseError[] | null; /** Pipes available within the template. */ pipes: Map<string, PipeMeta>; /** Whether the template preserves whitespaces. */ preserveWhitespaces: boolean; } /** * A currently pending type checking operation, into which templates for type-checking can be * registered. */ export interface TypeCheckContext { /** * Register a directive to be potentially be type-checked. * * Directives registered via `addDIrective` are available for checking, but might be skipped if * checking of that class is not required. This can happen for a few reasons, including if it was * previously checked and the prior results are still valid. * * @param ref a `Reference` to the directive class which yielded this template. * @param binder an `R3TargetBinder` which encapsulates the scope of this template, including all * available directives. * @param schemas Schemas that will apply when checking the directive. * @param templateContext Contextual information necessary for checking the template. * Only relevant for component classes. * @param isStandalone a boolean indicating whether the directive is standalone. */ addDirective(ref: Reference<ClassDeclaration<ts.ClassDeclaration>>, binder: R3TargetBinder<TypeCheckableDirectiveMeta>, schemas: SchemaMetadata[], templateContext: TemplateContext | null, isStandalone: boolean): void; } /** * Interface to trigger generation of type-checking code for a program given a new * `TypeCheckContext`. */ export interface ProgramTypeCheckAdapter { typeCheck(sf: ts.SourceFile, ctx: TypeCheckContext): void; }