diff --git a/microsoft/typescript-go b/microsoft/typescript-go index 20bf4fc90..51d6a1131 160000 --- a/microsoft/typescript-go +++ b/microsoft/typescript-go @@ -1 +1 @@ -Subproject commit 20bf4fc90d3d38016f07fda1fb972eedc715bb02 +Subproject commit 51d6a11318b737067b21596e0987cbbb79c9bf69 diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index c2e020e0a..563e3a26d 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -11001,7 +11001,6 @@ func (node *SourceFile) GetOrCreateToken( ) *TokenNode { node.tokenCacheMu.Lock() defer node.tokenCacheMu.Unlock() - loc := core.NewTextRange(pos, end) if node.tokenCache == nil { node.tokenCache = make(map[core.TextRange]*Node) @@ -11014,7 +11013,9 @@ func (node *SourceFile) GetOrCreateToken( } return token } - + if parent.Flags&NodeFlagsReparsed != 0 { + panic(fmt.Sprintf("Cannot create token from reparsed node of kind %v", parent.Kind)) + } token := createToken(kind, node, pos, end, flags) token.Loc = loc token.Parent = parent diff --git a/pkg/astnav/tokens.go b/pkg/astnav/tokens.go index 1feb4bd84..81e3087b1 100644 --- a/pkg/astnav/tokens.go +++ b/pkg/astnav/tokens.go @@ -65,10 +65,6 @@ func getTokenAtPosition( // `left` tracks the lower boundary of the node/token that could be returned, // and is eventually the scanner's start position, if the scanner is used. left := 0 - // `allowReparsed` is set when we're navigating inside an AsExpression or - // SatisfiesExpression, which allows visiting their reparsed children to reach - // the actual identifier from JSDoc type assertions. - allowReparsed := false testNode := func(node *ast.Node) int { if node.Kind != ast.KindEndOfFile && node.End() == position && includePrecedingTokenAtEndPosition != nil { @@ -92,15 +88,8 @@ func getTokenAtPosition( // We can't abort visiting children, so once a match is found, we set `next` // and do nothing on subsequent visits. if node != nil && next == nil { - // Skip reparsed nodes unless: - // 1. The node itself is AsExpression or SatisfiesExpression, OR - // 2. We're already inside an AsExpression or SatisfiesExpression (allowReparsed=true) - // These are special cases where reparsed nodes from JSDoc type assertions - // should still be navigable to reach identifiers. - isSpecialReparsed := node.Flags&ast.NodeFlagsReparsed != 0 && - (node.Kind == ast.KindAsExpression || node.Kind == ast.KindSatisfiesExpression) - - if node.Flags&ast.NodeFlagsReparsed == 0 || isSpecialReparsed || allowReparsed { + // Skip reparsed nodes + if node.Flags&ast.NodeFlagsReparsed == 0 { result := testNode(node) switch result { case -1: @@ -211,11 +200,6 @@ func getTokenAtPosition( current = next left = current.Pos() next = nil - // When navigating into AsExpression or SatisfiesExpression, allow visiting - // their reparsed children to reach identifiers from JSDoc type assertions. - if current.Kind == ast.KindAsExpression || current.Kind == ast.KindSatisfiesExpression { - allowReparsed = true - } } } diff --git a/pkg/checker/checker.go b/pkg/checker/checker.go index c0468b704..78eaacf23 100644 --- a/pkg/checker/checker.go +++ b/pkg/checker/checker.go @@ -10408,18 +10408,15 @@ func (c *Checker) getInstantiationExpressionType(exprType *Type, node *ast.Node) } func (c *Checker) checkSatisfiesExpression(node *ast.Node) *Type { - c.checkSourceElement(node.Type()) - return c.checkSatisfiesExpressionWorker(node.Expression(), node.Type(), CheckModeNormal) -} - -func (c *Checker) checkSatisfiesExpressionWorker(expression *ast.Node, target *ast.Node, checkMode CheckMode) *Type { - exprType := c.checkExpressionEx(expression, checkMode) - targetType := c.getTypeFromTypeNode(target) + typeNode := node.Type() + c.checkSourceElement(typeNode) + exprType := c.checkExpression(node.Expression()) + targetType := c.getTypeFromTypeNode(typeNode) if c.isErrorType(targetType) { return targetType } - errorNode := ast.FindAncestor(target.Parent, func(n *ast.Node) bool { return ast.IsSatisfiesExpression(n) }) - c.checkTypeAssignableToAndOptionallyElaborate(exprType, targetType, errorNode, expression, diagnostics.Type_0_does_not_satisfy_the_expected_type_1, nil) + errorNode := core.IfElse(typeNode.Flags&ast.NodeFlagsReparsed != 0, typeNode, node) + c.checkTypeAssignableToAndOptionallyElaborate(exprType, targetType, errorNode, node.Expression(), diagnostics.Type_0_does_not_satisfy_the_expected_type_1, nil) return exprType } @@ -11371,21 +11368,13 @@ func (c *Checker) isOptionalPropertyDeclaration(node *ast.Node) bool { } func (c *Checker) isPropertyDeclaredInAncestorClass(prop *ast.Symbol) bool { - if prop.Parent.Flags&ast.SymbolFlagsClass == 0 { - return false - } - classType := c.getDeclaredTypeOfSymbol(prop.Parent) - for { - baseTypes := c.getBaseTypes(classType) - if len(baseTypes) == 0 { - return false - } - classType = baseTypes[0] - superProperty := c.getPropertyOfType(classType, prop.Name) - if superProperty != nil && superProperty.ValueDeclaration != nil { - return true + if prop.Parent.Flags&ast.SymbolFlagsClass != 0 { + if baseTypes := c.getBaseTypes(c.getDeclaredTypeOfSymbol(prop.Parent)); len(baseTypes) != 0 { + superProperty := c.getPropertyOfType(baseTypes[0], prop.Name) + return superProperty != nil && superProperty.ValueDeclaration != nil } } + return false } /** @@ -11935,14 +11924,15 @@ func (c *Checker) checkAssertion(node *ast.Node, checkMode CheckMode) *Type { } func (c *Checker) checkAssertionDeferred(node *ast.Node) { + typeNode := node.Type() exprType := c.getRegularTypeOfObjectLiteral(c.getBaseTypeOfLiteralType(c.assertionLinks.Get(node).exprType)) - targetType := c.getTypeFromTypeNode(node.Type()) + targetType := c.getTypeFromTypeNode(typeNode) if !c.isErrorType(targetType) { widenedType := c.getWidenedType(exprType) if !c.isTypeComparableTo(targetType, widenedType) { errNode := node - if node.Flags&ast.NodeFlagsReparsed != 0 { - errNode = node.Type() + if typeNode.Flags&ast.NodeFlagsReparsed != 0 { + errNode = typeNode } c.checkTypeComparableTo(exprType, targetType, errNode, diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first) } diff --git a/pkg/fourslash/_scripts/updateFailing.mts b/pkg/fourslash/_scripts/updateFailing.mts index f9a98379e..1deee3618 100644 --- a/pkg/fourslash/_scripts/updateFailing.mts +++ b/pkg/fourslash/_scripts/updateFailing.mts @@ -1,43 +1,137 @@ import * as cp from "child_process"; import * as fs from "fs"; import path from "path"; +import * as readline from "readline"; import which from "which"; const failingTestsPath = path.join(import.meta.dirname, "failingTests.txt"); const crashingTestsPath = path.join(import.meta.dirname, "crashingTests.txt"); -function main() { +interface TestEvent { + Time?: string; + Action: string; + Package?: string; + Test?: string; + Output?: string; + Elapsed?: number; +} + +async function main() { const go = which.sync("go"); - let testOutput: string; + + let testProcess: cp.ChildProcess; try { // Run tests with TSGO_FOURSLASH_IGNORE_FAILING=1 to run all tests including those in failingTests.txt - testOutput = cp.execFileSync(go, ["test", "-v", "./internal/fourslash/tests/gen"], { - encoding: "utf-8", + testProcess = cp.spawn(go, ["test", "-json", "./internal/fourslash/tests/gen"], { + stdio: ["ignore", "pipe", "pipe"], env: { ...process.env, TSGO_FOURSLASH_IGNORE_FAILING: "1" }, }); } catch (error) { - testOutput = (error as { stdout: string; }).stdout as string; + throw new Error("Failed to spawn test process: " + error); } - const panicRegex = /^panic/m; - if (panicRegex.test(testOutput)) { - throw new Error("Unrecovered panic detected in tests\n" + testOutput); + + if (!testProcess.stdout || !testProcess.stderr) { + throw new Error("Test process stdout or stderr is null"); } - const failRegex = /--- FAIL: ([\S]+)/gm; + const failingTests: string[] = []; - const crashingRegex = /^=== (?:NAME|CONT) ([\S]+)\n.*InternalError.*$/gm; const crashingTests: string[] = []; - let match; + const testOutputs = new Map(); + const allOutputs: string[] = []; + let hadPanic = false; - while ((match = failRegex.exec(testOutput)) !== null) { - failingTests.push(match[1]); - } - while ((match = crashingRegex.exec(testOutput)) !== null) { - crashingTests.push(match[1]); - } + const rl = readline.createInterface({ + input: testProcess.stdout, + crlfDelay: Infinity, + }); + + rl.on("line", line => { + try { + const event: TestEvent = JSON.parse(line); + + // Collect output for each test + if (event.Action === "output" && event.Output) { + allOutputs.push(event.Output); + if (event.Test) { + if (!testOutputs.has(event.Test)) { + testOutputs.set(event.Test, []); + } + testOutputs.get(event.Test)!.push(event.Output); + } + + // Check for panics + if (/^panic/m.test(event.Output)) { + hadPanic = true; + } + } + + // Process failed tests + if (event.Action === "fail" && event.Test) { + const outputs = testOutputs.get(event.Test) || []; - fs.writeFileSync(failingTestsPath, failingTests.sort((a, b) => a.localeCompare(b, "en-US")).join("\n") + "\n", "utf-8"); - fs.writeFileSync(crashingTestsPath, crashingTests.sort((a, b) => a.localeCompare(b, "en-US")).join("\n") + "\n", "utf-8"); + // Check if this is a crashing test (contains InternalError) + const hasCrash = outputs.some(line => line.includes("InternalError")); + if (hasCrash) { + crashingTests.push(event.Test); + } + + // A test is only considered a baseline-only failure if ALL error messages + // are baseline-related. Any non-baseline error message means it's a real failure. + const baselineMessagePatterns = [ + /^\s*baseline\.go:\d+: the baseline file .* has changed\./, + /^\s*baseline\.go:\d+: new baseline created at /, + /^\s*baseline\.go:\d+: the baseline file .* does not exist in the TypeScript submodule/, + /^\s*baseline\.go:\d+: the baseline file .* does not match the reference in the TypeScript submodule/, + ]; + + // Check each output line that looks like an error message + // Error messages from Go tests typically contain ".go:" with a line number + const errorLines = outputs.filter(line => /^\s*\w+\.go:\d+:/.test(line)); + + // If there are no error lines, it's a real failure. + // If all error lines match baseline patterns, it's a baseline-only failure + const isBaselineOnlyFailure = errorLines.length > 0 && + errorLines.every(line => baselineMessagePatterns.some(pattern => pattern.test(line))); + + if (!isBaselineOnlyFailure) { + failingTests.push(event.Test); + } + } + } + catch (e) { + // Not JSON, possibly stderr or other output - ignore + } + }); + + testProcess.stderr.on("data", data => { + // Check stderr for panics too + const output = data.toString(); + allOutputs.push(output); + if (/^panic/m.test(output)) { + hadPanic = true; + } + }); + + await new Promise((resolve, reject) => { + testProcess.on("close", code => { + if (hadPanic) { + reject(new Error("Unrecovered panic detected in tests\n" + allOutputs.join(""))); + return; + } + + fs.writeFileSync(failingTestsPath, failingTests.sort((a, b) => a.localeCompare(b, "en-US")).join("\n") + "\n", "utf-8"); + fs.writeFileSync(crashingTestsPath, crashingTests.sort((a, b) => a.localeCompare(b, "en-US")).join("\n") + "\n", "utf-8"); + resolve(); + }); + + testProcess.on("error", error => { + reject(error); + }); + }); } -main(); +main().catch(error => { + console.error("Error:", error); + process.exit(1); +}); diff --git a/pkg/ls/folding.go b/pkg/ls/folding.go index 8d435c459..4f648338a 100644 --- a/pkg/ls/folding.go +++ b/pkg/ls/folding.go @@ -109,10 +109,7 @@ func (l *LanguageService) addRegionOutliningSpans(sourceFile *ast.SourceFile) [] } func visitNode(ctx context.Context, n *ast.Node, depthRemaining int, sourceFile *ast.SourceFile, l *LanguageService) []*lsproto.FoldingRange { - if depthRemaining == 0 { - return nil - } - if ctx.Err() != nil { + if n.Flags&ast.NodeFlagsReparsed != 0 || depthRemaining == 0 || ctx.Err() != nil { return nil } foldingRange := make([]*lsproto.FoldingRange, 0, 40) diff --git a/pkg/ls/hover.go b/pkg/ls/hover.go index 057f3dc35..4710304b8 100644 --- a/pkg/ls/hover.go +++ b/pkg/ls/hover.go @@ -109,8 +109,24 @@ func (l *LanguageService) getDocumentationFromDeclaration(c *checker.Checker, de } comments := tag.Comments() if tag.Kind == ast.KindJSDocTag && tag.TagName().Text() == "example" { - b.WriteString("\n") commentText := strings.TrimRight(getCommentText(comments), " \t\r\n") + if strings.HasPrefix(commentText, "") { + if captionEnd := strings.Index(commentText, ""); captionEnd > 0 { + b.WriteString(" — ") + b.WriteString(commentText[len(""):captionEnd]) + commentText = commentText[captionEnd+len(""):] + // Trim leading blank lines from commentText + for { + s1 := strings.TrimLeft(commentText, " \t") + s2 := strings.TrimLeft(s1, "\r\n") + if len(s1) == len(s2) { + break + } + commentText = s2 + } + } + } + b.WriteString("\n") if len(commentText) > 6 && strings.HasPrefix(commentText, "```") && strings.HasSuffix(commentText, "```") && strings.Contains(commentText, "\n") { b.WriteString(commentText) b.WriteString("\n") diff --git a/pkg/parser/parser.go b/pkg/parser/parser.go index dd0675503..007dc5869 100644 --- a/pkg/parser/parser.go +++ b/pkg/parser/parser.go @@ -207,7 +207,7 @@ func ParseIsolatedEntityName(text string) *ast.EntityName { func (p *Parser) initializeState(opts ast.SourceFileParseOptions, sourceText string, scriptKind core.ScriptKind) { if scriptKind == core.ScriptKindUnknown { - panic("ScriptKind must be specified when parsing source files.") + panic("ScriptKind must be specified when parsing source file: " + opts.FileName) } if p.scanner == nil { diff --git a/pkg/parser/reparser.go b/pkg/parser/reparser.go index 153af1224..4456ad87d 100644 --- a/pkg/parser/reparser.go +++ b/pkg/parser/reparser.go @@ -314,7 +314,7 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) if parent.Expression() != nil && tag.TypeExpression() != nil { parent.AsMutable().SetExpression(p.makeNewCast( p.factory.DeepCloneReparse(tag.TypeExpression().Type()), - p.factory.DeepCloneReparse(parent.Expression()), + parent.Expression(), true /*isAssertion*/)) p.finishMutatedNode(parent) return @@ -335,7 +335,7 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) if declaration.Initializer() != nil && tag.TypeExpression() != nil { declaration.AsMutable().SetInitializer(p.makeNewCast( p.factory.DeepCloneReparse(tag.TypeExpression().Type()), - p.factory.DeepCloneReparse(declaration.Initializer()), + declaration.Initializer(), false /*isAssertion*/)) p.finishMutatedNode(declaration) break @@ -348,7 +348,7 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) if parent.Initializer() != nil && tag.TypeExpression() != nil { parent.AsMutable().SetInitializer(p.makeNewCast( p.factory.DeepCloneReparse(tag.TypeExpression().Type()), - p.factory.DeepCloneReparse(parent.Initializer()), + parent.Initializer(), false /*isAssertion*/)) p.finishMutatedNode(parent) } @@ -357,7 +357,7 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) if shorthand.ObjectAssignmentInitializer != nil && tag.AsJSDocSatisfiesTag().TypeExpression != nil { shorthand.ObjectAssignmentInitializer = p.makeNewCast( p.factory.DeepCloneReparse(tag.AsJSDocSatisfiesTag().TypeExpression.Type()), - p.factory.DeepCloneReparse(shorthand.ObjectAssignmentInitializer), + shorthand.ObjectAssignmentInitializer, false /*isAssertion*/) p.finishMutatedNode(parent) } @@ -366,7 +366,7 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) if parent.Expression() != nil && tag.TypeExpression() != nil { parent.AsMutable().SetExpression(p.makeNewCast( p.factory.DeepCloneReparse(tag.TypeExpression().Type()), - p.factory.DeepCloneReparse(parent.Expression()), + parent.Expression(), false /*isAssertion*/)) p.finishMutatedNode(parent) } @@ -376,7 +376,7 @@ func (p *Parser) reparseHosted(tag *ast.Node, parent *ast.Node, jsDoc *ast.Node) if kind := ast.GetAssignmentDeclarationKind(bin); kind != ast.JSDeclarationKindNone && tag.TypeExpression() != nil { bin.Right = p.makeNewCast( p.factory.DeepCloneReparse(tag.TypeExpression().Type()), - p.factory.DeepCloneReparse(bin.Right), + bin.Right, false /*isAssertion*/) p.finishMutatedNode(bin.AsNode()) } @@ -602,7 +602,7 @@ func (p *Parser) makeNewCast(t *ast.TypeNode, e *ast.Node, isAssertion bool) *as } else { assert = p.factory.NewSatisfiesExpression(e, t) } - p.finishReparsedNode(assert, e) + p.finishNodeWithEnd(assert, e.Pos(), e.End()) return assert } diff --git a/pkg/testutil/tsbaseline/type_symbol_baseline.go b/pkg/testutil/tsbaseline/type_symbol_baseline.go index d104d3486..ee28590fe 100644 --- a/pkg/testutil/tsbaseline/type_symbol_baseline.go +++ b/pkg/testutil/tsbaseline/type_symbol_baseline.go @@ -354,6 +354,7 @@ func (walker *typeWriterWalker) writeTypeOrSymbol(node *ast.Node, isSymbolWalk b // Don't try to get the type of something that's already a type. // Exception for `T` in `type T = something` because that may evaluate to some interesting type. if ast.IsPartOfTypeNode(node) || + (node.Kind == ast.KindAsExpression || node.Kind == ast.KindSatisfiesExpression) && node.Type().Flags&ast.NodeFlagsReparsed != 0 || ast.IsIdentifier(node) && (ast.GetMeaningFromDeclaration(node.Parent)&ast.SemanticMeaningValue) == 0 && !(ast.IsTypeOrJSTypeAliasDeclaration(node.Parent) && node == node.Parent.Name()) { diff --git a/pkg/transformers/tstransforms/legacydecorators.go b/pkg/transformers/tstransforms/legacydecorators.go index d396fa6a5..8b522c69e 100644 --- a/pkg/transformers/tstransforms/legacydecorators.go +++ b/pkg/transformers/tstransforms/legacydecorators.go @@ -109,10 +109,7 @@ func moveRangePastModifiers(node *ast.Node) core.TextRange { var lastModifier *ast.Node if ast.CanHaveModifiers(node) { - nodes := node.ModifierNodes() - if nodes != nil { - lastModifier = nodes[0] - } + lastModifier = core.LastOrNil(node.ModifierNodes()) } if lastModifier != nil && !ast.PositionIsSynthesized(lastModifier.End()) { @@ -710,7 +707,7 @@ func getAllDecoratorsOfAccessors(accessor *ast.Node, parent *ast.ClassDeclaratio var firstAccessorWithDecorators *ast.Node if ast.HasDecorators(decls.FirstAccessor) { firstAccessorWithDecorators = decls.FirstAccessor - } else if ast.HasDecorators(decls.SecondAccessor) { + } else if decls.SecondAccessor != nil && ast.HasDecorators(decls.SecondAccessor) { firstAccessorWithDecorators = decls.SecondAccessor } diff --git a/testdata/baselines/reference/compiler/checkInheritedProperty.errors.txt b/testdata/baselines/reference/compiler/checkInheritedProperty.errors.txt new file mode 100644 index 000000000..86c262303 --- /dev/null +++ b/testdata/baselines/reference/compiler/checkInheritedProperty.errors.txt @@ -0,0 +1,17 @@ +checkInheritedProperty.ts(7,14): error TS2729: Property 'b' is used before its initialization. + + +==== checkInheritedProperty.ts (1 errors) ==== + class Base { + } + + declare const BaseFactory: new() => Base & { c: string } + + class Derived extends BaseFactory { + a = this.b + ~ +!!! error TS2729: Property 'b' is used before its initialization. +!!! related TS2728 checkInheritedProperty.ts:8:5: 'b' is declared here. + b = "abc" + } + \ No newline at end of file diff --git a/testdata/baselines/reference/compiler/checkInheritedProperty.symbols b/testdata/baselines/reference/compiler/checkInheritedProperty.symbols new file mode 100644 index 000000000..c977d078a --- /dev/null +++ b/testdata/baselines/reference/compiler/checkInheritedProperty.symbols @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/checkInheritedProperty.ts] //// + +=== checkInheritedProperty.ts === +class Base { +>Base : Symbol(Base, Decl(checkInheritedProperty.ts, 0, 0)) +} + +declare const BaseFactory: new() => Base & { c: string } +>BaseFactory : Symbol(BaseFactory, Decl(checkInheritedProperty.ts, 3, 13)) +>Base : Symbol(Base, Decl(checkInheritedProperty.ts, 0, 0)) +>c : Symbol(c, Decl(checkInheritedProperty.ts, 3, 44)) + +class Derived extends BaseFactory { +>Derived : Symbol(Derived, Decl(checkInheritedProperty.ts, 3, 56)) +>BaseFactory : Symbol(BaseFactory, Decl(checkInheritedProperty.ts, 3, 13)) + + a = this.b +>a : Symbol(Derived.a, Decl(checkInheritedProperty.ts, 5, 35)) +>this.b : Symbol(Derived.b, Decl(checkInheritedProperty.ts, 6, 14)) +>this : Symbol(Derived, Decl(checkInheritedProperty.ts, 3, 56)) +>b : Symbol(Derived.b, Decl(checkInheritedProperty.ts, 6, 14)) + + b = "abc" +>b : Symbol(Derived.b, Decl(checkInheritedProperty.ts, 6, 14)) +} + diff --git a/testdata/baselines/reference/compiler/checkInheritedProperty.types b/testdata/baselines/reference/compiler/checkInheritedProperty.types new file mode 100644 index 000000000..086a9df10 --- /dev/null +++ b/testdata/baselines/reference/compiler/checkInheritedProperty.types @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/checkInheritedProperty.ts] //// + +=== checkInheritedProperty.ts === +class Base { +>Base : Base +} + +declare const BaseFactory: new() => Base & { c: string } +>BaseFactory : new () => Base & { c: string; } +>c : string + +class Derived extends BaseFactory { +>Derived : Derived +>BaseFactory : Base & { c: string; } + + a = this.b +>a : string +>this.b : string +>this : this +>b : string + + b = "abc" +>b : string +>"abc" : "abc" +} + diff --git a/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.js b/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.js new file mode 100644 index 000000000..a94a9f1ad --- /dev/null +++ b/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.js @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/legacyDecoratorClassWithoutModifiers.ts] //// + +//// [legacyDecoratorClassWithoutModifiers.ts] +// Test case for decorated class without modifiers +declare function classDec(target: any): any; + +@classDec +class C { +} + + +//// [legacyDecoratorClassWithoutModifiers.js] +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; +}; +let C = class C { +}; +C = __decorate([ + classDec +], C); diff --git a/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.symbols b/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.symbols new file mode 100644 index 000000000..c929783f2 --- /dev/null +++ b/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.symbols @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/legacyDecoratorClassWithoutModifiers.ts] //// + +=== legacyDecoratorClassWithoutModifiers.ts === +// Test case for decorated class without modifiers +declare function classDec(target: any): any; +>classDec : Symbol(classDec, Decl(legacyDecoratorClassWithoutModifiers.ts, 0, 0)) +>target : Symbol(target, Decl(legacyDecoratorClassWithoutModifiers.ts, 1, 26)) + +@classDec +>classDec : Symbol(classDec, Decl(legacyDecoratorClassWithoutModifiers.ts, 0, 0)) + +class C { +>C : Symbol(C, Decl(legacyDecoratorClassWithoutModifiers.ts, 1, 44)) +} + diff --git a/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.types b/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.types new file mode 100644 index 000000000..eee04d53c --- /dev/null +++ b/testdata/baselines/reference/compiler/legacyDecoratorClassWithoutModifiers.types @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/legacyDecoratorClassWithoutModifiers.ts] //// + +=== legacyDecoratorClassWithoutModifiers.ts === +// Test case for decorated class without modifiers +declare function classDec(target: any): any; +>classDec : (target: any) => any +>target : any + +@classDec +>classDec : (target: any) => any + +class C { +>C : C +} + diff --git a/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.js b/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.js new file mode 100644 index 000000000..008651498 --- /dev/null +++ b/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.js @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/legacyDecoratorsSingleAccessor.ts] //// + +//// [legacyDecoratorsSingleAccessor.ts] +declare function dec(target: any, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor; + +// Test case for single getter without setter +class C1 { + @dec get accessor() { return 1; } +} + +// Test case for single setter without getter +class C2 { + @dec set accessor(value: number) { } +} + + +//// [legacyDecoratorsSingleAccessor.js] +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; +}; +// Test case for single getter without setter +class C1 { + get accessor() { return 1; } +} +__decorate([ + dec +], C1.prototype, "accessor", null); +// Test case for single setter without getter +class C2 { + set accessor(value) { } +} +__decorate([ + dec +], C2.prototype, "accessor", null); diff --git a/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.symbols b/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.symbols new file mode 100644 index 000000000..c0903b099 --- /dev/null +++ b/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.symbols @@ -0,0 +1,30 @@ +//// [tests/cases/compiler/legacyDecoratorsSingleAccessor.ts] //// + +=== legacyDecoratorsSingleAccessor.ts === +declare function dec(target: any, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor; +>dec : Symbol(dec, Decl(legacyDecoratorsSingleAccessor.ts, 0, 0)) +>target : Symbol(target, Decl(legacyDecoratorsSingleAccessor.ts, 0, 21)) +>propertyKey : Symbol(propertyKey, Decl(legacyDecoratorsSingleAccessor.ts, 0, 33)) +>descriptor : Symbol(descriptor, Decl(legacyDecoratorsSingleAccessor.ts, 0, 54)) +>PropertyDescriptor : Symbol(PropertyDescriptor, Decl(lib.es5.d.ts, --, --)) +>PropertyDescriptor : Symbol(PropertyDescriptor, Decl(lib.es5.d.ts, --, --)) + +// Test case for single getter without setter +class C1 { +>C1 : Symbol(C1, Decl(legacyDecoratorsSingleAccessor.ts, 0, 107)) + + @dec get accessor() { return 1; } +>dec : Symbol(dec, Decl(legacyDecoratorsSingleAccessor.ts, 0, 0)) +>accessor : Symbol(C1.accessor, Decl(legacyDecoratorsSingleAccessor.ts, 3, 10)) +} + +// Test case for single setter without getter +class C2 { +>C2 : Symbol(C2, Decl(legacyDecoratorsSingleAccessor.ts, 5, 1)) + + @dec set accessor(value: number) { } +>dec : Symbol(dec, Decl(legacyDecoratorsSingleAccessor.ts, 0, 0)) +>accessor : Symbol(C2.accessor, Decl(legacyDecoratorsSingleAccessor.ts, 8, 10)) +>value : Symbol(value, Decl(legacyDecoratorsSingleAccessor.ts, 9, 22)) +} + diff --git a/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.types b/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.types new file mode 100644 index 000000000..45cee6028 --- /dev/null +++ b/testdata/baselines/reference/compiler/legacyDecoratorsSingleAccessor.types @@ -0,0 +1,29 @@ +//// [tests/cases/compiler/legacyDecoratorsSingleAccessor.ts] //// + +=== legacyDecoratorsSingleAccessor.ts === +declare function dec(target: any, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor; +>dec : (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor +>target : any +>propertyKey : string +>descriptor : PropertyDescriptor + +// Test case for single getter without setter +class C1 { +>C1 : C1 + + @dec get accessor() { return 1; } +>dec : (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor +>accessor : number +>1 : 1 +} + +// Test case for single setter without getter +class C2 { +>C2 : C2 + + @dec set accessor(value: number) { } +>dec : (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor +>accessor : number +>value : number +} + diff --git a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map index 35ba1cc7e..015c83826 100644 --- a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map +++ b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map @@ -1,3 +1,3 @@ //// [sourceMapValidationDecorators.js.map] -{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AAQA,IACM,OAAO,GADb,MACM,OAAO;IAIA,QAAQ;IAHjB,YAGS,QAAgB,EAIvB,GAAG,CAAW,EAAE;wBAJT,QAAQ;IAIE,CAClB;IAID,KAAK,GAAG;QACJ,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAAA,CAC3C;IAIO,CAAC,CAAS;IAIH,AAAP,MAAM,CAAC,EAAE,GAAW,EAAE,CAAC;IAEvB,EAAE,CAGR,CAAS,EAAE;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAGD,IACI,SAAS,GAAG;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAED,IAAI,SAAS,CAGX,SAAiB,EAAE;QACjB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAAA,CAC7B;CACJ,CAAA;AA/BG;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;oCAGtB;AAIO;IAFP,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;kCACL;AAMV;IACL,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;iCAGzB;AAGD;IADC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;IAMpB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;wCAJzB;AAbc;IAFd,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;yBACQ;AAvB7B,OAAO;IAFZ,eAAe;IACf,eAAe,CAAC,EAAE,CAAC;IAGb,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;IAGvB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;GAPxB,OAAO,CA4CZ"} -//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCmxldCBHcmVldGVyID0gY2xhc3MgR3JlZXRlciB7DQogICAgZ3JlZXRpbmc7DQogICAgY29uc3RydWN0b3IoZ3JlZXRpbmcsIC4uLmIpIHsNCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBncmVldCgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH0NCiAgICB4Ow0KICAgIHN0YXRpYyB4MSA9IDEwOw0KICAgIGZuKHgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZ3JlZXRpbmc7DQogICAgfQ0KICAgIGdldCBncmVldGluZ3MoKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdyZWV0aW5nOw0KICAgIH0NCiAgICBzZXQgZ3JlZXRpbmdzKGdyZWV0aW5ncykgew0KICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgIH0NCn07DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDQwKQ0KXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldCIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig1MCkNCl0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQpfX2RlY29yYXRlKFsNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImZuIiwgbnVsbCk7DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDgwKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig2MCkNCl0sIEdyZWV0ZXIsICJ4MSIsIHZvaWQgMCk7DQpHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgQ2xhc3NEZWNvcmF0b3IxLA0KICAgIENsYXNzRGVjb3JhdG9yMigxMCksDQogICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoMjApKSwNCiAgICBfX3BhcmFtKDEsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQpdLCBHcmVldGVyKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcFZhbGlkYXRpb25EZWNvcmF0b3JzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFRQSxJQUNNLE9BQU8sR0FEYixNQUNNLE9BQU87SUFJQSxRQUFRO0lBSGpCLFlBR1MsUUFBZ0IsRUFJdkIsR0FBRyxDQUFXLEVBQUU7d0JBSlQsUUFBUTtJQUlFLENBQ2xCO0lBSUQsS0FBSyxHQUFHO1FBQ0osT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFBQSxDQUMzQztJQUlPLENBQUMsQ0FBUztJQUlILEFBQVAsTUFBTSxDQUFDLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFFdkIsRUFBRSxDQUdSLENBQVMsRUFBRTtRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUFBLENBQ3hCO0lBR0QsSUFDSSxTQUFTLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFBQSxDQUN4QjtJQUVELElBQUksU0FBUyxDQUdYLFNBQWlCLEVBQUU7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFBQSxDQUM3QjtDQUNKLENBQUE7QUEvQkc7SUFGQyxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO29DQUd0QjtBQUlPO0lBRlAsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztrQ0FDTDtBQU1WO0lBQ0wsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO2lDQUd6QjtBQUdEO0lBREMsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztJQU1wQixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7d0NBSnpCO0FBYmM7SUFGZCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3lCQUNRO0FBdkI3QixPQUFPO0lBRlosZUFBZTtJQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFHYixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7SUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0dBUHhCLE9BQU8sQ0E0Q1oifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 +{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA,IAAM,OAAO,GAAb,MAAM,OAAO;IAIA,QAAQ;IAHjB,YAGS,QAAgB,EAIvB,GAAG,CAAW,EAAE;wBAJT,QAAQ;IAIE,CAClB;IAID,KAAK,GAAG;QACJ,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAAA,CAC3C;IAIO,CAAC,CAAS;IAIH,AAAP,MAAM,CAAC,EAAE,GAAW,EAAE,CAAC;IAEvB,EAAE,CAGR,CAAS,EAAE;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAID,IAAI,SAAS,GAAG;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAED,IAAI,SAAS,CAGX,SAAiB,EAAE;QACjB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAAA,CAC7B;CACJ,CAAA;AA/BG;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;oCAGtB;AAIO;IAFP,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;kCACL;AAMV;IACL,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;iCAGzB;AAID;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;IAMpB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;wCAJzB;AAbc;IAFd,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;yBACQ;AAvB7B,OAAO;IAFZ,eAAe;IACf,eAAe,CAAC,EAAE,CAAC;IAGb,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;IAGvB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;GAPxB,OAAO,CA4CZ"} +//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCmxldCBHcmVldGVyID0gY2xhc3MgR3JlZXRlciB7DQogICAgZ3JlZXRpbmc7DQogICAgY29uc3RydWN0b3IoZ3JlZXRpbmcsIC4uLmIpIHsNCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBncmVldCgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH0NCiAgICB4Ow0KICAgIHN0YXRpYyB4MSA9IDEwOw0KICAgIGZuKHgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZ3JlZXRpbmc7DQogICAgfQ0KICAgIGdldCBncmVldGluZ3MoKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdyZWV0aW5nOw0KICAgIH0NCiAgICBzZXQgZ3JlZXRpbmdzKGdyZWV0aW5ncykgew0KICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgIH0NCn07DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDQwKQ0KXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldCIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig1MCkNCl0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQpfX2RlY29yYXRlKFsNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImZuIiwgbnVsbCk7DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDgwKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig2MCkNCl0sIEdyZWV0ZXIsICJ4MSIsIHZvaWQgMCk7DQpHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgQ2xhc3NEZWNvcmF0b3IxLA0KICAgIENsYXNzRGVjb3JhdG9yMigxMCksDQogICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoMjApKSwNCiAgICBfX3BhcmFtKDEsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQpdLCBHcmVldGVyKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcFZhbGlkYXRpb25EZWNvcmF0b3JzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQSxJQUFNLE9BQU8sR0FBYixNQUFNLE9BQU87SUFJQSxRQUFRO0lBSGpCLFlBR1MsUUFBZ0IsRUFJdkIsR0FBRyxDQUFXLEVBQUU7d0JBSlQsUUFBUTtJQUlFLENBQ2xCO0lBSUQsS0FBSyxHQUFHO1FBQ0osT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFBQSxDQUMzQztJQUlPLENBQUMsQ0FBUztJQUlILEFBQVAsTUFBTSxDQUFDLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFFdkIsRUFBRSxDQUdSLENBQVMsRUFBRTtRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUFBLENBQ3hCO0lBSUQsSUFBSSxTQUFTLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFBQSxDQUN4QjtJQUVELElBQUksU0FBUyxDQUdYLFNBQWlCLEVBQUU7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFBQSxDQUM3QjtDQUNKLENBQUE7QUEvQkc7SUFGQyxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO29DQUd0QjtBQUlPO0lBRlAsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztrQ0FDTDtBQU1WO0lBQ0wsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO2lDQUd6QjtBQUlEO0lBRkMsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztJQU1wQixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7d0NBSnpCO0FBYmM7SUFGZCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3lCQUNRO0FBdkI3QixPQUFPO0lBRlosZUFBZTtJQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFHYixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7SUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0dBUHhCLE9BQU8sQ0E0Q1oifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 diff --git a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map.diff b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map.diff index 4112387e2..071aab060 100644 --- a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map.diff +++ b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.js.map.diff @@ -4,5 +4,5 @@ //// [sourceMapValidationDecorators.js.map] -{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA,IAAM,OAAO,GAAb,MAAM,OAAO;IACT,YAGS,QAAgB,EAIvB,GAAG,CAAW;QAJP,aAAQ,GAAR,QAAQ,CAAQ;IAKzB,CAAC;IAID,KAAK;QACD,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5C,CAAC;IAUO,EAAE,CAGR,CAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAID,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAI,SAAS,CAGX,SAAiB;QACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC9B,CAAC;;AApBc,UAAE,GAAW,EAAE,AAAb,CAAc;AAV/B;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;oCAGtB;AAIO;IAFP,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;kCACL;AAMV;IACL,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;iCAGzB;AAID;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;IAMpB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;wCAJzB;AAbc;IAFd,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;yBACQ;AAvB7B,OAAO;IAFZ,eAAe;IACf,eAAe,CAAC,EAAE,CAAC;IAGb,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;IAGvB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;GAPxB,OAAO,CA4CZ"} -//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCmxldCBHcmVldGVyID0gY2xhc3MgR3JlZXRlciB7DQogICAgY29uc3RydWN0b3IoZ3JlZXRpbmcsIC4uLmIpIHsNCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBncmVldCgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH0NCiAgICBmbih4KSB7DQogICAgICAgIHJldHVybiB0aGlzLmdyZWV0aW5nOw0KICAgIH0NCiAgICBnZXQgZ3JlZXRpbmdzKCkgew0KICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsNCiAgICB9DQogICAgc2V0IGdyZWV0aW5ncyhncmVldGluZ3MpIHsNCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nczsNCiAgICB9DQp9Ow0KR3JlZXRlci54MSA9IDEwOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig0MCkNCl0sIEdyZWV0ZXIucHJvdG90eXBlLCAiZ3JlZXQiLCBudWxsKTsNCl9fZGVjb3JhdGUoWw0KICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICBQcm9wZXJ0eURlY29yYXRvcjIoNTApDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgIngiLCB2b2lkIDApOw0KX19kZWNvcmF0ZShbDQogICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoNzApKQ0KXSwgR3JlZXRlci5wcm90b3R5cGUsICJmbiIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig4MCksDQogICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoOTApKQ0KXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldGluZ3MiLCBudWxsKTsNCl9fZGVjb3JhdGUoWw0KICAgIFByb3BlcnR5RGVjb3JhdG9yMSwNCiAgICBQcm9wZXJ0eURlY29yYXRvcjIoNjApDQpdLCBHcmVldGVyLCAieDEiLCB2b2lkIDApOw0KR3JlZXRlciA9IF9fZGVjb3JhdGUoWw0KICAgIENsYXNzRGVjb3JhdG9yMSwNCiAgICBDbGFzc0RlY29yYXRvcjIoMTApLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMSksDQogICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IyKDIwKSksDQogICAgX19wYXJhbSgxLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICBfX3BhcmFtKDEsIFBhcmFtZXRlckRlY29yYXRvcjIoMzApKQ0KXSwgR3JlZXRlcik7DQovLyMgc291cmNlTWFwcGluZ1VSTD1zb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy5qcy5tYXA=,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQSxJQUFNLE9BQU8sR0FBYixNQUFNLE9BQU87SUFDVCxZQUdTLFFBQWdCLEVBSXZCLEdBQUcsQ0FBVztRQUpQLGFBQVEsR0FBUixRQUFRLENBQVE7SUFLekIsQ0FBQztJQUlELEtBQUs7UUFDRCxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUM1QyxDQUFDO0lBVU8sRUFBRSxDQUdSLENBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUlELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBR1gsU0FBaUI7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDOztBQXBCYyxVQUFFLEdBQVcsRUFBRSxBQUFiLENBQWM7QUFWL0I7SUFGQyxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO29DQUd0QjtBQUlPO0lBRlAsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztrQ0FDTDtBQU1WO0lBQ0wsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO2lDQUd6QjtBQUlEO0lBRkMsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztJQU1wQixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7d0NBSnpCO0FBYmM7SUFGZCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3lCQUNRO0FBdkI3QixPQUFPO0lBRlosZUFBZTtJQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFHYixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7SUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0dBUHhCLE9BQU8sQ0E0Q1oifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 -+{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AAQA,IACM,OAAO,GADb,MACM,OAAO;IAIA,QAAQ;IAHjB,YAGS,QAAgB,EAIvB,GAAG,CAAW,EAAE;wBAJT,QAAQ;IAIE,CAClB;IAID,KAAK,GAAG;QACJ,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAAA,CAC3C;IAIO,CAAC,CAAS;IAIH,AAAP,MAAM,CAAC,EAAE,GAAW,EAAE,CAAC;IAEvB,EAAE,CAGR,CAAS,EAAE;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAGD,IACI,SAAS,GAAG;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAED,IAAI,SAAS,CAGX,SAAiB,EAAE;QACjB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAAA,CAC7B;CACJ,CAAA;AA/BG;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;oCAGtB;AAIO;IAFP,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;kCACL;AAMV;IACL,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;iCAGzB;AAGD;IADC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;IAMpB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;wCAJzB;AAbc;IAFd,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;yBACQ;AAvB7B,OAAO;IAFZ,eAAe;IACf,eAAe,CAAC,EAAE,CAAC;IAGb,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;IAGvB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;GAPxB,OAAO,CA4CZ"} -+//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCmxldCBHcmVldGVyID0gY2xhc3MgR3JlZXRlciB7DQogICAgZ3JlZXRpbmc7DQogICAgY29uc3RydWN0b3IoZ3JlZXRpbmcsIC4uLmIpIHsNCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBncmVldCgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH0NCiAgICB4Ow0KICAgIHN0YXRpYyB4MSA9IDEwOw0KICAgIGZuKHgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZ3JlZXRpbmc7DQogICAgfQ0KICAgIGdldCBncmVldGluZ3MoKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdyZWV0aW5nOw0KICAgIH0NCiAgICBzZXQgZ3JlZXRpbmdzKGdyZWV0aW5ncykgew0KICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgIH0NCn07DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDQwKQ0KXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldCIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig1MCkNCl0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQpfX2RlY29yYXRlKFsNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImZuIiwgbnVsbCk7DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDgwKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig2MCkNCl0sIEdyZWV0ZXIsICJ4MSIsIHZvaWQgMCk7DQpHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgQ2xhc3NEZWNvcmF0b3IxLA0KICAgIENsYXNzRGVjb3JhdG9yMigxMCksDQogICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoMjApKSwNCiAgICBfX3BhcmFtKDEsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQpdLCBHcmVldGVyKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcFZhbGlkYXRpb25EZWNvcmF0b3JzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFRQSxJQUNNLE9BQU8sR0FEYixNQUNNLE9BQU87SUFJQSxRQUFRO0lBSGpCLFlBR1MsUUFBZ0IsRUFJdkIsR0FBRyxDQUFXLEVBQUU7d0JBSlQsUUFBUTtJQUlFLENBQ2xCO0lBSUQsS0FBSyxHQUFHO1FBQ0osT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFBQSxDQUMzQztJQUlPLENBQUMsQ0FBUztJQUlILEFBQVAsTUFBTSxDQUFDLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFFdkIsRUFBRSxDQUdSLENBQVMsRUFBRTtRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUFBLENBQ3hCO0lBR0QsSUFDSSxTQUFTLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFBQSxDQUN4QjtJQUVELElBQUksU0FBUyxDQUdYLFNBQWlCLEVBQUU7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFBQSxDQUM3QjtDQUNKLENBQUE7QUEvQkc7SUFGQyxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO29DQUd0QjtBQUlPO0lBRlAsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztrQ0FDTDtBQU1WO0lBQ0wsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO2lDQUd6QjtBQUdEO0lBREMsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztJQU1wQixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7d0NBSnpCO0FBYmM7SUFGZCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3lCQUNRO0FBdkI3QixPQUFPO0lBRlosZUFBZTtJQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFHYixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7SUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0dBUHhCLE9BQU8sQ0E0Q1oifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 \ No newline at end of file ++{"version":3,"file":"sourceMapValidationDecorators.js","sourceRoot":"","sources":["sourceMapValidationDecorators.ts"],"names":[],"mappings":";;;;;;;;;AASA,IAAM,OAAO,GAAb,MAAM,OAAO;IAIA,QAAQ;IAHjB,YAGS,QAAgB,EAIvB,GAAG,CAAW,EAAE;wBAJT,QAAQ;IAIE,CAClB;IAID,KAAK,GAAG;QACJ,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAAA,CAC3C;IAIO,CAAC,CAAS;IAIH,AAAP,MAAM,CAAC,EAAE,GAAW,EAAE,CAAC;IAEvB,EAAE,CAGR,CAAS,EAAE;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAID,IAAI,SAAS,GAAG;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IAAA,CACxB;IAED,IAAI,SAAS,CAGX,SAAiB,EAAE;QACjB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAAA,CAC7B;CACJ,CAAA;AA/BG;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;oCAGtB;AAIO;IAFP,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;kCACL;AAMV;IACL,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;iCAGzB;AAID;IAFC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;IAMpB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;wCAJzB;AAbc;IAFd,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC;yBACQ;AAvB7B,OAAO;IAFZ,eAAe;IACf,eAAe,CAAC,EAAE,CAAC;IAGb,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;IAGvB,WAAA,mBAAmB,CAAA;IACnB,WAAA,mBAAmB,CAAC,EAAE,CAAC,CAAA;GAPxB,OAAO,CA4CZ"} ++//// https://sokra.github.io/source-map-visualization#base64,dmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykgew0KICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7DQogICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gImZ1bmN0aW9uIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpOw0KICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7DQogICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjsNCn07DQp2YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikgew0KICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfQ0KfTsNCmxldCBHcmVldGVyID0gY2xhc3MgR3JlZXRlciB7DQogICAgZ3JlZXRpbmc7DQogICAgY29uc3RydWN0b3IoZ3JlZXRpbmcsIC4uLmIpIHsNCiAgICAgICAgdGhpcy5ncmVldGluZyA9IGdyZWV0aW5nOw0KICAgIH0NCiAgICBncmVldCgpIHsNCiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOw0KICAgIH0NCiAgICB4Ow0KICAgIHN0YXRpYyB4MSA9IDEwOw0KICAgIGZuKHgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuZ3JlZXRpbmc7DQogICAgfQ0KICAgIGdldCBncmVldGluZ3MoKSB7DQogICAgICAgIHJldHVybiB0aGlzLmdyZWV0aW5nOw0KICAgIH0NCiAgICBzZXQgZ3JlZXRpbmdzKGdyZWV0aW5ncykgew0KICAgICAgICB0aGlzLmdyZWV0aW5nID0gZ3JlZXRpbmdzOw0KICAgIH0NCn07DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDQwKQ0KXSwgR3JlZXRlci5wcm90b3R5cGUsICJncmVldCIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig1MCkNCl0sIEdyZWV0ZXIucHJvdG90eXBlLCAieCIsIHZvaWQgMCk7DQpfX2RlY29yYXRlKFsNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig3MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImZuIiwgbnVsbCk7DQpfX2RlY29yYXRlKFsNCiAgICBQcm9wZXJ0eURlY29yYXRvcjEsDQogICAgUHJvcGVydHlEZWNvcmF0b3IyKDgwKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMCwgUGFyYW1ldGVyRGVjb3JhdG9yMig5MCkpDQpdLCBHcmVldGVyLnByb3RvdHlwZSwgImdyZWV0aW5ncyIsIG51bGwpOw0KX19kZWNvcmF0ZShbDQogICAgUHJvcGVydHlEZWNvcmF0b3IxLA0KICAgIFByb3BlcnR5RGVjb3JhdG9yMig2MCkNCl0sIEdyZWV0ZXIsICJ4MSIsIHZvaWQgMCk7DQpHcmVldGVyID0gX19kZWNvcmF0ZShbDQogICAgQ2xhc3NEZWNvcmF0b3IxLA0KICAgIENsYXNzRGVjb3JhdG9yMigxMCksDQogICAgX19wYXJhbSgwLCBQYXJhbWV0ZXJEZWNvcmF0b3IxKSwNCiAgICBfX3BhcmFtKDAsIFBhcmFtZXRlckRlY29yYXRvcjIoMjApKSwNCiAgICBfX3BhcmFtKDEsIFBhcmFtZXRlckRlY29yYXRvcjEpLA0KICAgIF9fcGFyYW0oMSwgUGFyYW1ldGVyRGVjb3JhdG9yMigzMCkpDQpdLCBHcmVldGVyKTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvdXJjZU1hcFZhbGlkYXRpb25EZWNvcmF0b3JzLmpzLm1hcA==,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlTWFwVmFsaWRhdGlvbkRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzb3VyY2VNYXBWYWxpZGF0aW9uRGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFTQSxJQUFNLE9BQU8sR0FBYixNQUFNLE9BQU87SUFJQSxRQUFRO0lBSGpCLFlBR1MsUUFBZ0IsRUFJdkIsR0FBRyxDQUFXLEVBQUU7d0JBSlQsUUFBUTtJQUlFLENBQ2xCO0lBSUQsS0FBSyxHQUFHO1FBQ0osT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFBQSxDQUMzQztJQUlPLENBQUMsQ0FBUztJQUlILEFBQVAsTUFBTSxDQUFDLEVBQUUsR0FBVyxFQUFFLENBQUM7SUFFdkIsRUFBRSxDQUdSLENBQVMsRUFBRTtRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUFBLENBQ3hCO0lBSUQsSUFBSSxTQUFTLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFBQSxDQUN4QjtJQUVELElBQUksU0FBUyxDQUdYLFNBQWlCLEVBQUU7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFBQSxDQUM3QjtDQUNKLENBQUE7QUEvQkc7SUFGQyxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO29DQUd0QjtBQUlPO0lBRlAsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztrQ0FDTDtBQU1WO0lBQ0wsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO2lDQUd6QjtBQUlEO0lBRkMsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztJQU1wQixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7d0NBSnpCO0FBYmM7SUFGZCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBRSxDQUFDO3lCQUNRO0FBdkI3QixPQUFPO0lBRlosZUFBZTtJQUNmLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFHYixXQUFBLG1CQUFtQixDQUFBO0lBQ25CLFdBQUEsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7SUFHdkIsV0FBQSxtQkFBbUIsQ0FBQTtJQUNuQixXQUFBLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0dBUHhCLE9BQU8sQ0E0Q1oifQ==,ZGVjbGFyZSBmdW5jdGlvbiBDbGFzc0RlY29yYXRvcjEodGFyZ2V0OiBGdW5jdGlvbik6IHZvaWQ7CmRlY2xhcmUgZnVuY3Rpb24gQ2xhc3NEZWNvcmF0b3IyKHg6IG51bWJlcik6ICh0YXJnZXQ6IEZ1bmN0aW9uKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMSh0YXJnZXQ6IE9iamVjdCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFByb3BlcnR5RGVjb3JhdG9yMih4OiBudW1iZXIpOiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjEodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sLCBwYXJhbUluZGV4OiBudW1iZXIpOiB2b2lkOwpkZWNsYXJlIGZ1bmN0aW9uIFBhcmFtZXRlckRlY29yYXRvcjIoeDogbnVtYmVyKTogKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgcGFyYW1JbmRleDogbnVtYmVyKSA9PiB2b2lkOwoKQENsYXNzRGVjb3JhdG9yMQpAQ2xhc3NEZWNvcmF0b3IyKDEwKQpjbGFzcyBHcmVldGVyIHsKICAgIGNvbnN0cnVjdG9yKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMjApIAogICAgICBwdWJsaWMgZ3JlZXRpbmc6IHN0cmluZywgCiAgICAgIAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoMzApIAogICAgICAuLi5iOiBzdHJpbmdbXSkgewogICAgfQogICAgCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDQwKQogICAgZ3JlZXQoKSB7CiAgICAgICAgcmV0dXJuICI8aDE+IiArIHRoaXMuZ3JlZXRpbmcgKyAiPC9oMT4iOwogICAgfQoKICAgIEBQcm9wZXJ0eURlY29yYXRvcjEKICAgIEBQcm9wZXJ0eURlY29yYXRvcjIoNTApCiAgICBwcml2YXRlIHg6IHN0cmluZzsKCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDYwKQogICAgcHJpdmF0ZSBzdGF0aWMgeDE6IG51bWJlciA9IDEwOwogICAgCiAgICBwcml2YXRlIGZuKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoNzApIAogICAgICB4OiBudW1iZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBAUHJvcGVydHlEZWNvcmF0b3IxCiAgICBAUHJvcGVydHlEZWNvcmF0b3IyKDgwKQogICAgZ2V0IGdyZWV0aW5ncygpIHsKICAgICAgICByZXR1cm4gdGhpcy5ncmVldGluZzsKICAgIH0KCiAgICBzZXQgZ3JlZXRpbmdzKAogICAgICBAUGFyYW1ldGVyRGVjb3JhdG9yMSAKICAgICAgQFBhcmFtZXRlckRlY29yYXRvcjIoOTApIAogICAgICBncmVldGluZ3M6IHN0cmluZykgewogICAgICAgIHRoaXMuZ3JlZXRpbmcgPSBncmVldGluZ3M7CiAgICB9ICAgIAp9 \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt index d251384cc..3eb3f6526 100644 --- a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt +++ b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt @@ -32,18 +32,17 @@ sourceFile:sourceMapValidationDecorators.ts >declare function ParameterDecorator2(x: number): (target: Object, key: string | symbol, paramIndex: number) => void; > >@ClassDecorator1 + >@ClassDecorator2(10) > -2 >@ClassDecorator2(10) - >class +2 >class 3 > Greeter 4 > -5 > @ClassDecorator2(10) - > class +5 > class 6 > Greeter -1 >Emitted(10, 1) Source(9, 1) + SourceIndex(0) +1 >Emitted(10, 1) Source(10, 1) + SourceIndex(0) 2 >Emitted(10, 5) Source(10, 7) + SourceIndex(0) 3 >Emitted(10, 12) Source(10, 14) + SourceIndex(0) -4 >Emitted(10, 15) Source(9, 1) + SourceIndex(0) +4 >Emitted(10, 15) Source(10, 1) + SourceIndex(0) 5 >Emitted(10, 21) Source(10, 7) + SourceIndex(0) 6 >Emitted(10, 28) Source(10, 14) + SourceIndex(0) --- @@ -281,12 +280,12 @@ sourceFile:sourceMapValidationDecorators.ts 1-> > > @PropertyDecorator1 + > @PropertyDecorator2(80) > -2 > @PropertyDecorator2(80) - > get +2 > get 3 > greetings 4 > () -1->Emitted(23, 5) Source(43, 5) + SourceIndex(0) +1->Emitted(23, 5) Source(44, 5) + SourceIndex(0) 2 >Emitted(23, 9) Source(44, 9) + SourceIndex(0) 3 >Emitted(23, 18) Source(44, 18) + SourceIndex(0) 4 >Emitted(23, 21) Source(44, 21) + SourceIndex(0) @@ -543,8 +542,9 @@ sourceFile:sourceMapValidationDecorators.ts 1 > > > @PropertyDecorator1 + > @PropertyDecorator2(80) > -1 >Emitted(42, 1) Source(43, 5) + SourceIndex(0) +1 >Emitted(42, 1) Source(44, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^ diff --git a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt.diff b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt.diff index 733a1c875..b7b1c8697 100644 --- a/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt.diff +++ b/testdata/baselines/reference/submodule/compiler/sourceMapValidationDecorators.sourcemap.txt.diff @@ -8,27 +8,7 @@ 1 >declare function ClassDecorator1(target: Function): void; >declare function ClassDecorator2(x: number): (target: Function) => void; >declare function PropertyDecorator1(target: Object, key: string | symbol, descriptor?: PropertyDescriptor): void; -@@= skipped -9, +8 lines =@@ - >declare function ParameterDecorator2(x: number): (target: Object, key: string | symbol, paramIndex: number) => void; - > - >@ClassDecorator1 -- >@ClassDecorator2(10) - > --2 >class -+2 >@ClassDecorator2(10) -+ >class - 3 > Greeter - 4 > --5 > class -+5 > @ClassDecorator2(10) -+ > class - 6 > Greeter --1 >Emitted(10, 1) Source(10, 1) + SourceIndex(0) -+1 >Emitted(10, 1) Source(9, 1) + SourceIndex(0) - 2 >Emitted(10, 5) Source(10, 7) + SourceIndex(0) - 3 >Emitted(10, 12) Source(10, 14) + SourceIndex(0) --4 >Emitted(10, 15) Source(10, 1) + SourceIndex(0) -+4 >Emitted(10, 15) Source(9, 1) + SourceIndex(0) +@@= skipped -23, +22 lines =@@ 5 >Emitted(10, 21) Source(10, 7) + SourceIndex(0) 6 >Emitted(10, 28) Source(10, 14) + SourceIndex(0) --- @@ -48,7 +28,7 @@ >>> constructor(greeting, ...b) { 1->^^^^ 2 > ^^^^^^^^^^^^ -@@= skipped -21, +35 lines =@@ +@@= skipped -7, +20 lines =@@ 4 > ^^ 5 > ^^^ 6 > ^ @@ -325,24 +305,22 @@ 1-> > > @PropertyDecorator1 -- > @PropertyDecorator2(80) +@@= skipped -36, +37 lines =@@ > --2 > get -+2 > @PropertyDecorator2(80) -+ > get + 2 > get 3 > greetings -1->Emitted(20, 5) Source(44, 5) + SourceIndex(0) -2 >Emitted(20, 9) Source(44, 9) + SourceIndex(0) -3 >Emitted(20, 18) Source(44, 18) + SourceIndex(0) +4 > () -+1->Emitted(23, 5) Source(43, 5) + SourceIndex(0) ++1->Emitted(23, 5) Source(44, 5) + SourceIndex(0) +2 >Emitted(23, 9) Source(44, 9) + SourceIndex(0) +3 >Emitted(23, 18) Source(44, 18) + SourceIndex(0) +4 >Emitted(23, 21) Source(44, 21) + SourceIndex(0) --- >>> return this.greeting; 1->^^^^^^^^ -@@= skipped -47, +50 lines =@@ +@@= skipped -11, +13 lines =@@ 4 > ^ 5 > ^^^^^^^^ 6 > ^ @@ -628,18 +606,16 @@ --- >>>__decorate([ 1 > -@@= skipped -8, +8 lines =@@ - 1 > - > +@@= skipped -10, +10 lines =@@ > @PropertyDecorator1 -- > @PropertyDecorator2(80) + > @PropertyDecorator2(80) > -1 >Emitted(40, 1) Source(44, 5) + SourceIndex(0) -+1 >Emitted(42, 1) Source(43, 5) + SourceIndex(0) ++1 >Emitted(42, 1) Source(44, 5) + SourceIndex(0) --- >>> PropertyDecorator1, 1->^^^^ -@@= skipped -10, +9 lines =@@ +@@= skipped -8, +8 lines =@@ 3 > ^^^^^^-> 1-> 2 > PropertyDecorator1 diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt index 501d8cad9..d9dbd2c6e 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt @@ -1,5 +1,5 @@ /a.js(21,44): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T1'. -/a.js(22,38): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. +/a.js(22,28): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. /a.js(31,49): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T4'. @@ -28,7 +28,7 @@ ~ !!! error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T1'. const t3 = /** @satisfies {T1} */ ({}); - ~ + ~~ !!! error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. !!! related TS2728 /a.js:3:23: 'a' is declared here. diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt.diff index ade10090e..30a35d0db 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag1.errors.txt.diff @@ -4,7 +4,7 @@ /a.js(21,44): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T1'. -/a.js(22,17): error TS1360: Type '{}' does not satisfy the expected type 'T1'. - Property 'a' is missing in type '{}' but required in type 'T1'. -+/a.js(22,38): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. ++/a.js(22,28): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. /a.js(31,49): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T4'. @@ -16,7 +16,7 @@ -!!! error TS1360: Type '{}' does not satisfy the expected type 'T1'. -!!! error TS1360: Property 'a' is missing in type '{}' but required in type 'T1'. -!!! related TS2728 /a.js:3:4: 'a' is declared here. -+ ~ ++ ~~ +!!! error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. +!!! related TS2728 /a.js:3:23: 'a' is declared here. diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag11.types b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag11.types index 14b38c0ff..a9dfcaf19 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag11.types +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag11.types @@ -18,7 +18,6 @@ const t1 = { a: 1 }; >t1 : { a: number; } >{ a: 1 } : { a: number; } ->{ a: 1 } : { a: number; } >a : number >1 : 1 diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag11.types.diff b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag11.types.diff deleted file mode 100644 index 0f3a111a1..000000000 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag11.types.diff +++ /dev/null @@ -1,9 +0,0 @@ ---- old.checkJsdocSatisfiesTag11.types -+++ new.checkJsdocSatisfiesTag11.types -@@= skipped -17, +17 lines =@@ - const t1 = { a: 1 }; - >t1 : { a: number; } - >{ a: 1 } : { a: number; } -+>{ a: 1 } : { a: number; } - >a : number - >1 : 1 diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt index b9d113259..23f2335a6 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt @@ -1,7 +1,7 @@ /a.js(24,20): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T1'. -/a.js(29,14): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. +/a.js(27,16): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. /a.js(44,25): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T2'. -/a.js(51,42): error TS1360: Type 'number' does not satisfy the expected type 'string'. +/a.js(51,17): error TS1360: Type 'number' does not satisfy the expected type 'string'. ==== /a.js (4 errors) ==== @@ -34,11 +34,11 @@ /** * @satisfies {T1} - */ - const t3 = {}; - ~ + ~~ !!! error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. !!! related TS2728 /a.js:3:23: 'a' is declared here. + */ + const t3 = {}; /** * @satisfies {Array.} @@ -63,6 +63,6 @@ const t7 = { a: "a" }; /** @satisfies {string} */ const t8 = (1); - ~ + ~~~~~~ !!! error TS1360: Type 'number' does not satisfy the expected type 'string'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt.diff index 0edead04b..9fb50fa56 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag12.errors.txt.diff @@ -2,34 +2,34 @@ +++ new.checkJsdocSatisfiesTag12.errors.txt @@= skipped -0, +0 lines =@@ /a.js(24,20): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T1'. -+/a.js(29,14): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. ++/a.js(27,16): error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. /a.js(44,25): error TS2353: Object literal may only specify known properties, and 'b' does not exist in type 'T2'. -/a.js(51,6): error TS1360: Type 'number' does not satisfy the expected type 'string'. - - -==== /a.js (3 errors) ==== -+/a.js(51,42): error TS1360: Type 'number' does not satisfy the expected type 'string'. ++/a.js(51,17): error TS1360: Type 'number' does not satisfy the expected type 'string'. + + +==== /a.js (4 errors) ==== /** * @typedef {Object} T1 * @property {number} a -@@= skipped -34, +35 lines =@@ +@@= skipped -32, +33 lines =@@ + + /** * @satisfies {T1} - */ - const t3 = {}; -+ ~ ++ ~~ +!!! error TS2741: Property 'a' is missing in type '{}' but required in type 'T1'. +!!! related TS2728 /a.js:3:23: 'a' is declared here. + */ + const t3 = {}; - /** - * @satisfies {Array.} -@@= skipped -24, +27 lines =@@ +@@= skipped -26, +29 lines =@@ const t7 = { a: "a" }; /** @satisfies {string} */ const t8 = (1); - ~~~~~~~~~ -+ ~ ++ ~~~~~~ !!! error TS1360: Type 'number' does not satisfy the expected type 'string'. \ No newline at end of file diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt index 17573f218..c5445a815 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt @@ -1,4 +1,4 @@ -/a.js(5,43): error TS2741: Property 'a' is missing in type '{}' but required in type 'Foo'. +/a.js(5,32): error TS2741: Property 'a' is missing in type '{}' but required in type 'Foo'. ==== /a.js (1 errors) ==== @@ -7,7 +7,7 @@ * @property {number} a */ export default /** @satisfies {Foo} */ ({}); - ~ + ~~~ !!! error TS2741: Property 'a' is missing in type '{}' but required in type 'Foo'. !!! related TS2728 /a.js:3:23: 'a' is declared here. diff --git a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt.diff index 50185c3ad..3d8e1e84b 100644 --- a/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt.diff +++ b/testdata/baselines/reference/submodule/conformance/checkJsdocSatisfiesTag4.errors.txt.diff @@ -3,7 +3,7 @@ @@= skipped -0, +0 lines =@@ -/a.js(5,21): error TS1360: Type '{}' does not satisfy the expected type 'Foo'. - Property 'a' is missing in type '{}' but required in type 'Foo'. -+/a.js(5,43): error TS2741: Property 'a' is missing in type '{}' but required in type 'Foo'. ++/a.js(5,32): error TS2741: Property 'a' is missing in type '{}' but required in type 'Foo'. ==== /a.js (1 errors) ==== @@ -15,7 +15,7 @@ -!!! error TS1360: Type '{}' does not satisfy the expected type 'Foo'. -!!! error TS1360: Property 'a' is missing in type '{}' but required in type 'Foo'. -!!! related TS2728 /a.js:3:4: 'a' is declared here. -+ ~ ++ ~~~ +!!! error TS2741: Property 'a' is missing in type '{}' but required in type 'Foo'. +!!! related TS2728 /a.js:3:23: 'a' is declared here. diff --git a/testdata/tests/cases/compiler/checkInheritedProperty.ts b/testdata/tests/cases/compiler/checkInheritedProperty.ts new file mode 100644 index 000000000..12960b990 --- /dev/null +++ b/testdata/tests/cases/compiler/checkInheritedProperty.ts @@ -0,0 +1,12 @@ +// @strict: true +// @noEmit: true + +class Base { +} + +declare const BaseFactory: new() => Base & { c: string } + +class Derived extends BaseFactory { + a = this.b + b = "abc" +} diff --git a/testdata/tests/cases/compiler/legacyDecoratorClassWithoutModifiers.ts b/testdata/tests/cases/compiler/legacyDecoratorClassWithoutModifiers.ts new file mode 100644 index 000000000..16e01f3af --- /dev/null +++ b/testdata/tests/cases/compiler/legacyDecoratorClassWithoutModifiers.ts @@ -0,0 +1,9 @@ +// @target: esnext +// @experimentalDecorators: true + +// Test case for decorated class without modifiers +declare function classDec(target: any): any; + +@classDec +class C { +} diff --git a/testdata/tests/cases/compiler/legacyDecoratorsSingleAccessor.ts b/testdata/tests/cases/compiler/legacyDecoratorsSingleAccessor.ts new file mode 100644 index 000000000..2cc40e000 --- /dev/null +++ b/testdata/tests/cases/compiler/legacyDecoratorsSingleAccessor.ts @@ -0,0 +1,14 @@ +// @target: esnext +// @experimentalDecorators: true + +declare function dec(target: any, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor; + +// Test case for single getter without setter +class C1 { + @dec get accessor() { return 1; } +} + +// Test case for single setter without getter +class C2 { + @dec set accessor(value: number) { } +}