Skip to content

Commit

Permalink
Fix crash in decorator metadata calculation when serializing template…
Browse files Browse the repository at this point in the history
… literal type nodes (#39481)
  • Loading branch information
weswigham authored Jul 7, 2020
1 parent 62b4377 commit 4f37555
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/compiler/transformers/ts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1531,6 +1531,7 @@ namespace ts {
case SyntaxKind.LiteralType:
switch ((<LiteralTypeNode>node).literal.kind) {
case SyntaxKind.StringLiteral:
case SyntaxKind.NoSubstitutionTemplateLiteral:
return factory.createIdentifier("String");

case SyntaxKind.PrefixUnaryExpression:
Expand Down
31 changes: 31 additions & 0 deletions tests/baselines/reference/templateLiteralsAndDecoratorMetadata.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//// [templateLiteralsAndDecoratorMetadata.ts]
declare var format: any;
export class Greeter {
@format("Hello, %s")
greeting: `boss` | `employee` = `employee`; //template literals on this line cause the issue
}

//// [templateLiteralsAndDecoratorMetadata.js]
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
exports.__esModule = true;
exports.Greeter = void 0;
var Greeter = /** @class */ (function () {
function Greeter() {
this.greeting = "employee"; //template literals on this line cause the issue
}
__decorate([
format("Hello, %s"),
__metadata("design:type", String)
], Greeter.prototype, "greeting");
return Greeter;
}());
exports.Greeter = Greeter;
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
=== tests/cases/compiler/templateLiteralsAndDecoratorMetadata.ts ===
declare var format: any;
>format : Symbol(format, Decl(templateLiteralsAndDecoratorMetadata.ts, 0, 11))

export class Greeter {
>Greeter : Symbol(Greeter, Decl(templateLiteralsAndDecoratorMetadata.ts, 0, 24))

@format("Hello, %s")
>format : Symbol(format, Decl(templateLiteralsAndDecoratorMetadata.ts, 0, 11))

greeting: `boss` | `employee` = `employee`; //template literals on this line cause the issue
>greeting : Symbol(Greeter.greeting, Decl(templateLiteralsAndDecoratorMetadata.ts, 1, 22))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
=== tests/cases/compiler/templateLiteralsAndDecoratorMetadata.ts ===
declare var format: any;
>format : any

export class Greeter {
>Greeter : Greeter

@format("Hello, %s")
>format("Hello, %s") : any
>format : any
>"Hello, %s" : "Hello, %s"

greeting: `boss` | `employee` = `employee`; //template literals on this line cause the issue
>greeting : "boss" | "employee"
>`employee` : "employee"
}
7 changes: 7 additions & 0 deletions tests/cases/compiler/templateLiteralsAndDecoratorMetadata.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// @experimentalDecorators: true
// @emitDecoratorMetadata: true
declare var format: any;
export class Greeter {
@format("Hello, %s")
greeting: `boss` | `employee` = `employee`; //template literals on this line cause the issue
}

0 comments on commit 4f37555

Please sign in to comment.