refactor(compiler): move ParsedTemplate
interface to compiler (#38594)
Previously this interface was mostly stored in compiler-cli, but it contains some properties that would be useful for compiling the "declare component" prelink code. This commit moves some of the interface over to the compiler package so that it can be referenced there without creating a circular dependency between the compiler and compiler-cli. PR Close #38594
This commit is contained in:

committed by
atscott

parent
4007422cc6
commit
687477279b
@ -99,7 +99,7 @@ export {Identifiers as R3Identifiers} from './render3/r3_identifiers';
|
||||
export {R3DependencyMetadata, R3ResolvedDependencyType, compileFactoryFunction, R3FactoryMetadata, R3FactoryTarget} from './render3/r3_factory';
|
||||
export {compileInjector, compileNgModule, R3InjectorMetadata, R3NgModuleMetadata} from './render3/r3_module_compiler';
|
||||
export {compilePipeFromMetadata, R3PipeMetadata} from './render3/r3_pipe_compiler';
|
||||
export {makeBindingParser, parseTemplate, ParseTemplateOptions} from './render3/view/template';
|
||||
export {makeBindingParser, ParsedTemplate, parseTemplate, ParseTemplateOptions} from './render3/view/template';
|
||||
export {R3Reference} from './render3/util';
|
||||
export {compileComponentFromMetadata, compileDirectiveFromMetadata, parseHostBindings, ParsedHostBindings, verifyHostBindings} from './render3/view/compiler';
|
||||
export {publishFacade} from './jit_compiler_facade';
|
||||
|
@ -129,7 +129,7 @@ export class CompilerFacadeImpl implements CompilerFacade {
|
||||
const template = parseTemplate(
|
||||
facade.template, sourceMapUrl,
|
||||
{preserveWhitespaces: facade.preserveWhitespaces, interpolationConfig});
|
||||
if (template.errors !== undefined) {
|
||||
if (template.errors !== null) {
|
||||
const errors = template.errors.map(err => err.toString()).join(', ');
|
||||
throw new Error(`Errors during JIT compilation of template for ${facade.name}: ${errors}`);
|
||||
}
|
||||
|
@ -2025,13 +2025,7 @@ export interface ParseTemplateOptions {
|
||||
* @param options options to modify how the template is parsed
|
||||
*/
|
||||
export function parseTemplate(
|
||||
template: string, templateUrl: string, options: ParseTemplateOptions = {}): {
|
||||
errors?: ParseError[],
|
||||
nodes: t.Node[],
|
||||
styleUrls: string[],
|
||||
styles: string[],
|
||||
ngContentSelectors: string[]
|
||||
} {
|
||||
template: string, templateUrl: string, options: ParseTemplateOptions = {}): ParsedTemplate {
|
||||
const {interpolationConfig, preserveWhitespaces, enableI18nLegacyMessageIdFormat} = options;
|
||||
const bindingParser = makeBindingParser(interpolationConfig);
|
||||
const htmlParser = new HtmlParser();
|
||||
@ -2041,6 +2035,9 @@ export function parseTemplate(
|
||||
|
||||
if (parseResult.errors && parseResult.errors.length > 0) {
|
||||
return {
|
||||
interpolationConfig,
|
||||
preserveWhitespaces,
|
||||
template,
|
||||
errors: parseResult.errors,
|
||||
nodes: [],
|
||||
styleUrls: [],
|
||||
@ -2076,10 +2073,28 @@ export function parseTemplate(
|
||||
const {nodes, errors, styleUrls, styles, ngContentSelectors} =
|
||||
htmlAstToRender3Ast(rootNodes, bindingParser);
|
||||
if (errors && errors.length > 0) {
|
||||
return {errors, nodes: [], styleUrls: [], styles: [], ngContentSelectors: []};
|
||||
return {
|
||||
interpolationConfig,
|
||||
preserveWhitespaces,
|
||||
template,
|
||||
errors,
|
||||
nodes: [],
|
||||
styleUrls: [],
|
||||
styles: [],
|
||||
ngContentSelectors: []
|
||||
};
|
||||
}
|
||||
|
||||
return {nodes, styleUrls, styles, ngContentSelectors};
|
||||
return {
|
||||
interpolationConfig,
|
||||
preserveWhitespaces,
|
||||
errors: null,
|
||||
template,
|
||||
nodes,
|
||||
styleUrls,
|
||||
styles,
|
||||
ngContentSelectors
|
||||
};
|
||||
}
|
||||
|
||||
const elementRegistry = new DomElementSchemaRegistry();
|
||||
@ -2196,3 +2211,54 @@ function createClosureModeGuard(): o.BinaryOperatorExpr {
|
||||
.notIdentical(o.literal('undefined', o.STRING_TYPE))
|
||||
.and(o.variable(NG_I18N_CLOSURE_MODE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Information about the template which was extracted during parsing.
|
||||
*
|
||||
* This contains the actual parsed template as well as any metadata collected during its parsing,
|
||||
* some of which might be useful for re-parsing the template with different options.
|
||||
*/
|
||||
export interface ParsedTemplate {
|
||||
/**
|
||||
* Include whitespace nodes in the parsed output.
|
||||
*/
|
||||
preserveWhitespaces?: boolean;
|
||||
|
||||
/**
|
||||
* How to parse interpolation markers.
|
||||
*/
|
||||
interpolationConfig?: InterpolationConfig;
|
||||
|
||||
/**
|
||||
* The string contents of the template.
|
||||
*
|
||||
* This is the "logical" template string, after expansion of any escaped characters (for inline
|
||||
* templates). This may differ from the actual template bytes as they appear in the .ts file.
|
||||
*/
|
||||
template: string;
|
||||
|
||||
/**
|
||||
* Any errors from parsing the template the first time.
|
||||
*/
|
||||
errors: ParseError[]|null;
|
||||
|
||||
/**
|
||||
* The template AST, parsed from the template.
|
||||
*/
|
||||
nodes: t.Node[];
|
||||
|
||||
/**
|
||||
* Any styleUrls extracted from the metadata.
|
||||
*/
|
||||
styleUrls: string[];
|
||||
|
||||
/**
|
||||
* Any inline styles extracted from the metadata.
|
||||
*/
|
||||
styles: string[];
|
||||
|
||||
/**
|
||||
* Any ng-content selectors extracted from the template.
|
||||
*/
|
||||
ngContentSelectors: string[];
|
||||
}
|
||||
|
Reference in New Issue
Block a user