feat(compiler-cli): lower metadata useValue
and data
literal fields (#18905)
With this commit the compiler will "lower" expressions into exported variables for values the compiler does not need to know statically in order to be able to generate a factory. For example: ``` providers: [{provider: 'token', useValue: calculated()}] ``` produced an error as the expression `calculated()` is not supported by the compiler because `calculated` is not a [known function](https://angular.io/guide/metadata#annotationsdecorators) With this commit this is rewritten, during emit of the .js file, into something like: ``` export var ɵ0 = calculated(); ... provdiers: [{provider: 'token', useValue: ɵ0}] ``` The compiler then will now generate a reference to the exported `ɵ0` instead of failing to evaluate `calculated()`. PR Close #18905
This commit is contained in:

committed by
Jason Aden

parent
2f2d5f35bd
commit
c685cc2f0a
@ -284,7 +284,9 @@ export class Evaluator {
|
||||
error = propertyValue;
|
||||
return true; // Stop the forEachChild.
|
||||
} else {
|
||||
obj[<string>propertyName] = propertyValue;
|
||||
obj[<string>propertyName] = isPropertyAssignment(assignment) ?
|
||||
recordEntry(propertyValue, assignment.initializer) :
|
||||
propertyValue;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user