refactor(compiler-cli): extract parsing of interpolation config (#39961)
Prior to this change the interpolation config value was cast to `[string, string]` without checking whether there really were two string values available. This commit extracts the logic of parsing the interpolation config into a separate function and adds a check that the array contains exactly two strings. PR Close #39961
This commit is contained in:
parent
c0bccc39db
commit
dd8a31838c
|
@ -38,11 +38,7 @@ export class PartialComponentLinkerVersion1<TExpression> implements PartialLinke
|
||||||
export function toR3ComponentMeta<TExpression>(
|
export function toR3ComponentMeta<TExpression>(
|
||||||
metaObj: AstObject<R3DeclareComponentMetadata, TExpression>, code: string, sourceUrl: string,
|
metaObj: AstObject<R3DeclareComponentMetadata, TExpression>, code: string, sourceUrl: string,
|
||||||
options: LinkerOptions): R3ComponentMetadata {
|
options: LinkerOptions): R3ComponentMetadata {
|
||||||
let interpolation = DEFAULT_INTERPOLATION_CONFIG;
|
const interpolation = parseInterpolationConfig(metaObj);
|
||||||
if (metaObj.has('interpolation')) {
|
|
||||||
interpolation = InterpolationConfig.fromArray(
|
|
||||||
metaObj.getArray('interpolation').map(entry => entry.getString()) as [string, string]);
|
|
||||||
}
|
|
||||||
const templateObj = metaObj.getObject('template');
|
const templateObj = metaObj.getObject('template');
|
||||||
const templateSource = templateObj.getValue('source');
|
const templateSource = templateObj.getValue('source');
|
||||||
const range = getTemplateRange(templateSource, code);
|
const range = getTemplateRange(templateSource, code);
|
||||||
|
@ -130,6 +126,25 @@ export function toR3ComponentMeta<TExpression>(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract an `InterpolationConfig` from the component declaration.
|
||||||
|
*/
|
||||||
|
function parseInterpolationConfig<TExpression>(
|
||||||
|
metaObj: AstObject<R3DeclareComponentMetadata, TExpression>): InterpolationConfig {
|
||||||
|
if (!metaObj.has('interpolation')) {
|
||||||
|
return DEFAULT_INTERPOLATION_CONFIG;
|
||||||
|
}
|
||||||
|
|
||||||
|
const interpolationExpr = metaObj.getValue('interpolation');
|
||||||
|
const values = interpolationExpr.getArray().map(entry => entry.getString());
|
||||||
|
if (values.length !== 2) {
|
||||||
|
throw new FatalLinkerError(
|
||||||
|
interpolationExpr.expression,
|
||||||
|
'Unsupported interpolation config, expected an array containing exactly two strings');
|
||||||
|
}
|
||||||
|
return InterpolationConfig.fromArray(values as [string, string]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines the `ViewEncapsulation` mode from the AST value's symbol name.
|
* Determines the `ViewEncapsulation` mode from the AST value's symbol name.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue