diff --git a/packages/compiler-cli/linker/src/file_linker/partial_linkers/partial_component_linker_1.ts b/packages/compiler-cli/linker/src/file_linker/partial_linkers/partial_component_linker_1.ts index 0dafc02d48..6f5c9fa4b0 100644 --- a/packages/compiler-cli/linker/src/file_linker/partial_linkers/partial_component_linker_1.ts +++ b/packages/compiler-cli/linker/src/file_linker/partial_linkers/partial_component_linker_1.ts @@ -38,11 +38,7 @@ export class PartialComponentLinkerVersion1 implements PartialLinke export function toR3ComponentMeta( metaObj: AstObject, code: string, sourceUrl: string, options: LinkerOptions): R3ComponentMetadata { - let interpolation = DEFAULT_INTERPOLATION_CONFIG; - if (metaObj.has('interpolation')) { - interpolation = InterpolationConfig.fromArray( - metaObj.getArray('interpolation').map(entry => entry.getString()) as [string, string]); - } + const interpolation = parseInterpolationConfig(metaObj); const templateObj = metaObj.getObject('template'); const templateSource = templateObj.getValue('source'); const range = getTemplateRange(templateSource, code); @@ -130,6 +126,25 @@ export function toR3ComponentMeta( }; } +/** + * Extract an `InterpolationConfig` from the component declaration. + */ +function parseInterpolationConfig( + metaObj: AstObject): 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. */