fix(tsc-wrapped): resolve short-hand literal values to locals (#16873)
Fixes: #16872
This commit is contained in:
parent
98849de127
commit
11c10b2ab8
|
@ -233,6 +233,15 @@ export class Evaluator {
|
|||
return !t.options.verboseInvalidExpression && isMetadataError(value);
|
||||
}
|
||||
|
||||
const resolveName = (name: string): MetadataValue => {
|
||||
const reference = this.symbols.resolve(name);
|
||||
if (reference === undefined) {
|
||||
// Encode as a global reference. StaticReflector will check the reference.
|
||||
return recordEntry({__symbolic: 'reference', name}, node);
|
||||
}
|
||||
return reference;
|
||||
};
|
||||
|
||||
switch (node.kind) {
|
||||
case ts.SyntaxKind.ObjectLiteralExpression:
|
||||
let obj: {[name: string]: any} = {};
|
||||
|
@ -253,7 +262,7 @@ export class Evaluator {
|
|||
}
|
||||
const propertyValue = isPropertyAssignment(assignment) ?
|
||||
this.evaluateNode(assignment.initializer) :
|
||||
{__symbolic: 'reference', name: propertyName};
|
||||
resolveName(propertyName);
|
||||
if (isFoldableError(propertyValue)) {
|
||||
error = propertyValue;
|
||||
return true; // Stop the forEachChild.
|
||||
|
@ -384,12 +393,7 @@ export class Evaluator {
|
|||
case ts.SyntaxKind.Identifier:
|
||||
const identifier = <ts.Identifier>node;
|
||||
const name = identifier.text;
|
||||
const reference = this.symbols.resolve(name);
|
||||
if (reference === undefined) {
|
||||
// Encode as a global reference. StaticReflector will check the reference.
|
||||
return recordEntry({__symbolic: 'reference', name}, node);
|
||||
}
|
||||
return reference;
|
||||
return resolveName(name);
|
||||
case ts.SyntaxKind.TypeReference:
|
||||
const typeReferenceNode = <ts.TypeReferenceNode>node;
|
||||
const typeNameNode = typeReferenceNode.typeName;
|
||||
|
|
|
@ -721,6 +721,21 @@ describe('Collector', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('regerssion', () => {
|
||||
it('should be able to collect a short-hand property value', () => {
|
||||
const source = ts.createSourceFile(
|
||||
'', `
|
||||
const children = { f1: 1 };
|
||||
export const r = [
|
||||
{path: ':locale', children}
|
||||
];
|
||||
`,
|
||||
ts.ScriptTarget.Latest, true);
|
||||
const metadata = collector.getMetadata(source);
|
||||
expect(metadata.metadata).toEqual({r: [{path: ':locale', children: {f1: 1}}]});
|
||||
});
|
||||
});
|
||||
|
||||
function override(fileName: string, content: string) {
|
||||
host.overrideFile(fileName, content);
|
||||
host.addFile(fileName);
|
||||
|
|
Loading…
Reference in New Issue