refactor(compiler): use type guard rather than type cast (#33318)
The code will now fail if the `i18n` property is of the wrong type. PR Close #33318
This commit is contained in:
parent
03103d2d59
commit
58b3a51e64
|
@ -231,19 +231,23 @@ class HtmlAstToIvyAst implements html.Visitor {
|
|||
}
|
||||
|
||||
visitExpansion(expansion: html.Expansion): t.Icu|null {
|
||||
const meta = expansion.i18n as i18n.Message;
|
||||
// do not generate Icu in case it was created
|
||||
// outside of i18n block in a template
|
||||
if (!meta) {
|
||||
if (!expansion.i18n) {
|
||||
// do not generate Icu in case it was created
|
||||
// outside of i18n block in a template
|
||||
return null;
|
||||
}
|
||||
if (!isI18nRootNode(expansion.i18n)) {
|
||||
throw new Error(
|
||||
`Invalid type "${expansion.i18n.constructor}" for "i18n" property of ${expansion.sourceSpan.toString()}. Expected a "Message"`);
|
||||
}
|
||||
const message = expansion.i18n;
|
||||
const vars: {[name: string]: t.BoundText} = {};
|
||||
const placeholders: {[name: string]: t.Text | t.BoundText} = {};
|
||||
// extract VARs from ICUs - we process them separately while
|
||||
// assembling resulting message via goog.getMsg function, since
|
||||
// we need to pass them to top-level goog.getMsg call
|
||||
Object.keys(meta.placeholders).forEach(key => {
|
||||
const value = meta.placeholders[key];
|
||||
Object.keys(message.placeholders).forEach(key => {
|
||||
const value = message.placeholders[key];
|
||||
if (key.startsWith(I18N_ICU_VAR_PREFIX)) {
|
||||
const config = this.bindingParser.interpolationConfig;
|
||||
// ICU expression is a plain string, not wrapped into start
|
||||
|
@ -254,7 +258,7 @@ class HtmlAstToIvyAst implements html.Visitor {
|
|||
placeholders[key] = this._visitTextWithInterpolation(value, expansion.sourceSpan);
|
||||
}
|
||||
});
|
||||
return new t.Icu(vars, placeholders, expansion.sourceSpan, meta);
|
||||
return new t.Icu(vars, placeholders, expansion.sourceSpan, message);
|
||||
}
|
||||
|
||||
visitExpansionCase(expansionCase: html.ExpansionCase): null { return null; }
|
||||
|
|
Loading…
Reference in New Issue