From eba4d3673931dc748cdf5b0e4633646b23a0deb9 Mon Sep 17 00:00:00 2001 From: kingwl <805037171@163.com> Date: Thu, 14 Dec 2017 09:26:05 +0800 Subject: [PATCH 001/232] error if import empty object form module not existed --- src/compiler/checker.ts | 5 ++++- .../reference/importEmptyFromModuleNotExisted.errors.txt | 8 ++++++++ .../reference/importEmptyFromModuleNotExisted.js | 7 +++++++ .../reference/importEmptyFromModuleNotExisted.symbols | 4 ++++ .../reference/importEmptyFromModuleNotExisted.types | 4 ++++ .../es6/modules/importEmptyFromModuleNotExisted.ts | 1 + 6 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/importEmptyFromModuleNotExisted.errors.txt create mode 100644 tests/baselines/reference/importEmptyFromModuleNotExisted.js create mode 100644 tests/baselines/reference/importEmptyFromModuleNotExisted.symbols create mode 100644 tests/baselines/reference/importEmptyFromModuleNotExisted.types create mode 100644 tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index bb7f8d013fc..0c44bd928a7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -23852,7 +23852,10 @@ namespace ts { checkImportBinding(importClause.namedBindings); } else { - forEach(importClause.namedBindings.elements, checkImportBinding); + const moduleExisted = resolveExternalModuleName(node, node.moduleSpecifier); + if (moduleExisted) { + forEach(importClause.namedBindings.elements, checkImportBinding); + } } } } diff --git a/tests/baselines/reference/importEmptyFromModuleNotExisted.errors.txt b/tests/baselines/reference/importEmptyFromModuleNotExisted.errors.txt new file mode 100644 index 00000000000..99ccd49c489 --- /dev/null +++ b/tests/baselines/reference/importEmptyFromModuleNotExisted.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts(1,16): error TS2307: Cannot find module 'module-not-existed'. + + +==== tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts (1 errors) ==== + import {} from 'module-not-existed' + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2307: Cannot find module 'module-not-existed'. + \ No newline at end of file diff --git a/tests/baselines/reference/importEmptyFromModuleNotExisted.js b/tests/baselines/reference/importEmptyFromModuleNotExisted.js new file mode 100644 index 00000000000..aa08db2e99e --- /dev/null +++ b/tests/baselines/reference/importEmptyFromModuleNotExisted.js @@ -0,0 +1,7 @@ +//// [importEmptyFromModuleNotExisted.ts] +import {} from 'module-not-existed' + + +//// [importEmptyFromModuleNotExisted.js] +"use strict"; +exports.__esModule = true; diff --git a/tests/baselines/reference/importEmptyFromModuleNotExisted.symbols b/tests/baselines/reference/importEmptyFromModuleNotExisted.symbols new file mode 100644 index 00000000000..ea0425ff26c --- /dev/null +++ b/tests/baselines/reference/importEmptyFromModuleNotExisted.symbols @@ -0,0 +1,4 @@ +=== tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts === +import {} from 'module-not-existed' +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/importEmptyFromModuleNotExisted.types b/tests/baselines/reference/importEmptyFromModuleNotExisted.types new file mode 100644 index 00000000000..ea0425ff26c --- /dev/null +++ b/tests/baselines/reference/importEmptyFromModuleNotExisted.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts === +import {} from 'module-not-existed' +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts b/tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts new file mode 100644 index 00000000000..36bca3e9619 --- /dev/null +++ b/tests/cases/conformance/es6/modules/importEmptyFromModuleNotExisted.ts @@ -0,0 +1 @@ +import {} from 'module-not-existed' From 4c4f0e8e65f5aebc28957e2ebc6921ba99e1feea Mon Sep 17 00:00:00 2001 From: falsandtru Date: Wed, 21 Mar 2018 17:18:42 +0900 Subject: [PATCH 002/232] Fix Promise interfaces --- src/lib/es2015.promise.d.ts | 2 +- src/lib/es5.d.ts | 4 +++- .../reference/defaultExportInAwaitExpression01.types | 6 +++--- .../reference/defaultExportInAwaitExpression02.types | 6 +++--- tests/baselines/reference/inferenceLimit.types | 12 ++++++------ ...dularizeLibrary_NoErrorDuplicateLibOptions1.types | 4 ++-- ...dularizeLibrary_NoErrorDuplicateLibOptions2.types | 4 ++-- .../modularizeLibrary_TargetES5UsingES6Lib.types | 4 ++-- tests/baselines/reference/usePromiseFinally.types | 4 ++-- 9 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/lib/es2015.promise.d.ts b/src/lib/es2015.promise.d.ts index ab33531191f..af43abe63d6 100644 --- a/src/lib/es2015.promise.d.ts +++ b/src/lib/es2015.promise.d.ts @@ -10,7 +10,7 @@ interface PromiseConstructor { * a resolve callback used resolve the promise with a value or the result of another promise, * and a reject callback used to reject the promise with a provided reason or error. */ - new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; + new (executor: (resolve: [T] extends [void] ? (value?: T | PromiseLike) => void : (value: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; /** * Creates a Promise that is resolved with an array of results when all of the provided Promises diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 1f352cd6f39..c213677feac 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -1273,7 +1273,9 @@ declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) declare type MethodDecorator = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void; declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void; -declare type PromiseConstructorLike = new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void) => PromiseLike; +interface PromiseConstructorLike { + new (executor: (resolve: [T] extends [void] ? (value?: T | PromiseLike) => void : (value: T | PromiseLike) => void, reject: (reason?: any) => void) => void): PromiseLike; +} interface PromiseLike { /** diff --git a/tests/baselines/reference/defaultExportInAwaitExpression01.types b/tests/baselines/reference/defaultExportInAwaitExpression01.types index 1f7de76b90e..a68e9b88fa2 100644 --- a/tests/baselines/reference/defaultExportInAwaitExpression01.types +++ b/tests/baselines/reference/defaultExportInAwaitExpression01.types @@ -3,11 +3,11 @@ const x = new Promise( ( resolve, reject ) => { resolve( {} ); } ); >x : Promise<{}> >new Promise( ( resolve, reject ) => { resolve( {} ); } ) : Promise<{}> >Promise : PromiseConstructor ->( resolve, reject ) => { resolve( {} ); } : (resolve: (value?: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void ->resolve : (value?: {} | PromiseLike<{}>) => void +>( resolve, reject ) => { resolve( {} ); } : (resolve: (value: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void +>resolve : (value: {} | PromiseLike<{}>) => void >reject : (reason?: any) => void >resolve( {} ) : void ->resolve : (value?: {} | PromiseLike<{}>) => void +>resolve : (value: {} | PromiseLike<{}>) => void >{} : {} export default x; diff --git a/tests/baselines/reference/defaultExportInAwaitExpression02.types b/tests/baselines/reference/defaultExportInAwaitExpression02.types index 1f7de76b90e..a68e9b88fa2 100644 --- a/tests/baselines/reference/defaultExportInAwaitExpression02.types +++ b/tests/baselines/reference/defaultExportInAwaitExpression02.types @@ -3,11 +3,11 @@ const x = new Promise( ( resolve, reject ) => { resolve( {} ); } ); >x : Promise<{}> >new Promise( ( resolve, reject ) => { resolve( {} ); } ) : Promise<{}> >Promise : PromiseConstructor ->( resolve, reject ) => { resolve( {} ); } : (resolve: (value?: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void ->resolve : (value?: {} | PromiseLike<{}>) => void +>( resolve, reject ) => { resolve( {} ); } : (resolve: (value: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void +>resolve : (value: {} | PromiseLike<{}>) => void >reject : (reason?: any) => void >resolve( {} ) : void ->resolve : (value?: {} | PromiseLike<{}>) => void +>resolve : (value: {} | PromiseLike<{}>) => void >{} : {} export default x; diff --git a/tests/baselines/reference/inferenceLimit.types b/tests/baselines/reference/inferenceLimit.types index 4a398932232..16e030241c2 100644 --- a/tests/baselines/reference/inferenceLimit.types +++ b/tests/baselines/reference/inferenceLimit.types @@ -21,8 +21,8 @@ export class BrokenClass { >Array : T[] >MyModule : any >MyModel : MyModule.MyModel ->(resolve, reject) => { let result: Array = []; let populateItems = (order) => { return new Promise((resolve, reject) => { this.doStuff(order.id) .then((items) => { order.items = items; resolve(order); }); }); }; return Promise.all(result.map(populateItems)) .then((orders: Array) => { resolve(orders); }); } : (resolve: (value?: MyModule.MyModel[] | PromiseLike) => void, reject: (reason?: any) => void) => Promise ->resolve : (value?: MyModule.MyModel[] | PromiseLike) => void +>(resolve, reject) => { let result: Array = []; let populateItems = (order) => { return new Promise((resolve, reject) => { this.doStuff(order.id) .then((items) => { order.items = items; resolve(order); }); }); }; return Promise.all(result.map(populateItems)) .then((orders: Array) => { resolve(orders); }); } : (resolve: (value: MyModule.MyModel[] | PromiseLike) => void, reject: (reason?: any) => void) => Promise +>resolve : (value: MyModule.MyModel[] | PromiseLike) => void >reject : (reason?: any) => void let result: Array = []; @@ -40,8 +40,8 @@ export class BrokenClass { return new Promise((resolve, reject) => { >new Promise((resolve, reject) => { this.doStuff(order.id) .then((items) => { order.items = items; resolve(order); }); }) : Promise<{}> >Promise : PromiseConstructor ->(resolve, reject) => { this.doStuff(order.id) .then((items) => { order.items = items; resolve(order); }); } : (resolve: (value?: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void ->resolve : (value?: {} | PromiseLike<{}>) => void +>(resolve, reject) => { this.doStuff(order.id) .then((items) => { order.items = items; resolve(order); }); } : (resolve: (value: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void +>resolve : (value: {} | PromiseLike<{}>) => void >reject : (reason?: any) => void this.doStuff(order.id) @@ -69,7 +69,7 @@ export class BrokenClass { resolve(order); >resolve(order) : void ->resolve : (value?: {} | PromiseLike<{}>) => void +>resolve : (value: {} | PromiseLike<{}>) => void >order : any }); @@ -99,7 +99,7 @@ export class BrokenClass { resolve(orders); >resolve(orders) : void ->resolve : (value?: MyModule.MyModel[] | PromiseLike) => void +>resolve : (value: MyModule.MyModel[] | PromiseLike) => void >orders : MyModule.MyModel[] }); diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types index 78e6a6bc3f5..bda310b20e4 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types @@ -138,8 +138,8 @@ async function out() { return new Promise(function (resolve, reject) {}); >new Promise(function (resolve, reject) {}) : Promise<{}> >Promise : PromiseConstructor ->function (resolve, reject) {} : (resolve: (value?: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void ->resolve : (value?: {} | PromiseLike<{}>) => void +>function (resolve, reject) {} : (resolve: (value: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void +>resolve : (value: {} | PromiseLike<{}>) => void >reject : (reason?: any) => void } diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types index 4aabae824ee..8d05cc40ce4 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types @@ -138,8 +138,8 @@ async function out() { return new Promise(function (resolve, reject) {}); >new Promise(function (resolve, reject) {}) : Promise<{}> >Promise : PromiseConstructor ->function (resolve, reject) {} : (resolve: (value?: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void ->resolve : (value?: {} | PromiseLike<{}>) => void +>function (resolve, reject) {} : (resolve: (value: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void +>resolve : (value: {} | PromiseLike<{}>) => void >reject : (reason?: any) => void } diff --git a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types index 2782c70ebd9..9334b118d71 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types +++ b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types @@ -138,8 +138,8 @@ async function out() { return new Promise(function (resolve, reject) {}); >new Promise(function (resolve, reject) {}) : Promise<{}> >Promise : PromiseConstructor ->function (resolve, reject) {} : (resolve: (value?: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void ->resolve : (value?: {} | PromiseLike<{}>) => void +>function (resolve, reject) {} : (resolve: (value: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void +>resolve : (value: {} | PromiseLike<{}>) => void >reject : (reason?: any) => void } diff --git a/tests/baselines/reference/usePromiseFinally.types b/tests/baselines/reference/usePromiseFinally.types index 80534c75610..2dd2d82da79 100644 --- a/tests/baselines/reference/usePromiseFinally.types +++ b/tests/baselines/reference/usePromiseFinally.types @@ -5,8 +5,8 @@ let promise1 = new Promise(function(resolve, reject) {}) >new Promise(function(resolve, reject) {}) .finally : (onfinally?: () => void) => Promise<{}> >new Promise(function(resolve, reject) {}) : Promise<{}> >Promise : PromiseConstructor ->function(resolve, reject) {} : (resolve: (value?: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void ->resolve : (value?: {} | PromiseLike<{}>) => void +>function(resolve, reject) {} : (resolve: (value: {} | PromiseLike<{}>) => void, reject: (reason?: any) => void) => void +>resolve : (value: {} | PromiseLike<{}>) => void >reject : (reason?: any) => void .finally(function() {}); From a8d6a45cd645314cce86ab758f902ee70be44fd4 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 5 Apr 2018 06:25:34 -0700 Subject: [PATCH 003/232] Move nameType from SymbolLinks to TransientSymbol --- src/compiler/checker.ts | 50 ++++++++++++++++++++--------------------- src/compiler/types.ts | 2 +- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c60f9c23029..8b692471eba 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3793,10 +3793,13 @@ namespace ts { return "(Anonymous function)"; } } - if ((symbol as TransientSymbol).nameType && (symbol as TransientSymbol).nameType.flags & TypeFlags.StringLiteral) { - const stringValue = ((symbol as TransientSymbol).nameType as StringLiteralType).value; - if (!isIdentifierText(stringValue, compilerOptions.target)) { - return `"${escapeString(stringValue, CharacterCodes.doubleQuote)}"`; + if (isTransientSymbol(symbol)) { + const nameType = (symbol).nameType; + if (nameType && nameType.flags & TypeFlags.StringLiteral && !isIdentifierText((nameType).value, compilerOptions.target)) { + return `"${escapeString((nameType).value, CharacterCodes.doubleQuote)}"`; + } + if (nameType && nameType.flags & TypeFlags.UniqueESSymbol) { + return `[${getNameOfSymbolAsWritten((nameType).symbol, context)}]`; } } return symbolName(symbol); @@ -5539,7 +5542,7 @@ namespace ts { * @param lateSymbols The late-bound symbols of the parent. * @param decl The member to bind. */ - function lateBindMember(parent: Symbol, earlySymbols: SymbolTable | undefined, lateSymbols: SymbolTable, decl: LateBoundDeclaration) { + function lateBindMember(parent: Symbol, earlySymbols: SymbolTable | undefined, lateSymbols: UnderscoreEscapedMap, decl: LateBoundDeclaration) { Debug.assert(!!decl.symbol, "The member is expected to have a symbol."); const links = getNodeLinks(decl); if (!links.resolvedSymbol) { @@ -5568,13 +5571,7 @@ namespace ts { error(decl.name || decl, Diagnostics.Duplicate_declaration_0, name); lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late); } - - const symbolLinks = getSymbolLinks(lateSymbol); - if (!symbolLinks.nameType) { - // Retain link to name type so that it can be reused later - symbolLinks.nameType = type; - } - + lateSymbol.nameType = type; addDeclarationToLateBoundSymbol(lateSymbol, decl, symbolFlags); if (lateSymbol.parent) { Debug.assert(lateSymbol.parent === parent, "Existing symbol parent should match new one"); @@ -5602,7 +5599,7 @@ namespace ts { links[resolutionKind] = earlySymbols || emptySymbols; // fill in any as-yet-unresolved late-bound members. - const lateSymbols = createSymbolTable(); + const lateSymbols = createMap() as UnderscoreEscapedMap; for (const decl of symbol.declarations) { const members = getMembersOfDeclaration(decl); if (members) { @@ -8116,18 +8113,14 @@ namespace ts { } function getLiteralTypeFromPropertyName(prop: Symbol) { - const links = getSymbolLinks(getLateBoundSymbol(prop)); - if (!links.nameType) { - if (links.target && links.target !== unknownSymbol && links.target !== resolvingSymbol && links.target.escapedName === prop.escapedName) { - links.nameType = getLiteralTypeFromPropertyName(links.target); - } - else { - links.nameType = getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier || isKnownSymbol(prop) ? - neverType : - getLiteralType(symbolName(prop)); - } + if (getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier || isKnownSymbol(prop)) { + return neverType; } - return links.nameType; + const symbol = getLateBoundSymbol(prop); + if (isTransientSymbol(symbol) && symbol.nameType) { + return symbol.nameType; + } + return getLiteralType(symbolName(prop)); } function getLiteralTypeFromPropertyNames(type: Type) { @@ -9061,8 +9054,13 @@ namespace ts { if (symbol.valueDeclaration) { result.valueDeclaration = symbol.valueDeclaration; } - if ((symbol as TransientSymbol).isRestParameter) { - result.isRestParameter = (symbol as TransientSymbol).isRestParameter; + if (isTransientSymbol(symbol)) { + if (symbol.isRestParameter) { + result.isRestParameter = symbol.isRestParameter; + } + if (symbol.nameType) { + result.nameType = symbol.nameType; + } } return result; } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4edfc29a2a1..768cb196cca 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3399,7 +3399,6 @@ namespace ts { enumKind?: EnumKind; // Enum declaration classification originatingImport?: ImportDeclaration | ImportCall; // Import declaration which produced the symbol, present if the symbol is marked as uncallable but had call signatures in `resolveESModuleSymbol` lateSymbol?: Symbol; // Late-bound symbol for a computed property - nameType?: Type; // Type associate with a late-bound or mapped type property symbol's name } /* @internal */ @@ -3429,6 +3428,7 @@ namespace ts { export interface TransientSymbol extends Symbol, SymbolLinks { checkFlags: CheckFlags; isRestParameter?: boolean; + nameType?: Type; // Type associated with a late-bound symbol } /* @internal */ From 39bb93fb1a94f14235ca9f495c9713dad591393b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 5 Apr 2018 16:00:06 -0700 Subject: [PATCH 004/232] Move nameType to base Symbol, generate nameType properties where missing --- src/compiler/checker.ts | 83 ++++++++++++++++++----------------------- src/compiler/types.ts | 10 ++--- 2 files changed, 42 insertions(+), 51 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8b692471eba..ff3d53229ba 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3793,9 +3793,9 @@ namespace ts { return "(Anonymous function)"; } } - if (isTransientSymbol(symbol)) { - const nameType = (symbol).nameType; - if (nameType && nameType.flags & TypeFlags.StringLiteral && !isIdentifierText((nameType).value, compilerOptions.target)) { + const nameType = symbol.nameType; + if (nameType) { + if (nameType.flags & TypeFlags.StringLiteral && !isIdentifierText((nameType).value, compilerOptions.target)) { return `"${escapeString((nameType).value, CharacterCodes.doubleQuote)}"`; } if (nameType && nameType.flags & TypeFlags.UniqueESSymbol) { @@ -6003,6 +6003,7 @@ namespace ts { const checkFlags = CheckFlags.ReverseMapped | (readonlyMask && isReadonlySymbol(prop) ? CheckFlags.Readonly : 0); const inferredProp = createSymbol(SymbolFlags.Property | prop.flags & optionalMask, prop.escapedName, checkFlags) as ReverseMappedSymbol; inferredProp.declarations = prop.declarations; + inferredProp.nameType = prop.nameType; inferredProp.propertyType = getTypeOfSymbol(prop); inferredProp.mappedType = type.mappedType; members.set(prop.escapedName, inferredProp); @@ -6027,8 +6028,8 @@ namespace ts { if (constraintDeclaration.kind === SyntaxKind.TypeOperator && (constraintDeclaration).operator === SyntaxKind.KeyOfKeyword) { // We have a { [P in keyof T]: X } - for (const propertySymbol of getPropertiesOfType(modifiersType)) { - addMemberForKeyType(getLiteralTypeFromPropertyName(propertySymbol), propertySymbol); + for (const prop of getPropertiesOfType(modifiersType)) { + addMemberForKeyType(getLiteralTypeFromPropertyName(prop), undefined, prop); } if (modifiersType.flags & TypeFlags.Any || getIndexInfoOfType(modifiersType, IndexKind.String)) { addMemberForKeyType(stringType); @@ -6044,14 +6045,7 @@ namespace ts { } setStructuredTypeMembers(type, members, emptyArray, emptyArray, stringIndexInfo, undefined); - function addMemberForKeyType(t: Type, propertySymbolOrIndex?: Symbol | number) { - let propertySymbol: Symbol; - // forEachType delegates to forEach, which calls with a numeric second argument - // the type system currently doesn't catch this incompatibility, so we annotate - // the function ourselves to indicate the runtime behavior and deal with it here - if (typeof propertySymbolOrIndex === "object") { - propertySymbol = propertySymbolOrIndex; - } + function addMemberForKeyType(t: Type, _index?: number, origin?: Symbol) { // Create a mapper from T to the current iteration type constituent. Then, if the // mapped type is itself an instantiated type, combine the iteration mapper with the // instantiation mapper. @@ -6060,7 +6054,7 @@ namespace ts { // If the current iteration type constituent is a string literal type, create a property. // Otherwise, for type string create a string index signature. if (t.flags & TypeFlags.StringLiteral) { - const propName = getLateBoundNameFromType(t as LiteralType | UniqueESSymbolType); + const propName = getLateBoundNameFromType(t as LiteralType); const modifiersProp = getPropertyOfType(modifiersType, propName); const isOptional = !!(templateModifiers & MappedTypeModifiers.IncludeOptional || !(templateModifiers & MappedTypeModifiers.ExcludeOptional) && modifiersProp && modifiersProp.flags & SymbolFlags.Optional); @@ -6073,9 +6067,9 @@ namespace ts { prop.type = strictNullChecks && isOptional && !isTypeAssignableTo(undefinedType, propType) ? getOptionalType(propType) : strictNullChecks && !isOptional && modifiersProp && modifiersProp.flags & SymbolFlags.Optional ? getTypeWithFacts(propType, TypeFacts.NEUndefined) : propType; - if (propertySymbol) { - prop.syntheticOrigin = propertySymbol; - prop.declarations = propertySymbol.declarations; + if (origin) { + prop.syntheticOrigin = origin; + prop.declarations = origin.declarations; } prop.nameType = t; members.set(propName, prop); @@ -6529,6 +6523,7 @@ namespace ts { } propTypes.push(type); } + // !!! const result = createSymbol(SymbolFlags.Property | commonFlags, name, syntheticFlag | checkFlags); result.containingType = containingType; result.declarations = declarations; @@ -8116,11 +8111,7 @@ namespace ts { if (getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier || isKnownSymbol(prop)) { return neverType; } - const symbol = getLateBoundSymbol(prop); - if (isTransientSymbol(symbol) && symbol.nameType) { - return symbol.nameType; - } - return getLiteralType(symbolName(prop)); + return getLateBoundSymbol(prop).nameType || getLiteralType(symbolName(prop)); } function getLiteralTypeFromPropertyNames(type: Type) { @@ -8681,6 +8672,7 @@ namespace ts { result.leftSpread = leftProp; result.rightSpread = rightProp; result.declarations = declarations; + result.nameType = leftProp.nameType; members.set(leftProp.escapedName, result); } } @@ -8709,6 +8701,7 @@ namespace ts { const result = createSymbol(flags, prop.escapedName); result.type = getTypeOfSymbol(prop); result.declarations = prop.declarations; + result.nameType = prop.nameType; result.syntheticOrigin = prop; return result; } @@ -9054,13 +9047,13 @@ namespace ts { if (symbol.valueDeclaration) { result.valueDeclaration = symbol.valueDeclaration; } + if (symbol.nameType) { + result.nameType = symbol.nameType; + } if (isTransientSymbol(symbol)) { if (symbol.isRestParameter) { result.isRestParameter = symbol.isRestParameter; } - if (symbol.nameType) { - result.nameType = symbol.nameType; - } } return result; } @@ -10772,8 +10765,7 @@ namespace ts { continue; } // Skip over symbol-named members - const nameType = getLiteralTypeFromPropertyName(prop); - if (nameType !== undefined && !(isRelatedTo(nameType, stringType) || isRelatedTo(nameType, numberType))) { + if (prop.nameType && prop.nameType.flags & TypeFlags.UniqueESSymbol) { continue; } if (kind === IndexKind.String || isNumericLiteralName(prop.escapedName)) { @@ -11376,6 +11368,9 @@ namespace ts { if (source.valueDeclaration) { symbol.valueDeclaration = source.valueDeclaration; } + if (source.nameType) { + symbol.nameType = source.nameType; + } return symbol; } @@ -11418,7 +11413,7 @@ namespace ts { } function createWideningContext(parent: WideningContext, propertyName: __String, siblings: Type[]): WideningContext { - return { parent, propertyName, siblings, resolvedPropertyNames: undefined }; + return { parent, propertyName, siblings, resolvedProperties: undefined }; } function getSiblingsOfContext(context: WideningContext): Type[] { @@ -11439,19 +11434,19 @@ namespace ts { return context.siblings; } - function getPropertyNamesOfContext(context: WideningContext): __String[] { - if (!context.resolvedPropertyNames) { - const names = createMap() as UnderscoreEscapedMap; + function getPropertiesOfContext(context: WideningContext): Symbol[] { + if (!context.resolvedProperties) { + const names = createMap() as UnderscoreEscapedMap; for (const t of getSiblingsOfContext(context)) { if (isObjectLiteralType(t) && !(getObjectFlags(t) & ObjectFlags.ContainsSpread)) { for (const prop of getPropertiesOfType(t)) { - names.set(prop.escapedName, true); + names.set(prop.escapedName, prop); } } } - context.resolvedPropertyNames = arrayFrom(names.keys()); + context.resolvedProperties = arrayFrom(names.values()); } - return context.resolvedPropertyNames; + return context.resolvedProperties; } function getWidenedProperty(prop: Symbol, context: WideningContext): Symbol { @@ -11461,18 +11456,14 @@ namespace ts { return widened === original ? prop : createSymbolWithType(prop, widened); } - function getUndefinedProperty(name: __String) { - const cached = undefinedProperties.get(name); + function getUndefinedProperty(prop: Symbol) { + const cached = undefinedProperties.get(prop.escapedName); if (cached) { return cached; } - const result = createSymbol(SymbolFlags.Property | SymbolFlags.Optional, name); - result.type = undefinedType; - const associatedKeyType = getLiteralType(unescapeLeadingUnderscores(name)); - if (associatedKeyType.flags & TypeFlags.StringLiteral) { - result.nameType = associatedKeyType; - } - undefinedProperties.set(name, result); + const result = createSymbolWithType(prop, undefinedType); + result.flags |= SymbolFlags.Optional; + undefinedProperties.set(prop.escapedName, result); return result; } @@ -11484,9 +11475,9 @@ namespace ts { members.set(prop.escapedName, prop.flags & SymbolFlags.Property ? getWidenedProperty(prop, context) : prop); } if (context) { - for (const name of getPropertyNamesOfContext(context)) { - if (!members.has(name)) { - members.set(name, getUndefinedProperty(name)); + for (const prop of getPropertiesOfContext(context)) { + if (!members.has(prop.escapedName)) { + members.set(prop.escapedName, getUndefinedProperty(prop)); } } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 768cb196cca..bd526921c2a 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3361,6 +3361,7 @@ namespace ts { members?: SymbolTable; // Class, interface or object literal instance members exports?: SymbolTable; // Module exports globalExports?: SymbolTable; // Conditional global UMD exports + nameType?: Type; // Type associated with a late-bound symbol /* @internal */ id?: number; // Unique id (used to look up SymbolLinks) /* @internal */ mergeId?: number; // Merge id (used to look up merged symbol) /* @internal */ parent?: Symbol; // Parent symbol @@ -3428,7 +3429,6 @@ namespace ts { export interface TransientSymbol extends Symbol, SymbolLinks { checkFlags: CheckFlags; isRestParameter?: boolean; - nameType?: Type; // Type associated with a late-bound symbol } /* @internal */ @@ -4029,10 +4029,10 @@ namespace ts { /* @internal */ export interface WideningContext { - parent?: WideningContext; // Parent context - propertyName?: __String; // Name of property in parent - siblings?: Type[]; // Types of siblings - resolvedPropertyNames?: __String[]; // Property names occurring in sibling object literals + parent?: WideningContext; // Parent context + propertyName?: __String; // Name of property in parent + siblings?: Type[]; // Types of siblings + resolvedProperties?: Symbol[]; // Properties occurring in sibling object literals } /* @internal */ From fc85ba9e6a372b1f256e663380457b097c7b9c9d Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 6 Apr 2018 09:52:00 -0700 Subject: [PATCH 005/232] Limit getLiteralTypeFromPropertyName to only return string-like types --- src/compiler/checker.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ff3d53229ba..216854e9b6e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8108,10 +8108,16 @@ namespace ts { } function getLiteralTypeFromPropertyName(prop: Symbol) { - if (getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier || isKnownSymbol(prop)) { - return neverType; + if (!(getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier)) { + const nameType = getLateBoundSymbol(prop).nameType; + if (nameType) { + return nameType.flags & TypeFlags.StringLiteral ? nameType : neverType; + } + if (!isKnownSymbol(prop)) { + return getLiteralType(symbolName(prop)); + } } - return getLateBoundSymbol(prop).nameType || getLiteralType(symbolName(prop)); + return neverType; } function getLiteralTypeFromPropertyNames(type: Type) { From ccf20d3f6735d84c2a6fd5409247b43d2c40a53d Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Fri, 6 Apr 2018 09:52:10 -0700 Subject: [PATCH 006/232] Accept new baselines --- .../reference/api/tsserverlibrary.d.ts | 1 + tests/baselines/reference/api/typescript.d.ts | 1 + ...ndConstraintTypeChecksCorrectly.errors.txt | 29 +++++++++++++++++ .../objectLiteralNormalization.symbols | 32 +++++++++---------- 4 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index aca4e956181..a90af4eaf96 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2015,6 +2015,7 @@ declare namespace ts { members?: SymbolTable; exports?: SymbolTable; globalExports?: SymbolTable; + nameType?: Type; } enum InternalSymbolName { Call = "__call", diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index aa77372db45..3847c7c54a5 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2015,6 +2015,7 @@ declare namespace ts { members?: SymbolTable; exports?: SymbolTable; globalExports?: SymbolTable; + nameType?: Type; } enum InternalSymbolName { Call = "__call", diff --git a/tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt b/tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt new file mode 100644 index 00000000000..d9d573e0ab9 --- /dev/null +++ b/tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt @@ -0,0 +1,29 @@ +tests/cases/compiler/lateBoundConstraintTypeChecksCorrectly.ts(17,16): error TS2536: Type 'unique symbol' cannot be used to index type 'T'. +tests/cases/compiler/lateBoundConstraintTypeChecksCorrectly.ts(18,17): error TS2536: Type 'unique symbol' cannot be used to index type 'T'. + + +==== tests/cases/compiler/lateBoundConstraintTypeChecksCorrectly.ts (2 errors) ==== + declare const fooProp: unique symbol; + declare const barProp: unique symbol; + + type BothProps = typeof fooProp | typeof barProp; + + export interface Foo { + [fooProp]: T; + [barProp]: string; + } + + function f>(x: T) { + const abc = x[fooProp]; // expected: 'T[typeof fooProp]' + + /** + * Expected: no error + */ + const def: T[typeof fooProp] = x[fooProp]; + ~~~~~~~~~~~~~~~~~ +!!! error TS2536: Type 'unique symbol' cannot be used to index type 'T'. + const def2: T[typeof barProp] = x[barProp]; + ~~~~~~~~~~~~~~~~~ +!!! error TS2536: Type 'unique symbol' cannot be used to index type 'T'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralNormalization.symbols b/tests/baselines/reference/objectLiteralNormalization.symbols index 69882d81f76..416065ee5c9 100644 --- a/tests/baselines/reference/objectLiteralNormalization.symbols +++ b/tests/baselines/reference/objectLiteralNormalization.symbols @@ -15,14 +15,14 @@ a1.a; // number >a : Symbol(a, Decl(objectLiteralNormalization.ts, 1, 11), Decl(objectLiteralNormalization.ts, 1, 21), Decl(objectLiteralNormalization.ts, 1, 39)) a1.b; // string | undefined ->a1.b : Symbol(b, Decl(objectLiteralNormalization.ts, 1, 27), Decl(objectLiteralNormalization.ts, 1, 45)) +>a1.b : Symbol(b, Decl(objectLiteralNormalization.ts, 1, 45), Decl(objectLiteralNormalization.ts, 1, 27), Decl(objectLiteralNormalization.ts, 1, 45)) >a1 : Symbol(a1, Decl(objectLiteralNormalization.ts, 1, 3)) ->b : Symbol(b, Decl(objectLiteralNormalization.ts, 1, 27), Decl(objectLiteralNormalization.ts, 1, 45)) +>b : Symbol(b, Decl(objectLiteralNormalization.ts, 1, 45), Decl(objectLiteralNormalization.ts, 1, 27), Decl(objectLiteralNormalization.ts, 1, 45)) a1.c; // boolean | undefined ->a1.c : Symbol(c, Decl(objectLiteralNormalization.ts, 1, 53)) +>a1.c : Symbol(c, Decl(objectLiteralNormalization.ts, 1, 53), Decl(objectLiteralNormalization.ts, 1, 53)) >a1 : Symbol(a1, Decl(objectLiteralNormalization.ts, 1, 3)) ->c : Symbol(c, Decl(objectLiteralNormalization.ts, 1, 53)) +>c : Symbol(c, Decl(objectLiteralNormalization.ts, 1, 53), Decl(objectLiteralNormalization.ts, 1, 53)) a1 = { a: 1 }; >a1 : Symbol(a1, Decl(objectLiteralNormalization.ts, 1, 3)) @@ -48,14 +48,14 @@ let a2 = [{ a: 1, b: 2 }, { a: "abc" }, {}][0]; >a : Symbol(a, Decl(objectLiteralNormalization.ts, 10, 27)) a2.a; // string | number | undefined ->a2.a : Symbol(a, Decl(objectLiteralNormalization.ts, 10, 11), Decl(objectLiteralNormalization.ts, 10, 27)) +>a2.a : Symbol(a, Decl(objectLiteralNormalization.ts, 10, 11), Decl(objectLiteralNormalization.ts, 10, 27), Decl(objectLiteralNormalization.ts, 10, 27)) >a2 : Symbol(a2, Decl(objectLiteralNormalization.ts, 10, 3)) ->a : Symbol(a, Decl(objectLiteralNormalization.ts, 10, 11), Decl(objectLiteralNormalization.ts, 10, 27)) +>a : Symbol(a, Decl(objectLiteralNormalization.ts, 10, 11), Decl(objectLiteralNormalization.ts, 10, 27), Decl(objectLiteralNormalization.ts, 10, 27)) a2.b; // number | undefined ->a2.b : Symbol(b, Decl(objectLiteralNormalization.ts, 10, 17)) +>a2.b : Symbol(b, Decl(objectLiteralNormalization.ts, 10, 17), Decl(objectLiteralNormalization.ts, 1, 45)) >a2 : Symbol(a2, Decl(objectLiteralNormalization.ts, 10, 3)) ->b : Symbol(b, Decl(objectLiteralNormalization.ts, 10, 17)) +>b : Symbol(b, Decl(objectLiteralNormalization.ts, 10, 17), Decl(objectLiteralNormalization.ts, 1, 45)) a2 = { a: 10, b: 20 }; >a2 : Symbol(a2, Decl(objectLiteralNormalization.ts, 10, 3)) @@ -144,32 +144,32 @@ d1.pos; >pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) d1.pos.x; ->d1.pos.x : Symbol(x, Decl(objectLiteralNormalization.ts, 33, 29)) +>d1.pos.x : Symbol(x, Decl(objectLiteralNormalization.ts, 33, 29), Decl(objectLiteralNormalization.ts, 33, 29)) >d1.pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) >d1 : Symbol(d1, Decl(objectLiteralNormalization.ts, 33, 3)) >pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) ->x : Symbol(x, Decl(objectLiteralNormalization.ts, 33, 29)) +>x : Symbol(x, Decl(objectLiteralNormalization.ts, 33, 29), Decl(objectLiteralNormalization.ts, 33, 29)) d1.pos.y; ->d1.pos.y : Symbol(y, Decl(objectLiteralNormalization.ts, 33, 35)) +>d1.pos.y : Symbol(y, Decl(objectLiteralNormalization.ts, 33, 35), Decl(objectLiteralNormalization.ts, 33, 35)) >d1.pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) >d1 : Symbol(d1, Decl(objectLiteralNormalization.ts, 33, 3)) >pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) ->y : Symbol(y, Decl(objectLiteralNormalization.ts, 33, 35)) +>y : Symbol(y, Decl(objectLiteralNormalization.ts, 33, 35), Decl(objectLiteralNormalization.ts, 33, 35)) d1.pos.a; ->d1.pos.a : Symbol(a, Decl(objectLiteralNormalization.ts, 33, 73)) +>d1.pos.a : Symbol(a, Decl(objectLiteralNormalization.ts, 10, 27), Decl(objectLiteralNormalization.ts, 33, 73)) >d1.pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) >d1 : Symbol(d1, Decl(objectLiteralNormalization.ts, 33, 3)) >pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) ->a : Symbol(a, Decl(objectLiteralNormalization.ts, 33, 73)) +>a : Symbol(a, Decl(objectLiteralNormalization.ts, 10, 27), Decl(objectLiteralNormalization.ts, 33, 73)) d1.pos.b; ->d1.pos.b : Symbol(b, Decl(objectLiteralNormalization.ts, 33, 86)) +>d1.pos.b : Symbol(b, Decl(objectLiteralNormalization.ts, 1, 45), Decl(objectLiteralNormalization.ts, 33, 86)) >d1.pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) >d1 : Symbol(d1, Decl(objectLiteralNormalization.ts, 33, 3)) >pos : Symbol(pos, Decl(objectLiteralNormalization.ts, 33, 22), Decl(objectLiteralNormalization.ts, 33, 58)) ->b : Symbol(b, Decl(objectLiteralNormalization.ts, 33, 86)) +>b : Symbol(b, Decl(objectLiteralNormalization.ts, 1, 45), Decl(objectLiteralNormalization.ts, 33, 86)) declare function f(...items: T[]): T; >f : Symbol(f, Decl(objectLiteralNormalization.ts, 39, 9)) From ff20f38405e084bfec6a31fae6b60e39d04cc8c0 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 9 Apr 2018 07:45:13 -1000 Subject: [PATCH 007/232] Add support for numbers and symbols in keyof (but keep it disabled) --- src/compiler/checker.ts | 74 +++++++++++++++++++++++----- src/compiler/commandLineParser.ts | 6 +++ src/compiler/diagnosticMessages.json | 4 ++ src/compiler/types.ts | 3 +- 4 files changed, 73 insertions(+), 14 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 216854e9b6e..fb0e279df37 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -72,6 +72,7 @@ namespace ts { const strictPropertyInitialization = getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); const noImplicitAny = getStrictOptionValue(compilerOptions, "noImplicitAny"); const noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); + const keyofStringsOnly = true; // !!compilerOptions.keyofStringsOnly; const emitResolver = createResolver(); const nodeBuilder = createNodeBuilder(); @@ -346,6 +347,9 @@ namespace ts { const silentNeverType = createIntrinsicType(TypeFlags.Never, "never"); const implicitNeverType = createIntrinsicType(TypeFlags.Never, "never"); const nonPrimitiveType = createIntrinsicType(TypeFlags.NonPrimitive, "object"); + const stringNumberType = getUnionType([stringType, numberType]); + const stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]); + const keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType; const emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); @@ -420,6 +424,7 @@ namespace ts { let deferredGlobalAsyncIteratorType: GenericType; let deferredGlobalAsyncIterableIteratorType: GenericType; let deferredGlobalTemplateStringsArrayType: ObjectType; + let deferredGlobalExtractSymbol: Symbol; let deferredNodes: Node[]; let deferredUnusedIdentifierNodes: Node[]; @@ -4207,7 +4212,7 @@ namespace ts { // right hand expression is of a type parameter type. if (isVariableDeclaration(declaration) && declaration.parent.parent.kind === SyntaxKind.ForInStatement) { const indexType = getIndexType(checkNonNullExpression(declaration.parent.parent.expression)); - return indexType.flags & (TypeFlags.TypeParameter | TypeFlags.Index) ? indexType : stringType; + return indexType.flags & (TypeFlags.TypeParameter | TypeFlags.Index) ? getExtractStringType(indexType) : stringType; } if (isVariableDeclaration(declaration) && declaration.parent.parent.kind === SyntaxKind.ForOfStatement) { @@ -6015,6 +6020,7 @@ namespace ts { function resolveMappedTypeMembers(type: MappedType) { const members: SymbolTable = createSymbolTable(); let stringIndexInfo: IndexInfo; + let numberIndexInfo: IndexInfo; // Resolve upfront such that recursive references see an empty object type. setStructuredTypeMembers(type, emptySymbols, emptyArray, emptyArray, undefined, undefined); // In { [P in K]: T }, we refer to P as the type parameter type, K as the constraint type, @@ -6025,15 +6031,19 @@ namespace ts { const modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); // The 'T' in 'keyof T' const templateModifiers = getMappedTypeModifiers(type); const constraintDeclaration = type.declaration.typeParameter.constraint; + const include = keyofStringsOnly ? TypeFlags.StringLiteral : TypeFlags.StringOrNumberLiteralOrUnique; if (constraintDeclaration.kind === SyntaxKind.TypeOperator && (constraintDeclaration).operator === SyntaxKind.KeyOfKeyword) { // We have a { [P in keyof T]: X } for (const prop of getPropertiesOfType(modifiersType)) { - addMemberForKeyType(getLiteralTypeFromPropertyName(prop), undefined, prop); + addMemberForKeyType(getLiteralTypeFromPropertyName(prop, include), undefined, prop); } if (modifiersType.flags & TypeFlags.Any || getIndexInfoOfType(modifiersType, IndexKind.String)) { addMemberForKeyType(stringType); } + if (!keyofStringsOnly && getIndexInfoOfType(modifiersType, IndexKind.Number)) { + addMemberForKeyType(numberType); + } } else { // First, if the constraint type is a type parameter, obtain the base constraint. Then, @@ -6043,7 +6053,7 @@ namespace ts { const iterationType = keyType.flags & TypeFlags.Index ? getIndexType(getApparentType((keyType).type)) : keyType; forEachType(iterationType, addMemberForKeyType); } - setStructuredTypeMembers(type, members, emptyArray, emptyArray, stringIndexInfo, undefined); + setStructuredTypeMembers(type, members, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo); function addMemberForKeyType(t: Type, _index?: number, origin?: Symbol) { // Create a mapper from T to the current iteration type constituent. Then, if the @@ -6077,6 +6087,9 @@ namespace ts { else if (t.flags & (TypeFlags.Any | TypeFlags.String)) { stringIndexInfo = createIndexInfo(propType, !!(templateModifiers & MappedTypeModifiers.IncludeReadonly)); } + else if (t.flags & TypeFlags.Number) { + numberIndexInfo = createIndexInfo(propType, !!(templateModifiers & MappedTypeModifiers.IncludeReadonly)); + } } } @@ -6468,6 +6481,7 @@ namespace ts { t.flags & TypeFlags.BooleanLike ? globalBooleanType : t.flags & TypeFlags.ESSymbolLike ? getGlobalESSymbolType(/*reportErrors*/ languageVersion >= ScriptTarget.ES2015) : t.flags & TypeFlags.NonPrimitive ? emptyObjectType : + t.flags & TypeFlags.Index ? keyofConstraintType : t; } @@ -7665,6 +7679,10 @@ namespace ts { return symbol && getTypeOfGlobalSymbol(symbol, arity); } + function getGlobalExtractSymbol(): Symbol { + return deferredGlobalExtractSymbol || (deferredGlobalExtractSymbol = getGlobalSymbol("Extract" as __String, SymbolFlags.TypeAlias, Diagnostics.Cannot_find_global_type_0)); + } + /** * Instantiates a global type that is generic with some element type, and returns that instantiation. */ @@ -8107,11 +8125,11 @@ namespace ts { return type.resolvedIndexType; } - function getLiteralTypeFromPropertyName(prop: Symbol) { + function getLiteralTypeFromPropertyName(prop: Symbol, include: TypeFlags) { if (!(getDeclarationModifierFlagsFromSymbol(prop) & ModifierFlags.NonPublicAccessibilityModifier)) { const nameType = getLateBoundSymbol(prop).nameType; if (nameType) { - return nameType.flags & TypeFlags.StringLiteral ? nameType : neverType; + return nameType.flags & include ? nameType : neverType; } if (!isKnownSymbol(prop)) { return getLiteralType(symbolName(prop)); @@ -8120,8 +8138,25 @@ namespace ts { return neverType; } - function getLiteralTypeFromPropertyNames(type: Type) { - return getUnionType(map(getPropertiesOfType(type), getLiteralTypeFromPropertyName)); + function getLiteralTypeFromPropertyNames(type: Type, include: TypeFlags) { + return getUnionType(map(getPropertiesOfType(type), t => getLiteralTypeFromPropertyName(t, include))); + } + + function getNonEnumNumberIndexInfo(type: Type) { + const numberIndexInfo = getIndexInfoOfType(type, IndexKind.Number); + return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined; + } + + function getStringOnlyIndexType(type: Type) { + return type.flags & TypeFlags.Any || getIndexInfoOfType(type, IndexKind.String) ? stringType : + getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral); + } + + function getStringNumberSymbolIndexType(type: Type) { + return type.flags & TypeFlags.Any ? stringNumberSymbolType : + getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringNumberType, getLiteralTypeFromPropertyNames(type, TypeFlags.UniqueESSymbol)]) : + getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) : + getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.NumberLiteral | TypeFlags.UniqueESSymbol); } function getIndexType(type: Type): Type { @@ -8129,12 +8164,19 @@ namespace ts { maybeTypeOfKind(type, TypeFlags.InstantiableNonPrimitive) ? getIndexTypeForGenericType(type) : getObjectFlags(type) & ObjectFlags.Mapped ? getConstraintTypeFromMappedType(type) : type === wildcardType ? wildcardType : - type.flags & TypeFlags.Any || getIndexInfoOfType(type, IndexKind.String) ? stringType : - getLiteralTypeFromPropertyNames(type); + keyofStringsOnly ? getStringOnlyIndexType(type) : getStringNumberSymbolIndexType(type); + } + + function getExtractStringType(type: Type) { + if (keyofStringsOnly) { + return type; + } + const extractTypeAlias = getGlobalExtractSymbol(); + return extractTypeAlias ? getTypeAliasInstantiation(extractTypeAlias, [type, stringType]) : stringType; } function getIndexTypeOrString(type: Type): Type { - const indexType = getIndexType(type); + const indexType = getExtractStringType(getIndexType(type)); return indexType.flags & TypeFlags.Never ? stringType : indexType; } @@ -8632,7 +8674,7 @@ namespace ts { if (right.flags & TypeFlags.Union) { return mapType(right, t => getSpreadType(left, t, symbol, typeFlags, objectFlags)); } - if (right.flags & (TypeFlags.BooleanLike | TypeFlags.NumberLike | TypeFlags.StringLike | TypeFlags.EnumLike | TypeFlags.NonPrimitive)) { + if (right.flags & (TypeFlags.BooleanLike | TypeFlags.NumberLike | TypeFlags.StringLike | TypeFlags.EnumLike | TypeFlags.NonPrimitive | TypeFlags.Index)) { return left; } @@ -10379,6 +10421,12 @@ namespace ts { } } } + else if (source.flags & TypeFlags.Index) { + if (result = isRelatedTo(keyofConstraintType, target, reportErrors)) { + errorInfo = saveErrorInfo; + return result; + } + } else if (source.flags & TypeFlags.Conditional) { if (target.flags & TypeFlags.Conditional) { // Two conditional types 'T1 extends U1 ? X1 : Y1' and 'T2 extends U2 ? X2 : Y2' are related if @@ -15190,7 +15238,7 @@ namespace ts { // type, and any union of these types (like string | number). if (links.resolvedType.flags & TypeFlags.Nullable || !isTypeAssignableToKind(links.resolvedType, TypeFlags.StringLike | TypeFlags.NumberLike | TypeFlags.ESSymbolLike) && - !isTypeAssignableTo(links.resolvedType, getUnionType([stringType, numberType, esSymbolType]))) { + !isTypeAssignableTo(links.resolvedType, stringNumberSymbolType)) { error(node, Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any); } else { @@ -20841,7 +20889,7 @@ namespace ts { const type = getTypeFromMappedTypeNode(node); const constraintType = getConstraintTypeFromMappedType(type); - checkTypeAssignableTo(constraintType, stringType, node.typeParameter.constraint); + checkTypeAssignableTo(constraintType, keyofConstraintType, node.typeParameter.constraint); } function checkTypeOperator(node: TypeOperatorNode) { diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index f386c701dd7..86d4ffa1c3f 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -678,6 +678,12 @@ namespace ts { category: Diagnostics.Advanced_Options, description: Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types, }, + { + name: "keyofStringsOnly", + type: "boolean", + category: Diagnostics.Advanced_Options, + description: Diagnostics.Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols, + }, { // A list of plugins to load in the language service name: "plugins", diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0bf047c770d..756247b7459 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3516,6 +3516,10 @@ "category": "Error", "code": 6192 }, + "Resolve 'keyof' to string valued property names only (no numbers or symbols).": { + "category": "Message", + "code": 6193 + }, "Variable '{0}' implicitly has an '{1}' type.": { "category": "Error", "code": 7005 diff --git a/src/compiler/types.ts b/src/compiler/types.ts index bd526921c2a..2e6ac6f3190 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3596,7 +3596,7 @@ namespace ts { Intrinsic = Any | String | Number | Boolean | BooleanLiteral | ESSymbol | Void | Undefined | Null | Never | NonPrimitive, /* @internal */ Primitive = String | Number | Boolean | Enum | EnumLiteral | ESSymbol | Void | Undefined | Null | Literal | UniqueESSymbol, - StringLike = String | StringLiteral | Index, + StringLike = String | StringLiteral, NumberLike = Number | NumberLiteral | Enum, BooleanLike = Boolean | BooleanLiteral, EnumLike = Enum | EnumLiteral, @@ -4144,6 +4144,7 @@ namespace ts { inlineSources?: boolean; isolatedModules?: boolean; jsx?: JsxEmit; + keyofStringsOnly?: boolean; lib?: string[]; /*@internal*/listEmittedFiles?: boolean; /*@internal*/listFiles?: boolean; From 68ce69a351ad9100b7bd44f3791908bb7e09ff13 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 9 Apr 2018 07:45:55 -1000 Subject: [PATCH 008/232] Move 'PropertyKey' from es2015.core.d.ts to es5.d.ts --- src/lib/es2015.core.d.ts | 35 ----------------------------------- src/lib/es5.d.ts | 12 +++++++----- 2 files changed, 7 insertions(+), 40 deletions(-) diff --git a/src/lib/es2015.core.d.ts b/src/lib/es2015.core.d.ts index 68be040c29d..cfb300c784d 100644 --- a/src/lib/es2015.core.d.ts +++ b/src/lib/es2015.core.d.ts @@ -1,5 +1,3 @@ -declare type PropertyKey = string | number | symbol; - interface Array { /** * Returns the value of the first element in the array where predicate is true, and undefined @@ -258,20 +256,6 @@ interface NumberConstructor { parseInt(string: string, radix?: number): number; } -interface Object { - /** - * Determines whether an object has a property with the specified name. - * @param v A property name. - */ - hasOwnProperty(v: PropertyKey): boolean; - - /** - * Determines whether a specified property is enumerable. - * @param v A property name. - */ - propertyIsEnumerable(v: PropertyKey): boolean; -} - interface ObjectConstructor { /** * Copy the values of all of the enumerable own properties from one or more source objects to a @@ -327,25 +311,6 @@ interface ObjectConstructor { * @param proto The value of the new prototype or null. */ setPrototypeOf(o: any, proto: object | null): any; - - /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not - * inherited from the object's prototype. - * @param o Object that contains the property. - * @param p Name of the property. - */ - getOwnPropertyDescriptor(o: any, propertyKey: PropertyKey): PropertyDescriptor | undefined; - - /** - * Adds a property to an object, or modifies attributes of an existing property. - * @param o Object on which to add or modify the property. This can be a native JavaScript - * object (that is, a user-defined object or a built in object) or a DOM object. - * @param p The property name. - * @param attributes Descriptor for the property. It can be for a data property or an accessor - * property. - */ - defineProperty(o: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): any; } interface ReadonlyArray { diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 1f352cd6f39..9d38f3c2c7c 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -74,6 +74,8 @@ declare function escape(string: string): string; */ declare function unescape(string: string): string; +declare type PropertyKey = string | number | symbol; + interface PropertyDescriptor { configurable?: boolean; enumerable?: boolean; @@ -104,7 +106,7 @@ interface Object { * Determines whether an object has a property with the specified name. * @param v A property name. */ - hasOwnProperty(v: string): boolean; + hasOwnProperty(v: PropertyKey): boolean; /** * Determines whether an object exists in another object's prototype chain. @@ -116,7 +118,7 @@ interface Object { * Determines whether a specified property is enumerable. * @param v A property name. */ - propertyIsEnumerable(v: string): boolean; + propertyIsEnumerable(v: PropertyKey): boolean; } interface ObjectConstructor { @@ -139,7 +141,7 @@ interface ObjectConstructor { * @param o Object that contains the property. * @param p Name of the property. */ - getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor | undefined; + getOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined; /** * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly @@ -167,7 +169,7 @@ interface ObjectConstructor { * @param p The property name. * @param attributes Descriptor for the property. It can be for a data property or an accessor property. */ - defineProperty(o: any, p: string, attributes: PropertyDescriptor & ThisType): any; + defineProperty(o: any, p: PropertyKey, attributes: PropertyDescriptor & ThisType): any; /** * Adds one or more properties to an object, and/or modifies attributes of existing properties. @@ -1341,7 +1343,7 @@ type Pick = { /** * Construct a type with a set of properties K of type T */ -type Record = { +type Record = { [P in K]: T; }; From 2c021955608af3394807706b0d20d388cad2ee7b Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 9 Apr 2018 07:48:13 -1000 Subject: [PATCH 009/232] Accept new baselines --- .../reference/api/tsserverlibrary.d.ts | 3 +- tests/baselines/reference/api/typescript.d.ts | 3 +- .../classAppearsToHaveMembersOfObject.types | 4 +- .../complexRecursiveCollections.symbols | 8 +- .../reference/conditionalTypes1.errors.txt | 76 +++++--- .../reference/conditionalTypes2.errors.txt | 2 + .../controlFlowPropertyDeclarations.types | 4 +- ...coratorOnClassMethodParameter1.es6.symbols | 2 +- .../decoratorsOnComputedProperties.symbols | 2 +- .../decoratorsOnComputedProperties.types | 170 +++++++++--------- .../excessPropertyCheckWithEmptyObject.types | 4 +- .../reference/fixSignatureCaching.types | 16 +- .../reference/getterSetterNonAccessor.types | 4 +- .../reference/indexerConstraints2.types | 6 +- .../keyofAndIndexedAccessErrors.errors.txt | 6 + .../library_ObjectPrototypeProperties.types | 8 +- .../mappedTypeRelationships.errors.txt | 8 + ...singES6ArrayWithOnlyES6ArrayLib.errors.txt | 2 + ...orFromUsingES6FeaturesWithOnlyES5Lib.types | 4 +- ...ibrary_NoErrorDuplicateLibOptions1.symbols | 4 +- ...eLibrary_NoErrorDuplicateLibOptions1.types | 4 +- ...ibrary_NoErrorDuplicateLibOptions2.symbols | 4 +- ...eLibrary_NoErrorDuplicateLibOptions2.types | 4 +- ...larizeLibrary_TargetES5UsingES6Lib.symbols | 4 +- ...dularizeLibrary_TargetES5UsingES6Lib.types | 4 +- ...larizeLibrary_TargetES6UsingES6Lib.symbols | 4 +- ...dularizeLibrary_TargetES6UsingES6Lib.types | 4 +- ...Library_UsingES5LibAndES6FeatureLibs.types | 6 +- .../reference/neverUnionIntersection.types | 2 +- .../reference/numberPropertyAccess.types | 6 +- .../reference/objectLitGetterSetter.types | 4 +- ...peHidingMembersOfExtendedObject.errors.txt | 8 +- ...tringIndexerHidingObjectIndexer.errors.txt | 8 +- .../parserUsingConstructorAsIdentifier.types | 4 +- tests/baselines/reference/parserharness.types | 4 +- .../baselines/reference/propertyAccess.types | 6 +- .../reference/staticInstanceResolution2.types | 8 +- .../reference/stringPropertyAccess.types | 6 +- tests/baselines/reference/symbolType1.symbols | 2 +- .../typePredicateStructuralMatch.types | 8 +- .../reference/unspecializedConstraints.types | 10 +- .../useObjectValuesAndEntries3.symbols | 4 +- .../useObjectValuesAndEntries4.symbols | 4 +- 43 files changed, 251 insertions(+), 203 deletions(-) diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index a90af4eaf96..2be63b973a5 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2095,7 +2095,7 @@ declare namespace ts { Unit = 13536, StringOrNumberLiteral = 96, PossiblyFalsy = 14574, - StringLike = 524322, + StringLike = 34, NumberLike = 84, BooleanLike = 136, EnumLike = 272, @@ -2332,6 +2332,7 @@ declare namespace ts { inlineSources?: boolean; isolatedModules?: boolean; jsx?: JsxEmit; + keyofStringsOnly?: boolean; lib?: string[]; locale?: string; mapRoot?: string; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 3847c7c54a5..0b1b4f43511 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2095,7 +2095,7 @@ declare namespace ts { Unit = 13536, StringOrNumberLiteral = 96, PossiblyFalsy = 14574, - StringLike = 524322, + StringLike = 34, NumberLike = 84, BooleanLike = 136, EnumLike = 272, @@ -2332,6 +2332,7 @@ declare namespace ts { inlineSources?: boolean; isolatedModules?: boolean; jsx?: JsxEmit; + keyofStringsOnly?: boolean; lib?: string[]; locale?: string; mapRoot?: string; diff --git a/tests/baselines/reference/classAppearsToHaveMembersOfObject.types b/tests/baselines/reference/classAppearsToHaveMembersOfObject.types index 9c87fa18ecd..44aeedacba2 100644 --- a/tests/baselines/reference/classAppearsToHaveMembersOfObject.types +++ b/tests/baselines/reference/classAppearsToHaveMembersOfObject.types @@ -17,9 +17,9 @@ var r = c.toString(); var r2 = c.hasOwnProperty(''); >r2 : boolean >c.hasOwnProperty('') : boolean ->c.hasOwnProperty : (v: string) => boolean +>c.hasOwnProperty : (v: string | number | symbol) => boolean >c : C ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >'' : "" var o: Object = c; diff --git a/tests/baselines/reference/complexRecursiveCollections.symbols b/tests/baselines/reference/complexRecursiveCollections.symbols index 4f1a675edaf..4c49735f01d 100644 --- a/tests/baselines/reference/complexRecursiveCollections.symbols +++ b/tests/baselines/reference/complexRecursiveCollections.symbols @@ -1689,7 +1689,7 @@ declare module Immutable { export interface Class { >Class : Symbol(Class, Decl(immutable.ts, 214, 70)) >T : Symbol(T, Decl(immutable.ts, 215, 27)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) (values?: Partial | Iterable<[string, any]>): Instance & Readonly; >values : Symbol(values, Decl(immutable.ts, 216, 7)) @@ -1714,7 +1714,7 @@ declare module Immutable { export interface Instance { >Instance : Symbol(Instance, Decl(immutable.ts, 218, 5)) >T : Symbol(T, Decl(immutable.ts, 219, 30)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) readonly size: number; >size : Symbol(Instance.size, Decl(immutable.ts, 219, 49)) @@ -2005,7 +2005,7 @@ declare module Immutable { toJS(): Object; >toJS : Symbol(Keyed.toJS, Decl(immutable.ts, 269, 76)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) toJSON(): { [key: string]: V }; >toJSON : Symbol(Keyed.toJSON, Decl(immutable.ts, 270, 21)) @@ -2594,7 +2594,7 @@ declare module Immutable { toJS(): Object; >toJS : Symbol(Keyed.toJS, Decl(immutable.ts, 340, 59)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) toJSON(): { [key: string]: V }; >toJSON : Symbol(Keyed.toJSON, Decl(immutable.ts, 341, 21)) diff --git a/tests/baselines/reference/conditionalTypes1.errors.txt b/tests/baselines/reference/conditionalTypes1.errors.txt index 9599cc1bcba..5d1f72c14a0 100644 --- a/tests/baselines/reference/conditionalTypes1.errors.txt +++ b/tests/baselines/reference/conditionalTypes1.errors.txt @@ -20,22 +20,32 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(106,5): error TS2 Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'keyof T' is not assignable to type 'never'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'keyof T' is not assignable to type 'never'. + Type 'string' is not assignable to type 'never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(108,5): error TS2322: Type 'Pick' is not assignable to type 'Pick'. Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'keyof T' is not assignable to type 'never'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'keyof T' is not assignable to type 'never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(114,5): error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(115,5): error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. @@ -43,8 +53,12 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(115,5): error TS2 Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. Type 'keyof T' is not assignable to type 'never'. + Type 'string' is not assignable to type 'never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(116,5): error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(117,5): error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. @@ -207,11 +221,15 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. !!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. +!!! error TS2322: Type 'string' is not assignable to type 'never'. z = x; z = y; // Error ~ @@ -219,11 +237,14 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. !!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. } function f8(x: keyof T, y: FunctionPropertyNames, z: NonFunctionPropertyNames) { @@ -232,7 +253,10 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS y = x; // Error ~ !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. y = z; // Error ~ !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. @@ -242,10 +266,14 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. !!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. !!! error TS2322: Type 'keyof T' is not assignable to type 'never'. +!!! error TS2322: Type 'string' is not assignable to type 'never'. z = x; // Error ~ !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. z = y; // Error ~ !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. diff --git a/tests/baselines/reference/conditionalTypes2.errors.txt b/tests/baselines/reference/conditionalTypes2.errors.txt index 0e7844babc6..41adb72f62d 100644 --- a/tests/baselines/reference/conditionalTypes2.errors.txt +++ b/tests/baselines/reference/conditionalTypes2.errors.txt @@ -6,6 +6,7 @@ tests/cases/conformance/types/conditional/conditionalTypes2.ts(24,5): error TS23 Types of property 'foo' are incompatible. Type 'B extends string ? keyof B : B' is not assignable to type 'A extends string ? keyof A : A'. Type 'keyof B' is not assignable to type 'keyof A'. + Type 'string' is not assignable to type 'keyof A'. tests/cases/conformance/types/conditional/conditionalTypes2.ts(25,5): error TS2322: Type 'Invariant' is not assignable to type 'Invariant'. Types of property 'foo' are incompatible. Type 'A extends string ? keyof A : A' is not assignable to type 'B extends string ? keyof B : B'. @@ -60,6 +61,7 @@ tests/cases/conformance/types/conditional/conditionalTypes2.ts(75,12): error TS2 !!! error TS2322: Types of property 'foo' are incompatible. !!! error TS2322: Type 'B extends string ? keyof B : B' is not assignable to type 'A extends string ? keyof A : A'. !!! error TS2322: Type 'keyof B' is not assignable to type 'keyof A'. +!!! error TS2322: Type 'string' is not assignable to type 'keyof A'. b = a; // Error ~ !!! error TS2322: Type 'Invariant' is not assignable to type 'Invariant'. diff --git a/tests/baselines/reference/controlFlowPropertyDeclarations.types b/tests/baselines/reference/controlFlowPropertyDeclarations.types index 286124ca346..0e698b72608 100644 --- a/tests/baselines/reference/controlFlowPropertyDeclarations.types +++ b/tests/baselines/reference/controlFlowPropertyDeclarations.types @@ -371,11 +371,11 @@ export class StyleParser { if (!this.styles.hasOwnProperty(key)) { >!this.styles.hasOwnProperty(key) : boolean >this.styles.hasOwnProperty(key) : boolean ->this.styles.hasOwnProperty : (v: string) => boolean +>this.styles.hasOwnProperty : (v: string | number | symbol) => boolean >this.styles : {} >this : this >styles : {} ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >key : string } } diff --git a/tests/baselines/reference/decoratorOnClassMethodParameter1.es6.symbols b/tests/baselines/reference/decoratorOnClassMethodParameter1.es6.symbols index aee56f5a4f8..e33f0e8f7b9 100644 --- a/tests/baselines/reference/decoratorOnClassMethodParameter1.es6.symbols +++ b/tests/baselines/reference/decoratorOnClassMethodParameter1.es6.symbols @@ -2,7 +2,7 @@ declare function dec(target: Object, propertyKey: string | symbol, parameterIndex: number): void; >dec : Symbol(dec, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 0)) >target : Symbol(target, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 21)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >propertyKey : Symbol(propertyKey, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 36)) >parameterIndex : Symbol(parameterIndex, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 66)) diff --git a/tests/baselines/reference/decoratorsOnComputedProperties.symbols b/tests/baselines/reference/decoratorsOnComputedProperties.symbols index 65652b4524e..dc069f22c56 100644 --- a/tests/baselines/reference/decoratorsOnComputedProperties.symbols +++ b/tests/baselines/reference/decoratorsOnComputedProperties.symbols @@ -3,7 +3,7 @@ function x(o: object, k: PropertyKey) { } >x : Symbol(x, Decl(decoratorsOnComputedProperties.ts, 0, 0)) >o : Symbol(o, Decl(decoratorsOnComputedProperties.ts, 0, 11)) >k : Symbol(k, Decl(decoratorsOnComputedProperties.ts, 0, 21)) ->PropertyKey : Symbol(PropertyKey, Decl(lib.es2015.core.d.ts, --, --)) +>PropertyKey : Symbol(PropertyKey, Decl(lib.es5.d.ts, --, --)) let i = 0; >i : Symbol(i, Decl(decoratorsOnComputedProperties.ts, 1, 3)) diff --git a/tests/baselines/reference/decoratorsOnComputedProperties.types b/tests/baselines/reference/decoratorsOnComputedProperties.types index 24ed343c298..efbf9c5d263 100644 --- a/tests/baselines/reference/decoratorsOnComputedProperties.types +++ b/tests/baselines/reference/decoratorsOnComputedProperties.types @@ -1,9 +1,9 @@ === tests/cases/compiler/decoratorsOnComputedProperties.ts === function x(o: object, k: PropertyKey) { } ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >o : object ->k : PropertyKey ->PropertyKey : PropertyKey +>k : string | number | symbol +>PropertyKey : string | number | symbol let i = 0; >i : number @@ -32,25 +32,25 @@ class A { >A : A @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -85,13 +85,13 @@ class A { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -102,12 +102,12 @@ class A { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -119,25 +119,25 @@ void class B { >B : typeof B @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -172,13 +172,13 @@ void class B { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -189,12 +189,12 @@ void class B { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -205,25 +205,25 @@ class C { >C : C @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -258,13 +258,13 @@ class C { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -275,12 +275,12 @@ class C { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -298,25 +298,25 @@ void class D { >D : typeof D @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -351,13 +351,13 @@ void class D { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -368,12 +368,12 @@ void class D { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -390,25 +390,25 @@ class E { >E : E @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -443,13 +443,13 @@ class E { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -466,12 +466,12 @@ class E { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -483,25 +483,25 @@ void class F { >F : typeof F @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -536,13 +536,13 @@ void class F { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -559,12 +559,12 @@ void class F { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -575,25 +575,25 @@ class G { >G : G @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -628,13 +628,13 @@ class G { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -651,7 +651,7 @@ class G { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @@ -662,7 +662,7 @@ class G { >"method2" : "method2" @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -674,25 +674,25 @@ void class H { >H : typeof H @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -727,13 +727,13 @@ void class H { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @@ -750,7 +750,7 @@ void class H { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @@ -761,7 +761,7 @@ void class H { >"method2" : "method2" @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -772,25 +772,25 @@ class I { >I : I @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -825,20 +825,20 @@ class I { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string >null : null @x ["some" + "method"]() {} ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["some" + "method"] : () => void >"some" + "method" : string >"some" : "some" @@ -849,7 +849,7 @@ class I { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @@ -860,7 +860,7 @@ class I { >"method2" : "method2" @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null @@ -872,25 +872,25 @@ void class J { >J : typeof J @x ["property"]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property"] : any >"property" : "property" @x [Symbol.toStringTag]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.toStringTag] : any >Symbol.toStringTag : symbol >Symbol : SymbolConstructor >toStringTag : symbol @x ["property2"]: any = 2; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["property2"] : any >"property2" : "property2" >2 : 2 @x [Symbol.iterator]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[Symbol.iterator] : any >Symbol.iterator : symbol >Symbol : SymbolConstructor @@ -925,20 +925,20 @@ void class J { >foo : () => string @x [foo()]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string @x [foo()]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[foo()] : any >foo() : string >foo : () => string >null : null @x ["some" + "method"]() {} ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >["some" + "method"] : () => void >"some" + "method" : string >"some" : "some" @@ -949,7 +949,7 @@ void class J { >fieldNameA : string @x [fieldNameB]: any; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameB] : any >fieldNameB : string @@ -960,7 +960,7 @@ void class J { >"method2" : "method2" @x [fieldNameC]: any = null; ->x : (o: object, k: PropertyKey) => void +>x : (o: object, k: string | number | symbol) => void >[fieldNameC] : any >fieldNameC : string >null : null diff --git a/tests/baselines/reference/excessPropertyCheckWithEmptyObject.types b/tests/baselines/reference/excessPropertyCheckWithEmptyObject.types index ecf15c74da5..9748820aacd 100644 --- a/tests/baselines/reference/excessPropertyCheckWithEmptyObject.types +++ b/tests/baselines/reference/excessPropertyCheckWithEmptyObject.types @@ -4,9 +4,9 @@ // Excess property error expected here Object.defineProperty(window, "prop", { value: "v1.0.0", readonly: false }); >Object.defineProperty(window, "prop", { value: "v1.0.0", readonly: false }) : any ->Object.defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>Object.defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >Object : ObjectConstructor ->defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >window : any >"prop" : "prop" >{ value: "v1.0.0", readonly: false } : { value: string; readonly: boolean; } diff --git a/tests/baselines/reference/fixSignatureCaching.types b/tests/baselines/reference/fixSignatureCaching.types index c3f4dbc1522..8b66a3f7b95 100644 --- a/tests/baselines/reference/fixSignatureCaching.types +++ b/tests/baselines/reference/fixSignatureCaching.types @@ -1068,12 +1068,12 @@ define(function () { }; var hasOwnProp = Object.prototype.hasOwnProperty, ->hasOwnProp : (v: string) => boolean ->Object.prototype.hasOwnProperty : (v: string) => boolean +>hasOwnProp : (v: string | number | symbol) => boolean +>Object.prototype.hasOwnProperty : (v: string | number | symbol) => boolean >Object.prototype : Object >Object : ObjectConstructor >prototype : Object ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean isArray; >isArray : any @@ -1249,7 +1249,7 @@ define(function () { if (hasOwnProp.call(object, key)) { >hasOwnProp.call(object, key) : any >hasOwnProp.call : (this: Function, thisArg: any, ...argArray: any[]) => any ->hasOwnProp : (v: string) => boolean +>hasOwnProp : (v: string | number | symbol) => boolean >call : (this: Function, thisArg: any, ...argArray: any[]) => any >object : any >key : string @@ -1296,7 +1296,7 @@ define(function () { if (hasOwnProp.call(mobileDetectRules.props, key)) { >hasOwnProp.call(mobileDetectRules.props, key) : any >hasOwnProp.call : (this: Function, thisArg: any, ...argArray: any[]) => any ->hasOwnProp : (v: string) => boolean +>hasOwnProp : (v: string | number | symbol) => boolean >call : (this: Function, thisArg: any, ...argArray: any[]) => any >mobileDetectRules.props : any >mobileDetectRules : any @@ -1487,7 +1487,7 @@ define(function () { if (hasOwnProp.call(rules, key)) { >hasOwnProp.call(rules, key) : any >hasOwnProp.call : (this: Function, thisArg: any, ...argArray: any[]) => any ->hasOwnProp : (v: string) => boolean +>hasOwnProp : (v: string | number | symbol) => boolean >call : (this: Function, thisArg: any, ...argArray: any[]) => any >rules : any >key : string @@ -1538,7 +1538,7 @@ define(function () { if (hasOwnProp.call(rules, key)) { >hasOwnProp.call(rules, key) : any >hasOwnProp.call : (this: Function, thisArg: any, ...argArray: any[]) => any ->hasOwnProp : (v: string) => boolean +>hasOwnProp : (v: string | number | symbol) => boolean >call : (this: Function, thisArg: any, ...argArray: any[]) => any >rules : any >key : string @@ -1598,7 +1598,7 @@ define(function () { if (hasOwnProp.call(props, propertyName)) { >hasOwnProp.call(props, propertyName) : any >hasOwnProp.call : (this: Function, thisArg: any, ...argArray: any[]) => any ->hasOwnProp : (v: string) => boolean +>hasOwnProp : (v: string | number | symbol) => boolean >call : (this: Function, thisArg: any, ...argArray: any[]) => any >props : any >propertyName : any diff --git a/tests/baselines/reference/getterSetterNonAccessor.types b/tests/baselines/reference/getterSetterNonAccessor.types index 7253dcc07e6..fc707c22c36 100644 --- a/tests/baselines/reference/getterSetterNonAccessor.types +++ b/tests/baselines/reference/getterSetterNonAccessor.types @@ -9,9 +9,9 @@ function setFunc(v){} Object.defineProperty({}, "0", ({ >Object.defineProperty({}, "0", ({ get: getFunc, set: setFunc, configurable: true })) : any ->Object.defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>Object.defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >Object : ObjectConstructor ->defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >{} : {} >"0" : "0" >({ get: getFunc, set: setFunc, configurable: true }) : PropertyDescriptor diff --git a/tests/baselines/reference/indexerConstraints2.types b/tests/baselines/reference/indexerConstraints2.types index e2db782d788..ec2126f438d 100644 --- a/tests/baselines/reference/indexerConstraints2.types +++ b/tests/baselines/reference/indexerConstraints2.types @@ -125,14 +125,14 @@ interface P { } type NonIndexableUnion2 = string | number; ->NonIndexableUnion2 : NonIndexableUnion2 +>NonIndexableUnion2 : string | number interface Q { >Q : Q [u: NonIndexableUnion2]: A; ->u : NonIndexableUnion2 ->NonIndexableUnion2 : NonIndexableUnion2 +>u : string | number +>NonIndexableUnion2 : string | number >A : A } diff --git a/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt b/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt index 49f44115e72..44b8b4a6051 100644 --- a/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt +++ b/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt @@ -28,7 +28,9 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(76,5): error Type 'T' is not assignable to type 'U'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(77,5): error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof (T | U)'. Type 'keyof T' is not assignable to type 'keyof (T | U)'. + Type 'string' is not assignable to type 'keyof (T | U)'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(86,9): error TS2322: Type 'keyof T' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(88,9): error TS2322: Type 'T[keyof T]' is not assignable to type 'T[K]'. Type 'keyof T' is not assignable to type 'K'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(91,5): error TS2322: Type 'T[K]' is not assignable to type 'U[K]'. @@ -38,6 +40,7 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(94,5): error tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(97,5): error TS2322: Type 'T[K]' is not assignable to type 'T[J]'. Type 'K' is not assignable to type 'J'. Type 'keyof T' is not assignable to type 'J'. + Type 'string' is not assignable to type 'J'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error TS2322: Type 'T[K]' is not assignable to type 'U[J]'. Type 'T' is not assignable to type 'U'. @@ -175,6 +178,7 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error ~~ !!! error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof (T | U)'. !!! error TS2322: Type 'keyof T' is not assignable to type 'keyof (T | U)'. +!!! error TS2322: Type 'string' is not assignable to type 'keyof (T | U)'. k2 = k1; } @@ -186,6 +190,7 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error k = key // error, keyof T =/=> K ~ !!! error TS2322: Type 'keyof T' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. t[key] = tk; // ok, T[K] ==> T[keyof T] tk = t[key]; // error, T[keyof T] =/=> T[K] ~~ @@ -210,6 +215,7 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error !!! error TS2322: Type 'T[K]' is not assignable to type 'T[J]'. !!! error TS2322: Type 'K' is not assignable to type 'J'. !!! error TS2322: Type 'keyof T' is not assignable to type 'J'. +!!! error TS2322: Type 'string' is not assignable to type 'J'. tk = uj; uj = tk; // error diff --git a/tests/baselines/reference/library_ObjectPrototypeProperties.types b/tests/baselines/reference/library_ObjectPrototypeProperties.types index 2f41dd7c1eb..093b787a0ce 100644 --- a/tests/baselines/reference/library_ObjectPrototypeProperties.types +++ b/tests/baselines/reference/library_ObjectPrototypeProperties.types @@ -34,11 +34,11 @@ Object.prototype.valueOf(); Object.prototype.hasOwnProperty("string"); >Object.prototype.hasOwnProperty("string") : boolean ->Object.prototype.hasOwnProperty : (v: string) => boolean +>Object.prototype.hasOwnProperty : (v: string | number | symbol) => boolean >Object.prototype : Object >Object : ObjectConstructor >prototype : Object ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >"string" : "string" Object.prototype.isPrototypeOf(Object); @@ -52,10 +52,10 @@ Object.prototype.isPrototypeOf(Object); Object.prototype.propertyIsEnumerable("string"); >Object.prototype.propertyIsEnumerable("string") : boolean ->Object.prototype.propertyIsEnumerable : (v: string) => boolean +>Object.prototype.propertyIsEnumerable : (v: string | number | symbol) => boolean >Object.prototype : Object >Object : ObjectConstructor >prototype : Object ->propertyIsEnumerable : (v: string) => boolean +>propertyIsEnumerable : (v: string | number | symbol) => boolean >"string" : "string" diff --git a/tests/baselines/reference/mappedTypeRelationships.errors.txt b/tests/baselines/reference/mappedTypeRelationships.errors.txt index f5d0e66ff3f..ee49ef12283 100644 --- a/tests/baselines/reference/mappedTypeRelationships.errors.txt +++ b/tests/baselines/reference/mappedTypeRelationships.errors.txt @@ -43,12 +43,16 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(143,5): error TS Type 'T' is not assignable to type 'U'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(148,5): error TS2322: Type '{ [P in keyof T]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. Type 'keyof U' is not assignable to type 'keyof T'. + Type 'string' is not assignable to type 'keyof T'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(153,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: T[P]; }'. Type 'keyof T' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(158,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. Type 'keyof U' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(163,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: U[P]; }'. Type 'keyof T' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in K]: U[P]; }'. Type 'T[P]' is not assignable to type 'U[P]'. Type 'T' is not assignable to type 'U'. @@ -272,6 +276,7 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in keyof T]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. !!! error TS2322: Type 'keyof U' is not assignable to type 'keyof T'. +!!! error TS2322: Type 'string' is not assignable to type 'keyof T'. } function f73(x: { [P in K]: T[P] }, y: { [P in keyof T]: T[P] }) { @@ -280,6 +285,7 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: T[P]; }'. !!! error TS2322: Type 'keyof T' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. } function f74(x: { [P in K]: T[P] }, y: { [P in keyof U]: U[P] }) { @@ -288,6 +294,7 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. !!! error TS2322: Type 'keyof U' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. } function f75(x: { [P in K]: T[P] }, y: { [P in keyof T]: U[P] }) { @@ -296,6 +303,7 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: U[P]; }'. !!! error TS2322: Type 'keyof T' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. } function f76(x: { [P in K]: T[P] }, y: { [P in K]: U[P] }) { diff --git a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6ArrayWithOnlyES6ArrayLib.errors.txt b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6ArrayWithOnlyES6ArrayLib.errors.txt index 82bc36819a5..4c758633a26 100644 --- a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6ArrayWithOnlyES6ArrayLib.errors.txt +++ b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6ArrayWithOnlyES6ArrayLib.errors.txt @@ -1,12 +1,14 @@ error TS2318: Cannot find global type 'Boolean'. error TS2318: Cannot find global type 'IArguments'. error TS2318: Cannot find global type 'Number'. +error TS2318: Cannot find global type 'Object'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6ArrayWithOnlyES6ArrayLib.ts(3,12): error TS2693: 'Array' only refers to a type, but is being used as a value here. !!! error TS2318: Cannot find global type 'Boolean'. !!! error TS2318: Cannot find global type 'IArguments'. !!! error TS2318: Cannot find global type 'Number'. +!!! error TS2318: Cannot find global type 'Object'. ==== tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6ArrayWithOnlyES6ArrayLib.ts (1 errors) ==== // Error missing basic JavaScript objects function f(x: number, y: number, z: number) { diff --git a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.types b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.types index 834449a5a82..6081b16c835 100644 --- a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.types +++ b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.types @@ -80,9 +80,9 @@ var o = { }; o.hasOwnProperty(Symbol.hasInstance); >o.hasOwnProperty(Symbol.hasInstance) : boolean ->o.hasOwnProperty : (v: string) => boolean +>o.hasOwnProperty : (v: string | number | symbol) => boolean >o : { a: number; [Symbol.hasInstance](value: any): boolean; } ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >Symbol.hasInstance : any >Symbol : any >hasInstance : any diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols index d99084339dd..d3cd86ccfe4 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.symbols @@ -100,9 +100,9 @@ var o = { } }; o.hasOwnProperty(Symbol.hasInstance); ->o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >o : Symbol(o, Decl(modularizeLibrary_NoErrorDuplicateLibOptions1.ts, 38, 3)) ->hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >Symbol.hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) >hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types index 78e6a6bc3f5..4fdc3764e88 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions1.types @@ -124,9 +124,9 @@ var o = { }; o.hasOwnProperty(Symbol.hasInstance); >o.hasOwnProperty(Symbol.hasInstance) : boolean ->o.hasOwnProperty : { (v: PropertyKey): boolean; (v: string): boolean; } +>o.hasOwnProperty : (v: string | number | symbol) => boolean >o : { a: number; [Symbol.hasInstance](value: any): boolean; } ->hasOwnProperty : { (v: PropertyKey): boolean; (v: string): boolean; } +>hasOwnProperty : (v: string | number | symbol) => boolean >Symbol.hasInstance : symbol >Symbol : SymbolConstructor >hasInstance : symbol diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols index 5bb813f5c32..0450449ba64 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.symbols @@ -100,9 +100,9 @@ var o = { } }; o.hasOwnProperty(Symbol.hasInstance); ->o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >o : Symbol(o, Decl(modularizeLibrary_NoErrorDuplicateLibOptions2.ts, 38, 3)) ->hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >Symbol.hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) >hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) diff --git a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types index 4aabae824ee..8c3ad5b55af 100644 --- a/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types +++ b/tests/baselines/reference/modularizeLibrary_NoErrorDuplicateLibOptions2.types @@ -124,9 +124,9 @@ var o = { }; o.hasOwnProperty(Symbol.hasInstance); >o.hasOwnProperty(Symbol.hasInstance) : boolean ->o.hasOwnProperty : { (v: PropertyKey): boolean; (v: string): boolean; } +>o.hasOwnProperty : (v: string | number | symbol) => boolean >o : { a: number; [Symbol.hasInstance](value: any): boolean; } ->hasOwnProperty : { (v: PropertyKey): boolean; (v: string): boolean; } +>hasOwnProperty : (v: string | number | symbol) => boolean >Symbol.hasInstance : symbol >Symbol : SymbolConstructor >hasInstance : symbol diff --git a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols index c3c24d4690e..3793215b9e2 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols +++ b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.symbols @@ -100,9 +100,9 @@ var o = { } }; o.hasOwnProperty(Symbol.hasInstance); ->o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >o : Symbol(o, Decl(modularizeLibrary_TargetES5UsingES6Lib.ts, 38, 3)) ->hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >Symbol.hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) >hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) diff --git a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types index 2782c70ebd9..df4e231ba80 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types +++ b/tests/baselines/reference/modularizeLibrary_TargetES5UsingES6Lib.types @@ -124,9 +124,9 @@ var o = { }; o.hasOwnProperty(Symbol.hasInstance); >o.hasOwnProperty(Symbol.hasInstance) : boolean ->o.hasOwnProperty : { (v: PropertyKey): boolean; (v: string): boolean; } +>o.hasOwnProperty : (v: string | number | symbol) => boolean >o : { a: number; [Symbol.hasInstance](value: any): boolean; } ->hasOwnProperty : { (v: PropertyKey): boolean; (v: string): boolean; } +>hasOwnProperty : (v: string | number | symbol) => boolean >Symbol.hasInstance : symbol >Symbol : SymbolConstructor >hasInstance : symbol diff --git a/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.symbols b/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.symbols index ba9dd82df1e..2275ddb55ff 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.symbols +++ b/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.symbols @@ -65,9 +65,9 @@ var o = { } }; o.hasOwnProperty(Symbol.hasInstance); ->o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>o.hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >o : Symbol(o, Decl(modularizeLibrary_TargetES6UsingES6Lib.ts, 21, 3)) ->hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>hasOwnProperty : Symbol(Object.hasOwnProperty, Decl(lib.es5.d.ts, --, --)) >Symbol.hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) >Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) >hasInstance : Symbol(SymbolConstructor.hasInstance, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) diff --git a/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.types b/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.types index 9c0f81701dc..1902ac93f05 100644 --- a/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.types +++ b/tests/baselines/reference/modularizeLibrary_TargetES6UsingES6Lib.types @@ -79,9 +79,9 @@ var o = { }; o.hasOwnProperty(Symbol.hasInstance); >o.hasOwnProperty(Symbol.hasInstance) : boolean ->o.hasOwnProperty : { (v: string): boolean; (v: PropertyKey): boolean; } +>o.hasOwnProperty : (v: string | number | symbol) => boolean >o : { a: number; [Symbol.hasInstance](value: any): boolean; } ->hasOwnProperty : { (v: string): boolean; (v: PropertyKey): boolean; } +>hasOwnProperty : (v: string | number | symbol) => boolean >Symbol.hasInstance : symbol >Symbol : SymbolConstructor >hasInstance : symbol diff --git a/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types b/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types index ab24aaf12ba..e9213203637 100644 --- a/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types +++ b/tests/baselines/reference/modularizeLibrary_UsingES5LibAndES6FeatureLibs.types @@ -16,10 +16,10 @@ var p = new Proxy(t, {}); >{} : {} Reflect.ownKeys({}); ->Reflect.ownKeys({}) : PropertyKey[] ->Reflect.ownKeys : (target: object) => PropertyKey[] +>Reflect.ownKeys({}) : (string | number | symbol)[] +>Reflect.ownKeys : (target: object) => (string | number | symbol)[] >Reflect : typeof Reflect ->ownKeys : (target: object) => PropertyKey[] +>ownKeys : (target: object) => (string | number | symbol)[] >{} : {} function* idGen() { diff --git a/tests/baselines/reference/neverUnionIntersection.types b/tests/baselines/reference/neverUnionIntersection.types index 4f578052e9c..5d9085e72e6 100644 --- a/tests/baselines/reference/neverUnionIntersection.types +++ b/tests/baselines/reference/neverUnionIntersection.types @@ -6,7 +6,7 @@ type T02 = string & never; >T02 : never type T03 = string | number | never; ->T03 : T03 +>T03 : string | number type T04 = string & number & never; >T04 : never diff --git a/tests/baselines/reference/numberPropertyAccess.types b/tests/baselines/reference/numberPropertyAccess.types index e7ffcbc246d..b2baf38873c 100644 --- a/tests/baselines/reference/numberPropertyAccess.types +++ b/tests/baselines/reference/numberPropertyAccess.types @@ -13,9 +13,9 @@ var a = x.toExponential(); var b = x.hasOwnProperty('toFixed'); >b : boolean >x.hasOwnProperty('toFixed') : boolean ->x.hasOwnProperty : (v: string) => boolean +>x.hasOwnProperty : (v: string | number | symbol) => boolean >x : number ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >'toFixed' : "toFixed" var c = x['toExponential'](); @@ -28,7 +28,7 @@ var c = x['toExponential'](); var d = x['hasOwnProperty']('toFixed'); >d : boolean >x['hasOwnProperty']('toFixed') : boolean ->x['hasOwnProperty'] : (v: string) => boolean +>x['hasOwnProperty'] : (v: string | number | symbol) => boolean >x : number >'hasOwnProperty' : "hasOwnProperty" >'toFixed' : "toFixed" diff --git a/tests/baselines/reference/objectLitGetterSetter.types b/tests/baselines/reference/objectLitGetterSetter.types index c2ce173e029..05c748162d9 100644 --- a/tests/baselines/reference/objectLitGetterSetter.types +++ b/tests/baselines/reference/objectLitGetterSetter.types @@ -5,9 +5,9 @@ Object.defineProperty(obj, "accProperty", ({ >Object.defineProperty(obj, "accProperty", ({ get: function () { eval("public = 1;"); return 11; }, set: function (v) { } })) : any ->Object.defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>Object.defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >Object : ObjectConstructor ->defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >obj : {} >"accProperty" : "accProperty" >({ get: function () { eval("public = 1;"); return 11; }, set: function (v) { } }) : PropertyDescriptor diff --git a/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.errors.txt b/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.errors.txt index 19c12ebf62f..4f27c62e67d 100644 --- a/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.errors.txt +++ b/tests/baselines/reference/objectTypeHidingMembersOfExtendedObject.errors.txt @@ -1,8 +1,8 @@ tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'constructor' of type 'Function' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'data' of type 'A' is not assignable to string index type 'Object'. -tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'hasOwnProperty' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'hasOwnProperty' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'isPrototypeOf' of type '(v: Object) => boolean' is not assignable to string index type 'Object'. -tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'propertyIsEnumerable' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'propertyIsEnumerable' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'toLocaleString' of type '() => string' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'toString' of type '() => string' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts(11,5): error TS2411: Property 'valueOf' of type '() => Object' is not assignable to string index type 'Object'. @@ -25,11 +25,11 @@ tests/cases/conformance/types/members/objectTypeHidingMembersOfExtendedObject.ts ~~~~~~~~~~~~~~~~~~~~ !!! error TS2411: Property 'data' of type 'A' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2411: Property 'hasOwnProperty' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +!!! error TS2411: Property 'hasOwnProperty' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ !!! error TS2411: Property 'isPrototypeOf' of type '(v: Object) => boolean' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2411: Property 'propertyIsEnumerable' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +!!! error TS2411: Property 'propertyIsEnumerable' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ !!! error TS2411: Property 'toLocaleString' of type '() => string' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.errors.txt b/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.errors.txt index d09701c3b06..2fadffd195d 100644 --- a/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.errors.txt +++ b/tests/baselines/reference/objectTypeWithStringIndexerHidingObjectIndexer.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'constructor' of type 'Function' is not assignable to string index type 'Object'. -tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'hasOwnProperty' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'hasOwnProperty' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'isPrototypeOf' of type '(v: Object) => boolean' is not assignable to string index type 'Object'. -tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'propertyIsEnumerable' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'propertyIsEnumerable' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'toLocaleString' of type '() => string' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'toString' of type '() => string' is not assignable to string index type 'Object'. tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectIndexer.ts(5,5): error TS2411: Property 'valueOf' of type '() => Object' is not assignable to string index type 'Object'. @@ -16,11 +16,11 @@ tests/cases/conformance/types/members/objectTypeWithStringIndexerHidingObjectInd ~~~~~~~~~~~~~~~~~~~~ !!! error TS2411: Property 'constructor' of type 'Function' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2411: Property 'hasOwnProperty' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +!!! error TS2411: Property 'hasOwnProperty' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ !!! error TS2411: Property 'isPrototypeOf' of type '(v: Object) => boolean' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2411: Property 'propertyIsEnumerable' of type '(v: string) => boolean' is not assignable to string index type 'Object'. +!!! error TS2411: Property 'propertyIsEnumerable' of type '(v: string | number | symbol) => boolean' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ !!! error TS2411: Property 'toLocaleString' of type '() => string' is not assignable to string index type 'Object'. ~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/parserUsingConstructorAsIdentifier.types b/tests/baselines/reference/parserUsingConstructorAsIdentifier.types index fa5e60a12b8..d0cd25f887d 100644 --- a/tests/baselines/reference/parserUsingConstructorAsIdentifier.types +++ b/tests/baselines/reference/parserUsingConstructorAsIdentifier.types @@ -90,9 +90,9 @@ Object.defineProperty(constructor.prototype, "constructor", { value: constructor, writable: true, configurable: true, enumerable: true }); >Object.defineProperty(constructor.prototype, "constructor", { value: constructor, writable: true, configurable: true, enumerable: true }) : any ->Object.defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>Object.defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >Object : ObjectConstructor ->defineProperty : (o: any, p: string, attributes: PropertyDescriptor & ThisType) => any +>defineProperty : (o: any, p: string | number | symbol, attributes: PropertyDescriptor & ThisType) => any >constructor.prototype : any >constructor : any >prototype : any diff --git a/tests/baselines/reference/parserharness.types b/tests/baselines/reference/parserharness.types index 505cfe67c82..cc8bae97706 100644 --- a/tests/baselines/reference/parserharness.types +++ b/tests/baselines/reference/parserharness.types @@ -2810,11 +2810,11 @@ module Harness { if (this.fileCollection.hasOwnProperty(p)) { >this.fileCollection.hasOwnProperty(p) : boolean ->this.fileCollection.hasOwnProperty : (v: string) => boolean +>this.fileCollection.hasOwnProperty : (v: string | number | symbol) => boolean >this.fileCollection : {} >this : this >fileCollection : {} ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >p : string var current = this.fileCollection[p]; diff --git a/tests/baselines/reference/propertyAccess.types b/tests/baselines/reference/propertyAccess.types index 983718ee1fd..82af3d51316 100644 --- a/tests/baselines/reference/propertyAccess.types +++ b/tests/baselines/reference/propertyAccess.types @@ -139,10 +139,10 @@ var aa = obj.x; // Dotted property access of property that exists on value's apparent type var bb = obj.hasOwnProperty; ->bb : (v: string) => boolean ->obj.hasOwnProperty : (v: string) => boolean +>bb : (v: string | number | symbol) => boolean +>obj.hasOwnProperty : (v: string | number | symbol) => boolean >obj : { 10: string; x: string; y: number; z: { n: string; m: number; o: () => boolean; }; 'literal property': number; } ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean // Dotted property access of property that doesn't exist on value's apparent type var cc = obj.qqq; // error diff --git a/tests/baselines/reference/staticInstanceResolution2.types b/tests/baselines/reference/staticInstanceResolution2.types index 68abb3a08ce..e44f99d212f 100644 --- a/tests/baselines/reference/staticInstanceResolution2.types +++ b/tests/baselines/reference/staticInstanceResolution2.types @@ -4,9 +4,9 @@ class A { } A.hasOwnProperty('foo'); >A.hasOwnProperty('foo') : boolean ->A.hasOwnProperty : (v: string) => boolean +>A.hasOwnProperty : (v: string | number | symbol) => boolean >A : typeof A ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >'foo' : "foo" class B { @@ -16,9 +16,9 @@ class B { } B.hasOwnProperty('foo'); >B.hasOwnProperty('foo') : boolean ->B.hasOwnProperty : (v: string) => boolean +>B.hasOwnProperty : (v: string | number | symbol) => boolean >B : typeof B ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >'foo' : "foo" diff --git a/tests/baselines/reference/stringPropertyAccess.types b/tests/baselines/reference/stringPropertyAccess.types index fd2ec13da74..da8298178b6 100644 --- a/tests/baselines/reference/stringPropertyAccess.types +++ b/tests/baselines/reference/stringPropertyAccess.types @@ -14,9 +14,9 @@ var a = x.charAt(0); var b = x.hasOwnProperty('charAt'); >b : boolean >x.hasOwnProperty('charAt') : boolean ->x.hasOwnProperty : (v: string) => boolean +>x.hasOwnProperty : (v: string | number | symbol) => boolean >x : string ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >'charAt' : "charAt" var c = x['charAt'](0); @@ -30,7 +30,7 @@ var c = x['charAt'](0); var e = x['hasOwnProperty']('toFixed'); >e : boolean >x['hasOwnProperty']('toFixed') : boolean ->x['hasOwnProperty'] : (v: string) => boolean +>x['hasOwnProperty'] : (v: string | number | symbol) => boolean >x : string >'hasOwnProperty' : "hasOwnProperty" >'toFixed' : "toFixed" diff --git a/tests/baselines/reference/symbolType1.symbols b/tests/baselines/reference/symbolType1.symbols index ded0dcff47b..98c6a263632 100644 --- a/tests/baselines/reference/symbolType1.symbols +++ b/tests/baselines/reference/symbolType1.symbols @@ -9,7 +9,7 @@ Symbol instanceof Symbol(); (Symbol() || {}) instanceof Object; // This one should be okay, it's a valid way of distinguishing types >Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) Symbol instanceof (Symbol() || {}); >Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) diff --git a/tests/baselines/reference/typePredicateStructuralMatch.types b/tests/baselines/reference/typePredicateStructuralMatch.types index 9f7a129da15..c01f5f5b06a 100644 --- a/tests/baselines/reference/typePredicateStructuralMatch.types +++ b/tests/baselines/reference/typePredicateStructuralMatch.types @@ -46,9 +46,9 @@ function isResponseInData(value: T | { data: T}): value is { data: T } { return value.hasOwnProperty('data'); >value.hasOwnProperty('data') : boolean ->value.hasOwnProperty : (v: string) => boolean +>value.hasOwnProperty : (v: string | number | symbol) => boolean >value : T | { data: T; } ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >'data' : "data" } @@ -84,9 +84,9 @@ function isPlainResponse(value: T | { data: T}): value is T { return !value.hasOwnProperty('data'); >!value.hasOwnProperty('data') : boolean >value.hasOwnProperty('data') : boolean ->value.hasOwnProperty : (v: string) => boolean +>value.hasOwnProperty : (v: string | number | symbol) => boolean >value : T | { data: T; } ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >'data' : "data" } diff --git a/tests/baselines/reference/unspecializedConstraints.types b/tests/baselines/reference/unspecializedConstraints.types index f5d081968d9..4c3d0c00d0d 100644 --- a/tests/baselines/reference/unspecializedConstraints.types +++ b/tests/baselines/reference/unspecializedConstraints.types @@ -464,12 +464,12 @@ module ts { var hasOwnProperty = Object.prototype.hasOwnProperty; ->hasOwnProperty : (v: string) => boolean ->Object.prototype.hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean +>Object.prototype.hasOwnProperty : (v: string | number | symbol) => boolean >Object.prototype : Object >Object : ObjectConstructor >prototype : Object ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean function getProperty(map: Map, key: string): T { >getProperty : (map: Map, key: string) => T @@ -484,7 +484,7 @@ module ts { >!hasOwnProperty.call(map, key) : boolean >hasOwnProperty.call(map, key) : any >hasOwnProperty.call : (this: Function, thisArg: any, ...argArray: any[]) => any ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >call : (this: Function, thisArg: any, ...argArray: any[]) => any >map : Map >key : string @@ -507,7 +507,7 @@ module ts { return hasOwnProperty.call(map, key); >hasOwnProperty.call(map, key) : any >hasOwnProperty.call : (this: Function, thisArg: any, ...argArray: any[]) => any ->hasOwnProperty : (v: string) => boolean +>hasOwnProperty : (v: string | number | symbol) => boolean >call : (this: Function, thisArg: any, ...argArray: any[]) => any >map : Map >key : string diff --git a/tests/baselines/reference/useObjectValuesAndEntries3.symbols b/tests/baselines/reference/useObjectValuesAndEntries3.symbols index 65d5175eaa6..51f2b14cc93 100644 --- a/tests/baselines/reference/useObjectValuesAndEntries3.symbols +++ b/tests/baselines/reference/useObjectValuesAndEntries3.symbols @@ -6,7 +6,7 @@ var o = { a: 1, b: 2 }; for (var x of Object.values(o)) { >x : Symbol(x, Decl(useObjectValuesAndEntries3.ts, 2, 8)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >o : Symbol(o, Decl(useObjectValuesAndEntries3.ts, 0, 3)) let y = x; @@ -16,6 +16,6 @@ for (var x of Object.values(o)) { var entries = Object.entries(o); >entries : Symbol(entries, Decl(useObjectValuesAndEntries3.ts, 6, 3)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >o : Symbol(o, Decl(useObjectValuesAndEntries3.ts, 0, 3)) diff --git a/tests/baselines/reference/useObjectValuesAndEntries4.symbols b/tests/baselines/reference/useObjectValuesAndEntries4.symbols index adef865c04c..8c087361e7d 100644 --- a/tests/baselines/reference/useObjectValuesAndEntries4.symbols +++ b/tests/baselines/reference/useObjectValuesAndEntries4.symbols @@ -7,7 +7,7 @@ var o = { a: 1, b: 2 }; for (var x of Object.values(o)) { >x : Symbol(x, Decl(useObjectValuesAndEntries4.ts, 2, 8)) >Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --)) >o : Symbol(o, Decl(useObjectValuesAndEntries4.ts, 0, 3)) @@ -19,7 +19,7 @@ for (var x of Object.values(o)) { var entries = Object.entries(o); >entries : Symbol(entries, Decl(useObjectValuesAndEntries4.ts, 6, 3)) >Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --)) ->Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) +>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --)) >o : Symbol(o, Decl(useObjectValuesAndEntries4.ts, 0, 3)) From 6d93f3083975a2246c4dee76856ac06798789d39 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 9 Apr 2018 08:51:26 -1000 Subject: [PATCH 010/232] Enable 'keyof T' for full string | number | symbol --- src/compiler/checker.ts | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fb0e279df37..e6ba58987fb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -72,7 +72,7 @@ namespace ts { const strictPropertyInitialization = getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); const noImplicitAny = getStrictOptionValue(compilerOptions, "noImplicitAny"); const noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); - const keyofStringsOnly = true; // !!compilerOptions.keyofStringsOnly; + const keyofStringsOnly = !!compilerOptions.keyofStringsOnly; const emitResolver = createResolver(); const nodeBuilder = createNodeBuilder(); @@ -347,7 +347,6 @@ namespace ts { const silentNeverType = createIntrinsicType(TypeFlags.Never, "never"); const implicitNeverType = createIntrinsicType(TypeFlags.Never, "never"); const nonPrimitiveType = createIntrinsicType(TypeFlags.NonPrimitive, "object"); - const stringNumberType = getUnionType([stringType, numberType]); const stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]); const keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType; @@ -8147,24 +8146,15 @@ namespace ts { return numberIndexInfo !== enumNumberIndexInfo ? numberIndexInfo : undefined; } - function getStringOnlyIndexType(type: Type) { - return type.flags & TypeFlags.Any || getIndexInfoOfType(type, IndexKind.String) ? stringType : - getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral); - } - - function getStringNumberSymbolIndexType(type: Type) { - return type.flags & TypeFlags.Any ? stringNumberSymbolType : - getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringNumberType, getLiteralTypeFromPropertyNames(type, TypeFlags.UniqueESSymbol)]) : - getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) : - getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.NumberLiteral | TypeFlags.UniqueESSymbol); - } - function getIndexType(type: Type): Type { return type.flags & TypeFlags.Intersection ? getUnionType(map((type).types, t => getIndexType(t))) : maybeTypeOfKind(type, TypeFlags.InstantiableNonPrimitive) ? getIndexTypeForGenericType(type) : getObjectFlags(type) & ObjectFlags.Mapped ? getConstraintTypeFromMappedType(type) : type === wildcardType ? wildcardType : - keyofStringsOnly ? getStringOnlyIndexType(type) : getStringNumberSymbolIndexType(type); + type.flags & TypeFlags.Any || getIndexInfoOfType(type, IndexKind.String) ? keyofConstraintType : + keyofStringsOnly ? getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral) : + getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) : + getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.NumberLiteral | TypeFlags.UniqueESSymbol); } function getExtractStringType(type: Type) { From 0379666bbf099c943dc8b3681737b669f1823997 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 9 Apr 2018 08:51:55 -1000 Subject: [PATCH 011/232] Update tests --- tests/cases/compiler/deeplyNestedCheck.ts | 2 +- tests/cases/compiler/deferredLookupTypeResolution.ts | 2 +- tests/cases/compiler/deferredLookupTypeResolution2.ts | 2 +- tests/cases/compiler/indexedAccessRetainsIndexSignature.ts | 2 +- tests/cases/compiler/recursiveTypeRelations.ts | 2 +- tests/cases/conformance/types/conditional/conditionalTypes1.ts | 2 +- tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts | 2 +- .../conformance/types/keyof/keyofAndIndexedAccessErrors.ts | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/cases/compiler/deeplyNestedCheck.ts b/tests/cases/compiler/deeplyNestedCheck.ts index e95233af985..366599be966 100644 --- a/tests/cases/compiler/deeplyNestedCheck.ts +++ b/tests/cases/compiler/deeplyNestedCheck.ts @@ -5,5 +5,5 @@ interface DataSnapshot { } interface Snapshot extends DataSnapshot { - child(path: U): Snapshot; + child>(path: U): Snapshot; } diff --git a/tests/cases/compiler/deferredLookupTypeResolution.ts b/tests/cases/compiler/deferredLookupTypeResolution.ts index 6c9853266ad..2970540afbd 100644 --- a/tests/cases/compiler/deferredLookupTypeResolution.ts +++ b/tests/cases/compiler/deferredLookupTypeResolution.ts @@ -8,7 +8,7 @@ type StringContains = ( { [key: string]: 'false' } )[L] -type ObjectHasKey = StringContains +type ObjectHasKey = StringContains, L> type First = ObjectHasKey; // Should be deferred diff --git a/tests/cases/compiler/deferredLookupTypeResolution2.ts b/tests/cases/compiler/deferredLookupTypeResolution2.ts index 4aa18c092ba..6b8a161e6df 100644 --- a/tests/cases/compiler/deferredLookupTypeResolution2.ts +++ b/tests/cases/compiler/deferredLookupTypeResolution2.ts @@ -5,7 +5,7 @@ type StringContains = ({ [K in S]: 'true' } & { [key: string]: 'false'})[L]; -type ObjectHasKey = StringContains; +type ObjectHasKey = StringContains, L>; type A = ObjectHasKey; diff --git a/tests/cases/compiler/indexedAccessRetainsIndexSignature.ts b/tests/cases/compiler/indexedAccessRetainsIndexSignature.ts index d23cbe87ddf..11abf771edc 100644 --- a/tests/cases/compiler/indexedAccessRetainsIndexSignature.ts +++ b/tests/cases/compiler/indexedAccessRetainsIndexSignature.ts @@ -1,4 +1,4 @@ -type Diff = +type Diff = ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T] type Omit = Pick> type Omit1 = Pick>; diff --git a/tests/cases/compiler/recursiveTypeRelations.ts b/tests/cases/compiler/recursiveTypeRelations.ts index 18545300f77..f9f71ae04b1 100644 --- a/tests/cases/compiler/recursiveTypeRelations.ts +++ b/tests/cases/compiler/recursiveTypeRelations.ts @@ -1,6 +1,6 @@ // Repro from #14896 -type Attributes = { +type Attributes = { [Key in Keys]: string; } diff --git a/tests/cases/conformance/types/conditional/conditionalTypes1.ts b/tests/cases/conformance/types/conditional/conditionalTypes1.ts index 638cf473e19..f5c67f678eb 100644 --- a/tests/cases/conformance/types/conditional/conditionalTypes1.ts +++ b/tests/cases/conformance/types/conditional/conditionalTypes1.ts @@ -303,7 +303,7 @@ function f50() { // Repro from #21862 -type OldDiff = ( +type OldDiff = ( & { [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; } diff --git a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts index 9ec4e820f73..447fdebf68e 100644 --- a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts +++ b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts @@ -556,7 +556,7 @@ class AnotherSampleClass extends SampleClass { new AnotherSampleClass({}); // Positive repro from #17166 -function f3(t: T, k: K, tk: T[K]): void { +function f3>(t: T, k: K, tk: T[K]): void { for (let key in t) { key = k // ok, K ==> keyof T t[key] = tk; // ok, T[K] ==> T[keyof T] diff --git a/tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts b/tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts index f96bcdb6234..618f483655e 100644 --- a/tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts +++ b/tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts @@ -79,7 +79,7 @@ function f20(k1: keyof (T | U), k2: keyof (T & U), o1: T | U, o2: T & U) { } // Repro from #17166 -function f3( +function f3, U extends T, J extends K>( t: T, k: K, tk: T[K], u: U, j: J, uk: U[K], tj: T[J], uj: U[J]): void { for (let key in t) { key = k // ok, K ==> keyof T From b1545fe5eff229b3b04efb5e791954c40c630780 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 9 Apr 2018 08:52:20 -1000 Subject: [PATCH 012/232] Accept new baselines --- .../reference/conditionalTypes1.errors.txt | 118 ++++++++++-------- .../baselines/reference/conditionalTypes1.js | 4 +- .../reference/conditionalTypes1.symbols | 6 +- .../reference/conditionalTypes1.types | 2 +- .../reference/conditionalTypes2.errors.txt | 6 +- .../baselines/reference/deeplyNestedCheck.js | 2 +- .../reference/deeplyNestedCheck.symbols | 5 +- .../reference/deeplyNestedCheck.types | 5 +- .../reference/deferredLookupTypeResolution.js | 4 +- .../deferredLookupTypeResolution.symbols | 5 +- .../deferredLookupTypeResolution.types | 13 +- .../deferredLookupTypeResolution2.errors.txt | 10 +- .../deferredLookupTypeResolution2.js | 4 +- .../deferredLookupTypeResolution2.symbols | 7 +- .../deferredLookupTypeResolution2.types | 31 ++--- .../reference/for-inStatements.errors.txt | 8 +- .../for-inStatementsInvalid.errors.txt | 8 +- .../baselines/reference/forInStatement3.types | 2 +- .../reference/implicitAnyInCatch.types | 2 +- .../reference/inOperatorWithGeneric.types | 2 +- .../indexedAccessRetainsIndexSignature.js | 2 +- ...indexedAccessRetainsIndexSignature.symbols | 6 +- .../indexedAccessRetainsIndexSignature.types | 2 +- .../reference/indexerConstraints2.types | 6 +- .../reference/inferTypes1.errors.txt | 6 +- .../isomorphicMappedTypeInference.types | 44 +++---- tests/baselines/reference/keyofAndForIn.types | 24 ++-- .../reference/keyofAndIndexedAccess.js | 4 +- .../reference/keyofAndIndexedAccess.symbols | 17 +-- .../reference/keyofAndIndexedAccess.types | 43 +++---- .../keyofAndIndexedAccessErrors.errors.txt | 36 +++--- .../reference/keyofAndIndexedAccessErrors.js | 2 +- .../keyofAndIndexedAccessErrors.symbols | 27 ++-- .../keyofAndIndexedAccessErrors.types | 35 +++--- ...ndConstraintTypeChecksCorrectly.errors.txt | 29 ----- .../reference/mappedTypeErrors.errors.txt | 23 ++-- .../reference/mappedTypeErrors.types | 24 ++-- .../mappedTypeRelationships.errors.txt | 24 ++-- .../reference/mappedTypeWithAny.types | 2 +- tests/baselines/reference/mappedTypes4.types | 16 +-- .../reference/neverUnionIntersection.types | 2 +- .../recursiveTypeRelations.errors.txt | 2 +- .../reference/recursiveTypeRelations.js | 2 +- .../reference/recursiveTypeRelations.symbols | 2 +- .../reference/recursiveTypeRelations.types | 2 +- .../reference/typeGuardsTypeParameters.types | 12 +- 46 files changed, 330 insertions(+), 308 deletions(-) delete mode 100644 tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt diff --git a/tests/baselines/reference/conditionalTypes1.errors.txt b/tests/baselines/reference/conditionalTypes1.errors.txt index 5d1f72c14a0..acb72d2cb56 100644 --- a/tests/baselines/reference/conditionalTypes1.errors.txt +++ b/tests/baselines/reference/conditionalTypes1.errors.txt @@ -20,32 +20,39 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(106,5): error TS2 Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. - Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'keyof T' is not assignable to type 'never'. - Type 'string' is not assignable to type 'never'. + Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'keyof T' is not assignable to type 'never'. + Type 'string | number | symbol' is not assignable to type 'never'. + Type 'string' is not assignable to type 'never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(108,5): error TS2322: Type 'Pick' is not assignable to type 'Pick'. Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. - Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'keyof T' is not assignable to type 'never'. + Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'keyof T' is not assignable to type 'never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(114,5): error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. - Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(115,5): error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. @@ -53,12 +60,15 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(115,5): error TS2 Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. Type 'keyof T' is not assignable to type 'never'. - Type 'string' is not assignable to type 'never'. + Type 'string | number | symbol' is not assignable to type 'never'. + Type 'string' is not assignable to type 'never'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(116,5): error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. - Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. - Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. + Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. + Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. tests/cases/conformance/types/conditional/conditionalTypes1.ts(117,5): error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. @@ -221,15 +231,18 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. !!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. !!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. -!!! error TS2322: Type 'string' is not assignable to type 'never'. +!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'T[keyof T] extends Function ? keyof T : never' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'never'. +!!! error TS2322: Type 'string' is not assignable to type 'never'. z = x; z = y; // Error ~ @@ -237,14 +250,16 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. !!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. !!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. +!!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'never'. } function f8(x: keyof T, y: FunctionPropertyNames, z: NonFunctionPropertyNames) { @@ -253,10 +268,12 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS y = x; // Error ~ !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. y = z; // Error ~ !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]'. @@ -266,14 +283,17 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. !!! error TS2322: Type 'T[keyof T] extends Function ? never : keyof T' is not assignable to type 'T[keyof T] extends Function ? keyof T : never'. !!! error TS2322: Type 'keyof T' is not assignable to type 'never'. -!!! error TS2322: Type 'string' is not assignable to type 'never'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'never'. +!!! error TS2322: Type 'string' is not assignable to type 'never'. z = x; // Error ~ !!! error TS2322: Type 'keyof T' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. -!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'keyof T' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. +!!! error TS2322: Type 'string' is not assignable to type 'T[keyof T] extends Function ? never : keyof T'. z = y; // Error ~ !!! error TS2322: Type '{ [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]' is not assignable to type '{ [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]'. @@ -491,7 +511,7 @@ tests/cases/conformance/types/conditional/conditionalTypes1.ts(288,43): error TS // Repro from #21862 - type OldDiff = ( + type OldDiff = ( & { [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; } diff --git a/tests/baselines/reference/conditionalTypes1.js b/tests/baselines/reference/conditionalTypes1.js index 3e5e385625b..552a80d58a5 100644 --- a/tests/baselines/reference/conditionalTypes1.js +++ b/tests/baselines/reference/conditionalTypes1.js @@ -301,7 +301,7 @@ function f50() { // Repro from #21862 -type OldDiff = ( +type OldDiff = ( & { [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; } @@ -656,7 +656,7 @@ declare type T95 = T extends string ? boolean : number; declare const f44: (value: T94) => T95; declare const f45: (value: T95) => T94; declare function f50(): void; -declare type OldDiff = ({ +declare type OldDiff = ({ [P in T]: P; } & { [P in U]: never; diff --git a/tests/baselines/reference/conditionalTypes1.symbols b/tests/baselines/reference/conditionalTypes1.symbols index fb0ce83e0a7..5f6bb75514d 100644 --- a/tests/baselines/reference/conditionalTypes1.symbols +++ b/tests/baselines/reference/conditionalTypes1.symbols @@ -1186,10 +1186,10 @@ function f50() { // Repro from #21862 -type OldDiff = ( +type OldDiff = ( >OldDiff : Symbol(OldDiff, Decl(conditionalTypes1.ts, 298, 1)) >T : Symbol(T, Decl(conditionalTypes1.ts, 302, 13)) ->U : Symbol(U, Decl(conditionalTypes1.ts, 302, 30)) +>U : Symbol(U, Decl(conditionalTypes1.ts, 302, 33)) & { [P in T]: P; } >P : Symbol(P, Decl(conditionalTypes1.ts, 303, 9)) @@ -1198,7 +1198,7 @@ type OldDiff = ( & { [P in U]: never; } >P : Symbol(P, Decl(conditionalTypes1.ts, 304, 9)) ->U : Symbol(U, Decl(conditionalTypes1.ts, 302, 30)) +>U : Symbol(U, Decl(conditionalTypes1.ts, 302, 33)) & { [x: string]: never; } >x : Symbol(x, Decl(conditionalTypes1.ts, 305, 9)) diff --git a/tests/baselines/reference/conditionalTypes1.types b/tests/baselines/reference/conditionalTypes1.types index 2ba376781a5..90d2703d034 100644 --- a/tests/baselines/reference/conditionalTypes1.types +++ b/tests/baselines/reference/conditionalTypes1.types @@ -1343,7 +1343,7 @@ function f50() { // Repro from #21862 -type OldDiff = ( +type OldDiff = ( >OldDiff : ({ [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; })[T] >T : T >U : U diff --git a/tests/baselines/reference/conditionalTypes2.errors.txt b/tests/baselines/reference/conditionalTypes2.errors.txt index 41adb72f62d..127e94196f6 100644 --- a/tests/baselines/reference/conditionalTypes2.errors.txt +++ b/tests/baselines/reference/conditionalTypes2.errors.txt @@ -6,7 +6,8 @@ tests/cases/conformance/types/conditional/conditionalTypes2.ts(24,5): error TS23 Types of property 'foo' are incompatible. Type 'B extends string ? keyof B : B' is not assignable to type 'A extends string ? keyof A : A'. Type 'keyof B' is not assignable to type 'keyof A'. - Type 'string' is not assignable to type 'keyof A'. + Type 'string | number | symbol' is not assignable to type 'keyof A'. + Type 'string' is not assignable to type 'keyof A'. tests/cases/conformance/types/conditional/conditionalTypes2.ts(25,5): error TS2322: Type 'Invariant' is not assignable to type 'Invariant'. Types of property 'foo' are incompatible. Type 'A extends string ? keyof A : A' is not assignable to type 'B extends string ? keyof B : B'. @@ -61,7 +62,8 @@ tests/cases/conformance/types/conditional/conditionalTypes2.ts(75,12): error TS2 !!! error TS2322: Types of property 'foo' are incompatible. !!! error TS2322: Type 'B extends string ? keyof B : B' is not assignable to type 'A extends string ? keyof A : A'. !!! error TS2322: Type 'keyof B' is not assignable to type 'keyof A'. -!!! error TS2322: Type 'string' is not assignable to type 'keyof A'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'keyof A'. +!!! error TS2322: Type 'string' is not assignable to type 'keyof A'. b = a; // Error ~ !!! error TS2322: Type 'Invariant' is not assignable to type 'Invariant'. diff --git a/tests/baselines/reference/deeplyNestedCheck.js b/tests/baselines/reference/deeplyNestedCheck.js index 466ae94f12d..ccd234e2580 100644 --- a/tests/baselines/reference/deeplyNestedCheck.js +++ b/tests/baselines/reference/deeplyNestedCheck.js @@ -6,7 +6,7 @@ interface DataSnapshot { } interface Snapshot extends DataSnapshot { - child(path: U): Snapshot; + child>(path: U): Snapshot; } diff --git a/tests/baselines/reference/deeplyNestedCheck.symbols b/tests/baselines/reference/deeplyNestedCheck.symbols index a8b5af60880..80c531cd6d0 100644 --- a/tests/baselines/reference/deeplyNestedCheck.symbols +++ b/tests/baselines/reference/deeplyNestedCheck.symbols @@ -16,11 +16,12 @@ interface Snapshot extends DataSnapshot { >T : Symbol(T, Decl(deeplyNestedCheck.ts, 6, 19)) >DataSnapshot : Symbol(DataSnapshot, Decl(deeplyNestedCheck.ts, 0, 0)) - child(path: U): Snapshot; + child>(path: U): Snapshot; >child : Symbol(Snapshot.child, Decl(deeplyNestedCheck.ts, 6, 44)) >U : Symbol(U, Decl(deeplyNestedCheck.ts, 7, 8)) +>Extract : Symbol(Extract, Decl(lib.d.ts, --, --)) >T : Symbol(T, Decl(deeplyNestedCheck.ts, 6, 19)) ->path : Symbol(path, Decl(deeplyNestedCheck.ts, 7, 27)) +>path : Symbol(path, Decl(deeplyNestedCheck.ts, 7, 44)) >U : Symbol(U, Decl(deeplyNestedCheck.ts, 7, 8)) >Snapshot : Symbol(Snapshot, Decl(deeplyNestedCheck.ts, 4, 1)) >T : Symbol(T, Decl(deeplyNestedCheck.ts, 6, 19)) diff --git a/tests/baselines/reference/deeplyNestedCheck.types b/tests/baselines/reference/deeplyNestedCheck.types index e500fc75ed1..dc8550bc2cb 100644 --- a/tests/baselines/reference/deeplyNestedCheck.types +++ b/tests/baselines/reference/deeplyNestedCheck.types @@ -16,9 +16,10 @@ interface Snapshot extends DataSnapshot { >T : T >DataSnapshot : DataSnapshot - child(path: U): Snapshot; ->child : (path: U) => Snapshot + child>(path: U): Snapshot; +>child : >(path: U) => Snapshot >U : U +>Extract : Extract >T : T >path : U >U : U diff --git a/tests/baselines/reference/deferredLookupTypeResolution.js b/tests/baselines/reference/deferredLookupTypeResolution.js index e5baa6891e8..126f9d1345a 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution.js +++ b/tests/baselines/reference/deferredLookupTypeResolution.js @@ -6,7 +6,7 @@ type StringContains = ( { [key: string]: 'false' } )[L] -type ObjectHasKey = StringContains +type ObjectHasKey = StringContains, L> type First = ObjectHasKey; // Should be deferred @@ -43,7 +43,7 @@ declare type StringContains = ({ } & { [key: string]: 'false'; })[L]; -declare type ObjectHasKey = StringContains; +declare type ObjectHasKey = StringContains, L>; declare type First = ObjectHasKey; declare type T1 = ObjectHasKey<{ a: string; diff --git a/tests/baselines/reference/deferredLookupTypeResolution.symbols b/tests/baselines/reference/deferredLookupTypeResolution.symbols index 022dc3cc2f4..29906ac6ae1 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution.symbols +++ b/tests/baselines/reference/deferredLookupTypeResolution.symbols @@ -16,16 +16,17 @@ type StringContains = ( )[L] >L : Symbol(L, Decl(deferredLookupTypeResolution.ts, 2, 37)) -type ObjectHasKey = StringContains +type ObjectHasKey = StringContains, L> >ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution.ts, 5, 6)) >O : Symbol(O, Decl(deferredLookupTypeResolution.ts, 7, 18)) >L : Symbol(L, Decl(deferredLookupTypeResolution.ts, 7, 20)) >StringContains : Symbol(StringContains, Decl(deferredLookupTypeResolution.ts, 0, 0)) +>Extract : Symbol(Extract, Decl(lib.d.ts, --, --)) >O : Symbol(O, Decl(deferredLookupTypeResolution.ts, 7, 18)) >L : Symbol(L, Decl(deferredLookupTypeResolution.ts, 7, 20)) type First = ObjectHasKey; // Should be deferred ->First : Symbol(First, Decl(deferredLookupTypeResolution.ts, 7, 67)) +>First : Symbol(First, Decl(deferredLookupTypeResolution.ts, 7, 84)) >T : Symbol(T, Decl(deferredLookupTypeResolution.ts, 9, 11)) >ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution.ts, 5, 6)) >T : Symbol(T, Decl(deferredLookupTypeResolution.ts, 9, 11)) diff --git a/tests/baselines/reference/deferredLookupTypeResolution.types b/tests/baselines/reference/deferredLookupTypeResolution.types index cd123a6019e..4826b03329a 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution.types +++ b/tests/baselines/reference/deferredLookupTypeResolution.types @@ -16,28 +16,29 @@ type StringContains = ( )[L] >L : L -type ObjectHasKey = StringContains ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +type ObjectHasKey = StringContains, L> +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >O : O >L : L >StringContains : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L] +>Extract : Extract >O : O >L : L type First = ObjectHasKey; // Should be deferred ->First : ({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["0"] +>First : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })["0"] >T : T ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >T : T type T1 = ObjectHasKey<{ a: string }, 'a'>; // 'true' >T1 : "true" ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >a : string type T2 = ObjectHasKey<{ a: string }, 'b'>; // 'false' >T2 : "false" ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >a : string // Verify that mapped type isn't eagerly resolved in type-to-string operation diff --git a/tests/baselines/reference/deferredLookupTypeResolution2.errors.txt b/tests/baselines/reference/deferredLookupTypeResolution2.errors.txt index 6d1d579c0ad..88bcd2c4340 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution2.errors.txt +++ b/tests/baselines/reference/deferredLookupTypeResolution2.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/deferredLookupTypeResolution2.ts(14,13): error TS2536: Type '({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'. -tests/cases/compiler/deferredLookupTypeResolution2.ts(19,21): error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'. +tests/cases/compiler/deferredLookupTypeResolution2.ts(14,13): error TS2536: Type '({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'. +tests/cases/compiler/deferredLookupTypeResolution2.ts(19,21): error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'. ==== tests/cases/compiler/deferredLookupTypeResolution2.ts (2 errors) ==== @@ -7,7 +7,7 @@ tests/cases/compiler/deferredLookupTypeResolution2.ts(19,21): error TS2536: Type type StringContains = ({ [K in S]: 'true' } & { [key: string]: 'false'})[L]; - type ObjectHasKey = StringContains; + type ObjectHasKey = StringContains, L>; type A = ObjectHasKey; @@ -18,14 +18,14 @@ tests/cases/compiler/deferredLookupTypeResolution2.ts(19,21): error TS2536: Type // Error, "false" not handled type E = { true: 'true' }[ObjectHasKey]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2536: Type '({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'. +!!! error TS2536: Type '({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'. type Juxtapose = ({ true: 'otherwise' } & { [k: string]: 'true' })[ObjectHasKey]; // Error, "otherwise" is missing type DeepError = { true: 'true' }[Juxtapose]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'. +!!! error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'. type DeepOK = { true: 'true', otherwise: 'false' }[Juxtapose]; \ No newline at end of file diff --git a/tests/baselines/reference/deferredLookupTypeResolution2.js b/tests/baselines/reference/deferredLookupTypeResolution2.js index 97289f47f9c..3d40dcb4bbf 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution2.js +++ b/tests/baselines/reference/deferredLookupTypeResolution2.js @@ -3,7 +3,7 @@ type StringContains = ({ [K in S]: 'true' } & { [key: string]: 'false'})[L]; -type ObjectHasKey = StringContains; +type ObjectHasKey = StringContains, L>; type A = ObjectHasKey; @@ -33,7 +33,7 @@ declare type StringContains = ({ } & { [key: string]: 'false'; })[L]; -declare type ObjectHasKey = StringContains; +declare type ObjectHasKey = StringContains, L>; declare type A = ObjectHasKey; declare type B = ObjectHasKey<[string, number], '1'>; declare type C = ObjectHasKey<[string, number], '2'>; diff --git a/tests/baselines/reference/deferredLookupTypeResolution2.symbols b/tests/baselines/reference/deferredLookupTypeResolution2.symbols index ca55b3e407e..41064fae533 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution2.symbols +++ b/tests/baselines/reference/deferredLookupTypeResolution2.symbols @@ -10,16 +10,17 @@ type StringContains = ({ [K in S]: 'true' } >key : Symbol(key, Decl(deferredLookupTypeResolution2.ts, 2, 85)) >L : Symbol(L, Decl(deferredLookupTypeResolution2.ts, 2, 37)) -type ObjectHasKey = StringContains; +type ObjectHasKey = StringContains, L>; >ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution2.ts, 2, 112)) >O : Symbol(O, Decl(deferredLookupTypeResolution2.ts, 4, 18)) >L : Symbol(L, Decl(deferredLookupTypeResolution2.ts, 4, 20)) >StringContains : Symbol(StringContains, Decl(deferredLookupTypeResolution2.ts, 0, 0)) +>Extract : Symbol(Extract, Decl(lib.d.ts, --, --)) >O : Symbol(O, Decl(deferredLookupTypeResolution2.ts, 4, 18)) >L : Symbol(L, Decl(deferredLookupTypeResolution2.ts, 4, 20)) type A = ObjectHasKey; ->A : Symbol(A, Decl(deferredLookupTypeResolution2.ts, 4, 68)) +>A : Symbol(A, Decl(deferredLookupTypeResolution2.ts, 4, 85)) >T : Symbol(T, Decl(deferredLookupTypeResolution2.ts, 6, 7)) >ObjectHasKey : Symbol(ObjectHasKey, Decl(deferredLookupTypeResolution2.ts, 2, 112)) >T : Symbol(T, Decl(deferredLookupTypeResolution2.ts, 6, 7)) @@ -34,7 +35,7 @@ type C = ObjectHasKey<[string, number], '2'>; // "false" type D = A<[string]>; // "true" >D : Symbol(D, Decl(deferredLookupTypeResolution2.ts, 9, 45)) ->A : Symbol(A, Decl(deferredLookupTypeResolution2.ts, 4, 68)) +>A : Symbol(A, Decl(deferredLookupTypeResolution2.ts, 4, 85)) // Error, "false" not handled type E = { true: 'true' }[ObjectHasKey]; diff --git a/tests/baselines/reference/deferredLookupTypeResolution2.types b/tests/baselines/reference/deferredLookupTypeResolution2.types index 76354731097..88994722a2e 100644 --- a/tests/baselines/reference/deferredLookupTypeResolution2.types +++ b/tests/baselines/reference/deferredLookupTypeResolution2.types @@ -10,61 +10,62 @@ type StringContains = ({ [K in S]: 'true' } >key : string >L : L -type ObjectHasKey = StringContains; ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +type ObjectHasKey = StringContains, L>; +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >O : O >L : L >StringContains : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L] +>Extract : Extract >O : O >L : L type A = ObjectHasKey; ->A : ({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["0"] +>A : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })["0"] >T : T ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >T : T type B = ObjectHasKey<[string, number], '1'>; // "true" >B : "true" ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] type C = ObjectHasKey<[string, number], '2'>; // "false" >C : "false" ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] type D = A<[string]>; // "true" >D : "true" ->A : ({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["0"] +>A : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })["0"] // Error, "false" not handled type E = { true: 'true' }[ObjectHasKey]; ->E : { true: "true"; }[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]] +>E : { true: "true"; }[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]] >T : T >true : "true" ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >T : T type Juxtapose = ({ true: 'otherwise' } & { [k: string]: 'true' })[ObjectHasKey]; ->Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]] +>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]] >T : T >true : "otherwise" >k : string ->ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L] +>ObjectHasKey : ({ [K in Extract]: "true"; } & { [key: string]: "false"; })[L] >T : T // Error, "otherwise" is missing type DeepError = { true: 'true' }[Juxtapose]; ->DeepError : { true: "true"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]] +>DeepError : { true: "true"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]]] >T : T >true : "true" ->Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]] +>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]] >T : T type DeepOK = { true: 'true', otherwise: 'false' }[Juxtapose]; ->DeepOK : { true: "true"; otherwise: "false"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]] +>DeepOK : { true: "true"; otherwise: "false"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]]] >T : T >true : "true" >otherwise : "false" ->Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]] +>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in Extract]: "true"; } & { [key: string]: "false"; })["1"]] >T : T diff --git a/tests/baselines/reference/for-inStatements.errors.txt b/tests/baselines/reference/for-inStatements.errors.txt index 2ae4cdb79f0..50f31d669cd 100644 --- a/tests/baselines/reference/for-inStatements.errors.txt +++ b/tests/baselines/reference/for-inStatements.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/statements/for-inStatements/for-inStatements.ts(33,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. -tests/cases/conformance/statements/for-inStatements/for-inStatements.ts(50,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. +tests/cases/conformance/statements/for-inStatements/for-inStatements.ts(33,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. +tests/cases/conformance/statements/for-inStatements/for-inStatements.ts(50,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. tests/cases/conformance/statements/for-inStatements/for-inStatements.ts(79,15): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'Color.Blue'. @@ -38,7 +38,7 @@ tests/cases/conformance/statements/for-inStatements/for-inStatements.ts(79,15): for (var x in this.biz) { } for (var x in this) { } ~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. return null; } @@ -57,7 +57,7 @@ tests/cases/conformance/statements/for-inStatements/for-inStatements.ts(79,15): for (var x in this.biz) { } for (var x in this) { } ~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. for (var x in super.biz) { } for (var x in super.biz()) { } diff --git a/tests/baselines/reference/for-inStatementsInvalid.errors.txt b/tests/baselines/reference/for-inStatementsInvalid.errors.txt index 3d7dd1c79f3..8e1bb29d083 100644 --- a/tests/baselines/reference/for-inStatementsInvalid.errors.txt +++ b/tests/baselines/reference/for-inStatementsInvalid.errors.txt @@ -9,10 +9,10 @@ tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(1 tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(20,15): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'string'. tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(22,15): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'string'. tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(29,23): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'number'. -tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(31,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. +tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(31,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(38,23): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'number'. tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(46,23): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'number'. -tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(48,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. +tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(48,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(51,23): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'number'. tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(62,15): error TS2407: The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type 'number'. @@ -72,7 +72,7 @@ tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(6 for (var x in this.biz) { } for (var x in this) { } ~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. return null; } @@ -95,7 +95,7 @@ tests/cases/conformance/statements/for-inStatements/for-inStatementsInvalid.ts(6 for (var x in this.biz) { } for (var x in this) { } ~ -!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'keyof this'. +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x' must be of type 'string', but here has type 'Extract'. for (var x in super.biz) { } for (var x in super.biz()) { } diff --git a/tests/baselines/reference/forInStatement3.types b/tests/baselines/reference/forInStatement3.types index 09e6cf3ad96..9fe63651f55 100644 --- a/tests/baselines/reference/forInStatement3.types +++ b/tests/baselines/reference/forInStatement3.types @@ -8,7 +8,7 @@ function F() { >T : T for (var a in expr) { ->a : keyof T +>a : Extract >expr : T } } diff --git a/tests/baselines/reference/implicitAnyInCatch.types b/tests/baselines/reference/implicitAnyInCatch.types index 93cce09928e..6f70165407f 100644 --- a/tests/baselines/reference/implicitAnyInCatch.types +++ b/tests/baselines/reference/implicitAnyInCatch.types @@ -22,7 +22,7 @@ class C { >temp : () => void for (var x in this) { ->x : keyof this +>x : Extract >this : this } } diff --git a/tests/baselines/reference/inOperatorWithGeneric.types b/tests/baselines/reference/inOperatorWithGeneric.types index eba9bf1419b..dd373d8e075 100644 --- a/tests/baselines/reference/inOperatorWithGeneric.types +++ b/tests/baselines/reference/inOperatorWithGeneric.types @@ -9,7 +9,7 @@ class C { >T : T for (var p in x) { ->p : keyof T +>p : Extract >x : T } } diff --git a/tests/baselines/reference/indexedAccessRetainsIndexSignature.js b/tests/baselines/reference/indexedAccessRetainsIndexSignature.js index 1b77b95527b..92952515779 100644 --- a/tests/baselines/reference/indexedAccessRetainsIndexSignature.js +++ b/tests/baselines/reference/indexedAccessRetainsIndexSignature.js @@ -1,5 +1,5 @@ //// [indexedAccessRetainsIndexSignature.ts] -type Diff = +type Diff = ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T] type Omit = Pick> type Omit1 = Pick>; diff --git a/tests/baselines/reference/indexedAccessRetainsIndexSignature.symbols b/tests/baselines/reference/indexedAccessRetainsIndexSignature.symbols index 9858f6fc162..ad46c367ba6 100644 --- a/tests/baselines/reference/indexedAccessRetainsIndexSignature.symbols +++ b/tests/baselines/reference/indexedAccessRetainsIndexSignature.symbols @@ -1,15 +1,15 @@ === tests/cases/compiler/indexedAccessRetainsIndexSignature.ts === -type Diff = +type Diff = >Diff : Symbol(Diff, Decl(indexedAccessRetainsIndexSignature.ts, 0, 0)) >T : Symbol(T, Decl(indexedAccessRetainsIndexSignature.ts, 0, 10)) ->U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 0, 27)) +>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 0, 30)) ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T] >P : Symbol(P, Decl(indexedAccessRetainsIndexSignature.ts, 1, 8)) >T : Symbol(T, Decl(indexedAccessRetainsIndexSignature.ts, 0, 10)) >P : Symbol(P, Decl(indexedAccessRetainsIndexSignature.ts, 1, 8)) >P : Symbol(P, Decl(indexedAccessRetainsIndexSignature.ts, 1, 26)) ->U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 0, 27)) +>U : Symbol(U, Decl(indexedAccessRetainsIndexSignature.ts, 0, 30)) >x : Symbol(x, Decl(indexedAccessRetainsIndexSignature.ts, 1, 48)) >T : Symbol(T, Decl(indexedAccessRetainsIndexSignature.ts, 0, 10)) diff --git a/tests/baselines/reference/indexedAccessRetainsIndexSignature.types b/tests/baselines/reference/indexedAccessRetainsIndexSignature.types index 8dcbe9bf218..5334cf891df 100644 --- a/tests/baselines/reference/indexedAccessRetainsIndexSignature.types +++ b/tests/baselines/reference/indexedAccessRetainsIndexSignature.types @@ -1,5 +1,5 @@ === tests/cases/compiler/indexedAccessRetainsIndexSignature.ts === -type Diff = +type Diff = >Diff : ({ [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; })[T] >T : T >U : U diff --git a/tests/baselines/reference/indexerConstraints2.types b/tests/baselines/reference/indexerConstraints2.types index ec2126f438d..e2db782d788 100644 --- a/tests/baselines/reference/indexerConstraints2.types +++ b/tests/baselines/reference/indexerConstraints2.types @@ -125,14 +125,14 @@ interface P { } type NonIndexableUnion2 = string | number; ->NonIndexableUnion2 : string | number +>NonIndexableUnion2 : NonIndexableUnion2 interface Q { >Q : Q [u: NonIndexableUnion2]: A; ->u : string | number ->NonIndexableUnion2 : string | number +>u : NonIndexableUnion2 +>NonIndexableUnion2 : NonIndexableUnion2 >A : A } diff --git a/tests/baselines/reference/inferTypes1.errors.txt b/tests/baselines/reference/inferTypes1.errors.txt index 01907bdc95b..4684b8f5e34 100644 --- a/tests/baselines/reference/inferTypes1.errors.txt +++ b/tests/baselines/reference/inferTypes1.errors.txt @@ -17,7 +17,8 @@ tests/cases/conformance/types/conditional/inferTypes1.ts(75,43): error TS2304: C tests/cases/conformance/types/conditional/inferTypes1.ts(75,43): error TS4081: Exported type alias 'T62' has or is using private name 'U'. tests/cases/conformance/types/conditional/inferTypes1.ts(82,44): error TS2344: Type 'U' does not satisfy the constraint 'string'. Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/conditional/inferTypes1.ts(144,40): error TS2322: Type 'T' is not assignable to type 'string'. +tests/cases/conformance/types/conditional/inferTypes1.ts(144,40): error TS2322: Type 'T' is not assignable to type 'string | number | symbol'. + Type 'T' is not assignable to type 'symbol'. ==== tests/cases/conformance/types/conditional/inferTypes1.ts (16 errors) ==== @@ -200,7 +201,8 @@ tests/cases/conformance/types/conditional/inferTypes1.ts(144,40): error TS2322: type A = T extends string ? { [P in T]: void; } : T; type B = string extends T ? { [P in T]: void; } : T; // Error ~ -!!! error TS2322: Type 'T' is not assignable to type 'string'. +!!! error TS2322: Type 'T' is not assignable to type 'string | number | symbol'. +!!! error TS2322: Type 'T' is not assignable to type 'symbol'. // Repro from #22302 diff --git a/tests/baselines/reference/isomorphicMappedTypeInference.types b/tests/baselines/reference/isomorphicMappedTypeInference.types index b24bb071eeb..d0db5608b6f 100644 --- a/tests/baselines/reference/isomorphicMappedTypeInference.types +++ b/tests/baselines/reference/isomorphicMappedTypeInference.types @@ -64,19 +64,19 @@ function boxify(obj: T): Boxified { >T : T for (let k in obj) { ->k : keyof T +>k : Extract >obj : T result[k] = box(obj[k]); ->result[k] = box(obj[k]) : Box ->result[k] : Boxified[keyof T] +>result[k] = box(obj[k]) : Box]> +>result[k] : Boxified[Extract] >result : Boxified ->k : keyof T ->box(obj[k]) : Box +>k : Extract +>box(obj[k]) : Box]> >box : (x: T) => Box ->obj[k] : T[keyof T] +>obj[k] : T[Extract] >obj : T ->k : keyof T +>k : Extract } return result; >result : Boxified @@ -97,19 +97,19 @@ function unboxify(obj: Boxified): T { >T : T for (let k in obj) { ->k : keyof T +>k : Extract >obj : Boxified result[k] = unbox(obj[k]); ->result[k] = unbox(obj[k]) : T[keyof T] ->result[k] : T[keyof T] +>result[k] = unbox(obj[k]) : T[Extract] +>result[k] : T[Extract] >result : T ->k : keyof T ->unbox(obj[k]) : T[keyof T] +>k : Extract +>unbox(obj[k]) : T[Extract] >unbox : (x: Box) => T ->obj[k] : Boxified[keyof T] +>obj[k] : Boxified[Extract] >obj : Boxified ->k : keyof T +>k : Extract } return result; >result : T @@ -125,19 +125,19 @@ function assignBoxified(obj: Boxified, values: T) { >T : T for (let k in values) { ->k : keyof T +>k : Extract >values : T obj[k].value = values[k]; ->obj[k].value = values[k] : T[keyof T] ->obj[k].value : T[keyof T] ->obj[k] : Boxified[keyof T] +>obj[k].value = values[k] : T[Extract] +>obj[k].value : T[Extract] +>obj[k] : Boxified[Extract] >obj : Boxified ->k : keyof T ->value : T[keyof T] ->values[k] : T[keyof T] +>k : Extract +>value : T[Extract] +>values[k] : T[Extract] >values : T ->k : keyof T +>k : Extract } } diff --git a/tests/baselines/reference/keyofAndForIn.types b/tests/baselines/reference/keyofAndForIn.types index c4997c05bfe..9de1b651843 100644 --- a/tests/baselines/reference/keyofAndForIn.types +++ b/tests/baselines/reference/keyofAndForIn.types @@ -33,14 +33,14 @@ function f1(obj: { [P in K]: T }, k: K) { >k1 : K } for (let k2 in obj) { ->k2 : K +>k2 : Extract >obj : { [P in K]: T; } let x2 = obj[k2]; ->x2 : { [P in K]: T; }[K] ->obj[k2] : { [P in K]: T; }[K] +>x2 : { [P in K]: T; }[Extract] +>obj[k2] : { [P in K]: T; }[Extract] >obj : { [P in K]: T; } ->k2 : K +>k2 : Extract } } @@ -76,14 +76,14 @@ function f2(obj: { [P in keyof T]: T[P] }, k: keyof T) { >k1 : keyof T } for (let k2 in obj) { ->k2 : keyof T +>k2 : Extract >obj : { [P in keyof T]: T[P]; } let x2 = obj[k2]; ->x2 : { [P in keyof T]: T[P]; }[keyof T] ->obj[k2] : { [P in keyof T]: T[P]; }[keyof T] +>x2 : { [P in keyof T]: T[P]; }[Extract] +>obj[k2] : { [P in keyof T]: T[P]; }[Extract] >obj : { [P in keyof T]: T[P]; } ->k2 : keyof T +>k2 : Extract } } @@ -121,13 +121,13 @@ function f3(obj: { [P in K]: T[P] }, k: K) { >k1 : K } for (let k2 in obj) { ->k2 : K +>k2 : Extract >obj : { [P in K]: T[P]; } let x2 = obj[k2]; ->x2 : { [P in K]: T[P]; }[K] ->obj[k2] : { [P in K]: T[P]; }[K] +>x2 : { [P in K]: T[P]; }[Extract] +>obj[k2] : { [P in K]: T[P]; }[Extract] >obj : { [P in K]: T[P]; } ->k2 : K +>k2 : Extract } } diff --git a/tests/baselines/reference/keyofAndIndexedAccess.js b/tests/baselines/reference/keyofAndIndexedAccess.js index 1ee6bfc218b..70f1c8b856e 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.js +++ b/tests/baselines/reference/keyofAndIndexedAccess.js @@ -554,7 +554,7 @@ class AnotherSampleClass extends SampleClass { new AnotherSampleClass({}); // Positive repro from #17166 -function f3(t: T, k: K, tk: T[K]): void { +function f3>(t: T, k: K, tk: T[K]): void { for (let key in t) { key = k // ok, K ==> keyof T t[key] = tk; // ok, T[K] ==> T[keyof T] @@ -1208,7 +1208,7 @@ declare class AnotherSampleClass extends SampleClass { constructor(props: T); brokenMethod(): void; } -declare function f3(t: T, k: K, tk: T[K]): void; +declare function f3>(t: T, k: K, tk: T[K]): void; declare type Predicates = { [T in keyof TaggedRecord]: (variant: TaggedRecord[keyof TaggedRecord]) => variant is TaggedRecord[T]; }; diff --git a/tests/baselines/reference/keyofAndIndexedAccess.symbols b/tests/baselines/reference/keyofAndIndexedAccess.symbols index c1a3449991f..1d59deb12b3 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.symbols +++ b/tests/baselines/reference/keyofAndIndexedAccess.symbols @@ -1963,31 +1963,32 @@ new AnotherSampleClass({}); >AnotherSampleClass : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 540, 54)) // Positive repro from #17166 -function f3(t: T, k: K, tk: T[K]): void { +function f3>(t: T, k: K, tk: T[K]): void { >f3 : Symbol(f3, Decl(keyofAndIndexedAccess.ts, 552, 27)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 555, 12)) >K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 555, 14)) +>Extract : Symbol(Extract, Decl(lib.d.ts, --, --)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 555, 12)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 555, 34)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 555, 51)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 555, 12)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 555, 39)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 555, 56)) >K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 555, 14)) ->tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 555, 45)) +>tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 555, 62)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 555, 12)) >K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 555, 14)) for (let key in t) { >key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 556, 12)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 555, 34)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 555, 51)) key = k // ok, K ==> keyof T >key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 556, 12)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 555, 39)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 555, 56)) t[key] = tk; // ok, T[K] ==> T[keyof T] ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 555, 34)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 555, 51)) >key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 556, 12)) ->tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 555, 45)) +>tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 555, 62)) } } diff --git a/tests/baselines/reference/keyofAndIndexedAccess.types b/tests/baselines/reference/keyofAndIndexedAccess.types index 694abf7d10e..462dde9ca03 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.types +++ b/tests/baselines/reference/keyofAndIndexedAccess.types @@ -59,10 +59,10 @@ const enum E { A, B, C } >C : E.C type K00 = keyof any; // string ->K00 : string +>K00 : string | number | symbol type K01 = keyof string; // "toString" | "charAt" | ... ->K01 : "length" | "toString" | "concat" | "slice" | "indexOf" | "lastIndexOf" | "charAt" | "charCodeAt" | "localeCompare" | "match" | "replace" | "search" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" | "valueOf" +>K01 : number | "length" | "toString" | "concat" | "slice" | "indexOf" | "lastIndexOf" | "charAt" | "charCodeAt" | "localeCompare" | "match" | "replace" | "search" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" | "valueOf" type K02 = keyof number; // "toString" | "toFixed" | "toExponential" | ... >K02 : "toString" | "toLocaleString" | "valueOf" | "toFixed" | "toExponential" | "toPrecision" @@ -88,11 +88,11 @@ type K10 = keyof Shape; // "name" | "width" | "height" | "visible" >Shape : Shape type K11 = keyof Shape[]; // "length" | "toString" | ... ->K11 : "length" | "toString" | "toLocaleString" | "push" | "pop" | "concat" | "join" | "reverse" | "shift" | "slice" | "sort" | "splice" | "unshift" | "indexOf" | "lastIndexOf" | "every" | "some" | "forEach" | "map" | "filter" | "reduce" | "reduceRight" +>K11 : number | "length" | "toString" | "toLocaleString" | "push" | "pop" | "concat" | "join" | "reverse" | "shift" | "slice" | "sort" | "splice" | "unshift" | "indexOf" | "lastIndexOf" | "every" | "some" | "forEach" | "map" | "filter" | "reduce" | "reduceRight" >Shape : Shape type K12 = keyof Dictionary; // string ->K12 : string +>K12 : string | number | symbol >Dictionary : Dictionary >Shape : Shape @@ -108,7 +108,7 @@ type K15 = keyof E; // "toString" | "toFixed" | "toExponential" | ... >E : E type K16 = keyof [string, number]; // "0" | "1" | "length" | "toString" | ... ->K16 : "0" | "1" | "length" | "toString" | "toLocaleString" | "push" | "pop" | "concat" | "join" | "reverse" | "shift" | "slice" | "sort" | "splice" | "unshift" | "indexOf" | "lastIndexOf" | "every" | "some" | "forEach" | "map" | "filter" | "reduce" | "reduceRight" +>K16 : number | "0" | "1" | "length" | "toString" | "toLocaleString" | "push" | "pop" | "concat" | "join" | "reverse" | "shift" | "slice" | "sort" | "splice" | "unshift" | "indexOf" | "lastIndexOf" | "every" | "some" | "forEach" | "map" | "filter" | "reduce" | "reduceRight" type K17 = keyof (Shape | Item); // "name" >K17 : "name" @@ -121,7 +121,7 @@ type K18 = keyof (Shape & Item); // "name" | "width" | "height" | "visible" | " >Item : Item type K19 = keyof NumericallyIndexed // never ->K19 : never +>K19 : number >NumericallyIndexed : NumericallyIndexed >Shape : Shape @@ -136,7 +136,7 @@ type K20 = KeyOf; // "name" | "width" | "height" | "visible" >Shape : Shape type K21 = KeyOf>; // string ->K21 : string +>K21 : string | number | symbol >KeyOf : keyof T >Dictionary : Dictionary >Shape : Shape @@ -825,7 +825,7 @@ function f54(obj: T, key: keyof T) { >T : T for (let s in obj[key]) { ->s : keyof T[keyof T] +>s : Extract >obj[key] : T[keyof T] >obj : T >key : keyof T @@ -850,7 +850,7 @@ function f55(obj: T, key: K) { >K : K for (let s in obj[key]) { ->s : keyof T[K] +>s : Extract >obj[key] : T[K] >obj : T >key : K @@ -873,17 +873,17 @@ function f60(source: T, target: T) { >T : T for (let k in source) { ->k : keyof T +>k : Extract >source : T target[k] = source[k]; ->target[k] = source[k] : T[keyof T] ->target[k] : T[keyof T] +>target[k] = source[k] : T[Extract] +>target[k] : T[Extract] >target : T ->k : keyof T ->source[k] : T[keyof T] +>k : Extract +>source[k] : T[Extract] >source : T ->k : keyof T +>k : Extract } } @@ -2295,10 +2295,11 @@ new AnotherSampleClass({}); >{} : {} // Positive repro from #17166 -function f3(t: T, k: K, tk: T[K]): void { ->f3 : (t: T, k: K, tk: T[K]) => void +function f3>(t: T, k: K, tk: T[K]): void { +>f3 : >(t: T, k: K, tk: T[K]) => void >T : T >K : K +>Extract : Extract >T : T >t : T >T : T @@ -2309,19 +2310,19 @@ function f3(t: T, k: K, tk: T[K]): void { >K : K for (let key in t) { ->key : keyof T +>key : Extract >t : T key = k // ok, K ==> keyof T >key = k : K ->key : keyof T +>key : Extract >k : K t[key] = tk; // ok, T[K] ==> T[keyof T] >t[key] = tk : T[K] ->t[key] : T[keyof T] +>t[key] : T[Extract] >t : T ->key : keyof T +>key : Extract >tk : T[K] } } diff --git a/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt b/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt index 44b8b4a6051..f9bb63c43b1 100644 --- a/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt +++ b/tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt @@ -28,19 +28,22 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(76,5): error Type 'T' is not assignable to type 'U'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(77,5): error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof (T | U)'. Type 'keyof T' is not assignable to type 'keyof (T | U)'. - Type 'string' is not assignable to type 'keyof (T | U)'. -tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(86,9): error TS2322: Type 'keyof T' is not assignable to type 'K'. - Type 'string' is not assignable to type 'K'. -tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(88,9): error TS2322: Type 'T[keyof T]' is not assignable to type 'T[K]'. - Type 'keyof T' is not assignable to type 'K'. + Type 'string | number | symbol' is not assignable to type 'keyof (T | U)'. + Type 'string' is not assignable to type 'keyof (T | U)'. +tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(86,9): error TS2322: Type 'Extract' is not assignable to type 'K'. + Type 'string & keyof T' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. +tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(88,9): error TS2322: Type 'T[Extract]' is not assignable to type 'T[K]'. + Type 'Extract' is not assignable to type 'K'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(91,5): error TS2322: Type 'T[K]' is not assignable to type 'U[K]'. Type 'T' is not assignable to type 'U'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(94,5): error TS2322: Type 'T[J]' is not assignable to type 'U[J]'. Type 'T' is not assignable to type 'U'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(97,5): error TS2322: Type 'T[K]' is not assignable to type 'T[J]'. Type 'K' is not assignable to type 'J'. - Type 'keyof T' is not assignable to type 'J'. - Type 'string' is not assignable to type 'J'. + Type 'Extract' is not assignable to type 'J'. + Type 'string & keyof T' is not assignable to type 'J'. + Type 'string' is not assignable to type 'J'. tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error TS2322: Type 'T[K]' is not assignable to type 'U[J]'. Type 'T' is not assignable to type 'U'. @@ -178,24 +181,26 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error ~~ !!! error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof (T | U)'. !!! error TS2322: Type 'keyof T' is not assignable to type 'keyof (T | U)'. -!!! error TS2322: Type 'string' is not assignable to type 'keyof (T | U)'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'keyof (T | U)'. +!!! error TS2322: Type 'string' is not assignable to type 'keyof (T | U)'. k2 = k1; } // Repro from #17166 - function f3( + function f3, U extends T, J extends K>( t: T, k: K, tk: T[K], u: U, j: J, uk: U[K], tj: T[J], uj: U[J]): void { for (let key in t) { key = k // ok, K ==> keyof T k = key // error, keyof T =/=> K ~ -!!! error TS2322: Type 'keyof T' is not assignable to type 'K'. -!!! error TS2322: Type 'string' is not assignable to type 'K'. +!!! error TS2322: Type 'Extract' is not assignable to type 'K'. +!!! error TS2322: Type 'string & keyof T' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. t[key] = tk; // ok, T[K] ==> T[keyof T] tk = t[key]; // error, T[keyof T] =/=> T[K] ~~ -!!! error TS2322: Type 'T[keyof T]' is not assignable to type 'T[K]'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'K'. +!!! error TS2322: Type 'T[Extract]' is not assignable to type 'T[K]'. +!!! error TS2322: Type 'Extract' is not assignable to type 'K'. } tk = uk; uk = tk; // error @@ -214,8 +219,9 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error ~~ !!! error TS2322: Type 'T[K]' is not assignable to type 'T[J]'. !!! error TS2322: Type 'K' is not assignable to type 'J'. -!!! error TS2322: Type 'keyof T' is not assignable to type 'J'. -!!! error TS2322: Type 'string' is not assignable to type 'J'. +!!! error TS2322: Type 'Extract' is not assignable to type 'J'. +!!! error TS2322: Type 'string & keyof T' is not assignable to type 'J'. +!!! error TS2322: Type 'string' is not assignable to type 'J'. tk = uj; uj = tk; // error diff --git a/tests/baselines/reference/keyofAndIndexedAccessErrors.js b/tests/baselines/reference/keyofAndIndexedAccessErrors.js index d267699ffd6..0f026d5d2e5 100644 --- a/tests/baselines/reference/keyofAndIndexedAccessErrors.js +++ b/tests/baselines/reference/keyofAndIndexedAccessErrors.js @@ -80,7 +80,7 @@ function f20(k1: keyof (T | U), k2: keyof (T & U), o1: T | U, o2: T & U) { } // Repro from #17166 -function f3( +function f3, U extends T, J extends K>( t: T, k: K, tk: T[K], u: U, j: J, uk: U[K], tj: T[J], uj: U[J]): void { for (let key in t) { key = k // ok, K ==> keyof T diff --git a/tests/baselines/reference/keyofAndIndexedAccessErrors.symbols b/tests/baselines/reference/keyofAndIndexedAccessErrors.symbols index 47b22af2541..d062677fa02 100644 --- a/tests/baselines/reference/keyofAndIndexedAccessErrors.symbols +++ b/tests/baselines/reference/keyofAndIndexedAccessErrors.symbols @@ -270,18 +270,19 @@ function f20(k1: keyof (T | U), k2: keyof (T & U), o1: T | U, o2: T & U) { } // Repro from #17166 -function f3( +function f3, U extends T, J extends K>( >f3 : Symbol(f3, Decl(keyofAndIndexedAccessErrors.ts, 78, 1)) >T : Symbol(T, Decl(keyofAndIndexedAccessErrors.ts, 81, 12)) >K : Symbol(K, Decl(keyofAndIndexedAccessErrors.ts, 81, 14)) +>Extract : Symbol(Extract, Decl(lib.d.ts, --, --)) >T : Symbol(T, Decl(keyofAndIndexedAccessErrors.ts, 81, 12)) ->U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 33)) +>U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 50)) >T : Symbol(T, Decl(keyofAndIndexedAccessErrors.ts, 81, 12)) ->J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 46)) +>J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 63)) >K : Symbol(K, Decl(keyofAndIndexedAccessErrors.ts, 81, 14)) t: T, k: K, tk: T[K], u: U, j: J, uk: U[K], tj: T[J], uj: U[J]): void { ->t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 60)) +>t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 77)) >T : Symbol(T, Decl(keyofAndIndexedAccessErrors.ts, 81, 12)) >k : Symbol(k, Decl(keyofAndIndexedAccessErrors.ts, 82, 9)) >K : Symbol(K, Decl(keyofAndIndexedAccessErrors.ts, 81, 14)) @@ -289,22 +290,22 @@ function f3( >T : Symbol(T, Decl(keyofAndIndexedAccessErrors.ts, 81, 12)) >K : Symbol(K, Decl(keyofAndIndexedAccessErrors.ts, 81, 14)) >u : Symbol(u, Decl(keyofAndIndexedAccessErrors.ts, 82, 25)) ->U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 33)) +>U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 50)) >j : Symbol(j, Decl(keyofAndIndexedAccessErrors.ts, 82, 31)) ->J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 46)) +>J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 63)) >uk : Symbol(uk, Decl(keyofAndIndexedAccessErrors.ts, 82, 37)) ->U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 33)) +>U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 50)) >K : Symbol(K, Decl(keyofAndIndexedAccessErrors.ts, 81, 14)) >tj : Symbol(tj, Decl(keyofAndIndexedAccessErrors.ts, 82, 47)) >T : Symbol(T, Decl(keyofAndIndexedAccessErrors.ts, 81, 12)) ->J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 46)) +>J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 63)) >uj : Symbol(uj, Decl(keyofAndIndexedAccessErrors.ts, 82, 57)) ->U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 33)) ->J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 46)) +>U : Symbol(U, Decl(keyofAndIndexedAccessErrors.ts, 81, 50)) +>J : Symbol(J, Decl(keyofAndIndexedAccessErrors.ts, 81, 63)) for (let key in t) { >key : Symbol(key, Decl(keyofAndIndexedAccessErrors.ts, 83, 12)) ->t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 60)) +>t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 77)) key = k // ok, K ==> keyof T >key : Symbol(key, Decl(keyofAndIndexedAccessErrors.ts, 83, 12)) @@ -315,13 +316,13 @@ function f3( >key : Symbol(key, Decl(keyofAndIndexedAccessErrors.ts, 83, 12)) t[key] = tk; // ok, T[K] ==> T[keyof T] ->t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 60)) +>t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 77)) >key : Symbol(key, Decl(keyofAndIndexedAccessErrors.ts, 83, 12)) >tk : Symbol(tk, Decl(keyofAndIndexedAccessErrors.ts, 82, 15)) tk = t[key]; // error, T[keyof T] =/=> T[K] >tk : Symbol(tk, Decl(keyofAndIndexedAccessErrors.ts, 82, 15)) ->t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 60)) +>t : Symbol(t, Decl(keyofAndIndexedAccessErrors.ts, 81, 77)) >key : Symbol(key, Decl(keyofAndIndexedAccessErrors.ts, 83, 12)) } tk = uk; diff --git a/tests/baselines/reference/keyofAndIndexedAccessErrors.types b/tests/baselines/reference/keyofAndIndexedAccessErrors.types index bcd3878013d..2f50ef5c53c 100644 --- a/tests/baselines/reference/keyofAndIndexedAccessErrors.types +++ b/tests/baselines/reference/keyofAndIndexedAccessErrors.types @@ -22,7 +22,7 @@ type Dictionary = { [x: string]: T }; >T : T type T00 = keyof K0; // Error ->T00 : string +>T00 : string | number | symbol >K0 : No type information available! type T01 = keyof Object; @@ -30,23 +30,23 @@ type T01 = keyof Object; >Object : Object type T02 = keyof keyof Object; ->T02 : "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" +>T02 : number | "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" >Object : Object type T03 = keyof keyof keyof Object; ->T03 : "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" +>T03 : "toString" | "toLocaleString" | "valueOf" >Object : Object type T04 = keyof keyof keyof keyof Object; ->T04 : "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" +>T04 : number | "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" >Object : Object type T05 = keyof keyof keyof keyof keyof Object; ->T05 : "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" +>T05 : "toString" | "toLocaleString" | "valueOf" >Object : Object type T06 = keyof keyof keyof keyof keyof keyof Object; ->T06 : "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" +>T06 : number | "length" | "toString" | "valueOf" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" >Object : Object type T10 = Shape["name"]; @@ -301,10 +301,11 @@ function f20(k1: keyof (T | U), k2: keyof (T & U), o1: T | U, o2: T & U) { } // Repro from #17166 -function f3( ->f3 : (t: T, k: K, tk: T[K], u: U, j: J, uk: U[K], tj: T[J], uj: U[J]) => void +function f3, U extends T, J extends K>( +>f3 : , U extends T, J extends K>(t: T, k: K, tk: T[K], u: U, j: J, uk: U[K], tj: T[J], uj: U[J]) => void >T : T >K : K +>Extract : Extract >T : T >U : U >T : T @@ -334,32 +335,32 @@ function f3( >J : J for (let key in t) { ->key : keyof T +>key : Extract >t : T key = k // ok, K ==> keyof T >key = k : K ->key : keyof T +>key : Extract >k : K k = key // error, keyof T =/=> K ->k = key : keyof T +>k = key : Extract >k : K ->key : keyof T +>key : Extract t[key] = tk; // ok, T[K] ==> T[keyof T] >t[key] = tk : T[K] ->t[key] : T[keyof T] +>t[key] : T[Extract] >t : T ->key : keyof T +>key : Extract >tk : T[K] tk = t[key]; // error, T[keyof T] =/=> T[K] ->tk = t[key] : T[keyof T] +>tk = t[key] : T[Extract] >tk : T[K] ->t[key] : T[keyof T] +>t[key] : T[Extract] >t : T ->key : keyof T +>key : Extract } tk = uk; >tk = uk : U[K] diff --git a/tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt b/tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt deleted file mode 100644 index d9d573e0ab9..00000000000 --- a/tests/baselines/reference/lateBoundConstraintTypeChecksCorrectly.errors.txt +++ /dev/null @@ -1,29 +0,0 @@ -tests/cases/compiler/lateBoundConstraintTypeChecksCorrectly.ts(17,16): error TS2536: Type 'unique symbol' cannot be used to index type 'T'. -tests/cases/compiler/lateBoundConstraintTypeChecksCorrectly.ts(18,17): error TS2536: Type 'unique symbol' cannot be used to index type 'T'. - - -==== tests/cases/compiler/lateBoundConstraintTypeChecksCorrectly.ts (2 errors) ==== - declare const fooProp: unique symbol; - declare const barProp: unique symbol; - - type BothProps = typeof fooProp | typeof barProp; - - export interface Foo { - [fooProp]: T; - [barProp]: string; - } - - function f>(x: T) { - const abc = x[fooProp]; // expected: 'T[typeof fooProp]' - - /** - * Expected: no error - */ - const def: T[typeof fooProp] = x[fooProp]; - ~~~~~~~~~~~~~~~~~ -!!! error TS2536: Type 'unique symbol' cannot be used to index type 'T'. - const def2: T[typeof barProp] = x[barProp]; - ~~~~~~~~~~~~~~~~~ -!!! error TS2536: Type 'unique symbol' cannot be used to index type 'T'. - } - \ No newline at end of file diff --git a/tests/baselines/reference/mappedTypeErrors.errors.txt b/tests/baselines/reference/mappedTypeErrors.errors.txt index 3245f9932f0..f78c32531a4 100644 --- a/tests/baselines/reference/mappedTypeErrors.errors.txt +++ b/tests/baselines/reference/mappedTypeErrors.errors.txt @@ -1,7 +1,8 @@ tests/cases/conformance/types/mapped/mappedTypeErrors.ts(19,20): error TS2313: Type parameter 'P' has a circular constraint. -tests/cases/conformance/types/mapped/mappedTypeErrors.ts(20,20): error TS2322: Type 'number' is not assignable to type 'string'. -tests/cases/conformance/types/mapped/mappedTypeErrors.ts(21,20): error TS2322: Type 'Date' is not assignable to type 'string'. -tests/cases/conformance/types/mapped/mappedTypeErrors.ts(22,19): error TS2344: Type 'Date' does not satisfy the constraint 'string'. +tests/cases/conformance/types/mapped/mappedTypeErrors.ts(21,20): error TS2322: Type 'Date' is not assignable to type 'string | number | symbol'. + Type 'Date' is not assignable to type 'symbol'. +tests/cases/conformance/types/mapped/mappedTypeErrors.ts(22,19): error TS2344: Type 'Date' does not satisfy the constraint 'string | number | symbol'. + Type 'Date' is not assignable to type 'symbol'. tests/cases/conformance/types/mapped/mappedTypeErrors.ts(25,24): error TS2344: Type '"foo"' does not satisfy the constraint '"name" | "width" | "height" | "visible"'. tests/cases/conformance/types/mapped/mappedTypeErrors.ts(26,24): error TS2344: Type '"name" | "foo"' does not satisfy the constraint '"name" | "width" | "height" | "visible"'. Type '"foo"' is not assignable to type '"name" | "width" | "height" | "visible"'. @@ -45,11 +46,12 @@ tests/cases/conformance/types/mapped/mappedTypeErrors.ts(129,5): error TS2322: T tests/cases/conformance/types/mapped/mappedTypeErrors.ts(130,5): error TS2322: Type '{ a: string; }' is not assignable to type '{ [x: string]: any; a?: number | undefined; }'. Types of property 'a' are incompatible. Type 'string' is not assignable to type 'number | undefined'. -tests/cases/conformance/types/mapped/mappedTypeErrors.ts(136,16): error TS2322: Type 'T' is not assignable to type 'string'. +tests/cases/conformance/types/mapped/mappedTypeErrors.ts(136,16): error TS2322: Type 'T' is not assignable to type 'string | number | symbol'. + Type 'T' is not assignable to type 'symbol'. tests/cases/conformance/types/mapped/mappedTypeErrors.ts(136,21): error TS2536: Type 'P' cannot be used to index type 'T'. -==== tests/cases/conformance/types/mapped/mappedTypeErrors.ts (26 errors) ==== +==== tests/cases/conformance/types/mapped/mappedTypeErrors.ts (25 errors) ==== interface Shape { name: string; width: number; @@ -72,14 +74,14 @@ tests/cases/conformance/types/mapped/mappedTypeErrors.ts(136,21): error TS2536: ~ !!! error TS2313: Type parameter 'P' has a circular constraint. type T01 = { [P in number]: string }; // Error - ~~~~~~ -!!! error TS2322: Type 'number' is not assignable to type 'string'. type T02 = { [P in Date]: number }; // Error ~~~~ -!!! error TS2322: Type 'Date' is not assignable to type 'string'. +!!! error TS2322: Type 'Date' is not assignable to type 'string | number | symbol'. +!!! error TS2322: Type 'Date' is not assignable to type 'symbol'. type T03 = Record; // Error ~~~~ -!!! error TS2344: Type 'Date' does not satisfy the constraint 'string'. +!!! error TS2344: Type 'Date' does not satisfy the constraint 'string | number | symbol'. +!!! error TS2344: Type 'Date' is not assignable to type 'symbol'. type T10 = Pick; type T11 = Pick; // Error @@ -258,7 +260,8 @@ tests/cases/conformance/types/mapped/mappedTypeErrors.ts(136,21): error TS2536: pf: {[P in F]?: T[P]}, pt: {[P in T]?: T[P]}, // note: should be in keyof T ~ -!!! error TS2322: Type 'T' is not assignable to type 'string'. +!!! error TS2322: Type 'T' is not assignable to type 'string | number | symbol'. +!!! error TS2322: Type 'T' is not assignable to type 'symbol'. ~~~~ !!! error TS2536: Type 'P' cannot be used to index type 'T'. }; diff --git a/tests/baselines/reference/mappedTypeErrors.types b/tests/baselines/reference/mappedTypeErrors.types index ab0ae55a0e1..3faae85af8b 100644 --- a/tests/baselines/reference/mappedTypeErrors.types +++ b/tests/baselines/reference/mappedTypeErrors.types @@ -373,17 +373,17 @@ function setState(obj: T, props: Pick) { >K : K for (let k in props) { ->k : K +>k : Extract >props : Pick obj[k] = props[k]; ->obj[k] = props[k] : Pick[K] ->obj[k] : T[K] +>obj[k] = props[k] : Pick[Extract] +>obj[k] : T[Extract] >obj : T ->k : K ->props[k] : Pick[K] +>k : Extract +>props[k] : Pick[Extract] >props : Pick ->k : K +>k : Extract } } @@ -468,19 +468,19 @@ class C { >K : K for (let k in props) { ->k : K +>k : Extract >props : Pick this.state[k] = props[k]; ->this.state[k] = props[k] : Pick[K] ->this.state[k] : T[K] +>this.state[k] = props[k] : Pick[Extract] +>this.state[k] : T[Extract] >this.state : T >this : this >state : T ->k : K ->props[k] : Pick[K] +>k : Extract +>props[k] : Pick[Extract] >props : Pick ->k : K +>k : Extract } } } diff --git a/tests/baselines/reference/mappedTypeRelationships.errors.txt b/tests/baselines/reference/mappedTypeRelationships.errors.txt index ee49ef12283..26618cc15db 100644 --- a/tests/baselines/reference/mappedTypeRelationships.errors.txt +++ b/tests/baselines/reference/mappedTypeRelationships.errors.txt @@ -43,16 +43,20 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(143,5): error TS Type 'T' is not assignable to type 'U'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(148,5): error TS2322: Type '{ [P in keyof T]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. Type 'keyof U' is not assignable to type 'keyof T'. - Type 'string' is not assignable to type 'keyof T'. + Type 'string | number | symbol' is not assignable to type 'keyof T'. + Type 'string' is not assignable to type 'keyof T'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(153,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: T[P]; }'. Type 'keyof T' is not assignable to type 'K'. - Type 'string' is not assignable to type 'K'. + Type 'string | number | symbol' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(158,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. Type 'keyof U' is not assignable to type 'K'. - Type 'string' is not assignable to type 'K'. + Type 'string | number | symbol' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(163,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: U[P]; }'. Type 'keyof T' is not assignable to type 'K'. - Type 'string' is not assignable to type 'K'. + Type 'string | number | symbol' is not assignable to type 'K'. + Type 'string' is not assignable to type 'K'. tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in K]: U[P]; }'. Type 'T[P]' is not assignable to type 'U[P]'. Type 'T' is not assignable to type 'U'. @@ -276,7 +280,8 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in keyof T]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. !!! error TS2322: Type 'keyof U' is not assignable to type 'keyof T'. -!!! error TS2322: Type 'string' is not assignable to type 'keyof T'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'keyof T'. +!!! error TS2322: Type 'string' is not assignable to type 'keyof T'. } function f73(x: { [P in K]: T[P] }, y: { [P in keyof T]: T[P] }) { @@ -285,7 +290,8 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: T[P]; }'. !!! error TS2322: Type 'keyof T' is not assignable to type 'K'. -!!! error TS2322: Type 'string' is not assignable to type 'K'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. } function f74(x: { [P in K]: T[P] }, y: { [P in keyof U]: U[P] }) { @@ -294,7 +300,8 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof U]: U[P]; }'. !!! error TS2322: Type 'keyof U' is not assignable to type 'K'. -!!! error TS2322: Type 'string' is not assignable to type 'K'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. } function f75(x: { [P in K]: T[P] }, y: { [P in keyof T]: U[P] }) { @@ -303,7 +310,8 @@ tests/cases/conformance/types/mapped/mappedTypeRelationships.ts(168,5): error TS ~ !!! error TS2322: Type '{ [P in K]: T[P]; }' is not assignable to type '{ [P in keyof T]: U[P]; }'. !!! error TS2322: Type 'keyof T' is not assignable to type 'K'. -!!! error TS2322: Type 'string' is not assignable to type 'K'. +!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'K'. +!!! error TS2322: Type 'string' is not assignable to type 'K'. } function f76(x: { [P in K]: T[P] }, y: { [P in K]: U[P] }) { diff --git a/tests/baselines/reference/mappedTypeWithAny.types b/tests/baselines/reference/mappedTypeWithAny.types index 36fad9140cc..6bf62c9730c 100644 --- a/tests/baselines/reference/mappedTypeWithAny.types +++ b/tests/baselines/reference/mappedTypeWithAny.types @@ -11,7 +11,7 @@ type ItemMap = { [P in keyof T]: Item }; >Item : Item declare let x0: keyof any; ->x0 : string +>x0 : string | number | symbol declare let x1: { [P in any]: Item }; >x1 : { [x: string]: Item; } diff --git a/tests/baselines/reference/mappedTypes4.types b/tests/baselines/reference/mappedTypes4.types index c003765d517..7292e143b42 100644 --- a/tests/baselines/reference/mappedTypes4.types +++ b/tests/baselines/reference/mappedTypes4.types @@ -40,19 +40,19 @@ function boxify(obj: T): Boxified { >T : T for (let k in obj) { ->k : keyof T +>k : Extract >obj : T result[k] = { value: obj[k] }; ->result[k] = { value: obj[k] } : { value: T[keyof T]; } ->result[k] : Boxified[keyof T] +>result[k] = { value: obj[k] } : { value: T[Extract]; } +>result[k] : Boxified[Extract] >result : Boxified ->k : keyof T ->{ value: obj[k] } : { value: T[keyof T]; } ->value : T[keyof T] ->obj[k] : T[keyof T] +>k : Extract +>{ value: obj[k] } : { value: T[Extract]; } +>value : T[Extract] +>obj[k] : T[Extract] >obj : T ->k : keyof T +>k : Extract } return result; >result : Boxified diff --git a/tests/baselines/reference/neverUnionIntersection.types b/tests/baselines/reference/neverUnionIntersection.types index 5d9085e72e6..4f578052e9c 100644 --- a/tests/baselines/reference/neverUnionIntersection.types +++ b/tests/baselines/reference/neverUnionIntersection.types @@ -6,7 +6,7 @@ type T02 = string & never; >T02 : never type T03 = string | number | never; ->T03 : string | number +>T03 : T03 type T04 = string & number & never; >T04 : never diff --git a/tests/baselines/reference/recursiveTypeRelations.errors.txt b/tests/baselines/reference/recursiveTypeRelations.errors.txt index f29d5742185..8c5596958c3 100644 --- a/tests/baselines/reference/recursiveTypeRelations.errors.txt +++ b/tests/baselines/reference/recursiveTypeRelations.errors.txt @@ -6,7 +6,7 @@ tests/cases/compiler/recursiveTypeRelations.ts(27,61): error TS2304: Cannot find ==== tests/cases/compiler/recursiveTypeRelations.ts (3 errors) ==== // Repro from #14896 - type Attributes = { + type Attributes = { [Key in Keys]: string; } diff --git a/tests/baselines/reference/recursiveTypeRelations.js b/tests/baselines/reference/recursiveTypeRelations.js index c477ecf1294..9c0887ab446 100644 --- a/tests/baselines/reference/recursiveTypeRelations.js +++ b/tests/baselines/reference/recursiveTypeRelations.js @@ -1,7 +1,7 @@ //// [recursiveTypeRelations.ts] // Repro from #14896 -type Attributes = { +type Attributes = { [Key in Keys]: string; } diff --git a/tests/baselines/reference/recursiveTypeRelations.symbols b/tests/baselines/reference/recursiveTypeRelations.symbols index 2c940df2487..39032cd2f94 100644 --- a/tests/baselines/reference/recursiveTypeRelations.symbols +++ b/tests/baselines/reference/recursiveTypeRelations.symbols @@ -1,7 +1,7 @@ === tests/cases/compiler/recursiveTypeRelations.ts === // Repro from #14896 -type Attributes = { +type Attributes = { >Attributes : Symbol(Attributes, Decl(recursiveTypeRelations.ts, 0, 0)) >Keys : Symbol(Keys, Decl(recursiveTypeRelations.ts, 2, 16)) diff --git a/tests/baselines/reference/recursiveTypeRelations.types b/tests/baselines/reference/recursiveTypeRelations.types index ce6d007d066..b844031c0d1 100644 --- a/tests/baselines/reference/recursiveTypeRelations.types +++ b/tests/baselines/reference/recursiveTypeRelations.types @@ -1,7 +1,7 @@ === tests/cases/compiler/recursiveTypeRelations.ts === // Repro from #14896 -type Attributes = { +type Attributes = { >Attributes : { [Key in Keys]: string; } >Keys : Keys diff --git a/tests/baselines/reference/typeGuardsTypeParameters.types b/tests/baselines/reference/typeGuardsTypeParameters.types index 13fb9965235..c508c92a979 100644 --- a/tests/baselines/reference/typeGuardsTypeParameters.types +++ b/tests/baselines/reference/typeGuardsTypeParameters.types @@ -80,19 +80,19 @@ function fun(item: { [P in keyof T]: T[P] }) { >[] : never[] for (const key in item) { ->key : keyof T +>key : Extract >item : { [P in keyof T]: T[P]; } const value = item[key]; ->value : { [P in keyof T]: T[P]; }[keyof T] ->item[key] : { [P in keyof T]: T[P]; }[keyof T] +>value : { [P in keyof T]: T[P]; }[Extract] +>item[key] : { [P in keyof T]: T[P]; }[Extract] >item : { [P in keyof T]: T[P]; } ->key : keyof T +>key : Extract if (typeof value === "string") { >typeof value === "string" : boolean >typeof value : "string" | "number" | "boolean" | "symbol" | "undefined" | "object" | "function" ->value : { [P in keyof T]: T[P]; }[keyof T] +>value : { [P in keyof T]: T[P]; }[Extract] >"string" : "string" strings.push(value); @@ -100,7 +100,7 @@ function fun(item: { [P in keyof T]: T[P] }) { >strings.push : (...items: string[]) => number >strings : string[] >push : (...items: string[]) => number ->value : { [P in keyof T]: T[P]; }[keyof T] & string +>value : { [P in keyof T]: T[P]; }[Extract] & string } } } From ce5d22fef00830329cb1d3a9d83f9584ae1ecd28 Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 9 Apr 2018 15:03:24 -0700 Subject: [PATCH 013/232] Fix bug: don't insert a semicolon when inserting a FunctionDeclaration (#23240) --- src/compiler/utilities.ts | 4 ++++ src/services/completions.ts | 2 +- src/services/textChanges.ts | 12 +++++++----- .../baselines/reference/api/tsserverlibrary.d.ts | 1 + tests/baselines/reference/api/typescript.d.ts | 1 + .../textChanges/insertNodeAfterInClass1.js | 2 +- ...tNodeInInterfaceAfterNodeWithoutSeparator2.js | 2 +- .../convertFunctionToEs6ClassNoSemicolon.ts | 16 ++++++++++++++++ 8 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 tests/cases/fourslash/convertFunctionToEs6ClassNoSemicolon.ts diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index a73efb55eef..8e6b3f8ae39 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -5629,6 +5629,10 @@ namespace ts { || kind === SyntaxKind.MissingDeclaration; } + export function isClassOrTypeElement(node: Node): node is ClassElement | TypeElement { + return isTypeElement(node) || isClassElement(node); + } + export function isObjectLiteralElementLike(node: Node): node is ObjectLiteralElementLike { const kind = node.kind; return kind === SyntaxKind.PropertyAssignment diff --git a/src/services/completions.ts b/src/services/completions.ts index 40d3738f12f..52ae6803ba3 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2248,7 +2248,7 @@ namespace ts.Completions { // TODO: GH#19856 Would like to return `node is Node & { parent: (ClassElement | TypeElement) & { parent: ObjectTypeDeclaration } }` but then compilation takes > 10 minutes function isFromObjectTypeDeclaration(node: Node): boolean { - return node.parent && (isClassElement(node.parent) || isTypeElement(node.parent)) && isObjectTypeDeclaration(node.parent.parent); + return node.parent && isClassOrTypeElement(node.parent) && isObjectTypeDeclaration(node.parent.parent); } function hasIndexSignature(type: Type): boolean { diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 0a48bcf6228..800b58e8274 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -447,10 +447,7 @@ namespace ts.textChanges { } public insertNodeAfter(sourceFile: SourceFile, after: Node, newNode: Node): this { - if (isStatementButNotDeclaration(after) || - after.kind === SyntaxKind.PropertyDeclaration || - after.kind === SyntaxKind.PropertySignature || - after.kind === SyntaxKind.MethodSignature) { + if (needSemicolonBetween(after, newNode)) { // check if previous statement ends with semicolon // if not - insert semicolon to preserve the code from changing the meaning due to ASI if (sourceFile.text.charCodeAt(after.end - 1) !== CharacterCodes.semicolon) { @@ -465,7 +462,7 @@ namespace ts.textChanges { if (isClassDeclaration(node) || isModuleDeclaration(node)) { return { prefix: this.newLineCharacter, suffix: this.newLineCharacter }; } - else if (isStatement(node) || isClassElement(node) || isTypeElement(node)) { + else if (isStatement(node) || isClassOrTypeElement(node)) { return { suffix: this.newLineCharacter }; } else if (isVariableDeclaration(node)) { @@ -893,4 +890,9 @@ namespace ts.textChanges { export function isValidLocationToAddComment(sourceFile: SourceFile, position: number) { return !isInComment(sourceFile, position) && !isInString(sourceFile, position) && !isInTemplateString(sourceFile, position); } + + function needSemicolonBetween(a: Node, b: Node): boolean { + return (isPropertySignature(a) || isPropertyDeclaration(a)) && isClassOrTypeElement(b) && b.name.kind === SyntaxKind.ComputedPropertyName + || isStatementButNotDeclaration(a) && isStatementButNotDeclaration(b); // TODO: only if b would start with a `(` or `[` + } } diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index a990c0af274..f602e872c14 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -3247,6 +3247,7 @@ declare namespace ts { function isClassLike(node: Node): node is ClassLikeDeclaration; function isAccessor(node: Node): node is AccessorDeclaration; function isTypeElement(node: Node): node is TypeElement; + function isClassOrTypeElement(node: Node): node is ClassElement | TypeElement; function isObjectLiteralElementLike(node: Node): node is ObjectLiteralElementLike; /** * Node test that determines whether a node is a valid type node. diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 5b6ef18b680..94fd684daee 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3302,6 +3302,7 @@ declare namespace ts { function isClassLike(node: Node): node is ClassLikeDeclaration; function isAccessor(node: Node): node is AccessorDeclaration; function isTypeElement(node: Node): node is TypeElement; + function isClassOrTypeElement(node: Node): node is ClassElement | TypeElement; function isObjectLiteralElementLike(node: Node): node is ObjectLiteralElementLike; /** * Node test that determines whether a node is a valid type node. diff --git a/tests/baselines/reference/textChanges/insertNodeAfterInClass1.js b/tests/baselines/reference/textChanges/insertNodeAfterInClass1.js index 841d43fef97..87206e588f2 100644 --- a/tests/baselines/reference/textChanges/insertNodeAfterInClass1.js +++ b/tests/baselines/reference/textChanges/insertNodeAfterInClass1.js @@ -7,6 +7,6 @@ class A { ===MODIFIED=== class A { - x; + x a: boolean; } diff --git a/tests/baselines/reference/textChanges/insertNodeInInterfaceAfterNodeWithoutSeparator2.js b/tests/baselines/reference/textChanges/insertNodeInInterfaceAfterNodeWithoutSeparator2.js index 6e88a371eb6..780af267ac8 100644 --- a/tests/baselines/reference/textChanges/insertNodeInInterfaceAfterNodeWithoutSeparator2.js +++ b/tests/baselines/reference/textChanges/insertNodeInInterfaceAfterNodeWithoutSeparator2.js @@ -7,6 +7,6 @@ interface A { ===MODIFIED=== interface A { - x(); + x() [1]: any; } diff --git a/tests/cases/fourslash/convertFunctionToEs6ClassNoSemicolon.ts b/tests/cases/fourslash/convertFunctionToEs6ClassNoSemicolon.ts new file mode 100644 index 00000000000..7aac7e7d42a --- /dev/null +++ b/tests/cases/fourslash/convertFunctionToEs6ClassNoSemicolon.ts @@ -0,0 +1,16 @@ +/// + +// @allowJs: true + +// @Filename: /a.js +////var C = function() { this.x = 0; } +////0; + +verify.codeFix({ + description: "Convert function to an ES2015 class", + newFileContent: +`class C { + constructor() { this.x = 0; } +} +0;`, +}); From fe6142a2dabc770f26ecd1e05cd1294b5db988d3 Mon Sep 17 00:00:00 2001 From: csigs Date: Mon, 9 Apr 2018 22:10:41 +0000 Subject: [PATCH 014/232] LEGO: check in for master to temporary branch. --- .../diagnosticMessages/diagnosticMessages.generated.json.lcl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl index 962956e5bbf..cbfec3ceb3e 100644 --- a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3774,6 +3774,9 @@ + + + From 3f0dad831d47acc98532e52e7fe375a4ff381f24 Mon Sep 17 00:00:00 2001 From: csigs Date: Tue, 10 Apr 2018 04:10:24 +0000 Subject: [PATCH 015/232] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl index 0d8cbe6065e..1ac1d8a83e6 100644 --- a/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/trk/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3764,6 +3764,24 @@ + + + + + + + + + + + + + + + + + + @@ -5981,6 +5999,12 @@ + + + + + + From 651412c8870e0f95c47944196d65e945442f4624 Mon Sep 17 00:00:00 2001 From: csigs Date: Tue, 10 Apr 2018 10:10:29 +0000 Subject: [PATCH 016/232] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl index f8e4866205b..985fabd3619 100644 --- a/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/ita/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3771,6 +3771,24 @@ + + + + + + + + + + + + + + + + + + @@ -5988,6 +6006,12 @@ + + + + + + From 556a8010b9e37be25ba1b13c085900c0637cc84a Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 10 Apr 2018 10:15:15 -0700 Subject: [PATCH 017/232] Fix bug: ensure 'reportsUnnecessary' is actually sent by tsserver (#23293) --- scripts/processDiagnosticMessages.ts | 10 ++++++---- src/compiler/core.ts | 4 ++-- src/compiler/diagnosticMessages.json | 8 ++++---- src/compiler/types.ts | 2 +- src/harness/unittests/tsserverProjectSystem.ts | 10 +++++----- src/server/protocol.ts | 2 ++ src/server/session.ts | 5 +++-- tests/baselines/reference/api/tsserverlibrary.d.ts | 3 ++- tests/baselines/reference/api/typescript.d.ts | 2 +- 9 files changed, 26 insertions(+), 20 deletions(-) diff --git a/scripts/processDiagnosticMessages.ts b/scripts/processDiagnosticMessages.ts index dd66564b134..5b45fdeaae8 100644 --- a/scripts/processDiagnosticMessages.ts +++ b/scripts/processDiagnosticMessages.ts @@ -4,6 +4,7 @@ interface DiagnosticDetails { category: string; code: number; + reportsUnnecessary?: {}; isEarly?: boolean; } @@ -59,14 +60,15 @@ function buildInfoFileOutput(messageTable: InputDiagnosticMessageTable, inputFil "/// \r\n" + "/* @internal */\r\n" + "namespace ts {\r\n" + - " function diag(code: number, category: DiagnosticCategory, key: string, message: string): DiagnosticMessage {\r\n" + - " return { code, category, key, message };\r\n" + + " function diag(code: number, category: DiagnosticCategory, key: string, message: string, reportsUnnecessary?: {}): DiagnosticMessage {\r\n" + + " return { code, category, key, message, reportsUnnecessary };\r\n" + " }\r\n" + " // tslint:disable-next-line variable-name\r\n" + " export const Diagnostics = {\r\n"; - messageTable.forEach(({ code, category }, name) => { + messageTable.forEach(({ code, category, reportsUnnecessary }, name) => { const propName = convertPropertyName(name); - result += ` ${propName}: diag(${code}, DiagnosticCategory.${category}, "${createKey(propName, code)}", ${JSON.stringify(name)}),\r\n`; + const argReportsUnnecessary = reportsUnnecessary ? `, /*reportsUnnecessary*/ ${reportsUnnecessary}` : ""; + result += ` ${propName}: diag(${code}, DiagnosticCategory.${category}, "${createKey(propName, code)}", ${JSON.stringify(name)}${argReportsUnnecessary}),\r\n`; }); result += " };\r\n}"; diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 2d3b2a2a0ce..cbfcf127200 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1606,7 +1606,7 @@ namespace ts { messageText: text, category: message.category, code: message.code, - reportsUnnecessary: message.unused, + reportsUnnecessary: message.reportsUnnecessary, }; } @@ -1637,7 +1637,7 @@ namespace ts { messageText: text, category: message.category, code: message.code, - reportsUnnecessary: message.unused, + reportsUnnecessary: message.reportsUnnecessary, }; } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 69a90fbabf5..2b56e551f1b 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3286,7 +3286,7 @@ "'{0}' is declared but its value is never read.": { "category": "Error", "code": 6133, - "unused": true + "reportsUnnecessary": true }, "Report errors on unused locals.": { "category": "Message", @@ -3307,7 +3307,7 @@ "Property '{0}' is declared but its value is never read.": { "category": "Error", "code": 6138, - "unused": true + "reportsUnnecessary": true }, "Import emit helpers from 'tslib'.": { "category": "Message", @@ -3520,7 +3520,7 @@ "All imports in import declaration are unused.": { "category": "Error", "code": 6192, - "unused": true + "reportsUnnecessary": true }, "Found 1 error.": { "category": "Message", @@ -3609,7 +3609,7 @@ "Unused label.": { "category": "Error", "code": 7028, - "unused": true + "reportsUnnecessary": true }, "Fallthrough case in switch.": { "category": "Error", diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ac32d91c61a..f0aba4a34d7 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -4076,7 +4076,7 @@ namespace ts { category: DiagnosticCategory; code: number; message: string; - unused?: {}; + reportsUnnecessary?: {}; } /** diff --git a/src/harness/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts index 8170c663b1f..ab0b1cf734d 100644 --- a/src/harness/unittests/tsserverProjectSystem.ts +++ b/src/harness/unittests/tsserverProjectSystem.ts @@ -4131,10 +4131,10 @@ namespace ts.projectSystem { checkErrorMessage(session, "semanticDiag", { file: file1.path, diagnostics: [] }); }); - it("info diagnostics", () => { + it("suggestion diagnostics", () => { const file: FileOrFolder = { path: "/a.js", - content: 'require("b")', + content: "function f(p) {}", }; const host = createServerHost([file]); @@ -4177,7 +4177,7 @@ namespace ts.projectSystem { checkErrorMessage(session, "suggestionDiag", { file: file.path, diagnostics: [ - createDiagnostic({ line: 1, offset: 1 }, { line: 1, offset: 13 }, Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module) + createDiagnostic({ line: 1, offset: 12 }, { line: 1, offset: 13 }, Diagnostics._0_is_declared_but_its_value_is_never_read, ["p"], "suggestion", /*reportsUnnecssary*/ true) ], }); checkCompleteEvent(session, 2, expectedSequenceId); @@ -4241,8 +4241,8 @@ namespace ts.projectSystem { session.clearMessages(); }); - function createDiagnostic(start: protocol.Location, end: protocol.Location, message: DiagnosticMessage, args: ReadonlyArray = []): protocol.Diagnostic { - return { start, end, text: formatStringFromArgs(message.message, args), code: message.code, category: diagnosticCategoryName(message), source: undefined }; + function createDiagnostic(start: protocol.Location, end: protocol.Location, message: DiagnosticMessage, args: ReadonlyArray = [], category = diagnosticCategoryName(message), reportsUnnecessary?: {}): protocol.Diagnostic { + return { start, end, text: formatStringFromArgs(message.message, args), code: message.code, category, reportsUnnecessary, source: undefined }; } }); diff --git a/src/server/protocol.ts b/src/server/protocol.ts index 74b6865a3c3..52427413aed 100644 --- a/src/server/protocol.ts +++ b/src/server/protocol.ts @@ -2172,6 +2172,8 @@ namespace ts.server.protocol { */ category: string; + reportsUnnecessary?: {}; + /** * The error code of the diagnostic message. */ diff --git a/src/server/session.ts b/src/server/session.ts index 3979687d631..c6066723892 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -80,6 +80,7 @@ namespace ts.server { text: flattenDiagnosticMessageText(diag.messageText, "\n"), code: diag.code, category: diagnosticCategoryName(diag), + reportsUnnecessary: diag.reportsUnnecessary, source: diag.source }; } @@ -96,8 +97,8 @@ namespace ts.server { const text = flattenDiagnosticMessageText(diag.messageText, "\n"); const { code, source } = diag; const category = diagnosticCategoryName(diag); - return includeFileName ? { start, end, text, code, category, source, fileName: diag.file && diag.file.fileName } : - { start, end, text, code, category, source }; + return includeFileName ? { start, end, text, code, category, source, reportsUnnecessary: diag.reportsUnnecessary, fileName: diag.file && diag.file.fileName } : + { start, end, text, code, category, reportsUnnecessary: diag.reportsUnnecessary, source }; } export interface PendingErrorCheck { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index f602e872c14..49b9c2b5eca 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2275,7 +2275,7 @@ declare namespace ts { category: DiagnosticCategory; code: number; message: string; - unused?: {}; + reportsUnnecessary?: {}; } /** * A linked list of formatted diagnostic messages to be used as part of a multiline message. @@ -6758,6 +6758,7 @@ declare namespace ts.server.protocol { * The category of the diagnostic message, e.g. "error", "warning", or "suggestion". */ category: string; + reportsUnnecessary?: {}; /** * The error code of the diagnostic message. */ diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 94fd684daee..f8a63a21575 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2275,7 +2275,7 @@ declare namespace ts { category: DiagnosticCategory; code: number; message: string; - unused?: {}; + reportsUnnecessary?: {}; } /** * A linked list of formatted diagnostic messages to be used as part of a multiline message. From 9c0671d661e38e7a13b5c4b654d48fee237b71cf Mon Sep 17 00:00:00 2001 From: Wenlu Wang Date: Wed, 11 Apr 2018 02:51:41 +0800 Subject: [PATCH 018/232] add refactor of convert private field to getter and setter (#22143) * add refactor of convert private field to getter and setter * fix refactor * stash * refactor accessor generate * revert merge union type * refeactor and accept baseline * add support of PropertyAssignment and StringLiteral * add support for js file * allow static modifier in js file --- package-lock.json | 785 ++++++++---------- src/compiler/core.ts | 4 +- src/compiler/diagnosticMessages.json | 4 + src/compiler/utilities.ts | 2 +- src/services/refactors/extractSymbol.ts | 39 - .../generateGetAccessorAndSetAccessor.ts | 252 ++++++ src/services/refactors/refactors.ts | 1 + src/services/textChanges.ts | 9 + src/services/utilities.ts | 41 + .../reference/api/tsserverlibrary.d.ts | 2 +- tests/baselines/reference/api/typescript.d.ts | 2 +- ...refactorConvertToGetAccessAndSetAccess1.ts | 21 + ...efactorConvertToGetAccessAndSetAccess10.ts | 21 + ...efactorConvertToGetAccessAndSetAccess11.ts | 21 + ...efactorConvertToGetAccessAndSetAccess12.ts | 20 + ...efactorConvertToGetAccessAndSetAccess13.ts | 21 + ...efactorConvertToGetAccessAndSetAccess14.ts | 8 + ...efactorConvertToGetAccessAndSetAccess15.ts | 46 + ...efactorConvertToGetAccessAndSetAccess16.ts | 22 + ...efactorConvertToGetAccessAndSetAccess17.ts | 22 + ...efactorConvertToGetAccessAndSetAccess18.ts | 22 + ...efactorConvertToGetAccessAndSetAccess19.ts | 8 + ...refactorConvertToGetAccessAndSetAccess2.ts | 21 + ...efactorConvertToGetAccessAndSetAccess20.ts | 23 + ...efactorConvertToGetAccessAndSetAccess21.ts | 23 + ...efactorConvertToGetAccessAndSetAccess22.ts | 25 + ...efactorConvertToGetAccessAndSetAccess23.ts | 46 + ...efactorConvertToGetAccessAndSetAccess24.ts | 27 + ...efactorConvertToGetAccessAndSetAccess25.ts | 21 + ...efactorConvertToGetAccessAndSetAccess26.ts | 23 + ...efactorConvertToGetAccessAndSetAccess27.ts | 21 + ...efactorConvertToGetAccessAndSetAccess28.ts | 21 + ...efactorConvertToGetAccessAndSetAccess29.ts | 21 + ...refactorConvertToGetAccessAndSetAccess3.ts | 21 + ...efactorConvertToGetAccessAndSetAccess30.ts | 21 + ...efactorConvertToGetAccessAndSetAccess31.ts | 21 + ...efactorConvertToGetAccessAndSetAccess32.ts | 25 + ...refactorConvertToGetAccessAndSetAccess4.ts | 21 + ...refactorConvertToGetAccessAndSetAccess5.ts | 21 + ...refactorConvertToGetAccessAndSetAccess6.ts | 21 + ...refactorConvertToGetAccessAndSetAccess7.ts | 21 + ...refactorConvertToGetAccessAndSetAccess8.ts | 21 + ...refactorConvertToGetAccessAndSetAccess9.ts | 23 + ...ctorConvertToGetAccessAndSetAccess_js_1.ts | 22 + ...ctorConvertToGetAccessAndSetAccess_js_2.ts | 22 + ...ctorConvertToGetAccessAndSetAccess_js_3.ts | 22 + ...ctorConvertToGetAccessAndSetAccess_js_4.ts | 22 + ...ctorConvertToGetAccessAndSetAccess_js_5.ts | 24 + ...ctorConvertToGetAccessAndSetAccess_js_6.ts | 24 + ...ctorConvertToGetAccessAndSetAccess_js_7.ts | 24 + ...ctorConvertToGetAccessAndSetAccess_js_8.ts | 26 + ...ctorConvertToGetAccessAndSetAccess_js_9.ts | 22 + 52 files changed, 1609 insertions(+), 460 deletions(-) create mode 100644 src/services/refactors/generateGetAccessorAndSetAccessor.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess1.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess10.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess11.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess12.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess13.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess14.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess16.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess17.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess18.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess19.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess2.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess20.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess21.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess22.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess24.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess25.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess26.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess27.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess28.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess29.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess3.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess30.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess31.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess32.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess8.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess9.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_1.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_2.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_3.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_4.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_5.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_6.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_7.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_8.ts create mode 100644 tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_9.ts diff --git a/package-lock.json b/package-lock.json index 990d3fbcb5a..2e1c6f6207e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,33 +1,16 @@ { "name": "typescript", - "version": "2.8.0", + "version": "2.9.0", "lockfileVersion": 1, "requires": true, "dependencies": { - "@browserify/acorn5-object-spread": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@browserify/acorn5-object-spread/-/acorn5-object-spread-5.0.1.tgz", - "integrity": "sha512-sFCUPzgeEjdq3rinwy4TFXtak2YZdhqpj6MdNusxkdTFr9TXAUEYK4YQSamR8Joqt/yii1drgl5hk8q/AtJDKA==", - "dev": true, - "requires": { - "acorn": "5.3.0" - }, - "dependencies": { - "acorn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", - "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", - "dev": true - } - } - }, "@gulp-sourcemaps/identity-map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz", "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=", "dev": true, "requires": { - "acorn": "5.3.0", + "acorn": "5.5.3", "css": "2.2.1", "normalize-path": "2.1.1", "source-map": "0.5.7", @@ -35,9 +18,9 @@ }, "dependencies": { "acorn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", - "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true } } @@ -55,7 +38,7 @@ "@types/browserify": { "version": "12.0.33", "resolved": "https://registry.npmjs.org/@types/browserify/-/browserify-12.0.33.tgz", - "integrity": "sha512-mY6dYfq1Ns3Xqz/JFUcyoWaXtm0XDoNhkU1vCwM/ULM5zqNL+SbtacJhce/JCgPeCdbqdVqq77tJ4HwdtypSxg==", + "integrity": "sha1-5hlxwPmFvx93CQSDJkk/ELDdeL0=", "dev": true, "requires": { "@types/insert-module-globals": "7.0.0", @@ -71,22 +54,22 @@ "@types/convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha512-laiDIXqqthjJlyAMYAXOtN3N8+UlbM+KvZi4BaY5ZOekmVkBs/UxfK5O0HWeJVG2eW8F+Mu2ww13fTX+kY1FlQ==", + "integrity": "sha1-1NGA3WrcXLaK2ZvVbgPWN4gfRhY=", "dev": true }, "@types/del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/del/-/del-3.0.0.tgz", - "integrity": "sha512-18mSs54BvzV8+TTQxt0ancig6tsuPZySnhp3cQkWFFDmDMavU4pmWwR+bHHqRBWODYqpzIzVkqKLuk/fP6yypQ==", + "integrity": "sha1-HIzYtuONo7VyNSyo6vVSeTFCYog=", "dev": true, "requires": { "@types/glob": "5.0.35" } }, "@types/events": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz", - "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", "dev": true }, "@types/glob": { @@ -95,7 +78,7 @@ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==", "dev": true, "requires": { - "@types/events": "1.1.0", + "@types/events": "1.2.0", "@types/minimatch": "3.0.3", "@types/node": "8.5.5" } @@ -103,7 +86,7 @@ "@types/gulp": { "version": "3.8.36", "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-3.8.36.tgz", - "integrity": "sha512-u6/zWPzYRNPAtvyFJ3/RSXjmBaBM1dVs5kW22/jU6J786ZGLfSndhLoNOpFI6FGQvqTA+QzFHjSMhpkAN+wxcQ==", + "integrity": "sha1-Eer1g78FNGabT/qb/tUVV/qgCkw=", "dev": true, "requires": { "@types/node": "8.5.5", @@ -114,7 +97,7 @@ "@types/gulp-concat": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/gulp-concat/-/gulp-concat-0.0.32.tgz", - "integrity": "sha512-CUCFADlITzzBfBa2bdGzhKtvBr4eFh+evb+4igVbvPoO5RyPfHifmyQlZl6lM7q19+OKncRlFXDU7B4X9Ayo2g==", + "integrity": "sha1-ckhgKLHPX6qUyMHPNMYmUxzsrNY=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -123,7 +106,7 @@ "@types/gulp-help": { "version": "0.0.34", "resolved": "https://registry.npmjs.org/@types/gulp-help/-/gulp-help-0.0.34.tgz", - "integrity": "sha512-MkW7psZznxxJg2MBk2P2qHE+T8jEZVFz3FG/qGjUYazkyJt7hBJWx5Nuewmay5RVNtUvSWPrdZLr/WTXY3T/6A==", + "integrity": "sha1-Dm1mcYySiWZPLtdaIaDmXXqIM+w=", "dev": true, "requires": { "@types/gulp": "3.8.36", @@ -134,7 +117,7 @@ "@types/gulp-newer": { "version": "0.0.31", "resolved": "https://registry.npmjs.org/@types/gulp-newer/-/gulp-newer-0.0.31.tgz", - "integrity": "sha512-e7J/Zv5Wd7CC0WpuA2syWVitgwrkG0u221e41w7r07XUR6hMH6kHPkq9tUrusHkbeW8QbuLbis5fODOwQCyggQ==", + "integrity": "sha1-818j0eT+DXuP9pnknRwhdmy546c=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -143,7 +126,7 @@ "@types/gulp-sourcemaps": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/gulp-sourcemaps/-/gulp-sourcemaps-0.0.32.tgz", - "integrity": "sha512-+7BAmptW2bxyJnJcCEuie7vLoop3FwWgCdBMzyv7MYXED/HeNMeQuX7uPCkp4vfU1TTu4CYFH0IckNPvo0VePA==", + "integrity": "sha1-557mF+DLFXKYdL5FM/5ZwHeToXU=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -152,7 +135,7 @@ "@types/insert-module-globals": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@types/insert-module-globals/-/insert-module-globals-7.0.0.tgz", - "integrity": "sha512-zudCJPwluh1VUDB6Gl/OQdRp+fYy3+47huJB/JMQubMS2p+sH18MCVK4WUz3FqaWLB12yh5ELxVR/+tqwlm/qA==", + "integrity": "sha1-jRWN5KY4To2qE7PWPuurbV9nd30=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -161,7 +144,7 @@ "@types/merge2": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@types/merge2/-/merge2-1.1.4.tgz", - "integrity": "sha512-GjaXY4OultxbaOOk7lCLO7xvEcFpdjExC605YmfI6X29vhHKpJfMWKCDZd3x+BITrZaXKg97DgV/SdGVSwdzxA==", + "integrity": "sha1-CmUOHMIVove4BALqtraiNuYC96M=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -182,7 +165,7 @@ "@types/mkdirp": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "integrity": "sha1-UDqs/lzCcD1UhDJrGyfvpnoznB8=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -197,29 +180,29 @@ "@types/node": { "version": "8.5.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.5.tgz", - "integrity": "sha512-JRnfoh0Ll4ElmIXKxbUfcOodkGvcNHljct6mO1X9hE/mlrMzAx0hYCLAD7sgT53YAY1HdlpzUcV0CkmDqUqTuA==", + "integrity": "sha1-b56BZK4aVam+sdJXHPt6z51yDGE=", "dev": true }, "@types/orchestrator": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@types/orchestrator/-/orchestrator-0.3.2.tgz", - "integrity": "sha512-cKB4yTX0wGaRCSkdHDX2fkGQbMAA8UOshC2U7DQky1CE5o+5q2iQQ8VkbPbE/88uaTtsusvBPMcCX7dgmjxBhQ==", + "integrity": "sha1-zRXGzql4oyuY5QVCOcvMeOVWcfE=", "dev": true, "requires": { "@types/node": "8.5.5", - "@types/q": "1.0.7" + "@types/q": "1.5.0" } }, "@types/q": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.0.7.tgz", - "integrity": "sha512-0WS7XU7sXzQ7J1nbnMKKYdjrrFoO3YtZYgUzeV8JFXffPnHfvSJQleR70I8BOAsOm14i4dyaAZ3YzqIl1YhkXQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.0.tgz", + "integrity": "sha512-sWj7AMiG0fYmta6ug1ublLjtj/tqn+CnCZeo7yswR1ykxel0FOWFGdWviTcGSNAMmtLbycDqbg6w98VPFKJmbw==", "dev": true }, "@types/run-sequence": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/run-sequence/-/run-sequence-0.0.30.tgz", - "integrity": "sha512-XwGr1b4yCGUILKeBkzmeWcxmGHQ0vFFFpA6D6y1yLO6gKmYorF+PHqdU5KG+nWt38OvtrkDptmrSmlHX/XtpLw==", + "integrity": "sha1-s6kMn9KaXu3lgTXdAl6zrEu7Vg4=", "dev": true, "requires": { "@types/gulp": "3.8.36", @@ -238,7 +221,7 @@ "@types/vinyl": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz", - "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==", + "integrity": "sha1-TzuNro9YKNOADvcJsM/0iO6FLeM=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -247,7 +230,7 @@ "@types/xml2js": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.2.tgz", - "integrity": "sha512-8aKUBSj3oGcnuiBmDLm3BIk09RYg01mz9HlQ2u4aS17oJ25DxjQrEUVGFSBVNOfM45pQW4OjcBPplq6r/exJdA==", + "integrity": "sha1-pLhLOHn/1HEJU/2Syr/emopOhFY=", "dev": true, "requires": { "@types/node": "8.5.5" @@ -275,6 +258,24 @@ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", "dev": true }, + "acorn-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", + "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "xtend": "4.0.1" + }, + "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + } + } + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -345,6 +346,15 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", @@ -384,7 +394,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", "dev": true }, "arr-union": { @@ -426,7 +436,7 @@ "array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=", "dev": true }, "array-union": { @@ -457,9 +467,9 @@ "dev": true }, "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { "bn.js": "4.11.8", @@ -556,7 +566,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { "cache-base": "1.0.1", @@ -569,9 +579,9 @@ } }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", "dev": true }, "beeper": { @@ -599,7 +609,7 @@ "braces": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", - "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", + "integrity": "sha1-pGlBy1+0khVrPWplbgbDU2Tj5m4=", "dev": true, "requires": { "arr-flatten": "1.1.0", @@ -622,16 +632,17 @@ "dev": true }, "browser-pack": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", - "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { "JSONStream": "1.3.2", - "combine-source-map": "0.7.2", + "combine-source-map": "0.8.0", "defined": "1.0.0", + "safe-buffer": "5.1.1", "through2": "2.0.3", - "umd": "3.0.1" + "umd": "3.0.3" } }, "browser-resolve": { @@ -643,6 +654,12 @@ "resolve": "1.1.7" } }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserify": { "version": "16.1.1", "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.1.1.tgz", @@ -651,10 +668,10 @@ "requires": { "JSONStream": "1.3.2", "assert": "1.4.1", - "browser-pack": "6.0.2", + "browser-pack": "6.1.0", "browser-resolve": "1.11.2", "browserify-zlib": "0.2.0", - "buffer": "5.0.8", + "buffer": "5.1.0", "cached-path-relative": "1.0.1", "concat-stream": "1.6.2", "console-browserify": "1.1.0", @@ -670,10 +687,10 @@ "htmlescape": "1.1.1", "https-browserify": "1.0.0", "inherits": "2.0.3", - "insert-module-globals": "7.0.1", - "labeled-stream-splicer": "2.0.0", + "insert-module-globals": "7.0.6", + "labeled-stream-splicer": "2.0.1", "mkdirp": "0.5.1", - "module-deps": "6.0.0", + "module-deps": "6.0.2", "os-browserify": "0.3.0", "parents": "1.0.1", "path-browserify": "0.0.0", @@ -686,10 +703,10 @@ "shasum": "1.0.2", "shell-quote": "1.6.1", "stream-browserify": "2.0.1", - "stream-http": "2.7.2", + "stream-http": "2.8.1", "string_decoder": "1.0.3", "subarg": "1.0.0", - "syntax-error": "1.3.0", + "syntax-error": "1.4.0", "through2": "2.0.3", "timers-browserify": "1.4.2", "tty-browserify": "0.0.1", @@ -697,78 +714,12 @@ "util": "0.10.3", "vm-browserify": "0.0.4", "xtend": "4.0.1" - }, - "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "events": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", - "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==", - "dev": true - }, - "module-deps": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.0.tgz", - "integrity": "sha512-BKsMhJJENEM4dTgqq2MDTTHXRHcNUFegoAwlG4HO4VMdUyMcJDKgfgI+MOv6tR5Iv8G3MKZFgsSiyP3ZoosRMw==", - "dev": true, - "requires": { - "JSONStream": "1.3.2", - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.6.2", - "defined": "1.0.0", - "detective": "5.0.2", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "parents": "1.0.1", - "readable-stream": "2.3.3", - "resolve": "1.6.0", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", - "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - } } }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { "buffer-xor": "1.0.3", @@ -785,7 +736,7 @@ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "dev": true, "requires": { - "browserify-aes": "1.1.1", + "browserify-aes": "1.2.0", "browserify-des": "1.0.0", "evp_bytestokey": "1.0.3" } @@ -808,7 +759,7 @@ "dev": true, "requires": { "bn.js": "4.11.8", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -836,13 +787,13 @@ } }, "buffer": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", - "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", + "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8" + "base64-js": "1.2.3", + "ieee754": "1.1.11" } }, "buffer-crc32": { @@ -884,7 +835,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { "collection-visit": "1.0.0", @@ -954,32 +905,6 @@ "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", "supports-color": "5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } } }, "check-error": { @@ -1063,7 +988,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", @@ -1074,7 +999,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -1157,13 +1082,13 @@ "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "integrity": "sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=", "dev": true }, "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { "convert-source-map": "1.1.3", @@ -1199,36 +1124,15 @@ "dev": true }, "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.0.6", + "readable-stream": "2.3.3", "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } } }, "concat-with-sourcemaps": { @@ -1292,7 +1196,7 @@ "cipher-base": "1.0.4", "inherits": "2.0.3", "ripemd160": "2.0.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "create-hmac": { @@ -1306,7 +1210,7 @@ "inherits": "2.0.3", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "crypto-browserify": { @@ -1324,8 +1228,8 @@ "inherits": "2.0.3", "pbkdf2": "3.0.14", "public-encrypt": "4.0.0", - "randombytes": "2.0.5", - "randomfill": "1.0.3" + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "css": { @@ -1381,7 +1285,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.37" + "es5-ext": "0.10.42" } }, "date-now": { @@ -1399,20 +1303,20 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" } }, "debug-fabulous": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.0.0.tgz", - "integrity": "sha512-dsd50qQ1atDeurcxL7XOjPp4nZCGZzWIONDujDXzl1atSyC3hMbZD+v6440etw+Vt0Pr8ce4TQzHfX3KZM05Mw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", "dev": true, "requires": { "debug": "3.1.0", - "memoizee": "0.4.11", + "memoizee": "0.4.12", "object-assign": "4.1.1" }, "dependencies": { @@ -1443,7 +1347,7 @@ "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", "dev": true, "requires": { "type-detect": "4.0.5" @@ -1544,28 +1448,20 @@ "dev": true }, "detective": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.0.2.tgz", - "integrity": "sha512-NUsLoezj4wb9o7vpxS9F3L5vcO87ceyRBcl48op06YFNwkyIEY997JpSCA5lDlDuDc6JxOtaL5qfK3muoWxpMA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", + "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==", "dev": true, "requires": { - "@browserify/acorn5-object-spread": "5.0.1", - "acorn": "5.3.0", - "defined": "1.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", - "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", - "dev": true - } + "acorn-node": "1.3.0", + "defined": "1.0.0", + "minimist": "1.2.0" } }, "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "diffie-hellman": { @@ -1576,9 +1472,15 @@ "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -1588,6 +1490,29 @@ "readable-stream": "2.3.3" } }, + "duplexify": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + } + } + }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", @@ -1624,13 +1549,14 @@ } }, "es5-ext": { - "version": "0.10.37", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", - "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", "dev": true, "requires": { "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -1640,7 +1566,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37", + "es5-ext": "0.10.42", "es6-symbol": "3.1.1" } }, @@ -1657,7 +1583,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37" + "es5-ext": "0.10.42" } }, "es6-weak-map": { @@ -1667,7 +1593,7 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37", + "es5-ext": "0.10.42", "es6-iterator": "2.0.3", "es6-symbol": "3.1.1" } @@ -1728,9 +1654,15 @@ "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37" + "es5-ext": "0.10.42" } }, + "events": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", + "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==", + "dev": true + }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -1808,7 +1740,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", @@ -1819,7 +1751,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -1851,7 +1783,7 @@ "extglob": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.3.tgz", - "integrity": "sha512-AyptZexgu7qppEPq59DtN/XJGZDrLcVxSHai+4hdgMMS9EpF4GBvygcWWApno8lL9qSjVpYt7Raao28qzJX1ww==", + "integrity": "sha1-VeAZ0Mlb+HOUnHN7flFy26hOuyk=", "dev": true, "requires": { "array-unique": "0.3.2", @@ -2048,7 +1980,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "dev": true, "requires": { "fs.realpath": "1.0.0", @@ -2161,7 +2093,7 @@ "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", "dev": true, "requires": { "global-prefix": "1.0.2", @@ -2443,7 +2375,7 @@ "acorn": "5.5.3", "convert-source-map": "1.5.1", "css": "2.2.1", - "debug-fabulous": "1.0.0", + "debug-fabulous": "1.1.0", "detect-newline": "2.1.0", "graceful-fs": "4.1.11", "source-map": "0.6.1", @@ -2472,9 +2404,9 @@ } }, "gulp-typescript": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-4.0.1.tgz", - "integrity": "sha512-BGdaBC1R4SJosXEkkEieeZ21qCZHnfSV78k7zzDljqAxvzDeGRTUqF4geckVclKEeiS3EYOBwNlxoHjJtn20vg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-4.0.2.tgz", + "integrity": "sha512-Hhbn5Aa2l3T+tnn0KqsG6RRJmcYEsr3byTL2nBpNBeAK8pqug9Od4AwddU4JEI+hRw7mzZyjRbB8DDWR6paGVA==", "dev": true, "requires": { "ansi-colors": "1.1.0", @@ -2509,12 +2441,6 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", @@ -2539,16 +2465,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "1.0.0", - "is-negated-glob": "1.0.0" - } - }, "unique-stream": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", @@ -2713,9 +2629,9 @@ "dev": true }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-gulplog": { @@ -2823,9 +2739,9 @@ "dev": true }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", "dev": true }, "indexof": { @@ -2853,7 +2769,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", "dev": true }, "inline-source-map": { @@ -2866,16 +2782,17 @@ } }, "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.6.tgz", + "integrity": "sha512-R3sidKJr3SsggqQQ5cEwQb3pWG8RNx0UnpyeiOSR6jorRIeAOzH2gkTWnNdMnyRiVbjrG047K7UCtlMkQ1Mo9w==", "dev": true, "requires": { "JSONStream": "1.3.2", - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", + "combine-source-map": "0.8.0", + "concat-stream": "1.6.2", "is-buffer": "1.1.6", "lexical-scope": "1.2.0", + "path-is-absolute": "1.0.1", "process": "0.11.10", "through2": "2.0.3", "xtend": "4.0.1" @@ -2890,7 +2807,7 @@ "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", "dev": true, "requires": { "is-relative": "1.0.0", @@ -2900,7 +2817,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "6.0.2" @@ -2909,13 +2826,13 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "6.0.2" @@ -2924,7 +2841,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "1.0.0", @@ -3015,7 +2932,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { "isobject": "3.0.1" @@ -3030,7 +2947,7 @@ "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", "dev": true, "requires": { "is-unc-path": "1.0.0" @@ -3039,7 +2956,7 @@ "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", "dev": true, "requires": { "unc-path-regex": "0.1.2" @@ -3051,6 +2968,12 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, "is-windows": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", @@ -3180,7 +3103,7 @@ "js-yaml": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "integrity": "sha1-LnhEFka9RoLpY/IrbpKCPDCcYtw=", "dev": true, "requires": { "argparse": "1.0.9", @@ -3190,7 +3113,7 @@ "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=", "dev": true } } @@ -3225,24 +3148,24 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", "dev": true }, "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", + "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", "dev": true, "requires": { "inherits": "2.0.3", - "isarray": "0.0.1", + "isarray": "2.0.4", "stream-splicer": "2.0.0" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", + "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", "dev": true } } @@ -3458,13 +3381,13 @@ "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", "dev": true, "requires": { - "es5-ext": "0.10.37" + "es5-ext": "0.10.42" } }, "make-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.2.tgz", - "integrity": "sha512-l9ra35l5VWLF24y75Tg8XgfGLX0ueRhph118WKM6H5denx4bB5QF59+4UAm9oJ2qsPQZas/CQUDdtDdfvYHBdQ==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", "dev": true }, "make-iterator": { @@ -3525,19 +3448,19 @@ } }, "memoizee": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.11.tgz", - "integrity": "sha1-vemBdmPJ5A/bKk6hw2cpYIeujI8=", + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz", + "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==", "dev": true, "requires": { "d": "1.0.0", - "es5-ext": "0.10.37", + "es5-ext": "0.10.42", "es6-weak-map": "2.0.2", "event-emitter": "0.3.5", "is-promise": "2.1.0", "lru-queue": "0.1.0", "next-tick": "1.0.0", - "timers-ext": "0.1.2" + "timers-ext": "0.1.5" } }, "merge2": { @@ -3592,7 +3515,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, "requires": { "brace-expansion": "1.1.8" @@ -3607,7 +3530,7 @@ "mixin-deep": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", - "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", + "integrity": "sha1-R6hzK6l3mUV8jB7KKPlRMtfoFQo=", "dev": true, "requires": { "for-in": "1.0.2", @@ -3617,7 +3540,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { "is-plain-object": "2.0.4" @@ -3643,9 +3566,9 @@ } }, "mocha": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.4.tgz", - "integrity": "sha512-nMOpAPFosU1B4Ix1jdhx5e3q7XO55ic5a8cgYvW27CequcEY+BabS0kUVL1Cw1V5PuVHZWeNRWFLmEPexo79VA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.5.tgz", + "integrity": "sha512-3MM3UjZ5p8EJrYpG7s+29HAI9G7sTzKEe4+w37Dg0QP7qL4XGsV+Q2xet2cE37AqdgN1OtYQB6Vl98YiPV3PgA==", "dev": true, "requires": { "browser-stdout": "1.3.1", @@ -3660,12 +3583,6 @@ "supports-color": "4.4.0" }, "dependencies": { - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3675,10 +3592,10 @@ "ms": "2.0.0" } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, "supports-color": { @@ -3698,6 +3615,40 @@ "integrity": "sha1-zK/w4ckc9Vf+d+B535lUuRt0d1Y=", "dev": true }, + "module-deps": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.2.tgz", + "integrity": "sha512-KWBI3009iRnHjRlxRhe8nJ6kdeBTg4sMi5N6AZgg5f1/v5S7EBCRBOY854I4P5Anl4kx6AJH+4bBBC2Gi3nkvg==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.6.2", + "defined": "1.0.0", + "detective": "5.1.0", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.6.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", + "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3778,7 +3729,7 @@ "natives": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.1.tgz", - "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==", + "integrity": "sha1-ARrM4ffL2H97prMJPWzZOSvhxXQ=", "dev": true }, "next-tick": { @@ -3861,7 +3812,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", @@ -3872,7 +3823,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -4025,7 +3976,7 @@ "p-map": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", "dev": true }, "pako": { @@ -4049,8 +4000,8 @@ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", "pbkdf2": "3.0.14" @@ -4146,7 +4097,7 @@ "create-hmac": "1.1.6", "ripemd160": "2.0.1", "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "pify": { @@ -4262,7 +4213,7 @@ "browserify-rsa": "4.0.1", "create-hash": "1.1.3", "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "randombytes": "2.0.6" } }, "pump": { @@ -4295,29 +4246,6 @@ "duplexify": "3.5.4", "inherits": "2.0.3", "pump": "2.0.1" - }, - "dependencies": { - "duplexify": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", - "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "1.4.0" - } - } } }, "punycode": { @@ -4345,21 +4273,21 @@ "dev": true }, "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { "safe-buffer": "5.1.1" } }, "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.5", + "randombytes": "2.0.6", "safe-buffer": "5.1.1" } }, @@ -4375,7 +4303,7 @@ "readable-stream": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", "dev": true, "requires": { "core-util-is": "1.0.2", @@ -4494,7 +4422,7 @@ "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", "dev": true, "requires": { "glob": "7.1.2" @@ -4513,7 +4441,7 @@ "run-sequence": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", - "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==", + "integrity": "sha1-HOZD2jb9jH6n4akynaM/wriJhJU=", "dev": true, "requires": { "chalk": "1.1.3", @@ -4551,7 +4479,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", "dev": true }, "sander": { @@ -4577,7 +4505,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", "dev": true }, "semver": { @@ -4604,7 +4532,7 @@ "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { "extend-shallow": "2.0.1", @@ -4614,9 +4542,9 @@ } }, "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { "inherits": "2.0.3", @@ -4630,7 +4558,7 @@ "dev": true, "requires": { "json-stable-stringify": "0.0.1", - "sha.js": "2.4.9" + "sha.js": "2.4.11" } }, "shell-quote": { @@ -4719,7 +4647,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", @@ -4730,7 +4658,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -4738,7 +4666,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { "define-property": "1.0.0", @@ -4749,7 +4677,7 @@ "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { "kind-of": "3.2.2" @@ -4787,7 +4715,7 @@ "source-map-resolve": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", "dev": true, "requires": { "atob": "2.0.3", @@ -4838,7 +4766,7 @@ "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { "extend-shallow": "3.0.2" @@ -4857,7 +4785,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { "is-plain-object": "2.0.4" @@ -4933,7 +4861,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", @@ -4944,7 +4872,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -4976,9 +4904,9 @@ "dev": true }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "dev": true, "requires": { "builtin-status-codes": "3.0.0", @@ -5042,7 +4970,7 @@ "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", "dev": true, "requires": { "safe-buffer": "5.1.1" @@ -5082,13 +5010,22 @@ "minimist": "1.2.0" } }, - "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "acorn": "4.0.13" + "has-flag": "3.0.0" + } + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "1.3.0" } }, "through": { @@ -5142,15 +5079,25 @@ } }, "timers-ext": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", - "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz", + "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==", "dev": true, "requires": { - "es5-ext": "0.10.37", + "es5-ext": "0.10.42", "next-tick": "1.0.0" } }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "1.0.0", + "is-negated-glob": "1.0.0" + } + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -5240,7 +5187,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", @@ -5251,7 +5198,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -5289,8 +5236,8 @@ "requires": { "arrify": "1.0.1", "chalk": "2.3.2", - "diff": "3.3.1", - "make-error": "1.3.2", + "diff": "3.5.0", + "make-error": "1.3.4", "minimist": "1.2.0", "mkdirp": "0.5.1", "source-map-support": "0.5.4", @@ -5298,9 +5245,9 @@ } }, "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", + "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", "dev": true }, "tslint": { @@ -5313,14 +5260,14 @@ "builtin-modules": "1.1.1", "chalk": "2.3.2", "commander": "2.15.1", - "diff": "3.3.1", + "diff": "3.5.0", "glob": "7.1.2", "js-yaml": "3.10.0", "minimatch": "3.0.4", "resolve": "1.6.0", "semver": "5.5.0", - "tslib": "1.8.1", - "tsutils": "2.16.0" + "tslib": "1.9.0", + "tsutils": "2.26.1" }, "dependencies": { "commander": { @@ -5347,14 +5294,20 @@ } }, "tsutils": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.16.0.tgz", - "integrity": "sha512-9Ier/60O7OZRNPiw+or5QAtAY4kQA+WDiO/r6xOYATEyefH9bdfvTRLCxrYnFhQlZfET2vYXKfpr3Vw2BiArZw==", + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.1.tgz", + "integrity": "sha512-bnm9bcjOqOr1UljleL94wVCDlpa6KjfGaTkefeLch4GRafgDkROxPizbB/FxTEdI++5JqhxczRy/Qub0syNqZA==", "dev": true, "requires": { - "tslib": "1.8.1" + "tslib": "1.9.0" } }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -5367,7 +5320,7 @@ "type-detect": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", - "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==", + "integrity": "sha1-1w5byB223io4G8rKDG4MvcdjXeI=", "dev": true }, "typedarray": { @@ -5377,9 +5330,9 @@ "dev": true }, "typescript": { - "version": "2.8.0-dev.20180322", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.0-dev.20180322.tgz", - "integrity": "sha512-dSYa9IAoj3CRAxtKx9+cSCQLetB7OLtHXhvQWeWY6PPIXvbpAC41ulQWX3TUAkMYU9NS/kGIU8TFM9VFpinJTg==", + "version": "2.9.0-dev.20180407", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.0-dev.20180407.tgz", + "integrity": "sha512-Tg0/hU2hSz+4pb5Lj5+bj1uLldN7C8NO5Ik19WfftMlpeXRyZQJzglV0oncmsXOfN9gG+JC0xnO58YspE6sZ1w==", "dev": true }, "uglify-js": { @@ -5402,9 +5355,9 @@ "optional": true }, "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "unc-path-regex": { @@ -5572,7 +5525,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "0.1.6", @@ -5583,7 +5536,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -5766,7 +5719,7 @@ "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "integrity": "sha1-jz5DKM9jsVQMDWfhsneDhviXWyY=", "dev": true }, "vm-browserify": { @@ -5781,7 +5734,7 @@ "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", "dev": true, "requires": { "isexe": "2.0.0" @@ -5809,7 +5762,7 @@ "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", "dev": true, "requires": { "sax": "1.2.4", diff --git a/src/compiler/core.ts b/src/compiler/core.ts index cbfcf127200..19e9ca9152a 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -3122,8 +3122,8 @@ namespace ts { return (arg: T) => f(arg) && g(arg); } - export function or(f: (arg: T) => boolean, g: (arg: T) => boolean) { - return (arg: T) => f(arg) || g(arg); + export function or(f: (arg: T) => boolean, g: (arg: T) => boolean, ...others: ((arg: T) => boolean)[]) { + return (arg: T) => f(arg) || g(arg) || others.some(f => f(arg)); } export function assertTypeIsNever(_: never): void { } // tslint:disable-line no-empty diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 2b56e551f1b..c665744b1ea 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -4161,5 +4161,9 @@ "Convert all constructor functions to classes": { "category": "Message", "code": 95045 + }, + "Generate 'get' and 'set' accessors": { + "category": "Message", + "code": 95046 } } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 8e6b3f8ae39..69309acddb9 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4273,7 +4273,7 @@ namespace ts { } } - export function isParameterPropertyDeclaration(node: Node): boolean { + export function isParameterPropertyDeclaration(node: Node): node is ParameterDeclaration { return hasModifier(node, ModifierFlags.ParameterPropertyModifier) && node.parent.kind === SyntaxKind.Constructor && isClassLike(node.parent.parent); } diff --git a/src/services/refactors/extractSymbol.ts b/src/services/refactors/extractSymbol.ts index b99a4b26552..fb5177f1c6a 100644 --- a/src/services/refactors/extractSymbol.ts +++ b/src/services/refactors/extractSymbol.ts @@ -701,14 +701,6 @@ namespace ts.refactor.extractSymbol { Global, } - function getUniqueName(baseName: string, fileText: string): string { - let nameText = baseName; - for (let i = 1; stringContains(fileText, nameText); i++) { - nameText = `${baseName}_${i}`; - } - return nameText; - } - /** * Result of 'extractRange' operation for a specific scope. * Stores either a list of changes that should be applied to extract a range or a list of errors @@ -1129,37 +1121,6 @@ namespace ts.refactor.extractSymbol { } } - /** - * @return The index of the (only) reference to the extracted symbol. We want the cursor - * to be on the reference, rather than the declaration, because it's closer to where the - * user was before extracting it. - */ - function getRenameLocation(edits: ReadonlyArray, renameFilename: string, functionNameText: string, isDeclaredBeforeUse: boolean): number { - let delta = 0; - let lastPos = -1; - for (const { fileName, textChanges } of edits) { - Debug.assert(fileName === renameFilename); - for (const change of textChanges) { - const { span, newText } = change; - const index = newText.indexOf(functionNameText); - if (index !== -1) { - lastPos = span.start + delta + index; - - // If the reference comes first, return immediately. - if (!isDeclaredBeforeUse) { - return lastPos; - } - } - delta += newText.length - span.length; - } - } - - // If the declaration comes first, return the position of the last occurrence. - Debug.assert(isDeclaredBeforeUse); - Debug.assert(lastPos >= 0); - return lastPos; - } - function getFirstDeclaration(type: Type): Declaration | undefined { let firstDeclaration; diff --git a/src/services/refactors/generateGetAccessorAndSetAccessor.ts b/src/services/refactors/generateGetAccessorAndSetAccessor.ts new file mode 100644 index 00000000000..f1b1499a838 --- /dev/null +++ b/src/services/refactors/generateGetAccessorAndSetAccessor.ts @@ -0,0 +1,252 @@ +/* @internal */ +namespace ts.refactor.generateGetAccessorAndSetAccessor { + const actionName = "Generate 'get' and 'set' accessors"; + const actionDescription = Diagnostics.Generate_get_and_set_accessors.message; + registerRefactor(actionName, { getEditsForAction, getAvailableActions }); + + type AccepedDeclaration = ParameterDeclaration | PropertyDeclaration | PropertyAssignment; + type AccepedNameType = Identifier | StringLiteral; + type ContainerDeclation = ClassLikeDeclaration | ObjectLiteralExpression; + + interface DeclarationInfo { + container: ContainerDeclation; + isStatic: boolean; + type: TypeNode | undefined; + } + + interface Info extends DeclarationInfo { + declaration: AccepedDeclaration; + fieldName: AccepedNameType; + accessorName: AccepedNameType; + } + + function getAvailableActions(context: RefactorContext): ApplicableRefactorInfo[] | undefined { + const { file, startPosition } = context; + if (!getConvertibleFieldAtPosition(file, startPosition)) return undefined; + + return [{ + name: actionName, + description: actionDescription, + actions: [ + { + name: actionName, + description: actionDescription + } + ] + }]; + } + + function getEditsForAction(context: RefactorContext, _actionName: string): RefactorEditInfo | undefined { + const { file, startPosition } = context; + + const fieldInfo = getConvertibleFieldAtPosition(file, startPosition); + if (!fieldInfo) return undefined; + + const isJS = isSourceFileJavaScript(file); + const changeTracker = textChanges.ChangeTracker.fromContext(context); + const { isStatic, fieldName, accessorName, type, container, declaration } = fieldInfo; + + const isInClassLike = isClassLike(container); + const accessorModifiers = getAccessorModifiers(isJS, declaration, isStatic, isInClassLike); + const fieldModifiers = getFieldModifiers(isJS, isStatic, isInClassLike); + + updateFieldDeclaration(changeTracker, file, declaration, fieldName, fieldModifiers, container); + + const getAccessor = generateGetAccessor(fieldName, accessorName, type, accessorModifiers, isStatic, container); + const setAccessor = generateSetAccessor(fieldName, accessorName, type, accessorModifiers, isStatic, container); + + insertAccessor(changeTracker, file, getAccessor, declaration, container); + insertAccessor(changeTracker, file, setAccessor, declaration, container); + + const edits = changeTracker.getChanges(); + const renameFilename = file.fileName; + const renameLocationOffset = isIdentifier(fieldName) ? 0 : -1; + const renameLocation = renameLocationOffset + getRenameLocation(edits, renameFilename, fieldName.text, /*isDeclaredBeforeUse*/ false); + return { renameFilename, renameLocation, edits }; + } + + function isConvertableName (name: DeclarationName): name is AccepedNameType { + return isIdentifier(name) || isStringLiteral(name); + } + + function createPropertyName (name: string, originalName: AccepedNameType) { + return isIdentifier(originalName) ? createIdentifier(name) : createLiteral(name); + } + + function createAccessorAccessExpression (fieldName: AccepedNameType, isStatic: boolean, container: ContainerDeclation) { + const leftHead = isStatic ? (container).name : createThis(); + return isIdentifier(fieldName) ? createPropertyAccess(leftHead, fieldName) : createElementAccess(leftHead, createLiteral(fieldName)); + } + + function getAccessorModifiers(isJS: boolean, declaration: AccepedDeclaration, isStatic: boolean, isClassLike: boolean): NodeArray | undefined { + if (!isClassLike) return undefined; + + if (!declaration.modifiers || getModifierFlags(declaration) & ModifierFlags.Private) { + const modifiers = append( + !isJS ? [createToken(SyntaxKind.PublicKeyword)] : undefined, + isStatic ? createToken(SyntaxKind.StaticKeyword) : undefined + ); + return modifiers && createNodeArray(modifiers); + } + return declaration.modifiers; + } + + function getFieldModifiers(isJS: boolean, isStatic: boolean, isClassLike: boolean): NodeArray | undefined { + if (!isClassLike) return undefined; + + const modifiers = append( + !isJS ? [createToken(SyntaxKind.PrivateKeyword)] : undefined, + isStatic ? createToken(SyntaxKind.StaticKeyword) : undefined + ); + return modifiers && createNodeArray(modifiers); + } + + function getPropertyDeclarationInfo(propertyDeclaration: PropertyDeclaration): DeclarationInfo | undefined { + if (!isClassLike(propertyDeclaration.parent) || !propertyDeclaration.parent.members) return undefined; + + return { + isStatic: hasStaticModifier(propertyDeclaration), + type: propertyDeclaration.type, + container: propertyDeclaration.parent + }; + } + + function getParameterPropertyDeclarationInfo(parameterDeclaration: ParameterDeclaration): DeclarationInfo | undefined { + if (!isClassLike(parameterDeclaration.parent.parent) || !parameterDeclaration.parent.parent.members) return undefined; + + return { + isStatic: false, + type: parameterDeclaration.type, + container: parameterDeclaration.parent.parent + }; + } + + function getPropertyAssignmentDeclarationInfo(propertyAssignment: PropertyAssignment): DeclarationInfo | undefined { + return { + isStatic: false, + type: undefined, + container: propertyAssignment.parent + }; + } + + function getDeclarationInfo(declaration: AccepedDeclaration) { + if (isPropertyDeclaration(declaration)) { + return getPropertyDeclarationInfo(declaration); + } + else if (isPropertyAssignment(declaration)) { + return getPropertyAssignmentDeclarationInfo(declaration); + } + else { + return getParameterPropertyDeclarationInfo(declaration); + } + } + + function getConvertibleFieldAtPosition(file: SourceFile, startPosition: number): Info | undefined { + const node = getTokenAtPosition(file, startPosition, /*includeJsDocComment*/ false); + const declaration = findAncestor(node.parent, or(isParameterPropertyDeclaration, isPropertyDeclaration, isPropertyAssignment)); + // make sure propertyDeclaration have AccessibilityModifier or Static Modifier + const meaning = ModifierFlags.AccessibilityModifier | ModifierFlags.Static; + if (!declaration || !isConvertableName(declaration.name) || (getModifierFlags(declaration) | meaning) !== meaning) return undefined; + + const info = getDeclarationInfo(declaration); + const fieldName = createPropertyName(getUniqueName(`_${declaration.name.text}`, file.text), declaration.name); + suppressLeadingAndTrailingTrivia(fieldName); + suppressLeadingAndTrailingTrivia(declaration); + return { + ...info, + declaration, + fieldName, + accessorName: createPropertyName(declaration.name.text, declaration.name) + }; + } + + function generateGetAccessor(fieldName: AccepedNameType, accessorName: AccepedNameType, type: TypeNode, modifiers: ModifiersArray | undefined, isStatic: boolean, container: ContainerDeclation) { + return createGetAccessor( + /*decorators*/ undefined, + modifiers, + accessorName, + /*parameters*/ undefined, + type, + createBlock([ + createReturn( + createAccessorAccessExpression(fieldName, isStatic, container) + ) + ], /*multiLine*/ true) + ); + } + + function generateSetAccessor(fieldName: AccepedNameType, accessorName: AccepedNameType, type: TypeNode, modifiers: ModifiersArray | undefined, isStatic: boolean, container: ContainerDeclation) { + return createSetAccessor( + /*decorators*/ undefined, + modifiers, + accessorName, + [createParameter( + /*decorators*/ undefined, + /*modifiers*/ undefined, + /*dotDotDotToken*/ undefined, + createIdentifier("value"), + /*questionToken*/ undefined, + type + )], + createBlock([ + createStatement( + createAssignment( + createAccessorAccessExpression(fieldName, isStatic, container), + createIdentifier("value") + ) + ) + ], /*multiLine*/ true) + ); + } + + function updatePropertyDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: PropertyDeclaration, fieldName: AccepedNameType, modifiers: ModifiersArray | undefined) { + const property = updateProperty( + declaration, + declaration.decorators, + modifiers, + fieldName, + declaration.questionToken || declaration.exclamationToken, + declaration.type, + declaration.initializer + ); + + changeTracker.replaceNode(file, declaration, property); + } + + function updateParameterPropertyDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: ParameterDeclaration, fieldName: AccepedNameType, modifiers: ModifiersArray | undefined, classLikeContainer: ClassLikeDeclaration) { + const property = createProperty( + declaration.decorators, + modifiers, + fieldName, + declaration.questionToken, + declaration.type, + declaration.initializer + ); + + changeTracker.insertNodeAtClassStart(file, classLikeContainer, property); + changeTracker.deleteNodeInList(file, declaration); + } + + function updatePropertyAssignmentDeclaration (changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: PropertyAssignment, fieldName: AccepedNameType) { + const assignment = updatePropertyAssignment(declaration, fieldName, declaration.initializer); + changeTracker.replacePropertyAssignment(file, declaration, assignment); + } + + function updateFieldDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: AccepedDeclaration, fieldName: AccepedNameType, modifiers: ModifiersArray | undefined, container: ContainerDeclation) { + if (isPropertyDeclaration(declaration)) { + updatePropertyDeclaration(changeTracker, file, declaration, fieldName, modifiers); + } + else if (isPropertyAssignment(declaration)) { + updatePropertyAssignmentDeclaration(changeTracker, file, declaration, fieldName); + } + else { + updateParameterPropertyDeclaration(changeTracker, file, declaration, fieldName, modifiers, container); + } + } + + function insertAccessor(changeTracker: textChanges.ChangeTracker, file: SourceFile, accessor: AccessorDeclaration, declaration: AccepedDeclaration, container: ContainerDeclation) { + isParameterPropertyDeclaration(declaration) + ? changeTracker.insertNodeAtClassStart(file, container, accessor) + : changeTracker.insertNodeAfter(file, declaration, accessor); + } +} diff --git a/src/services/refactors/refactors.ts b/src/services/refactors/refactors.ts index da2f08a8e9f..f5ef4da86a4 100644 --- a/src/services/refactors/refactors.ts +++ b/src/services/refactors/refactors.ts @@ -1 +1,2 @@ /// +/// diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 800b58e8274..979c44b2cd7 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -316,6 +316,12 @@ namespace ts.textChanges { return this.replaceRangeWithNodes(sourceFile, getAdjustedRange(sourceFile, startNode, endNode, options), newNodes, options); } + public replacePropertyAssignment(sourceFile: SourceFile, oldNode: PropertyAssignment, newNode: PropertyAssignment) { + return this.replaceNode(sourceFile, oldNode, newNode, { + suffix: "," + this.newLineCharacter + }); + } + private insertNodeAt(sourceFile: SourceFile, pos: number, newNode: Node, options: InsertNodeOptions = {}) { this.replaceRange(sourceFile, createTextRange(pos), newNode, options); } @@ -468,6 +474,9 @@ namespace ts.textChanges { else if (isVariableDeclaration(node)) { return { prefix: ", " }; } + else if (isPropertyAssignment(node)) { + return { suffix: "," + this.newLineCharacter }; + } else if (isParameter(node)) { return {}; } diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 378a711e0c9..abb48700321 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -1526,4 +1526,45 @@ namespace ts { function getFirstChild(node: Node): Node | undefined { return node.forEachChild(child => child); } + + /* @internal */ + export function getUniqueName(baseName: string, fileText: string): string { + let nameText = baseName; + for (let i = 1; stringContains(fileText, nameText); i++) { + nameText = `${baseName}_${i}`; + } + return nameText; + } + + /** + * @return The index of the (only) reference to the extracted symbol. We want the cursor + * to be on the reference, rather than the declaration, because it's closer to where the + * user was before extracting it. + */ + /* @internal */ + export function getRenameLocation(edits: ReadonlyArray, renameFilename: string, name: string, isDeclaredBeforeUse: boolean): number { + let delta = 0; + let lastPos = -1; + for (const { fileName, textChanges } of edits) { + Debug.assert(fileName === renameFilename); + for (const change of textChanges) { + const { span, newText } = change; + const index = newText.indexOf(name); + if (index !== -1) { + lastPos = span.start + delta + index; + + // If the reference comes first, return immediately. + if (!isDeclaredBeforeUse) { + return lastPos; + } + } + delta += newText.length - span.length; + } + } + + // If the declaration comes first, return the position of the last occurrence. + Debug.assert(isDeclaredBeforeUse); + Debug.assert(lastPos >= 0); + return lastPos; + } } diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 49b9c2b5eca..9e2bfc1323c 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2955,7 +2955,7 @@ declare namespace ts { */ function collapseTextChangeRangesAcrossMultipleVersions(changes: ReadonlyArray): TextChangeRange; function getTypeParameterOwner(d: Declaration): Declaration; - function isParameterPropertyDeclaration(node: Node): boolean; + function isParameterPropertyDeclaration(node: Node): node is ParameterDeclaration; function isEmptyBindingPattern(node: BindingName): node is BindingPattern; function isEmptyBindingElement(node: BindingElement): boolean; function getCombinedModifierFlags(node: Node): ModifierFlags; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index f8a63a21575..610629c7679 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3010,7 +3010,7 @@ declare namespace ts { */ function collapseTextChangeRangesAcrossMultipleVersions(changes: ReadonlyArray): TextChangeRange; function getTypeParameterOwner(d: Declaration): Declaration; - function isParameterPropertyDeclaration(node: Node): boolean; + function isParameterPropertyDeclaration(node: Node): node is ParameterDeclaration; function isEmptyBindingPattern(node: BindingName): node is BindingPattern; function isEmptyBindingElement(node: BindingElement): boolean; function getCombinedModifierFlags(node: Node): ModifierFlags; diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess1.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess1.ts new file mode 100644 index 00000000000..93b4db47d50 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess1.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess10.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess10.ts new file mode 100644 index 00000000000..7161dd18d7c --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess10.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public a?: string = "foo";/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a?: string = "foo"; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess11.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess11.ts new file mode 100644 index 00000000000..51b5cc35b34 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess11.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public a!: string = "foo";/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a!: string = "foo"; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess12.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess12.ts new file mode 100644 index 00000000000..0e552e83ab3 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess12.ts @@ -0,0 +1,20 @@ +/// + +//// class A { +//// /*a*/public get a/*b*/ () { return 1; } +//// /*c*/public set a/*d*/ (v) { } +//// /*e*/public ['b']/*f*/ () { } +//// /*g*/public ['c'] = 1;/*h*/ +//// } + +goTo.select("a", "b"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("c", "d"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("e", "f"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); + +goTo.select("g", "h"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); \ No newline at end of file diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess13.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess13.ts new file mode 100644 index 00000000000..6b66cfb0433 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess13.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public static a: string = "foo";/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private static /*RENAME*/_a: string = "foo"; + public static get a(): string { + return A._a; + } + public static set a(value: string) { + A._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess14.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess14.ts new file mode 100644 index 00000000000..36789b29826 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess14.ts @@ -0,0 +1,8 @@ +/// + +//// class A { +//// /*a*/public readonly a: string = "foo";/*b*/ +//// } + +goTo.select("a", "b"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); \ No newline at end of file diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts new file mode 100644 index 00000000000..172842ef271 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess15.ts @@ -0,0 +1,46 @@ +/// + +//// class A { +//// /*a*/public _a: number = 1;/*b*/ +//// /*c*/public a: string = "foo";/*d*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/__a: number = 1; + public get _a(): number { + return this.__a; + } + public set _a(value: number) { + this.__a = value; + } + public a: string = "foo"; +}`, +}); + +goTo.select("c", "d"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private __a: number = 1; + public get _a(): number { + return this.__a; + } + public set _a(value: number) { + this.__a = value; + } + private /*RENAME*/_a_1: string = "foo"; + public get a(): string { + return this._a_1; + } + public set a(value: string) { + this._a_1 = value; + } +}`, +}); \ No newline at end of file diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess16.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess16.ts new file mode 100644 index 00000000000..dd2cc4cf848 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess16.ts @@ -0,0 +1,22 @@ +/// + +//// class A { +//// constructor(public /*a*/a/*b*/: string) { } +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } + constructor() { } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess17.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess17.ts new file mode 100644 index 00000000000..ee212b63502 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess17.ts @@ -0,0 +1,22 @@ +/// + +//// class A { +//// constructor(protected /*a*/a/*b*/: string) { } +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string; + protected get a(): string { + return this._a; + } + protected set a(value: string) { + this._a = value; + } + constructor() { } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess18.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess18.ts new file mode 100644 index 00000000000..37676a8a047 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess18.ts @@ -0,0 +1,22 @@ +/// + +//// class A { +//// constructor(private /*a*/a/*b*/: string) { } +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } + constructor() { } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess19.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess19.ts new file mode 100644 index 00000000000..76779b45950 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess19.ts @@ -0,0 +1,8 @@ +/// + +//// class A { +//// constructor(/*a*/a/*b*/: string) { } +//// } + +goTo.select("a", "b"); +verify.not.refactorAvailable("Generate 'get' and 'set' accessors"); \ No newline at end of file diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess2.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess2.ts new file mode 100644 index 00000000000..3776b347240 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess2.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/protected a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string; + protected get a(): string { + return this._a; + } + protected set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess20.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess20.ts new file mode 100644 index 00000000000..221fd54504c --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess20.ts @@ -0,0 +1,23 @@ +/// + +//// class A { +//// public a_1: number; +//// /*a*/public a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + public a_1: number; + private /*RENAME*/_a: string; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess21.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess21.ts new file mode 100644 index 00000000000..ecd570783b8 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess21.ts @@ -0,0 +1,23 @@ +/// + +//// class A { +//// public a_2: number; +//// /*a*/public a_1: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + public a_2: number; + private /*RENAME*/_a_1: string; + public get a_1(): string { + return this._a_1; + } + public set a_1(value: string) { + this._a_1 = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess22.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess22.ts new file mode 100644 index 00000000000..0c6cd0f9844 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess22.ts @@ -0,0 +1,25 @@ +/// + +//// class A { +//// public a_1: number; +//// constructor(public /*a*/a/*b*/: string) { } +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } + public a_1: number; + constructor() { } +}`, +}); + diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts new file mode 100644 index 00000000000..6be97053987 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess23.ts @@ -0,0 +1,46 @@ +/// + +//// class A { +//// /*a*/public _a: number = 1;/*b*/ +//// /*c*/public a: string = "foo";/*d*/ +//// } + +goTo.select("c", "d"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + public _a: number = 1; + private /*RENAME*/_a_1: string = "foo"; + public get a(): string { + return this._a_1; + } + public set a(value: string) { + this._a_1 = value; + } +}`, +}); + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/__a: number = 1; + public get _a(): number { + return this.__a; + } + public set _a(value: number) { + this.__a = value; + } + private _a_1: string = "foo"; + public get a(): string { + return this._a_1; + } + public set a(value: string) { + this._a_1 = value; + } +}`, +}); \ No newline at end of file diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess24.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess24.ts new file mode 100644 index 00000000000..3cb8f65cb35 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess24.ts @@ -0,0 +1,27 @@ +/// + +//// class A { +//// /*a*/public a: number = 1;/*b*/ +//// public _a: string = "foo"; +//// public _a_1: string = "bar"; +//// public _a_2: string = "baz"; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a_3: number = 1; + public get a(): number { + return this._a_3; + } + public set a(value: number) { + this._a_3 = value; + } + public _a: string = "foo"; + public _a_1: string = "bar"; + public _a_2: string = "baz"; +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess25.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess25.ts new file mode 100644 index 00000000000..295b9e32827 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess25.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// public /*a*/"a"/*b*/: number = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/"_a": number = 1; + public get "a"(): number { + return this["_a"]; + } + public set "a"(value: number) { + this["_a"] = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess26.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess26.ts new file mode 100644 index 00000000000..fd2936bd658 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess26.ts @@ -0,0 +1,23 @@ +/// + +//// class A { +//// public _a: string = ""; +//// /*a*/public "a": number = 1;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + public _a: string = ""; + private /*RENAME*/"_a_1": number = 1; + public get "a"(): number { + return this["_a_1"]; + } + public set "a"(value: number) { + this["_a_1"] = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess27.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess27.ts new file mode 100644 index 00000000000..9538be381ca --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess27.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public "a-b": number = 1;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/"_a-b": number = 1; + public get "a-b"(): number { + return this["_a-b"]; + } + public set "a-b"(value: number) { + this["_a-b"] = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess28.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess28.ts new file mode 100644 index 00000000000..17a401b63ac --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess28.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public static "a": number = 1;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private static /*RENAME*/"_a": number = 1; + public static get "a"(): number { + return A["_a"]; + } + public static set "a"(value: number) { + A["_a"] = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess29.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess29.ts new file mode 100644 index 00000000000..63e4c44d4ba --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess29.ts @@ -0,0 +1,21 @@ +/// + +//// const A = { +//// /*a*/a/*b*/: 1 +//// }; + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `const A = { + /*RENAME*/_a: 1, + get a() { + return this._a; + }, + set a(value) { + this._a = value; + }, +};`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess3.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess3.ts new file mode 100644 index 00000000000..4ff6877270d --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess3.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/private a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess30.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess30.ts new file mode 100644 index 00000000000..dd45b7c0cd1 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess30.ts @@ -0,0 +1,21 @@ +/// + +//// const A = { +//// /*a*/'a'/*b*/: 1 +//// }; + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `const A = { + /*RENAME*/"_a": 1, + get "a"() { + return this["_a"]; + }, + set "a"(value) { + this["_a"] = value; + }, +};`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess31.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess31.ts new file mode 100644 index 00000000000..67e8b461aff --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess31.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// public /*a*/a/*b*/ = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a = 1; + public get a() { + return this._a; + } + public set a(value) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess32.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess32.ts new file mode 100644 index 00000000000..2cb131e685e --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess32.ts @@ -0,0 +1,25 @@ +/// + +//// /** Class comment */ +//// class A { +//// // Field comment +//// public /*a*/a/*b*/: number = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `/** Class comment */ +class A { + // Field comment + private /*RENAME*/_a: number = 1; + public get a(): number { + return this._a; + } + public set a(value: number) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts new file mode 100644 index 00000000000..2b6ccbeaa1a --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess4.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/private _a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/__a: string; + public get _a(): string { + return this.__a; + } + public set _a(value: string) { + this.__a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts new file mode 100644 index 00000000000..6299cc01429 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess5.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/_a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/__a: string; + public get _a(): string { + return this.__a; + } + public set _a(value: string) { + this.__a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts new file mode 100644 index 00000000000..5f713df203c --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess6.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public _a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/__a: string; + public get _a(): string { + return this.__a; + } + public set _a(value: string) { + this.__a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts new file mode 100644 index 00000000000..4fc5641d657 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess7.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/protected _a: string;/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/__a: string; + protected get _a(): string { + return this.__a; + } + protected set _a(value: string) { + this.__a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess8.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess8.ts new file mode 100644 index 00000000000..cfbcd9fd762 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess8.ts @@ -0,0 +1,21 @@ +/// + +//// class A { +//// /*a*/public a: string = "foo";/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + private /*RENAME*/_a: string = "foo"; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess9.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess9.ts new file mode 100644 index 00000000000..a5a402b99c0 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess9.ts @@ -0,0 +1,23 @@ +/// + +//// class A { +//// @foo +//// /*a*/public a: string = "foo";/*b*/ +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + @foo + private /*RENAME*/_a: string = "foo"; + public get a(): string { + return this._a; + } + public set a(value: string) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_1.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_1.ts new file mode 100644 index 00000000000..7293afd9219 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_1.ts @@ -0,0 +1,22 @@ +/// +// @allowJs: true +// @Filename: a.js +//// const A = { +//// /*a*/"a"/*b*/: 1 +//// }; + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `const A = { + /*RENAME*/"_a": 1, + get "a"() { + return this["_a"]; + }, + set "a"(value) { + this["_a"] = value; + }, +};`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_2.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_2.ts new file mode 100644 index 00000000000..19b2ef109a7 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_2.ts @@ -0,0 +1,22 @@ +/// +// @allowJs: true +// @Filename: a.js +//// const A = { +//// /*a*/a/*b*/: 1 +//// }; + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `const A = { + /*RENAME*/_a: 1, + get a() { + return this._a; + }, + set a(value) { + this._a = value; + }, +};`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_3.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_3.ts new file mode 100644 index 00000000000..683f92d39ab --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_3.ts @@ -0,0 +1,22 @@ +/// +// @allowJs: true +// @Filename: a.js +//// class A { +//// /*a*/a/*b*/ = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + /*RENAME*/_a = 1; + get a() { + return this._a; + } + set a(value) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_4.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_4.ts new file mode 100644 index 00000000000..43abee5f7a3 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_4.ts @@ -0,0 +1,22 @@ +/// +// @allowJs: true +// @Filename: a.js +//// class A { +//// /*a*/"a"/*b*/ = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + /*RENAME*/"_a" = 1; + get "a"() { + return this["_a"]; + } + set "a"(value) { + this["_a"] = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_5.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_5.ts new file mode 100644 index 00000000000..8c7ccde7e55 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_5.ts @@ -0,0 +1,24 @@ +/// +// @allowJs: true +// @Filename: a.js +//// class A { +//// _a = 2; +//// /*a*/"a"/*b*/ = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + _a = 2; + /*RENAME*/"_a_1" = 1; + get "a"() { + return this["_a_1"]; + } + set "a"(value) { + this["_a_1"] = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_6.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_6.ts new file mode 100644 index 00000000000..0c521ee43b1 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_6.ts @@ -0,0 +1,24 @@ +/// +// @allowJs: true +// @Filename: a.js +//// class A { +//// "_a" = 2; +//// /*a*/"a"/*b*/ = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + "_a" = 2; + /*RENAME*/"_a_1" = 1; + get "a"() { + return this["_a_1"]; + } + set "a"(value) { + this["_a_1"] = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_7.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_7.ts new file mode 100644 index 00000000000..ca135132a81 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_7.ts @@ -0,0 +1,24 @@ +/// +// @allowJs: true +// @Filename: a.js +//// const A = { +//// _a: 2, +//// /*a*/a/*b*/: 1 +//// }; + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `const A = { + _a: 2, + /*RENAME*/_a_1: 1, + get a() { + return this._a_1; + }, + set a(value) { + this._a_1 = value; + }, +};`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_8.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_8.ts new file mode 100644 index 00000000000..e2ba5941fcb --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_8.ts @@ -0,0 +1,26 @@ +/// +// @allowJs: true +// @Filename: a.js +//// /** Class comment */ +//// class A { +//// // Field comment +//// /*a*/a/*b*/ = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `/** Class comment */ +class A { + // Field comment + /*RENAME*/_a = 1; + get a() { + return this._a; + } + set a(value) { + this._a = value; + } +}`, +}); diff --git a/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_9.ts b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_9.ts new file mode 100644 index 00000000000..4a80fe1af9f --- /dev/null +++ b/tests/cases/fourslash/refactorConvertToGetAccessAndSetAccess_js_9.ts @@ -0,0 +1,22 @@ +/// +// @allowJs: true +// @Filename: a.js +//// class A { +//// static /*a*/a/*b*/ = 1; +//// } + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Generate 'get' and 'set' accessors", + actionName: "Generate 'get' and 'set' accessors", + actionDescription: "Generate 'get' and 'set' accessors", + newContent: `class A { + static /*RENAME*/_a = 1; + static get a() { + return A._a; + } + static set a(value) { + A._a = value; + } +}`, +}); From 4b706fc479a720afb6f2078b3fe3033cb390d742 Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 10 Apr 2018 11:53:24 -0700 Subject: [PATCH 019/232] Add 'disableSuggestions' to UserPreferences (#23283) * Add 'disableSuggestions' to UserPreferences * Make mergeMapLikes return a new object * Avoid additional clone * mergeMapLikes -> object spread --- src/compiler/core.ts | 5 +- .../unittests/tsserverProjectSystem.ts | 51 +++++++++++++++++++ src/server/editorServices.ts | 4 +- src/server/protocol.ts | 1 + src/server/scriptInfo.ts | 9 ++-- src/server/session.ts | 14 +++-- src/server/utilities.ts | 8 --- src/services/types.ts | 1 + .../reference/api/tsserverlibrary.d.ts | 3 +- tests/baselines/reference/api/typescript.d.ts | 1 + 10 files changed, 76 insertions(+), 21 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 19e9ca9152a..3ce832678b8 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1268,10 +1268,7 @@ namespace ts { }); } - export function assign, T2, T3>(t: T1, arg1: T2, arg2: T3): T1 & T2 & T3; - export function assign, T2>(t: T1, arg1: T2): T1 & T2; - export function assign>(t: T1, ...args: any[]): any; - export function assign>(t: T1, ...args: any[]) { + export function assign(t: T, ...args: T[]) { for (const arg of args) { for (const p in arg) { if (hasProperty(arg, p)) { diff --git a/src/harness/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts index ab0b1cf734d..b167ed21b94 100644 --- a/src/harness/unittests/tsserverProjectSystem.ts +++ b/src/harness/unittests/tsserverProjectSystem.ts @@ -4184,6 +4184,57 @@ namespace ts.projectSystem { session.clearMessages(); }); + it("disable suggestion diagnostics", () => { + const file: FileOrFolder = { + path: "/a.js", + content: 'require("b")', + }; + + const host = createServerHost([file]); + const session = createSession(host, { canUseEvents: true }); + const service = session.getProjectService(); + + session.executeCommandSeq({ + command: server.CommandNames.Open, + arguments: { file: file.path, fileContent: file.content }, + }); + + session.executeCommandSeq({ + command: server.CommandNames.Configure, + arguments: { + preferences: { disableSuggestions: true } + }, + }); + + checkNumberOfProjects(service, { inferredProjects: 1 }); + session.clearMessages(); + const expectedSequenceId = session.getNextSeq(); + host.checkTimeoutQueueLengthAndRun(2); + + checkProjectUpdatedInBackgroundEvent(session, [file.path]); + session.clearMessages(); + + session.executeCommandSeq({ + command: server.CommandNames.Geterr, + arguments: { + delay: 0, + files: [file.path], + } + }); + + host.checkTimeoutQueueLengthAndRun(1); + + checkErrorMessage(session, "syntaxDiag", { file: file.path, diagnostics: [] }, /*isMostRecent*/ true); + session.clearMessages(); + + host.runQueuedImmediateCallbacks(1); + + checkErrorMessage(session, "semanticDiag", { file: file.path, diagnostics: [] }); + // No suggestion event, we're done. + checkCompleteEvent(session, 2, expectedSequenceId); + session.clearMessages(); + }); + it("suppressed diagnostic events", () => { const file: FileOrFolder = { path: "/a.ts", diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index af4d34b8bb2..987621a2865 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -1842,11 +1842,11 @@ namespace ts.server { this.logger.info(`Host information ${args.hostInfo}`); } if (args.formatOptions) { - mergeMapLikes(this.hostConfiguration.formatCodeOptions, convertFormatOptions(args.formatOptions)); + this.hostConfiguration.formatCodeOptions = { ...this.hostConfiguration.formatCodeOptions, ...convertFormatOptions(args.formatOptions) }; this.logger.info("Format host information updated"); } if (args.preferences) { - mergeMapLikes(this.hostConfiguration.preferences, args.preferences); + this.hostConfiguration.preferences = { ...this.hostConfiguration.preferences, ...args.preferences }; } if (args.extraFileExtensions) { this.hostConfiguration.extraFileExtensions = args.extraFileExtensions; diff --git a/src/server/protocol.ts b/src/server/protocol.ts index 52427413aed..e9df92e0f38 100644 --- a/src/server/protocol.ts +++ b/src/server/protocol.ts @@ -2640,6 +2640,7 @@ namespace ts.server.protocol { } export interface UserPreferences { + readonly disableSuggestions?: boolean; readonly quotePreference?: "double" | "single"; /** * If enabled, TypeScript will search through all external modules' exports and add them to the completions list. diff --git a/src/server/scriptInfo.ts b/src/server/scriptInfo.ts index 843122e44c0..11c721344f6 100644 --- a/src/server/scriptInfo.ts +++ b/src/server/scriptInfo.ts @@ -397,15 +397,18 @@ namespace ts.server { if (formatSettings) { if (!this.formatSettings) { this.formatSettings = getDefaultFormatCodeSettings(this.host); + assign(this.formatSettings, formatSettings); + } + else { + this.formatSettings = { ...this.formatSettings, ...formatSettings }; } - mergeMapLikes(this.formatSettings, formatSettings); } if (preferences) { if (!this.preferences) { - this.preferences = clone(defaultPreferences); + this.preferences = defaultPreferences; } - mergeMapLikes(this.preferences, preferences); + this.preferences = { ...this.preferences, ...preferences }; } } diff --git a/src/server/session.ts b/src/server/session.ts index c6066723892..5f7cd27cf86 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -528,12 +528,20 @@ namespace ts.server { return; } - next.immediate(() => { - this.suggestionCheck(fileName, project); + const goNext = () => { if (checkList.length > index) { next.delay(followMs, checkOne); } - }); + }; + if (this.getPreferences(fileName).disableSuggestions) { + goNext(); + } + else { + next.immediate(() => { + this.suggestionCheck(fileName, project); + goNext(); + }); + } }); }; diff --git a/src/server/utilities.ts b/src/server/utilities.ts index e2329b868e3..3a0b1935ede 100644 --- a/src/server/utilities.ts +++ b/src/server/utilities.ts @@ -83,14 +83,6 @@ namespace ts.server { }; } - export function mergeMapLikes(target: T, source: Partial): void { - for (const key in source) { - if (hasProperty(source, key)) { - target[key] = source[key]; - } - } - } - export type NormalizedPath = string & { __normalizedPathTag: any }; export function toNormalizedPath(fileName: string): NormalizedPath { diff --git a/src/services/types.ts b/src/services/types.ts index 0c3e6a90314..c5b58bab04d 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -228,6 +228,7 @@ namespace ts { } export interface UserPreferences { + readonly disableSuggestions?: boolean; readonly quotePreference?: "double" | "single"; readonly includeCompletionsForModuleExports?: boolean; readonly includeCompletionsWithInsertText?: boolean; diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 9e2bfc1323c..daf984fd5aa 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -4116,6 +4116,7 @@ declare namespace ts { installPackage?(options: InstallPackageOptions): Promise; } interface UserPreferences { + readonly disableSuggestions?: boolean; readonly quotePreference?: "double" | "single"; readonly includeCompletionsForModuleExports?: boolean; readonly includeCompletionsWithInsertText?: boolean; @@ -5041,7 +5042,6 @@ declare namespace ts.server { function ThrowProjectDoesNotContainDocument(fileName: string, project: Project): never; } function getDefaultFormatCodeSettings(host: ServerHost): FormatCodeSettings; - function mergeMapLikes(target: T, source: Partial): void; type NormalizedPath = string & { __normalizedPathTag: any; }; @@ -7157,6 +7157,7 @@ declare namespace ts.server.protocol { insertSpaceBeforeTypeAnnotation?: boolean; } interface UserPreferences { + readonly disableSuggestions?: boolean; readonly quotePreference?: "double" | "single"; /** * If enabled, TypeScript will search through all external modules' exports and add them to the completions list. diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 610629c7679..2fbac7e9f3b 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -4369,6 +4369,7 @@ declare namespace ts { installPackage?(options: InstallPackageOptions): Promise; } interface UserPreferences { + readonly disableSuggestions?: boolean; readonly quotePreference?: "double" | "single"; readonly includeCompletionsForModuleExports?: boolean; readonly includeCompletionsWithInsertText?: boolean; From 22919d57fe88d45cea858d39b7343b0d9edd7dec Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 10 Apr 2018 12:48:35 -0700 Subject: [PATCH 020/232] JSDoc:positional matching of destructured params (#23307) * JSDoc:positional matching of destructured params 1. When looking up tags for a parameter whose name is a binding pattern, use the index of the parameter to get the type. 2. When reporting errors for `@param` tags with no matching parameter name, do not report the error for tags whose index in the `@param` tag list matches the index of a parameter whose name is a binding pattern. * Change to an assert * Improve comment text --- src/compiler/checker.ts | 4 + src/compiler/utilities.ts | 18 ++- .../reference/jsdocParamTag2.errors.txt | 82 ++++++++++++ .../reference/jsdocParamTag2.symbols | 117 ++++++++++++++++++ .../baselines/reference/jsdocParamTag2.types | 117 ++++++++++++++++++ .../cases/conformance/jsdoc/jsdocParamTag2.ts | 71 +++++++++++ 6 files changed, 405 insertions(+), 4 deletions(-) create mode 100644 tests/baselines/reference/jsdocParamTag2.errors.txt create mode 100644 tests/baselines/reference/jsdocParamTag2.symbols create mode 100644 tests/baselines/reference/jsdocParamTag2.types create mode 100644 tests/cases/conformance/jsdoc/jsdocParamTag2.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5634e06d5fd..42e7e8f7b16 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -21871,6 +21871,10 @@ namespace ts { // and give a better error message when the host function mentions `arguments` // but the tag doesn't have an array type if (decl) { + const i = getJSDocTags(decl).filter(isJSDocParameterTag).indexOf(node); + if (i > -1 && i < decl.parameters.length && isBindingPattern(decl.parameters[i].name)) { + return; + } if (!containsArgumentsReference(decl)) { error(node.name, Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name, diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 69309acddb9..aceb447eff5 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4632,11 +4632,21 @@ namespace ts { * parameters by name and binding patterns do not have a name. */ export function getJSDocParameterTags(param: ParameterDeclaration): ReadonlyArray { - if (param.name && isIdentifier(param.name)) { - const name = param.name.escapedText; - return getJSDocTags(param.parent).filter((tag): tag is JSDocParameterTag => isJSDocParameterTag(tag) && isIdentifier(tag.name) && tag.name.escapedText === name); + if (param.name) { + if (isIdentifier(param.name)) { + const name = param.name.escapedText; + return getJSDocTags(param.parent).filter((tag): tag is JSDocParameterTag => isJSDocParameterTag(tag) && isIdentifier(tag.name) && tag.name.escapedText === name); + } + else { + const i = param.parent.parameters.indexOf(param); + Debug.assert(i > -1, "Parameters should always be in their parents' parameter list"); + const paramTags = getJSDocTags(param.parent).filter(isJSDocParameterTag); + if (i < paramTags.length) { + return [paramTags[i]]; + } + } } - // a binding pattern doesn't have a name, so it's not possible to match it a JSDoc parameter, which is identified by name + // return empty array for: out-of-order binding patterns and JSDoc function syntax, which has un-named parameters return emptyArray; } diff --git a/tests/baselines/reference/jsdocParamTag2.errors.txt b/tests/baselines/reference/jsdocParamTag2.errors.txt new file mode 100644 index 00000000000..e19140b3f9d --- /dev/null +++ b/tests/baselines/reference/jsdocParamTag2.errors.txt @@ -0,0 +1,82 @@ +tests/cases/conformance/jsdoc/0.js(56,20): error TS8024: JSDoc '@param' tag has name 'obj', but there is no parameter with that name. +tests/cases/conformance/jsdoc/0.js(61,19): error TS2459: Type 'string' has no property 'a' and no string index signature. +tests/cases/conformance/jsdoc/0.js(61,22): error TS2459: Type 'string' has no property 'b' and no string index signature. +tests/cases/conformance/jsdoc/0.js(63,20): error TS8024: JSDoc '@param' tag has name 'y', but there is no parameter with that name. + + +==== tests/cases/conformance/jsdoc/0.js (4 errors) ==== + // Object literal syntax + /** + * @param {{a: string, b: string}} obj + * @param {string} x + */ + function good1({a, b}, x) {} + /** + * @param {{a: string, b: string}} obj + * @param {{c: number, d: number}} OBJECTION + */ + function good2({a, b}, {c, d}) {} + /** + * @param {number} x + * @param {{a: string, b: string}} obj + * @param {string} y + */ + function good3(x, {a, b}, y) {} + /** + * @param {{a: string, b: string}} obj + */ + function good4({a, b}) {} + + // nested object syntax + /** + * @param {Object} obj + * @param {string} obj.a - this is like the saddest way to specify a type + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {string} x + */ + function good5({a, b}, x) {} + /** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {Object} OBJECTION - documentation here too + * @param {string} OBJECTION.c + * @param {string} OBJECTION.d - meh + */ + function good6({a, b}, {c, d}) {} + /** + * @param {number} x + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + * @param {string} y + */ + function good7(x, {a, b}, y) {} + /** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + */ + function good8({a, b}) {} + + /** + * @param {object} obj - this type gets ignored + ~~~ +!!! error TS8024: JSDoc '@param' tag has name 'obj', but there is no parameter with that name. + * @param {string} obj.a + * @param {string} obj.b - and x's type gets used for both parameters + * @param {string} x + */ + function bad1(x, {a, b}) {} + ~ +!!! error TS2459: Type 'string' has no property 'a' and no string index signature. + ~ +!!! error TS2459: Type 'string' has no property 'b' and no string index signature. + /** + * @param {string} y - here, y's type gets ignored but obj's is fine + ~ +!!! error TS8024: JSDoc '@param' tag has name 'y', but there is no parameter with that name. + * @param {{a: string, b: string}} obj + */ + function bad2(x, {a, b}) {} + \ No newline at end of file diff --git a/tests/baselines/reference/jsdocParamTag2.symbols b/tests/baselines/reference/jsdocParamTag2.symbols new file mode 100644 index 00000000000..15eea8946e1 --- /dev/null +++ b/tests/baselines/reference/jsdocParamTag2.symbols @@ -0,0 +1,117 @@ +=== tests/cases/conformance/jsdoc/0.js === +// Object literal syntax +/** + * @param {{a: string, b: string}} obj + * @param {string} x + */ +function good1({a, b}, x) {} +>good1 : Symbol(good1, Decl(0.js, 0, 0)) +>a : Symbol(a, Decl(0.js, 5, 16)) +>b : Symbol(b, Decl(0.js, 5, 18)) +>x : Symbol(x, Decl(0.js, 5, 22)) + +/** + * @param {{a: string, b: string}} obj + * @param {{c: number, d: number}} OBJECTION + */ +function good2({a, b}, {c, d}) {} +>good2 : Symbol(good2, Decl(0.js, 5, 28)) +>a : Symbol(a, Decl(0.js, 10, 16)) +>b : Symbol(b, Decl(0.js, 10, 18)) +>c : Symbol(c, Decl(0.js, 10, 24)) +>d : Symbol(d, Decl(0.js, 10, 26)) + +/** + * @param {number} x + * @param {{a: string, b: string}} obj + * @param {string} y + */ +function good3(x, {a, b}, y) {} +>good3 : Symbol(good3, Decl(0.js, 10, 33)) +>x : Symbol(x, Decl(0.js, 16, 15)) +>a : Symbol(a, Decl(0.js, 16, 19)) +>b : Symbol(b, Decl(0.js, 16, 21)) +>y : Symbol(y, Decl(0.js, 16, 25)) + +/** + * @param {{a: string, b: string}} obj + */ +function good4({a, b}) {} +>good4 : Symbol(good4, Decl(0.js, 16, 31)) +>a : Symbol(a, Decl(0.js, 20, 16)) +>b : Symbol(b, Decl(0.js, 20, 18)) + +// nested object syntax +/** + * @param {Object} obj + * @param {string} obj.a - this is like the saddest way to specify a type + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {string} x + */ +function good5({a, b}, x) {} +>good5 : Symbol(good5, Decl(0.js, 20, 25)) +>a : Symbol(a, Decl(0.js, 29, 16)) +>b : Symbol(b, Decl(0.js, 29, 18)) +>x : Symbol(x, Decl(0.js, 29, 22)) + +/** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {Object} OBJECTION - documentation here too + * @param {string} OBJECTION.c + * @param {string} OBJECTION.d - meh + */ +function good6({a, b}, {c, d}) {} +>good6 : Symbol(good6, Decl(0.js, 29, 28)) +>a : Symbol(a, Decl(0.js, 38, 16)) +>b : Symbol(b, Decl(0.js, 38, 18)) +>c : Symbol(c, Decl(0.js, 38, 24)) +>d : Symbol(d, Decl(0.js, 38, 26)) + +/** + * @param {number} x + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + * @param {string} y + */ +function good7(x, {a, b}, y) {} +>good7 : Symbol(good7, Decl(0.js, 38, 33)) +>x : Symbol(x, Decl(0.js, 46, 15)) +>a : Symbol(a, Decl(0.js, 46, 19)) +>b : Symbol(b, Decl(0.js, 46, 21)) +>y : Symbol(y, Decl(0.js, 46, 25)) + +/** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + */ +function good8({a, b}) {} +>good8 : Symbol(good8, Decl(0.js, 46, 31)) +>a : Symbol(a, Decl(0.js, 52, 16)) +>b : Symbol(b, Decl(0.js, 52, 18)) + +/** + * @param {object} obj - this type gets ignored + * @param {string} obj.a + * @param {string} obj.b - and x's type gets used for both parameters + * @param {string} x + */ +function bad1(x, {a, b}) {} +>bad1 : Symbol(bad1, Decl(0.js, 52, 25)) +>x : Symbol(x, Decl(0.js, 60, 14)) +>a : Symbol(a, Decl(0.js, 60, 18)) +>b : Symbol(b, Decl(0.js, 60, 20)) + +/** + * @param {string} y - here, y's type gets ignored but obj's is fine + * @param {{a: string, b: string}} obj + */ +function bad2(x, {a, b}) {} +>bad2 : Symbol(bad2, Decl(0.js, 60, 27)) +>x : Symbol(x, Decl(0.js, 65, 14)) +>a : Symbol(a, Decl(0.js, 65, 18)) +>b : Symbol(b, Decl(0.js, 65, 20)) + diff --git a/tests/baselines/reference/jsdocParamTag2.types b/tests/baselines/reference/jsdocParamTag2.types new file mode 100644 index 00000000000..a303403f0b9 --- /dev/null +++ b/tests/baselines/reference/jsdocParamTag2.types @@ -0,0 +1,117 @@ +=== tests/cases/conformance/jsdoc/0.js === +// Object literal syntax +/** + * @param {{a: string, b: string}} obj + * @param {string} x + */ +function good1({a, b}, x) {} +>good1 : ({ a, b }: { a: string; b: string; }, x: string) => void +>a : string +>b : string +>x : string + +/** + * @param {{a: string, b: string}} obj + * @param {{c: number, d: number}} OBJECTION + */ +function good2({a, b}, {c, d}) {} +>good2 : ({ a, b }: { a: string; b: string; }, { c, d }: { c: number; d: number; }) => void +>a : string +>b : string +>c : number +>d : number + +/** + * @param {number} x + * @param {{a: string, b: string}} obj + * @param {string} y + */ +function good3(x, {a, b}, y) {} +>good3 : (x: number, { a, b }: { a: string; b: string; }, y: string) => void +>x : number +>a : string +>b : string +>y : string + +/** + * @param {{a: string, b: string}} obj + */ +function good4({a, b}) {} +>good4 : ({ a, b }: { a: string; b: string; }) => void +>a : string +>b : string + +// nested object syntax +/** + * @param {Object} obj + * @param {string} obj.a - this is like the saddest way to specify a type + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {string} x + */ +function good5({a, b}, x) {} +>good5 : ({ a, b }: { a: string; b: string; }, x: string) => void +>a : string +>b : string +>x : string + +/** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {Object} OBJECTION - documentation here too + * @param {string} OBJECTION.c + * @param {string} OBJECTION.d - meh + */ +function good6({a, b}, {c, d}) {} +>good6 : ({ a, b }: { a: string; b: string; }, { c, d }: { c: string; d: string; }) => void +>a : string +>b : string +>c : string +>d : string + +/** + * @param {number} x + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + * @param {string} y + */ +function good7(x, {a, b}, y) {} +>good7 : (x: number, { a, b }: { a: string; b: string; }, y: string) => void +>x : number +>a : string +>b : string +>y : string + +/** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + */ +function good8({a, b}) {} +>good8 : ({ a, b }: { a: string; b: string; }) => void +>a : string +>b : string + +/** + * @param {object} obj - this type gets ignored + * @param {string} obj.a + * @param {string} obj.b - and x's type gets used for both parameters + * @param {string} x + */ +function bad1(x, {a, b}) {} +>bad1 : (x: string, { a, b }: string) => void +>x : string +>a : any +>b : any + +/** + * @param {string} y - here, y's type gets ignored but obj's is fine + * @param {{a: string, b: string}} obj + */ +function bad2(x, {a, b}) {} +>bad2 : (x: any, { a, b }: { a: string; b: string; }) => void +>x : any +>a : string +>b : string + diff --git a/tests/cases/conformance/jsdoc/jsdocParamTag2.ts b/tests/cases/conformance/jsdoc/jsdocParamTag2.ts new file mode 100644 index 00000000000..e9ebbe050c8 --- /dev/null +++ b/tests/cases/conformance/jsdoc/jsdocParamTag2.ts @@ -0,0 +1,71 @@ +// @allowJS: true +// @checkJS: true +// @noEmit: true +// @Filename: 0.js + +// Object literal syntax +/** + * @param {{a: string, b: string}} obj + * @param {string} x + */ +function good1({a, b}, x) {} +/** + * @param {{a: string, b: string}} obj + * @param {{c: number, d: number}} OBJECTION + */ +function good2({a, b}, {c, d}) {} +/** + * @param {number} x + * @param {{a: string, b: string}} obj + * @param {string} y + */ +function good3(x, {a, b}, y) {} +/** + * @param {{a: string, b: string}} obj + */ +function good4({a, b}) {} + +// nested object syntax +/** + * @param {Object} obj + * @param {string} obj.a - this is like the saddest way to specify a type + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {string} x + */ +function good5({a, b}, x) {} +/** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b - but it sure does allow a lot of documentation + * @param {Object} OBJECTION - documentation here too + * @param {string} OBJECTION.c + * @param {string} OBJECTION.d - meh + */ +function good6({a, b}, {c, d}) {} +/** + * @param {number} x + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + * @param {string} y + */ +function good7(x, {a, b}, y) {} +/** + * @param {Object} obj + * @param {string} obj.a + * @param {string} obj.b + */ +function good8({a, b}) {} + +/** + * @param {object} obj - this type gets ignored + * @param {string} obj.a + * @param {string} obj.b - and x's type gets used for both parameters + * @param {string} x + */ +function bad1(x, {a, b}) {} +/** + * @param {string} y - here, y's type gets ignored but obj's is fine + * @param {{a: string, b: string}} obj + */ +function bad2(x, {a, b}) {} From f479de6d02328156ede70c6e7de9f50cd16a4fac Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 10 Apr 2018 14:38:16 -0700 Subject: [PATCH 021/232] patternMatcher: Just return 'undefined' for an invalid pattern (#23237) * patternMatcher: Just return 'undefined' for an invalid pattern * Fix tests --- .../unittests/services/patternMatcher.ts | 12 +++++----- src/services/navigateTo.ts | 1 + src/services/patternMatcher.ts | 23 +++++-------------- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/src/harness/unittests/services/patternMatcher.ts b/src/harness/unittests/services/patternMatcher.ts index a3e2d1d5cff..5aee5d2f4eb 100644 --- a/src/harness/unittests/services/patternMatcher.ts +++ b/src/harness/unittests/services/patternMatcher.ts @@ -343,15 +343,11 @@ describe("PatternMatcher", () => { }); it("BlankPattern", () => { - const matches = getAllMatches("AddMetadataReference", ""); - - assert.isTrue(matches === undefined); + assertInvalidPattern(""); }); it("WhitespaceOnlyPattern", () => { - const matches = getAllMatches("AddMetadataReference", " "); - - assert.isTrue(matches === undefined); + assertInvalidPattern(" "); }); it("EachWordSeparately1", () => { @@ -449,6 +445,10 @@ describe("PatternMatcher", () => { }); }); + function assertInvalidPattern(pattern: string) { + assert.equal(ts.createPatternMatcher(pattern), undefined); + } + function getFirstMatch(candidate: string, pattern: string): ts.PatternMatch { const matches = ts.createPatternMatcher(pattern).getMatchesForLastSegmentOfPattern(candidate); return matches ? matches[0] : undefined; diff --git a/src/services/navigateTo.ts b/src/services/navigateTo.ts index 1a556cf33c0..4713f89dbde 100644 --- a/src/services/navigateTo.ts +++ b/src/services/navigateTo.ts @@ -10,6 +10,7 @@ namespace ts.NavigateTo { export function getNavigateToItems(sourceFiles: ReadonlyArray, checker: TypeChecker, cancellationToken: CancellationToken, searchValue: string, maxResultCount: number, excludeDtsFiles: boolean): NavigateToItem[] { const patternMatcher = createPatternMatcher(searchValue); + if (!patternMatcher) return emptyArray; let rawItems: RawNavigateToItem[] = []; // Search the declarations in all files and output matched NavigateToItem into array of NavigateToItem[] diff --git a/src/services/patternMatcher.ts b/src/services/patternMatcher.ts index 612fa57378d..84ef1244040 100644 --- a/src/services/patternMatcher.ts +++ b/src/services/patternMatcher.ts @@ -97,28 +97,22 @@ namespace ts { }; } - export function createPatternMatcher(pattern: string): PatternMatcher { + export function createPatternMatcher(pattern: string): PatternMatcher | undefined { // We'll often see the same candidate string many times when searching (For example, when // we see the name of a module that is used everywhere, or the name of an overload). As // such, we cache the information we compute about the candidate for the life of this // pattern matcher so we don't have to compute it multiple times. const stringToWordSpans = createMap(); - pattern = pattern.trim(); - - const dotSeparatedSegments = pattern.split(".").map(p => createSegment(p.trim())); - const invalidPattern = dotSeparatedSegments.length === 0 || forEach(dotSeparatedSegments, segmentIsInvalid); + const dotSeparatedSegments = pattern.trim().split(".").map(p => createSegment(p.trim())); + // A segment is considered invalid if we couldn't find any words in it. + if (dotSeparatedSegments.some(segment => !segment.subWordTextChunks.length)) return undefined; return { - getMatches: (containers, candidate) => skipMatch(candidate) ? undefined : getMatches(containers, candidate, dotSeparatedSegments, stringToWordSpans), - getMatchesForLastSegmentOfPattern: candidate => skipMatch(candidate) ? undefined : matchSegment(candidate, lastOrUndefined(dotSeparatedSegments), stringToWordSpans), + getMatches: (containers, candidate) => getMatches(containers, candidate, dotSeparatedSegments, stringToWordSpans), + getMatchesForLastSegmentOfPattern: candidate => matchSegment(candidate, last(dotSeparatedSegments), stringToWordSpans), patternContainsDots: dotSeparatedSegments.length > 1 }; - - // Quick checks so we can bail out when asked to match a candidate. - function skipMatch(candidate: string) { - return invalidPattern || !candidate; - } } function getMatches(candidateContainers: ReadonlyArray, candidate: string, dotSeparatedSegments: ReadonlyArray, stringToWordSpans: Map): PatternMatch[] | undefined { @@ -381,11 +375,6 @@ namespace ts { }; } - // A segment is considered invalid if we couldn't find any words in it. - function segmentIsInvalid(segment: Segment) { - return segment.subWordTextChunks.length === 0; - } - function isUpperCaseLetter(ch: number) { // Fast check for the ascii range. if (ch >= CharacterCodes.A && ch <= CharacterCodes.Z) { From dcc4b8854bafa2277e5a440a89727305c3201b0f Mon Sep 17 00:00:00 2001 From: Andy Date: Tue, 10 Apr 2018 14:46:26 -0700 Subject: [PATCH 022/232] In getWidenedTypeFromJSSpecialPropertyDeclarations, parent of PropertyAccessExpression must be a BinaryExpression (#22727) --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 42e7e8f7b16..95a7dbc1120 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4367,7 +4367,7 @@ namespace ts { for (const declaration of symbol.declarations) { let declarationInConstructor = false; const expression = declaration.kind === SyntaxKind.BinaryExpression ? declaration : - declaration.kind === SyntaxKind.PropertyAccessExpression ? getAncestor(declaration, SyntaxKind.BinaryExpression) : + declaration.kind === SyntaxKind.PropertyAccessExpression ? cast(declaration.parent, isBinaryExpression) : undefined; if (!expression) { From cb6d4d1ff691fa681ffbbdbe97d14d8837de1707 Mon Sep 17 00:00:00 2001 From: csigs Date: Tue, 10 Apr 2018 22:10:52 +0000 Subject: [PATCH 023/232] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ 6 files changed, 144 insertions(+) diff --git a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl index 6f458cd9d3e..db17f37967b 100644 --- a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3780,6 +3780,24 @@ + + + + + + + + + + + + + + + + + + @@ -5997,6 +6015,12 @@ + + + + + + diff --git a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl index e5a04125bd7..58326d7ccb6 100644 --- a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3768,6 +3768,24 @@ + + + + + + + + + + + + + + + + + + @@ -5982,6 +6000,12 @@ + + + + + + diff --git a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl index f46e427ce62..342918edc19 100644 --- a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3780,6 +3780,24 @@ + + + + + + + + + + + + + + + + + + @@ -5997,6 +6015,12 @@ + + + + + + diff --git a/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl index 09f82b9b47d..52881bd0f4e 100644 --- a/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/fra/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3780,6 +3780,24 @@ + + + + + + + + + + + + + + + + + + @@ -5997,6 +6015,12 @@ + + + + + + diff --git a/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl index 71d0d0e0465..4b42ff8b2bf 100644 --- a/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/kor/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3771,6 +3771,24 @@ + + + + + + + + + + + + + + + + + + @@ -5988,6 +6006,12 @@ + + + + + + diff --git a/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl index 20c3ffba771..b341aa7ea84 100644 --- a/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/rus/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3770,6 +3770,24 @@ + + + + + + + + + + + + + + + + + + @@ -5987,6 +6005,12 @@ + + + + + + From 1243d1a9ba33609aa5f44200e537df97468672e7 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 10 Apr 2018 18:17:57 -0700 Subject: [PATCH 024/232] handle any'd method signature types (ie, from special property declarations) (#23316) --- src/compiler/checker.ts | 3 + ...owJscheckJsTypeParameterNoCrash.errors.txt | 23 ++++++++ .../allowJscheckJsTypeParameterNoCrash.js | 38 +++++++++++++ ...allowJscheckJsTypeParameterNoCrash.symbols | 51 +++++++++++++++++ .../allowJscheckJsTypeParameterNoCrash.types | 57 +++++++++++++++++++ .../allowJscheckJsTypeParameterNoCrash.ts | 21 +++++++ .../TypeScript-Node-Starter | 2 +- 7 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.errors.txt create mode 100644 tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.js create mode 100644 tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.symbols create mode 100644 tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.types create mode 100644 tests/cases/compiler/allowJscheckJsTypeParameterNoCrash.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 95a7dbc1120..cc42cc43294 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -19090,6 +19090,9 @@ namespace ts { const links = getNodeLinks(node); const type = getTypeOfSymbol(node.symbol); + if (isTypeAny(type)) { + return type; + } // Check if function expression is contextually typed and assign parameter types if so. if (!(links.flags & NodeCheckFlags.ContextChecked)) { diff --git a/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.errors.txt b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.errors.txt new file mode 100644 index 00000000000..5548bc5e3dc --- /dev/null +++ b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.errors.txt @@ -0,0 +1,23 @@ +tests/cases/compiler/app.js(6,7): error TS2322: Type '1' is not assignable to type 'WatchHandler'. + + +==== tests/cases/compiler/func.ts (0 errors) ==== + interface ComponentOptions { + watch: Record>; + } + type WatchHandler = (val: T) => void; + declare function extend(options: ComponentOptions<{}>): void; + export var vextend = extend; +==== tests/cases/compiler/app.js (1 errors) ==== + import {vextend} from './func'; + // hover on vextend + export var a = vextend({ + watch: { + data1(val) { + this.data2 = 1; + ~~~~~~~~~~ +!!! error TS2322: Type '1' is not assignable to type 'WatchHandler'. + }, + data2(val) { }, + } + }); \ No newline at end of file diff --git a/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.js b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.js new file mode 100644 index 00000000000..c2b9ddb5556 --- /dev/null +++ b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.js @@ -0,0 +1,38 @@ +//// [tests/cases/compiler/allowJscheckJsTypeParameterNoCrash.ts] //// + +//// [func.ts] +interface ComponentOptions { + watch: Record>; +} +type WatchHandler = (val: T) => void; +declare function extend(options: ComponentOptions<{}>): void; +export var vextend = extend; +//// [app.js] +import {vextend} from './func'; +// hover on vextend +export var a = vextend({ + watch: { + data1(val) { + this.data2 = 1; + }, + data2(val) { }, + } +}); + +//// [func.js] +"use strict"; +exports.__esModule = true; +exports.vextend = extend; +//// [app.js] +"use strict"; +exports.__esModule = true; +var func_1 = require("./func"); +// hover on vextend +exports.a = func_1.vextend({ + watch: { + data1: function (val) { + this.data2 = 1; + }, + data2: function (val) { } + } +}); diff --git a/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.symbols b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.symbols new file mode 100644 index 00000000000..2ca59a3dc60 --- /dev/null +++ b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.symbols @@ -0,0 +1,51 @@ +=== tests/cases/compiler/func.ts === +interface ComponentOptions { +>ComponentOptions : Symbol(ComponentOptions, Decl(func.ts, 0, 0)) +>V : Symbol(V, Decl(func.ts, 0, 27)) + + watch: Record>; +>watch : Symbol(ComponentOptions.watch, Decl(func.ts, 0, 31)) +>Record : Symbol(Record, Decl(lib.d.ts, --, --)) +>WatchHandler : Symbol(WatchHandler, Decl(func.ts, 2, 1)) +} +type WatchHandler = (val: T) => void; +>WatchHandler : Symbol(WatchHandler, Decl(func.ts, 2, 1)) +>T : Symbol(T, Decl(func.ts, 3, 18)) +>val : Symbol(val, Decl(func.ts, 3, 24)) +>T : Symbol(T, Decl(func.ts, 3, 18)) + +declare function extend(options: ComponentOptions<{}>): void; +>extend : Symbol(extend, Decl(func.ts, 3, 40)) +>options : Symbol(options, Decl(func.ts, 4, 24)) +>ComponentOptions : Symbol(ComponentOptions, Decl(func.ts, 0, 0)) + +export var vextend = extend; +>vextend : Symbol(vextend, Decl(func.ts, 5, 10)) +>extend : Symbol(extend, Decl(func.ts, 3, 40)) + +=== tests/cases/compiler/app.js === +import {vextend} from './func'; +>vextend : Symbol(vextend, Decl(app.js, 0, 8)) + +// hover on vextend +export var a = vextend({ +>a : Symbol(a, Decl(app.js, 2, 10)) +>vextend : Symbol(vextend, Decl(app.js, 0, 8)) + + watch: { +>watch : Symbol(watch, Decl(app.js, 2, 24)) + + data1(val) { +>data1 : Symbol(data1, Decl(app.js, 3, 10)) +>val : Symbol(val, Decl(app.js, 4, 10)) + + this.data2 = 1; +>this : Symbol(__type, Decl(lib.d.ts, --, --)) +>data2 : Symbol(data2, Decl(app.js, 4, 16), Decl(app.js, 6, 6)) + + }, + data2(val) { }, +>data2 : Symbol(data2, Decl(app.js, 4, 16), Decl(app.js, 6, 6)) +>val : Symbol(val, Decl(app.js, 7, 10)) + } +}); diff --git a/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.types b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.types new file mode 100644 index 00000000000..396cdd4445e --- /dev/null +++ b/tests/baselines/reference/allowJscheckJsTypeParameterNoCrash.types @@ -0,0 +1,57 @@ +=== tests/cases/compiler/func.ts === +interface ComponentOptions { +>ComponentOptions : ComponentOptions +>V : V + + watch: Record>; +>watch : Record void> +>Record : Record +>WatchHandler : (val: T) => void +} +type WatchHandler = (val: T) => void; +>WatchHandler : (val: T) => void +>T : T +>val : T +>T : T + +declare function extend(options: ComponentOptions<{}>): void; +>extend : (options: ComponentOptions<{}>) => void +>options : ComponentOptions<{}> +>ComponentOptions : ComponentOptions + +export var vextend = extend; +>vextend : (options: ComponentOptions<{}>) => void +>extend : (options: ComponentOptions<{}>) => void + +=== tests/cases/compiler/app.js === +import {vextend} from './func'; +>vextend : (options: ComponentOptions<{}>) => void + +// hover on vextend +export var a = vextend({ +>a : void +>vextend({ watch: { data1(val) { this.data2 = 1; }, data2(val) { }, }}) : void +>vextend : (options: ComponentOptions<{}>) => void +>{ watch: { data1(val) { this.data2 = 1; }, data2(val) { }, }} : { watch: { data1(val: any): void; }; } + + watch: { +>watch : { data1(val: any): void; } +>{ data1(val) { this.data2 = 1; }, data2(val) { }, } : { data1(val: any): void; } + + data1(val) { +>data1 : (val: any) => void +>val : any + + this.data2 = 1; +>this.data2 = 1 : 1 +>this.data2 : (val: any) => void +>this : Record void> +>data2 : (val: any) => void +>1 : 1 + + }, + data2(val) { }, +>data2 : any +>val : any + } +}); diff --git a/tests/cases/compiler/allowJscheckJsTypeParameterNoCrash.ts b/tests/cases/compiler/allowJscheckJsTypeParameterNoCrash.ts new file mode 100644 index 00000000000..90f9869d94d --- /dev/null +++ b/tests/cases/compiler/allowJscheckJsTypeParameterNoCrash.ts @@ -0,0 +1,21 @@ +// @checkJs: true +// @allowJs: true +// @outDir: ./dist +// @filename: func.ts +interface ComponentOptions { + watch: Record>; +} +type WatchHandler = (val: T) => void; +declare function extend(options: ComponentOptions<{}>): void; +export var vextend = extend; +// @filename: app.js +import {vextend} from './func'; +// hover on vextend +export var a = vextend({ + watch: { + data1(val) { + this.data2 = 1; + }, + data2(val) { }, + } +}); \ No newline at end of file diff --git a/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter b/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter index ed149eb0c78..40bdb4eadab 160000 --- a/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter +++ b/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter @@ -1 +1 @@ -Subproject commit ed149eb0c787b1195a95b44105822c64bb6eb636 +Subproject commit 40bdb4eadabc9fbed7d83e3f26817a931c0763b6 From b2e0c4bea60ea521df47fef415822cf4b66a663f Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 10 Apr 2018 18:21:24 -0700 Subject: [PATCH 025/232] Add support for destructuring well-known and late-bound names (#23297) * Add support for destructuring well-known and late-bound names * Add test of not present late bound prop --- src/compiler/checker.ts | 9 +++-- ...redLateBoundNameHasCorrectTypes.errors.txt | 18 +++++++++ ...estructuredLateBoundNameHasCorrectTypes.js | 22 +++++++++++ ...cturedLateBoundNameHasCorrectTypes.symbols | 29 ++++++++++++++ ...ructuredLateBoundNameHasCorrectTypes.types | 38 +++++++++++++++++++ ...estructuredLateBoundNameHasCorrectTypes.ts | 12 ++++++ 6 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt create mode 100644 tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.js create mode 100644 tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.symbols create mode 100644 tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types create mode 100644 tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cc42cc43294..7e3357d9cdf 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4174,14 +4174,17 @@ namespace ts { else { // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form) const name = declaration.propertyName || declaration.name; - if (isComputedNonLiteralName(name)) { - // computed properties with non-literal names are treated as 'any' + const isLate = isLateBindableName(name); + const isWellKnown = isComputedPropertyName(name) && isWellKnownSymbolSyntactically(name.expression); + if (!isLate && !isWellKnown && isComputedNonLiteralName(name)) { return anyType; } // Use type of the specified property, or otherwise, for a numeric name, the type of the numeric index signature, // or otherwise the type of the string index signature. - const text = getTextOfPropertyName(name); + const text = isLate ? getLateBoundNameFromType(checkComputedPropertyName(name as ComputedPropertyName) as LiteralType | UniqueESSymbolType) : + isWellKnown ? getPropertyNameForKnownSymbolName(idText(((name as ComputedPropertyName).expression as PropertyAccessExpression).name)) : + getTextOfPropertyName(name); // Relax null check on ambient destructuring parameters, since the parameters have no implementation and are just documentation if (strictNullChecks && declaration.flags & NodeFlags.Ambient && isParameterDeclaration(declaration)) { diff --git a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt new file mode 100644 index 00000000000..6a5c50021db --- /dev/null +++ b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt @@ -0,0 +1,18 @@ +tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts(11,7): error TS2459: Type '{ prop: string; }' has no property '[notPresent]' and no string index signature. + + +==== tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts (1 errors) ==== + let { [Symbol.iterator]: destructured } = []; + void destructured; + + const named = "prop"; + + let { [named]: computed } = { prop: "b" }; + void computed; + + const notPresent = "prop2"; + + let { [notPresent]: computed2 } = { prop: "b" }; + ~~~~~~~~~~~~ +!!! error TS2459: Type '{ prop: string; }' has no property '[notPresent]' and no string index signature. + \ No newline at end of file diff --git a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.js b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.js new file mode 100644 index 00000000000..b1bee839e90 --- /dev/null +++ b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.js @@ -0,0 +1,22 @@ +//// [destructuredLateBoundNameHasCorrectTypes.ts] +let { [Symbol.iterator]: destructured } = []; +void destructured; + +const named = "prop"; + +let { [named]: computed } = { prop: "b" }; +void computed; + +const notPresent = "prop2"; + +let { [notPresent]: computed2 } = { prop: "b" }; + + +//// [destructuredLateBoundNameHasCorrectTypes.js] +let { [Symbol.iterator]: destructured } = []; +void destructured; +const named = "prop"; +let { [named]: computed } = { prop: "b" }; +void computed; +const notPresent = "prop2"; +let { [notPresent]: computed2 } = { prop: "b" }; diff --git a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.symbols b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.symbols new file mode 100644 index 00000000000..dbf0aac121d --- /dev/null +++ b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.symbols @@ -0,0 +1,29 @@ +=== tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts === +let { [Symbol.iterator]: destructured } = []; +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>destructured : Symbol(destructured, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 0, 5)) + +void destructured; +>destructured : Symbol(destructured, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 0, 5)) + +const named = "prop"; +>named : Symbol(named, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 3, 5)) + +let { [named]: computed } = { prop: "b" }; +>named : Symbol(named, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 3, 5)) +>computed : Symbol(computed, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 5, 5)) +>prop : Symbol(prop, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 5, 29)) + +void computed; +>computed : Symbol(computed, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 5, 5)) + +const notPresent = "prop2"; +>notPresent : Symbol(notPresent, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 8, 5)) + +let { [notPresent]: computed2 } = { prop: "b" }; +>notPresent : Symbol(notPresent, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 8, 5)) +>computed2 : Symbol(computed2, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 10, 5)) +>prop : Symbol(prop, Decl(destructuredLateBoundNameHasCorrectTypes.ts, 10, 35)) + diff --git a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types new file mode 100644 index 00000000000..8d24b45e0ec --- /dev/null +++ b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts === +let { [Symbol.iterator]: destructured } = []; +>Symbol.iterator : symbol +>Symbol : SymbolConstructor +>iterator : symbol +>destructured : () => IterableIterator +>[] : undefined[] + +void destructured; +>void destructured : undefined +>destructured : () => IterableIterator + +const named = "prop"; +>named : "prop" +>"prop" : "prop" + +let { [named]: computed } = { prop: "b" }; +>named : "prop" +>computed : string +>{ prop: "b" } : { prop: string; } +>prop : string +>"b" : "b" + +void computed; +>void computed : undefined +>computed : string + +const notPresent = "prop2"; +>notPresent : "prop2" +>"prop2" : "prop2" + +let { [notPresent]: computed2 } = { prop: "b" }; +>notPresent : "prop2" +>computed2 : any +>{ prop: "b" } : { prop: string; } +>prop : string +>"b" : "b" + diff --git a/tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts b/tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts new file mode 100644 index 00000000000..b2e6538e49e --- /dev/null +++ b/tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts @@ -0,0 +1,12 @@ +// @target: es6 +let { [Symbol.iterator]: destructured } = []; +void destructured; + +const named = "prop"; + +let { [named]: computed } = { prop: "b" }; +void computed; + +const notPresent = "prop2"; + +let { [notPresent]: computed2 } = { prop: "b" }; From b40592c34ebb27f95805c4e3c39e81323b9f5088 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 10 Apr 2018 17:35:11 -1000 Subject: [PATCH 026/232] String index signatures do not apply to symbols --- src/compiler/checker.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e6ba58987fb..9abf5ec0277 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8151,8 +8151,9 @@ namespace ts { maybeTypeOfKind(type, TypeFlags.InstantiableNonPrimitive) ? getIndexTypeForGenericType(type) : getObjectFlags(type) & ObjectFlags.Mapped ? getConstraintTypeFromMappedType(type) : type === wildcardType ? wildcardType : - type.flags & TypeFlags.Any || getIndexInfoOfType(type, IndexKind.String) ? keyofConstraintType : - keyofStringsOnly ? getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral) : + type.flags & TypeFlags.Any ? keyofConstraintType : + keyofStringsOnly ? getIndexInfoOfType(type, IndexKind.String) ? stringType : getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral) : + getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringType, numberType, getLiteralTypeFromPropertyNames(type, TypeFlags.UniqueESSymbol)]) : getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) : getLiteralTypeFromPropertyNames(type, TypeFlags.StringLiteral | TypeFlags.NumberLiteral | TypeFlags.UniqueESSymbol); } From 0a37cd37362c10061ba9e7307eaf47a5f8821f6f Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 10 Apr 2018 17:35:27 -1000 Subject: [PATCH 027/232] Update test --- tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts index 447fdebf68e..e0c1f544d97 100644 --- a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts +++ b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts @@ -190,13 +190,13 @@ function f51(k: K, s: string) { const x2 = k as string; } -function f52(obj: { [x: string]: boolean }, k: keyof T, s: string, n: number) { +function f52(obj: { [x: string]: boolean }, k: Exclude, s: string, n: number) { const x1 = obj[s]; const x2 = obj[n]; const x3 = obj[k]; } -function f53(obj: { [x: string]: boolean }, k: K, s: string, n: number) { +function f53>(obj: { [x: string]: boolean }, k: K, s: string, n: number) { const x1 = obj[s]; const x2 = obj[n]; const x3 = obj[k]; From b746f8e8a4d4b20ba74efa17e45adcdf7e824823 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 10 Apr 2018 17:39:55 -1000 Subject: [PATCH 028/232] Accept new baselines --- .../reference/keyofAndIndexedAccess.js | 8 ++--- .../reference/keyofAndIndexedAccess.symbols | 36 ++++++++++--------- .../reference/keyofAndIndexedAccess.types | 22 ++++++------ 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/tests/baselines/reference/keyofAndIndexedAccess.js b/tests/baselines/reference/keyofAndIndexedAccess.js index 70f1c8b856e..422cef5a574 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.js +++ b/tests/baselines/reference/keyofAndIndexedAccess.js @@ -188,13 +188,13 @@ function f51(k: K, s: string) { const x2 = k as string; } -function f52(obj: { [x: string]: boolean }, k: keyof T, s: string, n: number) { +function f52(obj: { [x: string]: boolean }, k: Exclude, s: string, n: number) { const x1 = obj[s]; const x2 = obj[n]; const x3 = obj[k]; } -function f53(obj: { [x: string]: boolean }, k: K, s: string, n: number) { +function f53>(obj: { [x: string]: boolean }, k: K, s: string, n: number) { const x1 = obj[s]; const x2 = obj[n]; const x3 = obj[k]; @@ -1048,8 +1048,8 @@ declare function f50(k: keyof T, s: string): void; declare function f51(k: K, s: string): void; declare function f52(obj: { [x: string]: boolean; -}, k: keyof T, s: string, n: number): void; -declare function f53(obj: { +}, k: Exclude, s: string, n: number): void; +declare function f53>(obj: { [x: string]: boolean; }, k: K, s: string, n: number): void; declare function f54(obj: T, key: keyof T): void; diff --git a/tests/baselines/reference/keyofAndIndexedAccess.symbols b/tests/baselines/reference/keyofAndIndexedAccess.symbols index 1d59deb12b3..b1206a49388 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.symbols +++ b/tests/baselines/reference/keyofAndIndexedAccess.symbols @@ -651,25 +651,26 @@ function f51(k: K, s: string) { >k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 184, 35)) } -function f52(obj: { [x: string]: boolean }, k: keyof T, s: string, n: number) { +function f52(obj: { [x: string]: boolean }, k: Exclude, s: string, n: number) { >f52 : Symbol(f52, Decl(keyofAndIndexedAccess.ts, 187, 1)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 189, 13)) >obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 189, 16)) >x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 189, 24)) >k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 189, 46)) +>Exclude : Symbol(Exclude, Decl(lib.d.ts, --, --)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 189, 13)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 189, 58)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 189, 69)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 189, 75)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 189, 86)) const x1 = obj[s]; >x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 190, 9)) >obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 189, 16)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 189, 58)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 189, 75)) const x2 = obj[n]; >x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 191, 9)) >obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 189, 16)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 189, 69)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 189, 86)) const x3 = obj[k]; >x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 192, 9)) @@ -677,32 +678,33 @@ function f52(obj: { [x: string]: boolean }, k: keyof T, s: string, n: number) >k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 189, 46)) } -function f53(obj: { [x: string]: boolean }, k: K, s: string, n: number) { +function f53>(obj: { [x: string]: boolean }, k: K, s: string, n: number) { >f53 : Symbol(f53, Decl(keyofAndIndexedAccess.ts, 193, 1)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 195, 13)) >K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 195, 15)) +>Exclude : Symbol(Exclude, Decl(lib.d.ts, --, --)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 195, 13)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 35)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 195, 43)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 195, 65)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 195, 60)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 195, 82)) >K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 195, 15)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 195, 71)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 195, 82)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 195, 88)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 195, 99)) const x1 = obj[s]; >x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 196, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 35)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 195, 71)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 195, 88)) const x2 = obj[n]; >x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 197, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 35)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 195, 82)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 195, 99)) const x3 = obj[k]; >x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 198, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 35)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 195, 65)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 195, 82)) } function f54(obj: T, key: keyof T) { diff --git a/tests/baselines/reference/keyofAndIndexedAccess.types b/tests/baselines/reference/keyofAndIndexedAccess.types index 462dde9ca03..4e41b58e664 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.types +++ b/tests/baselines/reference/keyofAndIndexedAccess.types @@ -92,7 +92,7 @@ type K11 = keyof Shape[]; // "length" | "toString" | ... >Shape : Shape type K12 = keyof Dictionary; // string ->K12 : string | number | symbol +>K12 : string | number >Dictionary : Dictionary >Shape : Shape @@ -136,7 +136,7 @@ type K20 = KeyOf; // "name" | "width" | "height" | "visible" >Shape : Shape type K21 = KeyOf>; // string ->K21 : string | number | symbol +>K21 : string | number >KeyOf : keyof T >Dictionary : Dictionary >Shape : Shape @@ -756,12 +756,13 @@ function f51(k: K, s: string) { >k : K } -function f52(obj: { [x: string]: boolean }, k: keyof T, s: string, n: number) { ->f52 : (obj: { [x: string]: boolean; }, k: keyof T, s: string, n: number) => void +function f52(obj: { [x: string]: boolean }, k: Exclude, s: string, n: number) { +>f52 : (obj: { [x: string]: boolean; }, k: Exclude, s: string, n: number) => void >T : T >obj : { [x: string]: boolean; } >x : string ->k : keyof T +>k : Exclude +>Exclude : Exclude >T : T >s : string >n : number @@ -779,16 +780,17 @@ function f52(obj: { [x: string]: boolean }, k: keyof T, s: string, n: number) >n : number const x3 = obj[k]; ->x3 : { [x: string]: boolean; }[keyof T] ->obj[k] : { [x: string]: boolean; }[keyof T] +>x3 : { [x: string]: boolean; }[Exclude] +>obj[k] : { [x: string]: boolean; }[Exclude] >obj : { [x: string]: boolean; } ->k : keyof T +>k : Exclude } -function f53(obj: { [x: string]: boolean }, k: K, s: string, n: number) { ->f53 : (obj: { [x: string]: boolean; }, k: K, s: string, n: number) => void +function f53>(obj: { [x: string]: boolean }, k: K, s: string, n: number) { +>f53 : >(obj: { [x: string]: boolean; }, k: K, s: string, n: number) => void >T : T >K : K +>Exclude : Exclude >T : T >obj : { [x: string]: boolean; } >x : string From 8a2b4646f01bb1357b4d68eddff0d7f827d23432 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Tue, 10 Apr 2018 20:50:31 -0700 Subject: [PATCH 029/232] Include guards on comment kind in pragma extraction (#23313) --- src/compiler/parser.ts | 14 ++++++++------ .../reference/tripleSlashInCommentNotParsed.js | 11 +++++++++++ .../tripleSlashInCommentNotParsed.symbols | 6 ++++++ .../reference/tripleSlashInCommentNotParsed.types | 8 ++++++++ .../compiler/tripleSlashInCommentNotParsed.ts | 4 ++++ 5 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 tests/baselines/reference/tripleSlashInCommentNotParsed.js create mode 100644 tests/baselines/reference/tripleSlashInCommentNotParsed.symbols create mode 100644 tests/baselines/reference/tripleSlashInCommentNotParsed.types create mode 100644 tests/cases/compiler/tripleSlashInCommentNotParsed.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0b89c3c313c..ef15c57f1d8 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -7603,7 +7603,7 @@ namespace ts { const tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/im; const singleLinePragmaRegEx = /^\/\/\/?\s*@(\S+)\s*(.*)\s*$/im; function extractPragmas(pragmas: PragmaPsuedoMapEntry[], range: CommentRange, text: string) { - const tripleSlash = tripleSlashXMLCommentStartRegEx.exec(text); + const tripleSlash = range.kind === SyntaxKind.SingleLineCommentTrivia && tripleSlashXMLCommentStartRegEx.exec(text); if (tripleSlash) { const name = tripleSlash[1].toLowerCase() as keyof PragmaPsuedoMap; // Technically unsafe cast, but we do it so the below check to make it safe typechecks const pragma = commentPragmas[name] as PragmaDefinition; @@ -7640,15 +7640,17 @@ namespace ts { return; } - const singleLine = singleLinePragmaRegEx.exec(text); + const singleLine = range.kind === SyntaxKind.SingleLineCommentTrivia && singleLinePragmaRegEx.exec(text); if (singleLine) { return addPragmaForMatch(pragmas, range, PragmaKindFlags.SingleLine, singleLine); } - const multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating) - let multiLineMatch: RegExpExecArray; - while (multiLineMatch = multiLinePragmaRegEx.exec(text)) { - addPragmaForMatch(pragmas, range, PragmaKindFlags.MultiLine, multiLineMatch); + if (range.kind === SyntaxKind.MultiLineCommentTrivia) { + const multiLinePragmaRegEx = /\s*@(\S+)\s*(.*)\s*$/gim; // Defined inline since it uses the "g" flag, which keeps a persistent index (for iterating) + let multiLineMatch: RegExpExecArray; + while (multiLineMatch = multiLinePragmaRegEx.exec(text)) { + addPragmaForMatch(pragmas, range, PragmaKindFlags.MultiLine, multiLineMatch); + } } } diff --git a/tests/baselines/reference/tripleSlashInCommentNotParsed.js b/tests/baselines/reference/tripleSlashInCommentNotParsed.js new file mode 100644 index 00000000000..5b16e26c4f4 --- /dev/null +++ b/tests/baselines/reference/tripleSlashInCommentNotParsed.js @@ -0,0 +1,11 @@ +//// [tripleSlashInCommentNotParsed.ts] +/* +/// +*/ +void 0; + +//// [tripleSlashInCommentNotParsed.js] +/* +/// +*/ +void 0; diff --git a/tests/baselines/reference/tripleSlashInCommentNotParsed.symbols b/tests/baselines/reference/tripleSlashInCommentNotParsed.symbols new file mode 100644 index 00000000000..3df0d7dfddd --- /dev/null +++ b/tests/baselines/reference/tripleSlashInCommentNotParsed.symbols @@ -0,0 +1,6 @@ +=== tests/cases/compiler/tripleSlashInCommentNotParsed.ts === +/* +No type information for this code./// +No type information for this code.*/ +No type information for this code.void 0; +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/tripleSlashInCommentNotParsed.types b/tests/baselines/reference/tripleSlashInCommentNotParsed.types new file mode 100644 index 00000000000..c4390cce54d --- /dev/null +++ b/tests/baselines/reference/tripleSlashInCommentNotParsed.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/tripleSlashInCommentNotParsed.ts === +/* +/// +*/ +void 0; +>void 0 : undefined +>0 : 0 + diff --git a/tests/cases/compiler/tripleSlashInCommentNotParsed.ts b/tests/cases/compiler/tripleSlashInCommentNotParsed.ts new file mode 100644 index 00000000000..34ab70ace3a --- /dev/null +++ b/tests/cases/compiler/tripleSlashInCommentNotParsed.ts @@ -0,0 +1,4 @@ +/* +/// +*/ +void 0; \ No newline at end of file From 82e8bcf3b220de6bb5b71baa1c01d97b8297ca91 Mon Sep 17 00:00:00 2001 From: Brandon Slade Date: Tue, 10 Apr 2018 21:52:38 -0600 Subject: [PATCH 030/232] Fix typeo: rename udpateReportDiagnostic to updateReportDiagnostic --- src/compiler/tsc.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 09b64701988..77f4d7c6e1f 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -22,7 +22,7 @@ namespace ts { } let reportDiagnostic = createDiagnosticReporter(sys); - function udpateReportDiagnostic(options: CompilerOptions) { + function updateReportDiagnostic(options: CompilerOptions) { if (options.pretty) { reportDiagnostic = createDiagnosticReporter(sys, /*pretty*/ true); } @@ -111,7 +111,7 @@ namespace ts { const commandLineOptions = commandLine.options; if (configFileName) { const configParseResult = parseConfigFileWithSystem(configFileName, commandLineOptions, sys, reportDiagnostic); - udpateReportDiagnostic(configParseResult.options); + updateReportDiagnostic(configParseResult.options); if (isWatchSet(configParseResult.options)) { reportWatchModeWithoutSysSupport(); createWatchOfConfigFile(configParseResult, commandLineOptions); @@ -121,7 +121,7 @@ namespace ts { } } else { - udpateReportDiagnostic(commandLineOptions); + updateReportDiagnostic(commandLineOptions); if (isWatchSet(commandLineOptions)) { reportWatchModeWithoutSysSupport(); createWatchOfFilesAndCompilerOptions(commandLine.fileNames, commandLineOptions); From f458e9007d06665e937df71ba9dfe23f8298029c Mon Sep 17 00:00:00 2001 From: csigs Date: Wed, 11 Apr 2018 04:10:41 +0000 Subject: [PATCH 031/232] LEGO: check in for master to temporary branch. --- .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ .../diagnosticMessages.generated.json.lcl | 24 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl index 59f1bbd4e46..a0f54926f3f 100644 --- a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3771,6 +3771,24 @@ + + + + + + + + + + + + + + + + + + @@ -5988,6 +6006,12 @@ + + + + + + diff --git a/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl index 283b7220eda..473da1a4a01 100644 --- a/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl +++ b/src/loc/lcl/ptb/diagnosticMessages/diagnosticMessages.generated.json.lcl @@ -3761,6 +3761,24 @@ + + + + + + + + + + + + + + + + + + @@ -5975,6 +5993,12 @@ + + + + + + From 9ceb113ec50908803bacba430b7e0a0f063aa09a Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Wed, 11 Apr 2018 06:49:58 -0700 Subject: [PATCH 032/232] Allow exports assignments (#23319) 1. Allow assignment to `exports`. 2. The type of the rhs is not checked against the type of `exports` since they are aliased declarations. To support more complex patterns like `exports = c.name = c`, we may have to treat `c.name` as a declaration. That will be more complicated than this PR. --- src/compiler/checker.ts | 8 ++- .../exportNestedNamespaces2.errors.txt | 10 +-- .../reference/exportNestedNamespaces2.types | 4 +- .../reference/moduleExportAlias.types | 16 ++--- .../reference/moduleExportAlias2.symbols | 51 +++++++++++++++ .../reference/moduleExportAlias2.types | 65 +++++++++++++++++++ .../typeFromPropertyAssignment19.errors.txt | 20 ------ .../typeFromPropertyAssignment19.types | 2 +- .../conformance/salsa/moduleExportAlias2.ts | 19 ++++++ 9 files changed, 153 insertions(+), 42 deletions(-) create mode 100644 tests/baselines/reference/moduleExportAlias2.symbols create mode 100644 tests/baselines/reference/moduleExportAlias2.types delete mode 100644 tests/baselines/reference/typeFromPropertyAssignment19.errors.txt create mode 100644 tests/cases/conformance/salsa/moduleExportAlias2.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7e3357d9cdf..cc51e1b7265 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13882,7 +13882,8 @@ namespace ts { const assignmentKind = getAssignmentTargetKind(node); if (assignmentKind) { - if (!(localOrExportSymbol.flags & SymbolFlags.Variable)) { + if (!(localOrExportSymbol.flags & SymbolFlags.Variable) && + !(isInJavaScriptFile(node) && localOrExportSymbol.flags & SymbolFlags.ValueModule)) { error(node, Diagnostics.Cannot_assign_to_0_because_it_is_not_a_variable, symbolToString(symbol)); return unknownType; } @@ -19858,8 +19859,9 @@ namespace ts { // VarExpr = ValueExpr // requires VarExpr to be classified as a reference // A compound assignment furthermore requires VarExpr to be classified as a reference (section 4.1) - // and the type of the non - compound operation to be assignable to the type of VarExpr. - if (checkReferenceExpression(left, Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access)) { + // and the type of the non-compound operation to be assignable to the type of VarExpr. + if (checkReferenceExpression(left, Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access) + && (!isIdentifier(left) || unescapeLeadingUnderscores(left.escapedText) !== "exports")) { // to avoid cascading errors check assignability only if 'isReference' check succeeded and no errors were reported checkTypeAssignableTo(valueType, leftType, left, /*headMessage*/ undefined); } diff --git a/tests/baselines/reference/exportNestedNamespaces2.errors.txt b/tests/baselines/reference/exportNestedNamespaces2.errors.txt index 7b4b3284f72..38dc2fc2c60 100644 --- a/tests/baselines/reference/exportNestedNamespaces2.errors.txt +++ b/tests/baselines/reference/exportNestedNamespaces2.errors.txt @@ -1,7 +1,5 @@ -tests/cases/conformance/salsa/first.js(1,1): error TS2539: Cannot assign to '"tests/cases/conformance/salsa/first"' because it is not a variable. tests/cases/conformance/salsa/first.js(1,11): error TS2304: Cannot find name 'require'. tests/cases/conformance/salsa/first.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("tests/cases/conformance/salsa/first")'. -tests/cases/conformance/salsa/second.js(1,1): error TS2539: Cannot assign to '"tests/cases/conformance/salsa/second"' because it is not a variable. tests/cases/conformance/salsa/second.js(1,11): error TS2304: Cannot find name 'require'. tests/cases/conformance/salsa/second.js(2,9): error TS2339: Property 'formatters' does not exist on type 'typeof import("tests/cases/conformance/salsa/second")'. @@ -9,10 +7,8 @@ tests/cases/conformance/salsa/second.js(2,9): error TS2339: Property 'formatters ==== tests/cases/conformance/salsa/mod.js (0 errors) ==== // Based on a pattern from adonis exports.formatters = {} -==== tests/cases/conformance/salsa/first.js (3 errors) ==== +==== tests/cases/conformance/salsa/first.js (2 errors) ==== exports = require('./mod') - ~~~~~~~ -!!! error TS2539: Cannot assign to '"tests/cases/conformance/salsa/first"' because it is not a variable. ~~~~~~~ !!! error TS2304: Cannot find name 'require'. exports.formatters.j = function (v) { @@ -20,10 +16,8 @@ tests/cases/conformance/salsa/second.js(2,9): error TS2339: Property 'formatters !!! error TS2339: Property 'formatters' does not exist on type 'typeof import("tests/cases/conformance/salsa/first")'. return v } -==== tests/cases/conformance/salsa/second.js (3 errors) ==== +==== tests/cases/conformance/salsa/second.js (2 errors) ==== exports = require('./mod') - ~~~~~~~ -!!! error TS2539: Cannot assign to '"tests/cases/conformance/salsa/second"' because it is not a variable. ~~~~~~~ !!! error TS2304: Cannot find name 'require'. exports.formatters.o = function (v) { diff --git a/tests/baselines/reference/exportNestedNamespaces2.types b/tests/baselines/reference/exportNestedNamespaces2.types index e1539586650..5d32eb29215 100644 --- a/tests/baselines/reference/exportNestedNamespaces2.types +++ b/tests/baselines/reference/exportNestedNamespaces2.types @@ -10,7 +10,7 @@ exports.formatters = {} === tests/cases/conformance/salsa/first.js === exports = require('./mod') >exports = require('./mod') : typeof import("tests/cases/conformance/salsa/mod") ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/first") >require('./mod') : typeof import("tests/cases/conformance/salsa/mod") >require : any >'./mod' : "./mod" @@ -31,7 +31,7 @@ exports.formatters.j = function (v) { === tests/cases/conformance/salsa/second.js === exports = require('./mod') >exports = require('./mod') : typeof import("tests/cases/conformance/salsa/mod") ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/second") >require('./mod') : typeof import("tests/cases/conformance/salsa/mod") >require : any >'./mod' : "./mod" diff --git a/tests/baselines/reference/moduleExportAlias.types b/tests/baselines/reference/moduleExportAlias.types index ce4e1a8fe73..924f02d7fa8 100644 --- a/tests/baselines/reference/moduleExportAlias.types +++ b/tests/baselines/reference/moduleExportAlias.types @@ -147,7 +147,7 @@ module.exports.func4 = function () { }; var multipleDeclarationAlias1 = exports = module.exports; >multipleDeclarationAlias1 : any >exports = module.exports : any ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >module.exports : any >module : any >exports : any @@ -212,7 +212,7 @@ var multipleDeclarationAlias5 = module.exports = exports = {}; >module : any >exports : any >exports = {} : {} ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >{} : {} multipleDeclarationAlias5.func9 = function () { }; @@ -225,7 +225,7 @@ multipleDeclarationAlias5.func9 = function () { }; var multipleDeclarationAlias6 = exports = module.exports = {}; >multipleDeclarationAlias6 : { [x: string]: any; } >exports = module.exports = {} : { [x: string]: any; } ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >module.exports = {} : { [x: string]: any; } >module.exports : any >module : any @@ -241,7 +241,7 @@ multipleDeclarationAlias6.func10 = function () { }; exports = module.exports = someOtherVariable = {}; >exports = module.exports = someOtherVariable = {} : {} ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >module.exports = someOtherVariable = {} : {} >module.exports : any >module : any @@ -268,7 +268,7 @@ module.exports.func12 = function () { }; exports = module.exports = someOtherVariable = {}; >exports = module.exports = someOtherVariable = {} : {} ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >module.exports = someOtherVariable = {} : {} >module.exports : any >module : any @@ -295,7 +295,7 @@ module.exports.func12 = function () { }; exports = module.exports = {}; >exports = module.exports = {} : { [x: string]: any; } ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >module.exports = {} : { [x: string]: any; } >module.exports : any >module : any @@ -320,7 +320,7 @@ module.exports.func14 = function () { }; exports = module.exports = {}; >exports = module.exports = {} : { [x: string]: any; } ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >module.exports = {} : { [x: string]: any; } >module.exports : any >module : any @@ -349,7 +349,7 @@ module.exports = exports = {}; >module : any >exports : any >exports = {} : {} ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/b") >{} : {} exports.func17 = function () { }; diff --git a/tests/baselines/reference/moduleExportAlias2.symbols b/tests/baselines/reference/moduleExportAlias2.symbols new file mode 100644 index 00000000000..52e089050b1 --- /dev/null +++ b/tests/baselines/reference/moduleExportAlias2.symbols @@ -0,0 +1,51 @@ +=== tests/cases/conformance/salsa/index.js === +/// +const C = require("./semver") +>C : Symbol(C, Decl(index.js, 1, 5)) +>require : Symbol(require, Decl(node.d.ts, 0, 0)) +>"./semver" : Symbol("tests/cases/conformance/salsa/semver", Decl(semver.js, 0, 0)) + +var two = C.f(1) +>two : Symbol(two, Decl(index.js, 2, 3)) +>C.f : Symbol(f, Decl(semver.js, 1, 28)) +>C : Symbol(C, Decl(index.js, 1, 5)) +>f : Symbol(f, Decl(semver.js, 1, 28)) + +var c = new C +>c : Symbol(c, Decl(index.js, 3, 3)) +>C : Symbol(C, Decl(index.js, 1, 5)) + +=== tests/cases/conformance/salsa/node.d.ts === +declare function require(name: string): any; +>require : Symbol(require, Decl(node.d.ts, 0, 0)) +>name : Symbol(name, Decl(node.d.ts, 0, 25)) + +declare var exports: any; +>exports : Symbol(exports, Decl(node.d.ts, 1, 11)) + +declare var module: { exports: any }; +>module : Symbol(module, Decl(node.d.ts, 2, 11)) +>exports : Symbol(exports, Decl(node.d.ts, 2, 21)) + +=== tests/cases/conformance/salsa/semver.js === +/// +exports = module.exports = C +>exports : Symbol("tests/cases/conformance/salsa/semver", Decl(semver.js, 0, 0)) +>module.exports : Symbol(exports, Decl(node.d.ts, 2, 21)) +>module : Symbol(export=, Decl(semver.js, 1, 9)) +>exports : Symbol(export=, Decl(semver.js, 1, 9)) +>C : Symbol(C, Decl(semver.js, 2, 22)) + +exports.f = n => n + 1 +>exports.f : Symbol(f, Decl(semver.js, 1, 28)) +>exports : Symbol(f, Decl(semver.js, 1, 28)) +>f : Symbol(f, Decl(semver.js, 1, 28)) +>n : Symbol(n, Decl(semver.js, 2, 11)) +>n : Symbol(n, Decl(semver.js, 2, 11)) + +function C() { +>C : Symbol(C, Decl(semver.js, 2, 22)) + + this.p = 1 +>p : Symbol(C.p, Decl(semver.js, 3, 14)) +} diff --git a/tests/baselines/reference/moduleExportAlias2.types b/tests/baselines/reference/moduleExportAlias2.types new file mode 100644 index 00000000000..c76c2c33c45 --- /dev/null +++ b/tests/baselines/reference/moduleExportAlias2.types @@ -0,0 +1,65 @@ +=== tests/cases/conformance/salsa/index.js === +/// +const C = require("./semver") +>C : typeof C +>require("./semver") : typeof C +>require : (name: string) => any +>"./semver" : "./semver" + +var two = C.f(1) +>two : any +>C.f(1) : any +>C.f : (n: any) => any +>C : typeof C +>f : (n: any) => any +>1 : 1 + +var c = new C +>c : C +>new C : C +>C : typeof C + +=== tests/cases/conformance/salsa/node.d.ts === +declare function require(name: string): any; +>require : (name: string) => any +>name : string + +declare var exports: any; +>exports : any + +declare var module: { exports: any }; +>module : { exports: any; } +>exports : any + +=== tests/cases/conformance/salsa/semver.js === +/// +exports = module.exports = C +>exports = module.exports = C : typeof C +>exports : typeof import("tests/cases/conformance/salsa/semver") +>module.exports = C : typeof C +>module.exports : any +>module : { exports: any; } +>exports : any +>C : typeof C + +exports.f = n => n + 1 +>exports.f = n => n + 1 : (n: any) => any +>exports.f : (n: any) => any +>exports : typeof import("tests/cases/conformance/salsa/semver") +>f : (n: any) => any +>n => n + 1 : (n: any) => any +>n : any +>n + 1 : any +>n : any +>1 : 1 + +function C() { +>C : typeof C + + this.p = 1 +>this.p = 1 : 1 +>this.p : any +>this : any +>p : any +>1 : 1 +} diff --git a/tests/baselines/reference/typeFromPropertyAssignment19.errors.txt b/tests/baselines/reference/typeFromPropertyAssignment19.errors.txt deleted file mode 100644 index d43728d360b..00000000000 --- a/tests/baselines/reference/typeFromPropertyAssignment19.errors.txt +++ /dev/null @@ -1,20 +0,0 @@ -tests/cases/conformance/salsa/semver.js(2,1): error TS2539: Cannot assign to '"tests/cases/conformance/salsa/semver"' because it is not a variable. - - -==== tests/cases/conformance/salsa/index.js (0 errors) ==== - /// - const C = require("./semver") - var two = C.f(1) - -==== tests/cases/conformance/salsa/types.d.ts (0 errors) ==== - declare var require: any; - declare var module: any; -==== tests/cases/conformance/salsa/semver.js (1 errors) ==== - /// - exports = module.exports = C - ~~~~~~~ -!!! error TS2539: Cannot assign to '"tests/cases/conformance/salsa/semver"' because it is not a variable. - C.f = n => n + 1 - function C() { - this.p = 1 - } \ No newline at end of file diff --git a/tests/baselines/reference/typeFromPropertyAssignment19.types b/tests/baselines/reference/typeFromPropertyAssignment19.types index ee219e7164a..b0200fc2311 100644 --- a/tests/baselines/reference/typeFromPropertyAssignment19.types +++ b/tests/baselines/reference/typeFromPropertyAssignment19.types @@ -25,7 +25,7 @@ declare var module: any; /// exports = module.exports = C >exports = module.exports = C : typeof C ->exports : any +>exports : typeof import("tests/cases/conformance/salsa/semver") >module.exports = C : typeof C >module.exports : any >module : any diff --git a/tests/cases/conformance/salsa/moduleExportAlias2.ts b/tests/cases/conformance/salsa/moduleExportAlias2.ts new file mode 100644 index 00000000000..027cc83e6f1 --- /dev/null +++ b/tests/cases/conformance/salsa/moduleExportAlias2.ts @@ -0,0 +1,19 @@ +// @checkJs: true +// @allowJS: true +// @noEmit: true +// @Filename: node.d.ts +declare function require(name: string): any; +declare var exports: any; +declare var module: { exports: any }; +// @Filename: semver.js +/// +exports = module.exports = C +exports.f = n => n + 1 +function C() { + this.p = 1 +} +// @filename: index.js +/// +const C = require("./semver") +var two = C.f(1) +var c = new C From a004571d3ebb7da6a7d0915465829dee9874e495 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 11 Apr 2018 07:56:42 -0700 Subject: [PATCH 033/232] Update outdated comments (#23320) --- src/compiler/program.ts | 1 - src/compiler/types.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 31220c68d3c..6467dd2afc8 100755 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -577,7 +577,6 @@ namespace ts { const packageIdToSourceFile = createMap(); // Maps from a SourceFile's `.path` to the name of the package it was imported with. let sourceFileToPackageName = createMap(); - // See `sourceFileIsRedirectedTo`. let redirectTargetsSet = createMap(); const filesByName = createMap(); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index f0aba4a34d7..987d403e7cd 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2527,7 +2527,7 @@ namespace ts { /** * If two source files are for the same version of the same package, one will redirect to the other. * (See `createRedirectSourceFile` in program.ts.) - * The redirect will have this set. The other will not have anything set, but see Program#sourceFileIsRedirectedTo. + * The redirect will have this set. The redirected-to source file will be in `redirectTargetsSet`. */ /* @internal */ redirectInfo?: RedirectInfo | undefined; From fef28665f7a73bb8f74709b489c5c36256f1da98 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 11 Apr 2018 13:21:47 -0700 Subject: [PATCH 034/232] generateGetAccessorAndSetAccessor: Fix typos and use type predicate (#23310) --- src/compiler/core.ts | 4 +- .../generateGetAccessorAndSetAccessor.ts | 44 ++++++++++--------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 3ce832678b8..b138156dfd5 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -3119,8 +3119,8 @@ namespace ts { return (arg: T) => f(arg) && g(arg); } - export function or(f: (arg: T) => boolean, g: (arg: T) => boolean, ...others: ((arg: T) => boolean)[]) { - return (arg: T) => f(arg) || g(arg) || others.some(f => f(arg)); + export function or(f: (arg: T) => boolean, g: (arg: T) => boolean): (arg: T) => boolean { + return arg => f(arg) || g(arg); } export function assertTypeIsNever(_: never): void { } // tslint:disable-line no-empty diff --git a/src/services/refactors/generateGetAccessorAndSetAccessor.ts b/src/services/refactors/generateGetAccessorAndSetAccessor.ts index f1b1499a838..cf924486cb3 100644 --- a/src/services/refactors/generateGetAccessorAndSetAccessor.ts +++ b/src/services/refactors/generateGetAccessorAndSetAccessor.ts @@ -4,20 +4,20 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { const actionDescription = Diagnostics.Generate_get_and_set_accessors.message; registerRefactor(actionName, { getEditsForAction, getAvailableActions }); - type AccepedDeclaration = ParameterDeclaration | PropertyDeclaration | PropertyAssignment; - type AccepedNameType = Identifier | StringLiteral; - type ContainerDeclation = ClassLikeDeclaration | ObjectLiteralExpression; + type AcceptedDeclaration = ParameterDeclaration | PropertyDeclaration | PropertyAssignment; + type AcceptedNameType = Identifier | StringLiteral; + type ContainerDeclaration = ClassLikeDeclaration | ObjectLiteralExpression; interface DeclarationInfo { - container: ContainerDeclation; + container: ContainerDeclaration; isStatic: boolean; type: TypeNode | undefined; } interface Info extends DeclarationInfo { - declaration: AccepedDeclaration; - fieldName: AccepedNameType; - accessorName: AccepedNameType; + declaration: AcceptedDeclaration; + fieldName: AcceptedNameType; + accessorName: AcceptedNameType; } function getAvailableActions(context: RefactorContext): ApplicableRefactorInfo[] | undefined { @@ -65,20 +65,24 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { return { renameFilename, renameLocation, edits }; } - function isConvertableName (name: DeclarationName): name is AccepedNameType { + function isConvertableName (name: DeclarationName): name is AcceptedNameType { return isIdentifier(name) || isStringLiteral(name); } - function createPropertyName (name: string, originalName: AccepedNameType) { + function isAcceptedDeclaration(node: Node): node is AcceptedDeclaration { + return isParameterPropertyDeclaration(node) || isPropertyDeclaration(node) || isPropertyAssignment(node); + } + + function createPropertyName (name: string, originalName: AcceptedNameType) { return isIdentifier(originalName) ? createIdentifier(name) : createLiteral(name); } - function createAccessorAccessExpression (fieldName: AccepedNameType, isStatic: boolean, container: ContainerDeclation) { + function createAccessorAccessExpression (fieldName: AcceptedNameType, isStatic: boolean, container: ContainerDeclaration) { const leftHead = isStatic ? (container).name : createThis(); return isIdentifier(fieldName) ? createPropertyAccess(leftHead, fieldName) : createElementAccess(leftHead, createLiteral(fieldName)); } - function getAccessorModifiers(isJS: boolean, declaration: AccepedDeclaration, isStatic: boolean, isClassLike: boolean): NodeArray | undefined { + function getAccessorModifiers(isJS: boolean, declaration: AcceptedDeclaration, isStatic: boolean, isClassLike: boolean): NodeArray | undefined { if (!isClassLike) return undefined; if (!declaration.modifiers || getModifierFlags(declaration) & ModifierFlags.Private) { @@ -129,7 +133,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { }; } - function getDeclarationInfo(declaration: AccepedDeclaration) { + function getDeclarationInfo(declaration: AcceptedDeclaration) { if (isPropertyDeclaration(declaration)) { return getPropertyDeclarationInfo(declaration); } @@ -143,7 +147,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { function getConvertibleFieldAtPosition(file: SourceFile, startPosition: number): Info | undefined { const node = getTokenAtPosition(file, startPosition, /*includeJsDocComment*/ false); - const declaration = findAncestor(node.parent, or(isParameterPropertyDeclaration, isPropertyDeclaration, isPropertyAssignment)); + const declaration = findAncestor(node.parent, isAcceptedDeclaration); // make sure propertyDeclaration have AccessibilityModifier or Static Modifier const meaning = ModifierFlags.AccessibilityModifier | ModifierFlags.Static; if (!declaration || !isConvertableName(declaration.name) || (getModifierFlags(declaration) | meaning) !== meaning) return undefined; @@ -160,7 +164,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { }; } - function generateGetAccessor(fieldName: AccepedNameType, accessorName: AccepedNameType, type: TypeNode, modifiers: ModifiersArray | undefined, isStatic: boolean, container: ContainerDeclation) { + function generateGetAccessor(fieldName: AcceptedNameType, accessorName: AcceptedNameType, type: TypeNode, modifiers: ModifiersArray | undefined, isStatic: boolean, container: ContainerDeclaration) { return createGetAccessor( /*decorators*/ undefined, modifiers, @@ -175,7 +179,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { ); } - function generateSetAccessor(fieldName: AccepedNameType, accessorName: AccepedNameType, type: TypeNode, modifiers: ModifiersArray | undefined, isStatic: boolean, container: ContainerDeclation) { + function generateSetAccessor(fieldName: AcceptedNameType, accessorName: AcceptedNameType, type: TypeNode, modifiers: ModifiersArray | undefined, isStatic: boolean, container: ContainerDeclaration) { return createSetAccessor( /*decorators*/ undefined, modifiers, @@ -199,7 +203,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { ); } - function updatePropertyDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: PropertyDeclaration, fieldName: AccepedNameType, modifiers: ModifiersArray | undefined) { + function updatePropertyDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: PropertyDeclaration, fieldName: AcceptedNameType, modifiers: ModifiersArray | undefined) { const property = updateProperty( declaration, declaration.decorators, @@ -213,7 +217,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { changeTracker.replaceNode(file, declaration, property); } - function updateParameterPropertyDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: ParameterDeclaration, fieldName: AccepedNameType, modifiers: ModifiersArray | undefined, classLikeContainer: ClassLikeDeclaration) { + function updateParameterPropertyDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: ParameterDeclaration, fieldName: AcceptedNameType, modifiers: ModifiersArray | undefined, classLikeContainer: ClassLikeDeclaration) { const property = createProperty( declaration.decorators, modifiers, @@ -227,12 +231,12 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { changeTracker.deleteNodeInList(file, declaration); } - function updatePropertyAssignmentDeclaration (changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: PropertyAssignment, fieldName: AccepedNameType) { + function updatePropertyAssignmentDeclaration (changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: PropertyAssignment, fieldName: AcceptedNameType) { const assignment = updatePropertyAssignment(declaration, fieldName, declaration.initializer); changeTracker.replacePropertyAssignment(file, declaration, assignment); } - function updateFieldDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: AccepedDeclaration, fieldName: AccepedNameType, modifiers: ModifiersArray | undefined, container: ContainerDeclation) { + function updateFieldDeclaration(changeTracker: textChanges.ChangeTracker, file: SourceFile, declaration: AcceptedDeclaration, fieldName: AcceptedNameType, modifiers: ModifiersArray | undefined, container: ContainerDeclaration) { if (isPropertyDeclaration(declaration)) { updatePropertyDeclaration(changeTracker, file, declaration, fieldName, modifiers); } @@ -244,7 +248,7 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor { } } - function insertAccessor(changeTracker: textChanges.ChangeTracker, file: SourceFile, accessor: AccessorDeclaration, declaration: AccepedDeclaration, container: ContainerDeclation) { + function insertAccessor(changeTracker: textChanges.ChangeTracker, file: SourceFile, accessor: AccessorDeclaration, declaration: AcceptedDeclaration, container: ContainerDeclaration) { isParameterPropertyDeclaration(declaration) ? changeTracker.insertNodeAtClassStart(file, container, accessor) : changeTracker.insertNodeAfter(file, declaration, accessor); From f6b206a75a4b7133ba7639c633f236fc23fbdda7 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 11 Apr 2018 14:07:22 -0700 Subject: [PATCH 035/232] When testing references, also test documentHighlights respects filesToSearch (#23306) * When testing references, also test documentHighlights respects filesToSearch * Fix handling for redirects and move assertion inside getDocumentHighlights * Add another assert --- src/harness/fourslash.ts | 18 ++++++++++- src/services/documentHighlights.ts | 14 ++++++-- src/services/findAllReferences.ts | 32 +++++++++---------- src/services/importTracker.ts | 7 ++-- src/services/services.ts | 19 +++++------ .../fourslash/duplicatePackageServices.ts | 6 ++-- 6 files changed, 59 insertions(+), 37 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 8c71a385d58..b479b5596a8 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1081,8 +1081,20 @@ namespace FourSlash { } } + private verifyDocumentHighlightsRespectFilesList(files: ReadonlyArray): void { + const startFile = this.activeFile.fileName; + for (const fileName of files) { + const searchFileNames = startFile === fileName ? [startFile] : [startFile, fileName]; + const highlights = this.getDocumentHighlightsAtCurrentPosition(searchFileNames); + if (!highlights.every(dh => ts.contains(searchFileNames, dh.fileName))) { + this.raiseError(`When asking for document highlights only in files ${searchFileNames}, got document highlights in ${unique(highlights, dh => dh.fileName)}`); + } + } + } + public verifyReferencesOf(range: Range, references: Range[]) { this.goToRangeStart(range); + this.verifyDocumentHighlightsRespectFilesList(unique(references, e => e.fileName)); this.verifyReferencesAre(references); } @@ -1094,7 +1106,7 @@ namespace FourSlash { } } - public verifyReferenceGroups(starts: string | string[] | Range | Range[], parts: FourSlashInterface.ReferenceGroup[]): void { + public verifyReferenceGroups(starts: string | string[] | Range | Range[], parts: FourSlashInterface.ReferenceGroup[] | undefined): void { interface ReferenceGroupJson { definition: string | { text: string, range: ts.TextSpan }; references: ts.ReferenceEntry[]; @@ -1128,6 +1140,10 @@ namespace FourSlash { }; }); this.assertObjectsEqual(fullActual, fullExpected); + + if (parts) { + this.verifyDocumentHighlightsRespectFilesList(unique(ts.flatMap(parts, p => p.ranges), r => r.fileName)); + } } } diff --git a/src/services/documentHighlights.ts b/src/services/documentHighlights.ts index 8d48d526a4b..b89c722a275 100644 --- a/src/services/documentHighlights.ts +++ b/src/services/documentHighlights.ts @@ -22,10 +22,20 @@ namespace ts.DocumentHighlights { } function getSemanticDocumentHighlights(position: number, node: Node, program: Program, cancellationToken: CancellationToken, sourceFilesToSearch: ReadonlyArray): DocumentHighlights[] | undefined { - const referenceEntries = FindAllReferences.getReferenceEntriesForNode(position, node, program, sourceFilesToSearch, cancellationToken); + const sourceFilesSet = arrayToSet(sourceFilesToSearch, f => f.fileName); + const referenceEntries = FindAllReferences.getReferenceEntriesForNode(position, node, program, sourceFilesToSearch, cancellationToken, /*options*/ undefined, sourceFilesSet); if (!referenceEntries) return undefined; const map = arrayToMultiMap(referenceEntries.map(FindAllReferences.toHighlightSpan), e => e.fileName, e => e.span); - return arrayFrom(map.entries(), ([fileName, highlightSpans]) => ({ fileName, highlightSpans })); + return arrayFrom(map.entries(), ([fileName, highlightSpans]) => { + if (!sourceFilesSet.has(fileName)) { + Debug.assert(program.redirectTargetsSet.has(fileName)); + const redirectTarget = program.getSourceFile(fileName); + const redirect = find(sourceFilesToSearch, f => f.redirectInfo && f.redirectInfo.redirectTarget === redirectTarget)!; + fileName = redirect.fileName; + Debug.assert(sourceFilesSet.has(fileName)); + } + return { fileName, highlightSpans }; + }); } function getSyntacticDocumentHighlights(node: Node, sourceFile: SourceFile): DocumentHighlights[] { diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 41d08bc6582..e2d9219b96b 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -43,7 +43,7 @@ namespace ts.FindAllReferences { export function findReferencedSymbols(program: Program, cancellationToken: CancellationToken, sourceFiles: ReadonlyArray, sourceFile: SourceFile, position: number): ReferencedSymbol[] | undefined { const node = getTouchingPropertyName(sourceFile, position, /*includeJsDocComment*/ true); - const referencedSymbols = Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, /*options*/ {}); + const referencedSymbols = Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken); const checker = program.getTypeChecker(); return !referencedSymbols || !referencedSymbols.length ? undefined : mapDefined(referencedSymbols, ({ definition, references }) => // Only include referenced symbols that have a valid definition. @@ -88,8 +88,8 @@ namespace ts.FindAllReferences { return map(flattenEntries(Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options)), toReferenceEntry); } - export function getReferenceEntriesForNode(position: number, node: Node, program: Program, sourceFiles: ReadonlyArray, cancellationToken: CancellationToken, options: Options = {}): Entry[] | undefined { - return flattenEntries(Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options)); + export function getReferenceEntriesForNode(position: number, node: Node, program: Program, sourceFiles: ReadonlyArray, cancellationToken: CancellationToken, options: Options = {}, sourceFilesSet: ReadonlyMap = arrayToSet(sourceFiles, f => f.fileName)): Entry[] | undefined { + return flattenEntries(Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options, sourceFilesSet)); } function flattenEntries(referenceSymbols: SymbolAndEntries[]): Entry[] { @@ -231,10 +231,10 @@ namespace ts.FindAllReferences { /* @internal */ namespace ts.FindAllReferences.Core { /** Core find-all-references algorithm. Handles special cases before delegating to `getReferencedSymbolsForSymbol`. */ - export function getReferencedSymbolsForNode(position: number, node: Node, program: Program, sourceFiles: ReadonlyArray, cancellationToken: CancellationToken, options: Options = {}): SymbolAndEntries[] | undefined { + export function getReferencedSymbolsForNode(position: number, node: Node, program: Program, sourceFiles: ReadonlyArray, cancellationToken: CancellationToken, options: Options = {}, sourceFilesSet: ReadonlyMap = arrayToSet(sourceFiles, f => f.fileName)): SymbolAndEntries[] | undefined { if (isSourceFile(node)) { const reference = GoToDefinition.getReferenceAtPosition(node, position, program); - return reference && getReferencedSymbolsForModule(program, program.getTypeChecker().getMergedSymbol(reference.file.symbol), sourceFiles); + return reference && getReferencedSymbolsForModule(program, program.getTypeChecker().getMergedSymbol(reference.file.symbol), sourceFiles, sourceFilesSet); } if (!options.implementations) { @@ -254,10 +254,10 @@ namespace ts.FindAllReferences.Core { } if (symbol.flags & SymbolFlags.Module && isModuleReferenceLocation(node)) { - return getReferencedSymbolsForModule(program, symbol, sourceFiles); + return getReferencedSymbolsForModule(program, symbol, sourceFiles, sourceFilesSet); } - return getReferencedSymbolsForSymbol(symbol, node, sourceFiles, checker, cancellationToken, options); + return getReferencedSymbolsForSymbol(symbol, node, sourceFiles, sourceFilesSet, checker, cancellationToken, options); } function isModuleReferenceLocation(node: Node): boolean { @@ -277,7 +277,7 @@ namespace ts.FindAllReferences.Core { } } - function getReferencedSymbolsForModule(program: Program, symbol: Symbol, sourceFiles: ReadonlyArray): SymbolAndEntries[] { + function getReferencedSymbolsForModule(program: Program, symbol: Symbol, sourceFiles: ReadonlyArray, sourceFilesSet: ReadonlyMap): SymbolAndEntries[] { Debug.assert(!!symbol.valueDeclaration); const references = findModuleReferences(program, sourceFiles, symbol).map(reference => { @@ -299,7 +299,9 @@ namespace ts.FindAllReferences.Core { // Don't include the source file itself. (This may not be ideal behavior, but awkward to include an entire file as a reference.) break; case SyntaxKind.ModuleDeclaration: - references.push({ type: "node", node: (decl as ModuleDeclaration).name }); + if (sourceFilesSet.has(decl.getSourceFile().fileName)) { + references.push({ type: "node", node: (decl as ModuleDeclaration).name }); + } break; default: Debug.fail("Expected a module symbol to be declared by a SourceFile or ModuleDeclaration."); @@ -339,14 +341,14 @@ namespace ts.FindAllReferences.Core { } /** Core find-all-references algorithm for a normal symbol. */ - function getReferencedSymbolsForSymbol(symbol: Symbol, node: Node, sourceFiles: ReadonlyArray, checker: TypeChecker, cancellationToken: CancellationToken, options: Options): SymbolAndEntries[] { + function getReferencedSymbolsForSymbol(symbol: Symbol, node: Node, sourceFiles: ReadonlyArray, sourceFilesSet: ReadonlyMap, checker: TypeChecker, cancellationToken: CancellationToken, options: Options): SymbolAndEntries[] { symbol = skipPastExportOrImportSpecifierOrUnion(symbol, node, checker) || symbol; // Compute the meaning from the location and the symbol it references const searchMeaning = getIntersectingMeaningFromDeclarations(node, symbol); const result: SymbolAndEntries[] = []; - const state = new State(sourceFiles, getSpecialSearchKind(node), checker, cancellationToken, searchMeaning, options, result); + const state = new State(sourceFiles, sourceFilesSet, getSpecialSearchKind(node), checker, cancellationToken, searchMeaning, options, result); if (node.kind === SyntaxKind.DefaultKeyword) { addReference(node, symbol, state); @@ -469,10 +471,9 @@ namespace ts.FindAllReferences.Core { */ readonly markSeenReExportRHS = nodeSeenTracker(); - private readonly includedSourceFiles: Map; - constructor( readonly sourceFiles: ReadonlyArray, + readonly sourceFilesSet: ReadonlyMap, /** True if we're searching for constructor references. */ readonly specialSearchKind: SpecialSearchKind, readonly checker: TypeChecker, @@ -480,17 +481,16 @@ namespace ts.FindAllReferences.Core { readonly searchMeaning: SemanticMeaning, readonly options: Options, private readonly result: Push) { - this.includedSourceFiles = arrayToSet(sourceFiles, s => s.fileName); } includesSourceFile(sourceFile: SourceFile): boolean { - return this.includedSourceFiles.has(sourceFile.fileName); + return this.sourceFilesSet.has(sourceFile.fileName); } private importTracker: ImportTracker | undefined; /** Gets every place to look for references of an exported symbols. See `ImportsResult` in `importTracker.ts` for more documentation. */ getImportSearches(exportSymbol: Symbol, exportInfo: ExportInfo): ImportsResult { - if (!this.importTracker) this.importTracker = createImportTracker(this.sourceFiles, this.checker, this.cancellationToken); + if (!this.importTracker) this.importTracker = createImportTracker(this.sourceFiles, this.sourceFilesSet, this.checker, this.cancellationToken); return this.importTracker(exportSymbol, exportInfo, this.options.isForRename); } diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts index de8a49243fa..82f9fc00af6 100644 --- a/src/services/importTracker.ts +++ b/src/services/importTracker.ts @@ -12,10 +12,10 @@ namespace ts.FindAllReferences { export type ImportTracker = (exportSymbol: Symbol, exportInfo: ExportInfo, isForRename: boolean) => ImportsResult; /** Creates the imports map and returns an ImportTracker that uses it. Call this lazily to avoid calling `getDirectImportsMap` unnecessarily. */ - export function createImportTracker(sourceFiles: ReadonlyArray, checker: TypeChecker, cancellationToken: CancellationToken): ImportTracker { + export function createImportTracker(sourceFiles: ReadonlyArray, sourceFilesSet: ReadonlyMap, checker: TypeChecker, cancellationToken: CancellationToken): ImportTracker { const allDirectImports = getDirectImportsMap(sourceFiles, checker, cancellationToken); return (exportSymbol, exportInfo, isForRename) => { - const { directImports, indirectUsers } = getImportersForExport(sourceFiles, allDirectImports, exportInfo, checker, cancellationToken); + const { directImports, indirectUsers } = getImportersForExport(sourceFiles, sourceFilesSet, allDirectImports, exportInfo, checker, cancellationToken); return { indirectUsers, ...getSearchesFromDirectImports(directImports, exportSymbol, exportInfo.exportKind, checker, isForRename) }; }; } @@ -39,6 +39,7 @@ namespace ts.FindAllReferences { /** Returns import statements that directly reference the exporting module, and a list of files that may access the module through a namespace. */ function getImportersForExport( sourceFiles: ReadonlyArray, + sourceFilesSet: ReadonlyMap, allDirectImports: Map, { exportingModuleSymbol, exportKind }: ExportInfo, checker: TypeChecker, @@ -62,7 +63,7 @@ namespace ts.FindAllReferences { // Module augmentations may use this module's exports without importing it. for (const decl of exportingModuleSymbol.declarations) { - if (isExternalModuleAugmentation(decl)) { + if (isExternalModuleAugmentation(decl) && sourceFilesSet.has(decl.getSourceFile().fileName)) { addIndirectUser(decl); } } diff --git a/src/services/services.ts b/src/services/services.ts index d6405b8e732..1de0f65ef6b 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1697,20 +1697,17 @@ namespace ts { /// References and Occurrences function getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[] { - const canonicalFileName = getCanonicalFileName(normalizeSlashes(fileName)); - return flatMap(getDocumentHighlights(fileName, position, [fileName]), entry => entry.highlightSpans.map(highlightSpan => { - Debug.assert(getCanonicalFileName(normalizeSlashes(entry.fileName)) === canonicalFileName); // Get occurrences only supports reporting occurrences for the file queried. - return { - fileName: entry.fileName, - textSpan: highlightSpan.textSpan, - isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference, - isDefinition: false, - isInString: highlightSpan.isInString, - }; - })); + return flatMap(getDocumentHighlights(fileName, position, [fileName]), entry => entry.highlightSpans.map(highlightSpan => ({ + fileName: entry.fileName, + textSpan: highlightSpan.textSpan, + isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference, + isDefinition: false, + isInString: highlightSpan.isInString, + }))); } function getDocumentHighlights(fileName: string, position: number, filesToSearch: ReadonlyArray): DocumentHighlights[] { + Debug.assert(contains(filesToSearch, fileName)); synchronizeHostData(); const sourceFilesToSearch = map(filesToSearch, f => Debug.assertDefined(program.getSourceFile(f))); const sourceFile = getValidSourceFile(fileName); diff --git a/tests/cases/fourslash/duplicatePackageServices.ts b/tests/cases/fourslash/duplicatePackageServices.ts index 48dfdf8aa83..2ececda4e06 100644 --- a/tests/cases/fourslash/duplicatePackageServices.ts +++ b/tests/cases/fourslash/duplicatePackageServices.ts @@ -23,7 +23,7 @@ ////} // @Filename: /node_modules/b/node_modules/x/package.json -////{ "name": "x", "version": "1.2./*bVersionPatch*/3" } +////{ "name": "x", "version": "1.2.3" } // @Filename: /src/a.ts ////import { a } from "a"; @@ -40,7 +40,5 @@ const aImport = { definition: "(alias) class X\nimport X", ranges: [r0, r1] }; const def = { definition: "class X", ranges: [r2] }; const bImport = { definition: "(alias) class X\nimport X", ranges: [r3, r4] }; verify.referenceGroups([r0, r1], [aImport, def, bImport]); -verify.referenceGroups([r2], [def, aImport, bImport]); +verify.referenceGroups([r2, r5], [def, aImport, bImport]); verify.referenceGroups([r3, r4], [bImport, def, aImport]); - -verify.referenceGroups(r5, [def, aImport, bImport]); From 28455c65b3ddbff125ce1ffa3d48a710bb23d092 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 11 Apr 2018 15:35:22 -0700 Subject: [PATCH 036/232] patternMatcher: Return single best match instead of list (#23166) --- scripts/tslint/rules/booleanTriviaRule.ts | 7 +- src/compiler/core.ts | 4 + .../unittests/services/patternMatcher.ts | 278 +++++------------- src/services/navigateTo.ts | 24 +- src/services/patternMatcher.ts | 59 ++-- 5 files changed, 104 insertions(+), 268 deletions(-) diff --git a/scripts/tslint/rules/booleanTriviaRule.ts b/scripts/tslint/rules/booleanTriviaRule.ts index dbfdc28438e..0224a0f08d8 100644 --- a/scripts/tslint/rules/booleanTriviaRule.ts +++ b/scripts/tslint/rules/booleanTriviaRule.ts @@ -28,13 +28,11 @@ function walk(ctx: Lint.WalkContext): void { function shouldIgnoreCalledExpression(expression: ts.Expression): boolean { if (expression.kind === ts.SyntaxKind.PropertyAccessExpression) { const methodName = (expression as ts.PropertyAccessExpression).name.text; - if (methodName.indexOf("set") === 0) { + if (methodName.startsWith("set") || methodName.startsWith("assert")) { return true; } switch (methodName) { case "apply": - case "assert": - case "assertEqual": case "call": case "equal": case "fail": @@ -46,11 +44,10 @@ function walk(ctx: Lint.WalkContext): void { } else if (expression.kind === ts.SyntaxKind.Identifier) { const functionName = (expression as ts.Identifier).text; - if (functionName.indexOf("set") === 0) { + if (functionName.startsWith("set") || functionName.startsWith("assert")) { return true; } switch (functionName) { - case "assert": case "contains": case "createAnonymousType": case "createImportSpecifier": diff --git a/src/compiler/core.ts b/src/compiler/core.ts index b138156dfd5..c4885e9d683 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1724,6 +1724,10 @@ namespace ts { return compareComparableValues(a, b); } + export function min(a: T, b: T, compare: Comparer): T { + return compare(a, b) === Comparison.LessThan ? a : b; + } + /** * Compare two strings using a case-insensitive ordinal comparison. * diff --git a/src/harness/unittests/services/patternMatcher.ts b/src/harness/unittests/services/patternMatcher.ts index 5aee5d2f4eb..64de3557da4 100644 --- a/src/harness/unittests/services/patternMatcher.ts +++ b/src/harness/unittests/services/patternMatcher.ts @@ -95,251 +95,157 @@ describe("PatternMatcher", () => { describe("SingleWordPattern", () => { it("PreferCaseSensitiveExact", () => { - const match = getFirstMatch("Foo", "Foo"); - - assert.equal(ts.PatternMatchKind.exact, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("Foo", "Foo", { kind: ts.PatternMatchKind.exact, isCaseSensitive: true }); }); it("PreferCaseSensitiveExactInsensitive", () => { - const match = getFirstMatch("foo", "Foo"); - - assert.equal(ts.PatternMatchKind.exact, match.kind); - assert.equal(false, match.isCaseSensitive); + assertSegmentMatch("foo", "Foo", { kind: ts.PatternMatchKind.exact, isCaseSensitive: false }); }); it("PreferCaseSensitivePrefix", () => { - const match = getFirstMatch("Foo", "Fo"); - - assert.equal(ts.PatternMatchKind.prefix, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("Foo", "Fo", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("PreferCaseSensitivePrefixCaseInsensitive", () => { - const match = getFirstMatch("Foo", "fo"); - - assert.equal(ts.PatternMatchKind.prefix, match.kind); - assert.equal(false, match.isCaseSensitive); + assertSegmentMatch("Foo", "fo", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: false }); }); it("PreferCaseSensitiveCamelCaseMatchSimple", () => { - const match = getFirstMatch("FogBar", "FB"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("FogBar", "FB", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("PreferCaseSensitiveCamelCaseMatchPartialPattern", () => { - const match = getFirstMatch("FogBar", "FoB"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("FogBar", "FoB", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("PreferCaseSensitiveCamelCaseMatchToLongPattern1", () => { - const match = getFirstMatch("FogBar", "FBB"); - - assert.isTrue(match === undefined); + assertSegmentMatch("FogBar", "FBB", undefined); }); it("PreferCaseSensitiveCamelCaseMatchToLongPattern2", () => { - const match = getFirstMatch("FogBar", "FoooB"); - - assert.isTrue(match === undefined); + assertSegmentMatch("FogBar", "FoooB", undefined); }); it("CamelCaseMatchPartiallyUnmatched", () => { - const match = getFirstMatch("FogBarBaz", "FZ"); - - assert.isTrue(match === undefined); + assertSegmentMatch("FogBarBaz", "FZ", undefined); }); it("CamelCaseMatchCompletelyUnmatched", () => { - const match = getFirstMatch("FogBarBaz", "ZZ"); - - assert.isTrue(match === undefined); + assertSegmentMatch("FogBarBaz", "ZZ", undefined); }); it("TwoUppercaseCharacters", () => { - const match = getFirstMatch("SimpleUIElement", "SiUI"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("SimpleUIElement", "SiUI", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("PreferCaseSensitiveLowercasePattern", () => { - const match = getFirstMatch("FogBar", "b"); - - assert.equal(ts.PatternMatchKind.substring, match.kind); - assert.equal(false, match.isCaseSensitive); + assertSegmentMatch("FogBar", "b", { kind: ts.PatternMatchKind.substring, isCaseSensitive: false }); }); it("PreferCaseSensitiveLowercasePattern2", () => { - const match = getFirstMatch("FogBar", "fB"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(false, match.isCaseSensitive); + assertSegmentMatch("FogBar", "fB", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: false }); }); it("PreferCaseSensitiveTryUnderscoredName", () => { - const match = getFirstMatch("_fogBar", "_fB"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("_fogBar", "_fB", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("PreferCaseSensitiveTryUnderscoredName2", () => { - const match = getFirstMatch("_fogBar", "fB"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("_fogBar", "fB", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("PreferCaseSensitiveTryUnderscoredNameInsensitive", () => { - const match = getFirstMatch("_FogBar", "_fB"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(false, match.isCaseSensitive); + assertSegmentMatch("_FogBar", "_fB", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: false }); }); it("PreferCaseSensitiveMiddleUnderscore", () => { - const match = getFirstMatch("Fog_Bar", "FB"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("Fog_Bar", "FB", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("PreferCaseSensitiveMiddleUnderscore2", () => { - const match = getFirstMatch("Fog_Bar", "F_B"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(true, match.isCaseSensitive); + assertSegmentMatch("Fog_Bar", "F_B", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("PreferCaseSensitiveMiddleUnderscore3", () => { - const match = getFirstMatch("Fog_Bar", "F__B"); - - assert.isTrue(undefined === match); + assertSegmentMatch("Fog_Bar", "F__B", undefined); }); it("PreferCaseSensitiveMiddleUnderscore4", () => { - const match = getFirstMatch("Fog_Bar", "f_B"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(false, match.isCaseSensitive); + assertSegmentMatch("Fog_Bar", "f_B", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: false }); }); it("PreferCaseSensitiveMiddleUnderscore5", () => { - const match = getFirstMatch("Fog_Bar", "F_b"); - - assert.equal(ts.PatternMatchKind.camelCase, match.kind); - assert.equal(false, match.isCaseSensitive); + assertSegmentMatch("Fog_Bar", "F_b", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: false }); }); it("AllLowerPattern1", () => { - const match = getFirstMatch("FogBarChangedEventArgs", "changedeventargs"); - - assert.isTrue(undefined !== match); + assertSegmentMatch("FogBarChangedEventArgs", "changedeventargs", { kind: ts.PatternMatchKind.substring, isCaseSensitive: false }); }); it("AllLowerPattern2", () => { - const match = getFirstMatch("FogBarChangedEventArgs", "changedeventarrrgh"); - - assert.isTrue(undefined === match); + assertSegmentMatch("FogBarChangedEventArgs", "changedeventarrrgh", undefined); }); it("AllLowerPattern3", () => { - const match = getFirstMatch("ABCDEFGH", "bcd"); - - assert.isTrue(undefined !== match); + assertSegmentMatch("ABCDEFGH", "bcd", { kind: ts.PatternMatchKind.substring, isCaseSensitive: false }); }); it("AllLowerPattern4", () => { - const match = getFirstMatch("AbcdefghijEfgHij", "efghij"); - - assert.isTrue(undefined === match); + assertSegmentMatch("AbcdefghijEfgHij", "efghij", undefined); }); }); describe("MultiWordPattern", () => { it("ExactWithLowercase", () => { - const matches = getAllMatches("AddMetadataReference", "addmetadatareference"); - - assertContainsKind(ts.PatternMatchKind.exact, matches); + assertSegmentMatch("AddMetadataReference", "addmetadatareference", { kind: ts.PatternMatchKind.exact, isCaseSensitive: false }); }); it("SingleLowercasedSearchWord1", () => { - const matches = getAllMatches("AddMetadataReference", "add"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); + assertSegmentMatch("AddMetadataReference", "add", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: false }); }); it("SingleLowercasedSearchWord2", () => { - const matches = getAllMatches("AddMetadataReference", "metadata"); - - assertContainsKind(ts.PatternMatchKind.substring, matches); + assertSegmentMatch("AddMetadataReference", "metadata", { kind: ts.PatternMatchKind.substring, isCaseSensitive: false }); }); it("SingleUppercaseSearchWord1", () => { - const matches = getAllMatches("AddMetadataReference", "Add"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); + assertSegmentMatch("AddMetadataReference", "Add", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("SingleUppercaseSearchWord2", () => { - const matches = getAllMatches("AddMetadataReference", "Metadata"); - - assertContainsKind(ts.PatternMatchKind.substring, matches); + assertSegmentMatch("AddMetadataReference", "Metadata", { kind: ts.PatternMatchKind.substring, isCaseSensitive: true }); }); it("SingleUppercaseSearchLetter1", () => { - const matches = getAllMatches("AddMetadataReference", "A"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); + assertSegmentMatch("AddMetadataReference", "A", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("SingleUppercaseSearchLetter2", () => { - const matches = getAllMatches("AddMetadataReference", "M"); - - assertContainsKind(ts.PatternMatchKind.substring, matches); + assertSegmentMatch("AddMetadataReference", "M", { kind: ts.PatternMatchKind.substring, isCaseSensitive: true }); }); - it("TwoLowercaseWords", () => { - const matches = getAllMatches("AddMetadataReference", "add metadata"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); - assertContainsKind(ts.PatternMatchKind.substring, matches); + it("TwoLowercaseWords0", () => { + assertSegmentMatch("AddMetadataReference", "add metadata", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: false }); }); - it("TwoLowercaseWords", () => { - const matches = getAllMatches("AddMetadataReference", "A M"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); - assertContainsKind(ts.PatternMatchKind.substring, matches); + it("TwoLowercaseWords1", () => { + assertSegmentMatch("AddMetadataReference", "A M", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); - it("TwoLowercaseWords", () => { - const matches = getAllMatches("AddMetadataReference", "AM"); - - assertContainsKind(ts.PatternMatchKind.camelCase, matches); + it("TwoLowercaseWords2", () => { + assertSegmentMatch("AddMetadataReference", "AM", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); - it("TwoLowercaseWords", () => { - const matches = getAllMatches("AddMetadataReference", "ref Metadata"); - - assertArrayEquals(ts.map(matches, m => m.kind), [ts.PatternMatchKind.substring, ts.PatternMatchKind.substring]); + it("TwoLowercaseWords3", () => { + assertSegmentMatch("AddMetadataReference", "ref Metadata", { kind: ts.PatternMatchKind.substring, isCaseSensitive: true }); }); - it("TwoLowercaseWords", () => { - const matches = getAllMatches("AddMetadataReference", "ref M"); - - assertArrayEquals(ts.map(matches, m => m.kind), [ts.PatternMatchKind.substring, ts.PatternMatchKind.substring]); + it("TwoLowercaseWords4", () => { + assertSegmentMatch("AddMetadataReference", "ref M", { kind: ts.PatternMatchKind.substring, isCaseSensitive: true }); }); it("MixedCamelCase", () => { - const matches = getAllMatches("AddMetadataReference", "AMRe"); - - assertContainsKind(ts.PatternMatchKind.camelCase, matches); + assertSegmentMatch("AddMetadataReference", "AMRe", { kind: ts.PatternMatchKind.camelCase, isCaseSensitive: true }); }); it("BlankPattern", () => { @@ -351,120 +257,83 @@ describe("PatternMatcher", () => { }); it("EachWordSeparately1", () => { - const matches = getAllMatches("AddMetadataReference", "add Meta"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); - assertContainsKind(ts.PatternMatchKind.substring, matches); + assertSegmentMatch("AddMetadataReference", "add Meta", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: false }); }); it("EachWordSeparately2", () => { - const matches = getAllMatches("AddMetadataReference", "Add meta"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); - assertContainsKind(ts.PatternMatchKind.substring, matches); + assertSegmentMatch("AddMetadataReference", "Add meta", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("EachWordSeparately3", () => { - const matches = getAllMatches("AddMetadataReference", "Add Meta"); - - assertContainsKind(ts.PatternMatchKind.prefix, matches); - assertContainsKind(ts.PatternMatchKind.substring, matches); + assertSegmentMatch("AddMetadataReference", "Add Meta", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("MixedCasing", () => { - const matches = getAllMatches("AddMetadataReference", "mEta"); - - assert.isTrue(matches === undefined); + assertSegmentMatch("AddMetadataReference", "mEta", undefined); }); it("MixedCasing2", () => { - const matches = getAllMatches("AddMetadataReference", "Data"); - - assert.isTrue(matches === undefined); + assertSegmentMatch("AddMetadataReference", "Data", undefined); }); it("AsteriskSplit", () => { - const matches = getAllMatches("GetKeyWord", "K*W"); - - assertArrayEquals(ts.map(matches, m => m.kind), [ts.PatternMatchKind.substring, ts.PatternMatchKind.substring]); + assertSegmentMatch("GetKeyWord", "K*W", { kind: ts.PatternMatchKind.substring, isCaseSensitive: true }); }); it("LowercaseSubstring1", () => { - const matches = getAllMatches("Operator", "a"); - - assert.isTrue(matches === undefined); + assertSegmentMatch("Operator", "a", undefined); }); it("LowercaseSubstring2", () => { - const matches = getAllMatches("FooAttribute", "a"); - assertContainsKind(ts.PatternMatchKind.substring, matches); - assert.isFalse(matches[0].isCaseSensitive); + assertSegmentMatch("FooAttribute", "a", { kind: ts.PatternMatchKind.substring, isCaseSensitive: false }); }); }); describe("DottedPattern", () => { it("DottedPattern1", () => { - const match = getFirstMatchForDottedPattern("Foo.Bar.Baz", "Quux", "B.Q"); - - assert.equal(ts.PatternMatchKind.prefix, match.kind); - assert.equal(true, match.isCaseSensitive); + assertFullMatch("Foo.Bar.Baz", "Quux", "B.Q", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("DottedPattern2", () => { - const match = getFirstMatchForDottedPattern("Foo.Bar.Baz", "Quux", "C.Q"); - assert.isTrue(match === undefined); + assertFullMatch("Foo.Bar.Baz", "Quux", "C.Q", undefined); }); it("DottedPattern3", () => { - const match = getFirstMatchForDottedPattern("Foo.Bar.Baz", "Quux", "B.B.Q"); - assert.equal(ts.PatternMatchKind.prefix, match.kind); - assert.equal(true, match.isCaseSensitive); + assertFullMatch("Foo.Bar.Baz", "Quux", "B.B.Q", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("DottedPattern4", () => { - const match = getFirstMatchForDottedPattern("Foo.Bar.Baz", "Quux", "Baz.Quux"); - assert.equal(ts.PatternMatchKind.exact, match.kind); - assert.equal(true, match.isCaseSensitive); + assertFullMatch("Foo.Bar.Baz", "Quux", "Baz.Quux", { kind: ts.PatternMatchKind.exact, isCaseSensitive: true }); }); it("DottedPattern5", () => { - const match = getFirstMatchForDottedPattern("Foo.Bar.Baz", "Quux", "F.B.B.Quux"); - assert.equal(ts.PatternMatchKind.exact, match.kind); - assert.equal(true, match.isCaseSensitive); + assertFullMatch("Foo.Bar.Baz", "Quux", "F.B.B.Quux", { kind: ts.PatternMatchKind.prefix, isCaseSensitive: true }); }); it("DottedPattern6", () => { - const match = getFirstMatchForDottedPattern("Foo.Bar.Baz", "Quux", "F.F.B.B.Quux"); - assert.isTrue(match === undefined); + assertFullMatch("Foo.Bar.Baz", "Quux", "F.F.B.B.Quux", undefined); }); it("DottedPattern7", () => { - let match = getFirstMatch("UIElement", "UIElement"); - match = getFirstMatch("GetKeyword", "UIElement"); - assert.isTrue(match === undefined); + assertSegmentMatch("UIElement", "UIElement", { kind: ts.PatternMatchKind.exact, isCaseSensitive: true }); + assertSegmentMatch("GetKeyword", "UIElement", undefined); }); }); + function assertSegmentMatch(candidate: string, pattern: string, expected: ts.PatternMatch | undefined): void { + assert.deepEqual(ts.createPatternMatcher(pattern).getMatchForLastSegmentOfPattern(candidate), expected); + } + function assertInvalidPattern(pattern: string) { assert.equal(ts.createPatternMatcher(pattern), undefined); } - function getFirstMatch(candidate: string, pattern: string): ts.PatternMatch { - const matches = ts.createPatternMatcher(pattern).getMatchesForLastSegmentOfPattern(candidate); - return matches ? matches[0] : undefined; - } - - function getAllMatches(candidate: string, pattern: string): ts.PatternMatch[] { - return ts.createPatternMatcher(pattern).getMatchesForLastSegmentOfPattern(candidate); - } - - function getFirstMatchForDottedPattern(dottedContainer: string, candidate: string, pattern: string): ts.PatternMatch { - const matches = ts.createPatternMatcher(pattern).getMatches(dottedContainer.split("."), candidate); - return matches ? matches[0] : undefined; + function assertFullMatch(dottedContainer: string, candidate: string, pattern: string, expected: ts.PatternMatch | undefined): void { + assert.deepEqual(ts.createPatternMatcher(pattern).getFullMatch(dottedContainer.split("."), candidate), expected); } function spanListToSubstrings(identifier: string, spans: ts.TextSpan[]) { - return ts.map(spans, s => identifier.substr(s.start, s.length)); + return spans.map(s => identifier.substr(s.start, s.length)); } function breakIntoCharacterSpans(identifier: string) { @@ -474,23 +343,12 @@ describe("PatternMatcher", () => { function breakIntoWordSpans(identifier: string) { return spanListToSubstrings(identifier, ts.breakIntoWordSpans(identifier)); } - function assertArrayEquals(array1: T[], array2: T[]) { - assert.equal(array1.length, array2.length); - - for (let i = 0; i < array1.length; i++) { - assert.equal(array1[i], array2[i]); - } - } function verifyBreakIntoCharacterSpans(original: string, ...parts: string[]): void { - assertArrayEquals(parts, breakIntoCharacterSpans(original)); + assert.deepEqual(parts, breakIntoCharacterSpans(original)); } function verifyBreakIntoWordSpans(original: string, ...parts: string[]): void { - assertArrayEquals(parts, breakIntoWordSpans(original)); - } - - function assertContainsKind(kind: ts.PatternMatchKind, results: ts.PatternMatch[]) { - assert.isTrue(ts.forEach(results, r => r.kind === kind)); + assert.deepEqual(parts, breakIntoWordSpans(original)); } }); diff --git a/src/services/navigateTo.ts b/src/services/navigateTo.ts index 4713f89dbde..84c299abf61 100644 --- a/src/services/navigateTo.ts +++ b/src/services/navigateTo.ts @@ -36,28 +36,24 @@ namespace ts.NavigateTo { function getItemsFromNamedDeclaration(patternMatcher: PatternMatcher, name: string, declarations: ReadonlyArray, checker: TypeChecker, fileName: string, rawItems: Push): void { // First do a quick check to see if the name of the declaration matches the // last portion of the (possibly) dotted name they're searching for. - const matches = patternMatcher.getMatchesForLastSegmentOfPattern(name); - - if (!matches) { + const match = patternMatcher.getMatchForLastSegmentOfPattern(name); + if (!match) { return; // continue to next named declarations } for (const declaration of declarations) { - if (!shouldKeepItem(declaration, checker)) { - continue; - } + if (!shouldKeepItem(declaration, checker)) continue; - // It was a match! If the pattern has dots in it, then also see if the - // declaration container matches as well. - let containerMatches = matches; if (patternMatcher.patternContainsDots) { - containerMatches = patternMatcher.getMatches(getContainers(declaration), name); - if (!containerMatches) { - continue; + const fullMatch = patternMatcher.getFullMatch(getContainers(declaration), name); + if (fullMatch) { + rawItems.push({ name, fileName, matchKind: fullMatch.kind, isCaseSensitive: fullMatch.isCaseSensitive, declaration }); } } - - rawItems.push({ name, fileName, matchKind: Math.min(...matches.map(m => m.kind)), isCaseSensitive: matches.every(m => m.isCaseSensitive), declaration }); + else { + // If the pattern has dots in it, then also see if the declaration container matches as well. + rawItems.push({ name, fileName, matchKind: match.kind, isCaseSensitive: match.isCaseSensitive, declaration }); + } } } diff --git a/src/services/patternMatcher.ts b/src/services/patternMatcher.ts index 84ef1244040..2d26d059021 100644 --- a/src/services/patternMatcher.ts +++ b/src/services/patternMatcher.ts @@ -33,12 +33,12 @@ namespace ts { // this will return a successful match, having only tested "SK" against "SyntaxKind". At // that point a call can be made to 'getMatches("SyntaxKind", "ts.compiler")', with the // work to create 'ts.compiler' only being done once the first match succeeded. - getMatchesForLastSegmentOfPattern(candidate: string): PatternMatch[]; + getMatchForLastSegmentOfPattern(candidate: string): PatternMatch | undefined; // Fully checks a candidate, with an dotted container, against the search pattern. // The candidate must match the last part of the search pattern, and the dotted container // must match the preceding segments of the pattern. - getMatches(candidateContainers: string[], candidate: string): PatternMatch[] | undefined; + getFullMatch(candidateContainers: ReadonlyArray, candidate: string): PatternMatch | undefined; // Whether or not the pattern contained dots or not. Clients can use this to determine // If they should call getMatches, or if getMatchesForLastSegmentOfPattern is sufficient. @@ -109,13 +109,13 @@ namespace ts { if (dotSeparatedSegments.some(segment => !segment.subWordTextChunks.length)) return undefined; return { - getMatches: (containers, candidate) => getMatches(containers, candidate, dotSeparatedSegments, stringToWordSpans), - getMatchesForLastSegmentOfPattern: candidate => matchSegment(candidate, last(dotSeparatedSegments), stringToWordSpans), + getFullMatch: (containers, candidate) => getFullMatch(containers, candidate, dotSeparatedSegments, stringToWordSpans), + getMatchForLastSegmentOfPattern: candidate => matchSegment(candidate, last(dotSeparatedSegments), stringToWordSpans), patternContainsDots: dotSeparatedSegments.length > 1 }; } - function getMatches(candidateContainers: ReadonlyArray, candidate: string, dotSeparatedSegments: ReadonlyArray, stringToWordSpans: Map): PatternMatch[] | undefined { + function getFullMatch(candidateContainers: ReadonlyArray, candidate: string, dotSeparatedSegments: ReadonlyArray, stringToWordSpans: Map): PatternMatch | undefined { // First, check that the last part of the dot separated pattern matches the name of the // candidate. If not, then there's no point in proceeding and doing the more // expensive work. @@ -134,29 +134,13 @@ namespace ts { return undefined; } - // So far so good. Now break up the container for the candidate and check if all - // the dotted parts match up correctly. - const totalMatch = candidateMatch; - + let bestMatch: PatternMatch | undefined; for (let i = dotSeparatedSegments.length - 2, j = candidateContainers.length - 1; i >= 0; i -= 1, j -= 1) { - - const segment = dotSeparatedSegments[i]; - const containerName = candidateContainers[j]; - - const containerMatch = matchSegment(containerName, segment, stringToWordSpans); - if (!containerMatch) { - // This container didn't match the pattern piece. So there's no match at all. - return undefined; - } - - addRange(totalMatch, containerMatch); + bestMatch = betterMatch(bestMatch, matchSegment(candidateContainers[j], dotSeparatedSegments[i], stringToWordSpans)); } - - // Success, this symbol's full name matched against the dotted name the user was asking - // about. - return totalMatch; + return bestMatch; } function getWordSpans(word: string, stringToWordSpans: Map): TextSpan[] { @@ -219,7 +203,7 @@ namespace ts { } } - function matchSegment(candidate: string, segment: Segment, stringToWordSpans: Map): PatternMatch[] { + function matchSegment(candidate: string, segment: Segment, stringToWordSpans: Map): PatternMatch { // First check if the segment matches as is. This is also useful if the segment contains // characters we would normally strip when splitting into parts that we also may want to // match in the candidate. For example if the segment is "@int" and the candidate is @@ -229,9 +213,7 @@ namespace ts { // multi-word segment. if (every(segment.totalTextChunk.text, ch => ch !== CharacterCodes.space && ch !== CharacterCodes.asterisk)) { const match = matchTextChunk(candidate, segment.totalTextChunk, stringToWordSpans); - if (match) { - return [match]; - } + if (match) return match; } // The logic for pattern matching is now as follows: @@ -271,20 +253,19 @@ namespace ts { // Only if all words have some sort of match is the pattern considered matched. const subWordTextChunks = segment.subWordTextChunks; - let matches: PatternMatch[]; - + let bestMatch: PatternMatch | undefined; for (const subWordTextChunk of subWordTextChunks) { - // Try to match the candidate with this word - const result = matchTextChunk(candidate, subWordTextChunk, stringToWordSpans); - if (!result) { - return undefined; - } - - matches = matches || []; - matches.push(result); + bestMatch = betterMatch(bestMatch, matchTextChunk(candidate, subWordTextChunk, stringToWordSpans)); } + return bestMatch; + } - return matches; + function betterMatch(a: PatternMatch | undefined, b: PatternMatch | undefined): PatternMatch { + return min(a, b, compareMatches); + } + function compareMatches(a: PatternMatch | undefined, b: PatternMatch | undefined): Comparison { + return a === undefined ? Comparison.GreaterThan : b === undefined ? Comparison.LessThan + : compareValues(a.kind, b.kind) || compareBooleans(!a.isCaseSensitive, !b.isCaseSensitive); } function partStartsWith(candidate: string, candidateSpan: TextSpan, pattern: string, ignoreCase: boolean, patternSpan: TextSpan = { start: 0, length: pattern.length }): boolean { From 8294259ec2b986ce775563dd0a9ed46dc9402901 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Tue, 10 Apr 2018 17:12:08 -0700 Subject: [PATCH 037/232] Remove all reference comments from compiler/ --- src/compiler/binder.ts | 3 --- src/compiler/builder.ts | 2 -- src/compiler/builderState.ts | 1 - src/compiler/checker.ts | 4 ---- src/compiler/commandLineParser.ts | 6 ------ src/compiler/comments.ts | 2 -- src/compiler/core.ts | 3 --- src/compiler/emitter.ts | 5 ----- src/compiler/factory.ts | 3 --- src/compiler/moduleNameResolver.ts | 3 --- src/compiler/parser.ts | 3 --- src/compiler/program.ts | 4 ---- src/compiler/resolutionCache.ts | 4 ---- src/compiler/scanner.ts | 3 --- src/compiler/sourcemap.ts | 2 -- src/compiler/sys.ts | 2 -- src/compiler/transformer.ts | 15 --------------- src/compiler/transformers/declarations.ts | 4 ---- src/compiler/transformers/destructuring.ts | 3 --- src/compiler/transformers/es2015.ts | 4 ---- src/compiler/transformers/es2016.ts | 3 --- src/compiler/transformers/es2017.ts | 3 --- src/compiler/transformers/es5.ts | 3 --- src/compiler/transformers/esnext.ts | 4 ---- src/compiler/transformers/generators.ts | 3 --- src/compiler/transformers/jsx.ts | 4 ---- src/compiler/transformers/module/es2015.ts | 3 --- src/compiler/transformers/module/module.ts | 4 ---- src/compiler/transformers/module/system.ts | 4 ---- src/compiler/transformers/ts.ts | 4 ---- src/compiler/tsc.ts | 4 ---- src/compiler/utilities.ts | 2 -- src/compiler/visitor.ts | 4 ---- src/compiler/watch.ts | 4 ---- src/compiler/watchUtilities.ts | 2 -- 35 files changed, 127 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 9281719b860..e6e3364840d 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -1,6 +1,3 @@ -/// -/// - /* @internal */ namespace ts { export const enum ModuleInstanceState { diff --git a/src/compiler/builder.ts b/src/compiler/builder.ts index cc506852252..92e651061ed 100644 --- a/src/compiler/builder.ts +++ b/src/compiler/builder.ts @@ -1,5 +1,3 @@ -/// - /*@internal*/ namespace ts { /** diff --git a/src/compiler/builderState.ts b/src/compiler/builderState.ts index 581aa05f12c..ac9f36b1258 100644 --- a/src/compiler/builderState.ts +++ b/src/compiler/builderState.ts @@ -1,4 +1,3 @@ -/// namespace ts { export interface EmitOutput { outputFiles: OutputFile[]; diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5634e06d5fd..33b7f924e36 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /* @internal */ namespace ts { const ambientModuleSymbolRegex = /^".+"$/; diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index f386c701dd7..470bd111492 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1,9 +1,3 @@ -/// -/// -/// -/// -/// - namespace ts { /* @internal */ export const compileOnSaveCommandLineOption: CommandLineOption = { name: "compileOnSave", type: "boolean" }; diff --git a/src/compiler/comments.ts b/src/compiler/comments.ts index f26a66701e4..de629cccfe1 100644 --- a/src/compiler/comments.ts +++ b/src/compiler/comments.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts { export interface CommentWriter { diff --git a/src/compiler/core.ts b/src/compiler/core.ts index cbfcf127200..232bdf2bc92 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1,6 +1,3 @@ -/// -/// - namespace ts { // WARNING: The script `configureNightly.ts` uses a regexp to parse out these values. // If changing the text in this section, be sure to test `configureNightly` too. diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 4bd055b1618..289f332cd33 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1,8 +1,3 @@ -/// -/// -/// -/// - namespace ts { const brackets = createBracketsMap(); diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index 82e4782f848..765c3c9cb4a 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -1,6 +1,3 @@ -/// -/// - namespace ts { function createSynthesizedNode(kind: SyntaxKind): Node { const node = createNode(kind, -1, -1); diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index d66ab5eb524..0027687c643 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -1,6 +1,3 @@ -/// -/// - namespace ts { /* @internal */ export function trace(host: ModuleResolutionHost, message: DiagnosticMessage, ...args: any[]): void; diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 0b89c3c313c..5e4ecf1df0b 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1,6 +1,3 @@ -/// -/// - namespace ts { const enum SignatureFlags { None = 0, diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 31220c68d3c..d78f78c7fec 100755 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1,7 +1,3 @@ -/// -/// -/// - namespace ts { const ignoreDiagnosticCommentRegEx = /(^\s*$)|(^\s*\/\/\/?\s*(@ts-ignore)?)/; diff --git a/src/compiler/resolutionCache.ts b/src/compiler/resolutionCache.ts index 0946948f43d..c2b96649cf2 100644 --- a/src/compiler/resolutionCache.ts +++ b/src/compiler/resolutionCache.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { /** This is the cache of module/typedirectives resolution that can be retained across program */ diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 43320b453c4..f2a01d22c24 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -1,6 +1,3 @@ -/// -/// - namespace ts { export type ErrorCallback = (message: DiagnosticMessage, length: number) => void; diff --git a/src/compiler/sourcemap.ts b/src/compiler/sourcemap.ts index 2e81da35cfd..6251f1963fa 100644 --- a/src/compiler/sourcemap.ts +++ b/src/compiler/sourcemap.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts { export interface SourceMapWriter { diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index 8c2612155e4..c37315a2e56 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -1,5 +1,3 @@ -/// - declare function setTimeout(handler: (...args: any[]) => void, timeout: number): any; declare function clearTimeout(handle: any): void; diff --git a/src/compiler/transformer.ts b/src/compiler/transformer.ts index c187176d069..8cadba453d8 100644 --- a/src/compiler/transformer.ts +++ b/src/compiler/transformer.ts @@ -1,18 +1,3 @@ -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// - /* @internal */ namespace ts { function getModuleTransformer(moduleKind: ModuleKind): TransformerFactory { diff --git a/src/compiler/transformers/declarations.ts b/src/compiler/transformers/declarations.ts index 7b6b5847753..67e4fa31cb2 100644 --- a/src/compiler/transformers/declarations.ts +++ b/src/compiler/transformers/declarations.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { export function getDeclarationDiagnostics(host: EmitHost, resolver: EmitResolver, file: SourceFile | undefined): Diagnostic[] { diff --git a/src/compiler/transformers/destructuring.ts b/src/compiler/transformers/destructuring.ts index bafe43b0b15..35101d3be7f 100644 --- a/src/compiler/transformers/destructuring.ts +++ b/src/compiler/transformers/destructuring.ts @@ -1,6 +1,3 @@ -/// -/// - /*@internal*/ namespace ts { interface FlattenContext { diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index 72068688f9d..0a607494bb5 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { const enum ES2015SubstitutionFlags { diff --git a/src/compiler/transformers/es2016.ts b/src/compiler/transformers/es2016.ts index a9468991776..22b2f11b612 100644 --- a/src/compiler/transformers/es2016.ts +++ b/src/compiler/transformers/es2016.ts @@ -1,6 +1,3 @@ -/// -/// - /*@internal*/ namespace ts { export function transformES2016(context: TransformationContext) { diff --git a/src/compiler/transformers/es2017.ts b/src/compiler/transformers/es2017.ts index f2a5aeb35d2..6689f83ed5b 100644 --- a/src/compiler/transformers/es2017.ts +++ b/src/compiler/transformers/es2017.ts @@ -1,6 +1,3 @@ -/// -/// - /*@internal*/ namespace ts { type SuperContainer = ClassDeclaration | MethodDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | ConstructorDeclaration; diff --git a/src/compiler/transformers/es5.ts b/src/compiler/transformers/es5.ts index bc6ee13520f..92ecce6a15c 100644 --- a/src/compiler/transformers/es5.ts +++ b/src/compiler/transformers/es5.ts @@ -1,6 +1,3 @@ -/// -/// - /*@internal*/ namespace ts { /** diff --git a/src/compiler/transformers/esnext.ts b/src/compiler/transformers/esnext.ts index 97fe93e508b..68861a5bb43 100644 --- a/src/compiler/transformers/esnext.ts +++ b/src/compiler/transformers/esnext.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { const enum ESNextSubstitutionFlags { diff --git a/src/compiler/transformers/generators.ts b/src/compiler/transformers/generators.ts index 82d8bc513f0..15f0d2d0f81 100644 --- a/src/compiler/transformers/generators.ts +++ b/src/compiler/transformers/generators.ts @@ -1,6 +1,3 @@ -/// -/// - // Transforms generator functions into a compatible ES5 representation with similar runtime // semantics. This is accomplished by first transforming the body of each generator // function into an intermediate representation that is the compiled into a JavaScript diff --git a/src/compiler/transformers/jsx.ts b/src/compiler/transformers/jsx.ts index 07dc8f74db4..4acdf63b275 100644 --- a/src/compiler/transformers/jsx.ts +++ b/src/compiler/transformers/jsx.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { export function transformJsx(context: TransformationContext) { diff --git a/src/compiler/transformers/module/es2015.ts b/src/compiler/transformers/module/es2015.ts index 4f218e4fdcf..a3315852632 100644 --- a/src/compiler/transformers/module/es2015.ts +++ b/src/compiler/transformers/module/es2015.ts @@ -1,6 +1,3 @@ -/// -/// - /*@internal*/ namespace ts { export function transformES2015Module(context: TransformationContext) { diff --git a/src/compiler/transformers/module/module.ts b/src/compiler/transformers/module/module.ts index 45d13357123..f9fb47f6a27 100644 --- a/src/compiler/transformers/module/module.ts +++ b/src/compiler/transformers/module/module.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { export function transformModule(context: TransformationContext) { diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts index ca55cb3a9d1..5cde69e2ef6 100644 --- a/src/compiler/transformers/module/system.ts +++ b/src/compiler/transformers/module/system.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { export function transformSystemModule(context: TransformationContext) { diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index f22d8f02870..6cb4be16c74 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { /** diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 09b64701988..ec4eb13917c 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -1,7 +1,3 @@ -/// -/// -/// - namespace ts { interface Statistic { name: string; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 8e6b3f8ae39..7eec6fcb2eb 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts { export const resolvingEmptyArray: never[] = [] as never[]; diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index 8d8e47a8f4c..7a70eb02e8e 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -1,7 +1,3 @@ -/// -/// -/// - namespace ts { const isTypeNodeOrTypeParameterDeclaration = or(isTypeNode, isTypeParameterDeclaration); diff --git a/src/compiler/watch.ts b/src/compiler/watch.ts index f53f01e3eb2..7f3d078b790 100644 --- a/src/compiler/watch.ts +++ b/src/compiler/watch.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts { const sysFormatDiagnosticsHost: FormatDiagnosticsHost = sys ? { diff --git a/src/compiler/watchUtilities.ts b/src/compiler/watchUtilities.ts index 12ed9f855df..4fa9b28e162 100644 --- a/src/compiler/watchUtilities.ts +++ b/src/compiler/watchUtilities.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts { /** From 5b3254957cd438d0c1a8744a4070d0465ed53b57 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Tue, 10 Apr 2018 17:12:27 -0700 Subject: [PATCH 038/232] Explicitly list compiler source files in their current emitted order --- src/compiler/tsconfig.json | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/compiler/tsconfig.json b/src/compiler/tsconfig.json index 58626f2cdc1..46e5384434a 100644 --- a/src/compiler/tsconfig.json +++ b/src/compiler/tsconfig.json @@ -6,36 +6,38 @@ "declaration": true }, "files": [ - "core.ts", - "performance.ts", - "sys.ts", "types.ts", + "performance.ts", + "core.ts", + "sys.ts", + "diagnosticInformationMap.generated.ts", "scanner.ts", - "parser.ts", "utilities.ts", + "parser.ts", "binder.ts", "symbolWalker.ts", + "moduleNameResolver.ts", "checker.ts", "factory.ts", "visitor.ts", "transformers/utilities.ts", + "transformers/destructuring.ts", "transformers/ts.ts", - "transformers/jsx.ts", - "transformers/esnext.ts", "transformers/es2017.ts", + "transformers/esnext.ts", + "transformers/jsx.ts", "transformers/es2016.ts", "transformers/es2015.ts", "transformers/es5.ts", "transformers/generators.ts", - "transformers/destructuring.ts", "transformers/module/module.ts", "transformers/module/system.ts", "transformers/module/es2015.ts", "transformers/declarations/diagnostics.ts", "transformers/declarations.ts", "transformer.ts", - "comments.ts", "sourcemap.ts", + "comments.ts", "emitter.ts", "watchUtilities.ts", "program.ts", @@ -44,7 +46,6 @@ "resolutionCache.ts", "watch.ts", "commandLineParser.ts", - "tsc.ts", - "diagnosticInformationMap.generated.ts" + "tsc.ts" ] } From 3ca1d2d7e37827a621dd5e6c023d43bd36f359e1 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Tue, 10 Apr 2018 17:57:24 -0700 Subject: [PATCH 039/232] Remove all reference comments from server/ --- src/server/client.ts | 2 -- src/server/editorServices.ts | 8 -------- src/server/project.ts | 7 ------- src/server/scriptInfo.ts | 2 -- src/server/scriptVersionCache.ts | 4 ---- src/server/server.ts | 3 --- src/server/session.ts | 5 ----- src/server/shared.ts | 2 -- src/server/types.ts | 4 ---- src/server/typingsCache.ts | 2 -- src/server/utilities.ts | 3 --- 11 files changed, 42 deletions(-) diff --git a/src/server/client.ts b/src/server/client.ts index 87bb2e93414..4711bb0c666 100644 --- a/src/server/client.ts +++ b/src/server/client.ts @@ -1,5 +1,3 @@ -/// - namespace ts.server { export interface SessionClientHost extends LanguageServiceHost { writeMessage(message: string): void; diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index af4d34b8bb2..a0981df40a4 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -1,11 +1,3 @@ -/// -/// -/// -/// -/// -/// -/// - namespace ts.server { export const maxProgramSizeForNonTsFiles = 20 * 1024 * 1024; diff --git a/src/server/project.ts b/src/server/project.ts index 442c7e3f5ad..1502d107dee 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -1,10 +1,3 @@ -/// -/// -/// -/// -/// -/// - namespace ts.server { export enum ProjectKind { diff --git a/src/server/scriptInfo.ts b/src/server/scriptInfo.ts index 843122e44c0..ca0a2eb64f1 100644 --- a/src/server/scriptInfo.ts +++ b/src/server/scriptInfo.ts @@ -1,5 +1,3 @@ -/// - namespace ts.server { /* @internal */ diff --git a/src/server/scriptVersionCache.ts b/src/server/scriptVersionCache.ts index 8a3f43a5434..d57f296e7a7 100644 --- a/src/server/scriptVersionCache.ts +++ b/src/server/scriptVersionCache.ts @@ -1,7 +1,3 @@ -/// -/// -/// - /*@internal*/ namespace ts.server { const lineCollectionCapacity = 4; diff --git a/src/server/server.ts b/src/server/server.ts index 44cb3b7aa1e..6eff3256349 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -1,6 +1,3 @@ -/// -/// - namespace ts.server { const childProcess: { fork(modulePath: string, args: string[], options?: { execArgv: string[], env?: MapLike }): NodeChildProcess; diff --git a/src/server/session.ts b/src/server/session.ts index c6066723892..6b9c1975b9a 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -1,8 +1,3 @@ -/// -/// -/// -/// - namespace ts.server { interface StackTraceError extends Error { stack?: string; diff --git a/src/server/shared.ts b/src/server/shared.ts index b46a385106e..a5528b7ba63 100644 --- a/src/server/shared.ts +++ b/src/server/shared.ts @@ -1,5 +1,3 @@ -/// - namespace ts.server { // tslint:disable variable-name export const ActionSet: ActionSet = "action::set"; diff --git a/src/server/types.ts b/src/server/types.ts index 617a3be419a..d4ddd81c53e 100644 --- a/src/server/types.ts +++ b/src/server/types.ts @@ -1,7 +1,3 @@ -/// -/// -/// - declare namespace ts.server { export interface CompressedData { length: number; diff --git a/src/server/typingsCache.ts b/src/server/typingsCache.ts index a1d8f65f6e0..f2642230f2d 100644 --- a/src/server/typingsCache.ts +++ b/src/server/typingsCache.ts @@ -1,5 +1,3 @@ -/// - namespace ts.server { export interface InstallPackageOptionsWithProject extends InstallPackageOptions { projectName: string; diff --git a/src/server/utilities.ts b/src/server/utilities.ts index e2329b868e3..d93b4933357 100644 --- a/src/server/utilities.ts +++ b/src/server/utilities.ts @@ -1,6 +1,3 @@ -/// -/// - namespace ts.server { export enum LogLevel { terse, From 21d16693da7d8253447ae29186596438a492c1a8 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Tue, 10 Apr 2018 17:57:43 -0700 Subject: [PATCH 040/232] Explicitly list server source files in their current emitted order --- src/server/tsconfig.json | 47 +++++++++++++++++++++++-- src/server/tsconfig.library.json | 60 +++++++++++++++++++++++++++----- 2 files changed, 96 insertions(+), 11 deletions(-) diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index c838a7209d9..267e102da61 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -9,17 +9,60 @@ ] }, "files": [ + "../compiler/types.ts", + "../compiler/performance.ts", + "../compiler/core.ts", + "../compiler/sys.ts", + "../compiler/diagnosticInformationMap.generated.ts", + "../compiler/scanner.ts", + "../compiler/utilities.ts", + "../compiler/parser.ts", + "../compiler/binder.ts", + "../compiler/symbolWalker.ts", + "../compiler/moduleNameResolver.ts", + "../compiler/checker.ts", + "../compiler/factory.ts", + "../compiler/visitor.ts", + "../compiler/transformers/utilities.ts", + "../compiler/transformers/destructuring.ts", + "../compiler/transformers/ts.ts", + "../compiler/transformers/es2017.ts", + "../compiler/transformers/esnext.ts", + "../compiler/transformers/jsx.ts", + "../compiler/transformers/es2016.ts", + "../compiler/transformers/es2015.ts", + "../compiler/transformers/es5.ts", + "../compiler/transformers/generators.ts", + "../compiler/transformers/module/module.ts", + "../compiler/transformers/module/system.ts", + "../compiler/transformers/module/es2015.ts", + "../compiler/transformers/declarations/diagnostics.ts", + "../compiler/transformers/declarations.ts", + "../compiler/transformer.ts", + "../compiler/sourcemap.ts", + "../compiler/comments.ts", + "../compiler/emitter.ts", + "../compiler/watchUtilities.ts", + "../compiler/program.ts", + "../compiler/builderState.ts", + "../compiler/builder.ts", + "../compiler/resolutionCache.ts", + "../compiler/watch.ts", + "../compiler/commandLineParser.ts", + "../services/shims.ts", "../services/utilities.ts", + + "types.ts", "shared.ts", "utilities.ts", - "scriptVersionCache.ts", + "protocol.ts", "scriptInfo.ts", "typingsCache.ts", "project.ts", "editorServices.ts", - "protocol.ts", "session.ts", + "scriptVersionCache.ts", "server.ts" ] } diff --git a/src/server/tsconfig.library.json b/src/server/tsconfig.library.json index aa3148d58a1..b5e113ae4bc 100644 --- a/src/server/tsconfig.library.json +++ b/src/server/tsconfig.library.json @@ -15,17 +15,59 @@ "types": [] }, "files": [ - "editorServices.ts", - "project.ts", + "../compiler/types.ts", + "../compiler/performance.ts", + "../compiler/core.ts", + "../compiler/sys.ts", + "../compiler/diagnosticInformationMap.generated.ts", + "../compiler/scanner.ts", + "../compiler/utilities.ts", + "../compiler/parser.ts", + "../compiler/binder.ts", + "../compiler/symbolWalker.ts", + "../compiler/moduleNameResolver.ts", + "../compiler/checker.ts", + "../compiler/factory.ts", + "../compiler/visitor.ts", + "../compiler/transformers/utilities.ts", + "../compiler/transformers/destructuring.ts", + "../compiler/transformers/ts.ts", + "../compiler/transformers/es2017.ts", + "../compiler/transformers/esnext.ts", + "../compiler/transformers/jsx.ts", + "../compiler/transformers/es2016.ts", + "../compiler/transformers/es2015.ts", + "../compiler/transformers/es5.ts", + "../compiler/transformers/generators.ts", + "../compiler/transformers/module/module.ts", + "../compiler/transformers/module/system.ts", + "../compiler/transformers/module/es2015.ts", + "../compiler/transformers/declarations/diagnostics.ts", + "../compiler/transformers/declarations.ts", + "../compiler/transformer.ts", + "../compiler/sourcemap.ts", + "../compiler/comments.ts", + "../compiler/emitter.ts", + "../compiler/watchUtilities.ts", + "../compiler/program.ts", + "../compiler/builderState.ts", + "../compiler/builder.ts", + "../compiler/resolutionCache.ts", + "../compiler/watch.ts", + "../compiler/commandLineParser.ts", + + "../services/shims.ts", + "../services/utilities.ts", + + "types.ts", + "shared.ts", + "utilities.ts", "protocol.ts", "scriptInfo.ts", - "scriptVersionCache.ts", - "session.ts", - "shared.ts", - "types.ts", "typingsCache.ts", - "utilities.ts", - "../services/shims.ts", - "../services/utilities.ts" + "project.ts", + "editorServices.ts", + "session.ts", + "scriptVersionCache.ts" ] } From 034b8eee14fccc5b3f661bc2b9959a80e85bb097 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Wed, 11 Apr 2018 13:29:20 -0700 Subject: [PATCH 041/232] Remove explicit harness file list from Jakefile --- Jakefile.js | 85 +---------------------------------------------------- 1 file changed, 1 insertion(+), 84 deletions(-) diff --git a/Jakefile.js b/Jakefile.js index d570a7cfc3d..f110008f0d7 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -87,93 +87,10 @@ var typingsInstallerSources = filesFromConfig(path.join(serverDirectory, "typing var watchGuardSources = filesFromConfig(path.join(serverDirectory, "watchGuard/tsconfig.json")); var serverSources = filesFromConfig(path.join(serverDirectory, "tsconfig.json")); var languageServiceLibrarySources = filesFromConfig(path.join(serverDirectory, "tsconfig.library.json")); +var harnessSources = filesFromConfig("./src/harness/tsconfig.json"); var typesMapOutputPath = path.join(builtLocalDirectory, 'typesMap.json'); -var harnessCoreSources = [ - "harness.ts", - "virtualFileSystem.ts", - "virtualFileSystemWithWatch.ts", - "sourceMapRecorder.ts", - "harnessLanguageService.ts", - "fourslash.ts", - "runnerbase.ts", - "compilerRunner.ts", - "typeWriter.ts", - "fourslashRunner.ts", - "projectsRunner.ts", - "loggedIO.ts", - "rwcRunner.ts", - "externalCompileRunner.ts", - "test262Runner.ts", - "./parallel/shared.ts", - "./parallel/host.ts", - "./parallel/worker.ts", - "runner.ts" -].map(function (f) { - return path.join(harnessDirectory, f); -}); - -var harnessSources = harnessCoreSources.concat([ - "base64.ts", - "incrementalParser.ts", - "jsDocParsing.ts", - "services/colorization.ts", - "services/documentRegistry.ts", - "services/preProcessFile.ts", - "services/patternMatcher.ts", - "session.ts", - "versionCache.ts", - "convertToBase64.ts", - "transpile.ts", - "reuseProgramStructure.ts", - "textStorage.ts", - "moduleResolution.ts", - "tsconfigParsing.ts", - "asserts.ts", - "builder.ts", - "commandLineParsing.ts", - "configurationExtension.ts", - "convertCompilerOptionsFromJson.ts", - "convertTypeAcquisitionFromJson.ts", - "tsserverProjectSystem.ts", - "tscWatchMode.ts", - "compileOnSave.ts", - "typingsInstaller.ts", - "projectErrors.ts", - "matchFiles.ts", - "organizeImports.ts", - "initializeTSConfig.ts", - "extractConstants.ts", - "extractFunctions.ts", - "extractRanges.ts", - "extractTestHelpers.ts", - "printer.ts", - "textChanges.ts", - "telemetry.ts", - "transform.ts", - "customTransforms.ts", - "programMissingFiles.ts", - "programNoParseFalsyFileNames.ts", - "symbolWalker.ts", - "languageService.ts", - "publicApi.ts", - "hostNewLineSupport.ts", -].map(function (f) { - return path.join(unittestsDirectory, f); -})).concat([ - "protocol.ts", - "utilities.ts", - "scriptVersionCache.ts", - "scriptInfo.ts", - "project.ts", - "typingsCache.ts", - "editorServices.ts", - "session.ts", -].map(function (f) { - return path.join(serverDirectory, f); -})); - var es2015LibrarySources = [ "es2015.core.d.ts", "es2015.collection.d.ts", From bb8fd41793ee5ad15cb63dea5bb01128e508058e Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Wed, 11 Apr 2018 13:29:41 -0700 Subject: [PATCH 042/232] Fix harness file listing --- src/harness/tsconfig.json | 174 ++++++++++++++++++++------------------ 1 file changed, 94 insertions(+), 80 deletions(-) diff --git a/src/harness/tsconfig.json b/src/harness/tsconfig.json index fe4b066c5e7..5011b2b561e 100644 --- a/src/harness/tsconfig.json +++ b/src/harness/tsconfig.json @@ -13,132 +13,146 @@ ] }, "files": [ - "../compiler/core.ts", - "../compiler/performance.ts", - "../compiler/sys.ts", "../compiler/types.ts", + "../compiler/performance.ts", + "../compiler/core.ts", + "../compiler/sys.ts", + "../compiler/diagnosticInformationMap.generated.ts", "../compiler/scanner.ts", - "../compiler/parser.ts", "../compiler/utilities.ts", + "../compiler/parser.ts", "../compiler/binder.ts", "../compiler/symbolWalker.ts", + "../compiler/moduleNameResolver.ts", "../compiler/checker.ts", "../compiler/factory.ts", "../compiler/visitor.ts", "../compiler/transformers/utilities.ts", + "../compiler/transformers/destructuring.ts", "../compiler/transformers/ts.ts", - "../compiler/transformers/jsx.ts", - "../compiler/transformers/esnext.ts", "../compiler/transformers/es2017.ts", + "../compiler/transformers/esnext.ts", + "../compiler/transformers/jsx.ts", "../compiler/transformers/es2016.ts", "../compiler/transformers/es2015.ts", "../compiler/transformers/es5.ts", "../compiler/transformers/generators.ts", - "../compiler/transformers/es5.ts", - "../compiler/transformers/destructuring.ts", "../compiler/transformers/module/module.ts", "../compiler/transformers/module/system.ts", "../compiler/transformers/module/es2015.ts", "../compiler/transformers/declarations/diagnostics.ts", "../compiler/transformers/declarations.ts", "../compiler/transformer.ts", - "../compiler/comments.ts", "../compiler/sourcemap.ts", + "../compiler/comments.ts", "../compiler/emitter.ts", + "../compiler/watchUtilities.ts", "../compiler/program.ts", + "../compiler/builderState.ts", "../compiler/builder.ts", + "../compiler/resolutionCache.ts", + "../compiler/watch.ts", "../compiler/commandLineParser.ts", - "../compiler/diagnosticInformationMap.generated.ts", - "../services/breakpoints.ts", - "../services/navigateTo.ts", - "../services/navigationBar.ts", - "../services/outliningElementsCollector.ts", - "../services/patternMatcher.ts", + + "../services/types.ts", + "../services/utilities.ts", + "../services/classifier.ts", "../services/pathCompletions.ts", "../services/completions.ts", - "../services/services.ts", - "../services/shims.ts", - "../services/signatureHelp.ts", - "../services/utilities.ts", + "../services/documentHighlights.ts", + "../services/documentRegistry.ts", + "../services/importTracker.ts", + "../services/findAllReferences.ts", + "../services/goToDefinition.ts", + "../services/jsDoc.ts", + "../services/semver.ts", "../services/jsTyping.ts", - "../services/formatting/formatting.ts", + "../services/navigateTo.ts", + "../services/navigationBar.ts", + "../services/organizeImports.ts", + "../services/outliningElementsCollector.ts", + "../services/patternMatcher.ts", + "../services/preProcess.ts", + "../services/rename.ts", + "../services/signatureHelp.ts", + "../services/suggestionDiagnostics.ts", + "../services/symbolDisplay.ts", + "../services/transpile.ts", "../services/formatting/formattingContext.ts", "../services/formatting/formattingScanner.ts", "../services/formatting/rule.ts", "../services/formatting/rules.ts", "../services/formatting/rulesMap.ts", + "../services/formatting/formatting.ts", "../services/formatting/smartIndenter.ts", + "../services/textChanges.ts", "../services/codeFixProvider.ts", - "../services/codefixes/fixes.ts", - "../services/codefixes/helpers.ts", + "../services/refactorProvider.ts", + "../services/codefixes/addMissingInvocationForDecorator.ts", + "../services/codefixes/annotateWithTypeFromJSDoc.ts", + "../services/codefixes/convertFunctionToEs6Class.ts", + "../services/codefixes/convertToEs6Module.ts", + "../services/codefixes/correctQualifiedNameToIndexedAccessType.ts", + "../services/codefixes/fixClassIncorrectlyImplementsInterface.ts", "../services/codefixes/importFixes.ts", + "../services/codefixes/fixSpelling.ts", + "../services/codefixes/fixAddMissingMember.ts", + "../services/codefixes/fixCannotFindModule.ts", + "../services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts", + "../services/codefixes/fixClassSuperMustPrecedeThisAccess.ts", + "../services/codefixes/fixConstructorForDerivedNeedSuperCall.ts", + "../services/codefixes/fixExtendsInterfaceBecomesImplements.ts", + "../services/codefixes/fixForgottenThisPropertyAccess.ts", "../services/codefixes/fixUnusedIdentifier.ts", + "../services/codefixes/fixJSDocTypes.ts", + "../services/codefixes/fixAwaitInSyncFunction.ts", "../services/codefixes/disableJsDiagnostics.ts", + "../services/codefixes/helpers.ts", + "../services/codefixes/inferFromUsage.ts", + "../services/codefixes/fixInvalidImportSyntax.ts", + "../services/codefixes/fixStrictClassInitialization.ts", + "../services/codefixes/useDefaultImport.ts", + "../services/codefixes/fixes.ts", + "../services/refactors/extractSymbol.ts", + "../services/refactors/refactors.ts", + "../services/sourcemaps.ts", + "../services/services.ts", + "../services/breakpoints.ts", + "../services/transform.ts", + "../services/shims.ts", + + "../server/typingsinstaller/typingsinstaller.ts", + + "../server/types.ts", + "../server/shared.ts", + "../server/utilities.ts", + "../server/protocol.ts", + "../server/scriptInfo.ts", + "../server/typingsCache.ts", + "../server/project.ts", + "../server/editorServices.ts", + "../server/session.ts", + "../server/scriptVersionCache.ts", - "harness.ts", "sourceMapRecorder.ts", - "harnessLanguageService.ts", - "fourslash.ts", "runnerbase.ts", - "compilerRunner.ts", - "typeWriter.ts", + "virtualFileSystem.ts", + "harness.ts", + "virtualFileSystemWithWatch.ts", + "harnessLanguageService.ts", "fourslashRunner.ts", + "fourslash.ts", + "typeWriter.ts", + "compilerRunner.ts", "projectsRunner.ts", "loggedIO.ts", "rwcRunner.ts", "externalCompileRunner.ts", "test262Runner.ts", - "./parallel/shared.ts", - "./parallel/host.ts", - "./parallel/worker.ts", - "runner.ts", - "virtualFileSystemWithWatch.ts", - "../server/protocol.ts", - "../server/session.ts", - "../server/client.ts", - "../server/editorServices.ts", - "./unittests/base64.ts", - "./unittests/incrementalParser.ts", - "./unittests/jsDocParsing.ts", - "./unittests/services/colorization.ts", - "./unittests/services/documentRegistry.ts", - "./unittests/services/preProcessFile.ts", - "./unittests/services/patternMatcher.ts", - "./unittests/session.ts", - "./unittests/symbolWalker.ts", - "./unittests/versionCache.ts", - "./unittests/convertToBase64.ts", - "./unittests/transpile.ts", - "./unittests/reuseProgramStructure.ts", - "./unittests/moduleResolution.ts", - "./unittests/tsconfigParsing.ts", - "./unittests/asserts.ts", - "./unittests/builder.ts", - "./unittests/commandLineParsing.ts", - "./unittests/configurationExtension.ts", - "./unittests/convertCompilerOptionsFromJson.ts", - "./unittests/convertTypeAcquisitionFromJson.ts", - "./unittests/tsserverProjectSystem.ts", - "./unittests/tscWatchMode.ts", - "./unittests/matchFiles.ts", - "./unittests/organizeImports.ts", - "./unittests/initializeTSConfig.ts", - "./unittests/compileOnSave.ts", - "./unittests/typingsInstaller.ts", - "./unittests/projectErrors.ts", - "./unittests/printer.ts", - "./unittests/transform.ts", - "./unittests/customTransforms.ts", - "./unittests/extractConstants.ts", - "./unittests/extractFunctions.ts", - "./unittests/extractRanges.ts", - "./unittests/extractTestHelpers.ts", - "./unittests/textChanges.ts", - "./unittests/telemetry.ts", - "./unittests/languageService.ts", - "./unittests/programMissingFiles.ts", - "./unittests/programNoParseFalsyFileNames.ts", - "./unittests/publicApi.ts", - "./unittests/hostNewLineSupport.ts" - ] + "parallel/host.ts", + "parallel/worker.ts", + "parallel/shared.ts", + "runner.ts" + ], + "include": ["unittests/**.ts"] } From 501d7be7ba2584a759c06c1a201325245226dd6e Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Wed, 11 Apr 2018 13:29:58 -0700 Subject: [PATCH 043/232] Add explicit file lists to server tsconfig files --- src/server/tsconfig.json | 66 +++++++++++++++++++++++++++++++- src/server/tsconfig.library.json | 66 +++++++++++++++++++++++++++++++- 2 files changed, 130 insertions(+), 2 deletions(-) diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index 267e102da61..f245719a345 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -50,8 +50,72 @@ "../compiler/watch.ts", "../compiler/commandLineParser.ts", - "../services/shims.ts", + "../services/types.ts", "../services/utilities.ts", + "../services/classifier.ts", + "../services/pathCompletions.ts", + "../services/completions.ts", + "../services/documentHighlights.ts", + "../services/documentRegistry.ts", + "../services/importTracker.ts", + "../services/findAllReferences.ts", + "../services/goToDefinition.ts", + "../services/jsDoc.ts", + "../services/semver.ts", + "../services/jsTyping.ts", + "../services/navigateTo.ts", + "../services/navigationBar.ts", + "../services/organizeImports.ts", + "../services/outliningElementsCollector.ts", + "../services/patternMatcher.ts", + "../services/preProcess.ts", + "../services/rename.ts", + "../services/signatureHelp.ts", + "../services/suggestionDiagnostics.ts", + "../services/symbolDisplay.ts", + "../services/transpile.ts", + "../services/formatting/formattingContext.ts", + "../services/formatting/formattingScanner.ts", + "../services/formatting/rule.ts", + "../services/formatting/rules.ts", + "../services/formatting/rulesMap.ts", + "../services/formatting/formatting.ts", + "../services/formatting/smartIndenter.ts", + "../services/textChanges.ts", + "../services/codeFixProvider.ts", + "../services/refactorProvider.ts", + "../services/codefixes/addMissingInvocationForDecorator.ts", + "../services/codefixes/annotateWithTypeFromJSDoc.ts", + "../services/codefixes/convertFunctionToEs6Class.ts", + "../services/codefixes/convertToEs6Module.ts", + "../services/codefixes/correctQualifiedNameToIndexedAccessType.ts", + "../services/codefixes/fixClassIncorrectlyImplementsInterface.ts", + "../services/codefixes/importFixes.ts", + "../services/codefixes/fixSpelling.ts", + "../services/codefixes/fixAddMissingMember.ts", + "../services/codefixes/fixCannotFindModule.ts", + "../services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts", + "../services/codefixes/fixClassSuperMustPrecedeThisAccess.ts", + "../services/codefixes/fixConstructorForDerivedNeedSuperCall.ts", + "../services/codefixes/fixExtendsInterfaceBecomesImplements.ts", + "../services/codefixes/fixForgottenThisPropertyAccess.ts", + "../services/codefixes/fixUnusedIdentifier.ts", + "../services/codefixes/fixJSDocTypes.ts", + "../services/codefixes/fixAwaitInSyncFunction.ts", + "../services/codefixes/disableJsDiagnostics.ts", + "../services/codefixes/helpers.ts", + "../services/codefixes/inferFromUsage.ts", + "../services/codefixes/fixInvalidImportSyntax.ts", + "../services/codefixes/fixStrictClassInitialization.ts", + "../services/codefixes/useDefaultImport.ts", + "../services/codefixes/fixes.ts", + "../services/refactors/extractSymbol.ts", + "../services/refactors/refactors.ts", + "../services/sourcemaps.ts", + "../services/services.ts", + "../services/breakpoints.ts", + "../services/transform.ts", + "../services/shims.ts", "types.ts", "shared.ts", diff --git a/src/server/tsconfig.library.json b/src/server/tsconfig.library.json index b5e113ae4bc..c9e04fed2fc 100644 --- a/src/server/tsconfig.library.json +++ b/src/server/tsconfig.library.json @@ -56,8 +56,72 @@ "../compiler/watch.ts", "../compiler/commandLineParser.ts", - "../services/shims.ts", + "../services/types.ts", "../services/utilities.ts", + "../services/classifier.ts", + "../services/pathCompletions.ts", + "../services/completions.ts", + "../services/documentHighlights.ts", + "../services/documentRegistry.ts", + "../services/importTracker.ts", + "../services/findAllReferences.ts", + "../services/goToDefinition.ts", + "../services/jsDoc.ts", + "../services/semver.ts", + "../services/jsTyping.ts", + "../services/navigateTo.ts", + "../services/navigationBar.ts", + "../services/organizeImports.ts", + "../services/outliningElementsCollector.ts", + "../services/patternMatcher.ts", + "../services/preProcess.ts", + "../services/rename.ts", + "../services/signatureHelp.ts", + "../services/suggestionDiagnostics.ts", + "../services/symbolDisplay.ts", + "../services/transpile.ts", + "../services/formatting/formattingContext.ts", + "../services/formatting/formattingScanner.ts", + "../services/formatting/rule.ts", + "../services/formatting/rules.ts", + "../services/formatting/rulesMap.ts", + "../services/formatting/formatting.ts", + "../services/formatting/smartIndenter.ts", + "../services/textChanges.ts", + "../services/codeFixProvider.ts", + "../services/refactorProvider.ts", + "../services/codefixes/addMissingInvocationForDecorator.ts", + "../services/codefixes/annotateWithTypeFromJSDoc.ts", + "../services/codefixes/convertFunctionToEs6Class.ts", + "../services/codefixes/convertToEs6Module.ts", + "../services/codefixes/correctQualifiedNameToIndexedAccessType.ts", + "../services/codefixes/fixClassIncorrectlyImplementsInterface.ts", + "../services/codefixes/importFixes.ts", + "../services/codefixes/fixSpelling.ts", + "../services/codefixes/fixAddMissingMember.ts", + "../services/codefixes/fixCannotFindModule.ts", + "../services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts", + "../services/codefixes/fixClassSuperMustPrecedeThisAccess.ts", + "../services/codefixes/fixConstructorForDerivedNeedSuperCall.ts", + "../services/codefixes/fixExtendsInterfaceBecomesImplements.ts", + "../services/codefixes/fixForgottenThisPropertyAccess.ts", + "../services/codefixes/fixUnusedIdentifier.ts", + "../services/codefixes/fixJSDocTypes.ts", + "../services/codefixes/fixAwaitInSyncFunction.ts", + "../services/codefixes/disableJsDiagnostics.ts", + "../services/codefixes/helpers.ts", + "../services/codefixes/inferFromUsage.ts", + "../services/codefixes/fixInvalidImportSyntax.ts", + "../services/codefixes/fixStrictClassInitialization.ts", + "../services/codefixes/useDefaultImport.ts", + "../services/codefixes/fixes.ts", + "../services/refactors/extractSymbol.ts", + "../services/refactors/refactors.ts", + "../services/sourcemaps.ts", + "../services/services.ts", + "../services/breakpoints.ts", + "../services/transform.ts", + "../services/shims.ts", "types.ts", "shared.ts", From 9a5a5b10a3f6212fbe8a1c07a0bf78f7b78545b1 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Wed, 11 Apr 2018 13:30:22 -0700 Subject: [PATCH 044/232] Remove all reference comments from services --- src/services/breakpoints.ts | 5 -- src/services/codefixes/fixes.ts | 27 +------ src/services/completions.ts | 2 - src/services/findAllReferences.ts | 2 - src/services/formatting/formatting.ts | 5 -- src/services/formatting/formattingScanner.ts | 3 - src/services/formatting/rulesMap.ts | 2 - src/services/jsTyping.ts | 8 -- src/services/navigationBar.ts | 2 - src/services/refactors/extractSymbol.ts | 3 - src/services/refactors/refactors.ts | 2 +- src/services/services.ts | 34 -------- src/services/shims.ts | 2 - src/services/signatureHelp.ts | 1 - src/services/transform.ts | 2 - src/services/tsconfig.json | 81 ++++++++++++++------ 16 files changed, 58 insertions(+), 123 deletions(-) diff --git a/src/services/breakpoints.ts b/src/services/breakpoints.ts index c608028b55f..faab2b08db6 100644 --- a/src/services/breakpoints.ts +++ b/src/services/breakpoints.ts @@ -1,8 +1,3 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. -// See LICENSE.txt in the project root for complete license information. - -/// - /* @internal */ namespace ts.BreakpointResolver { /** diff --git a/src/services/codefixes/fixes.ts b/src/services/codefixes/fixes.ts index e16a7d2d8bf..bc845bd8dc0 100644 --- a/src/services/codefixes/fixes.ts +++ b/src/services/codefixes/fixes.ts @@ -1,26 +1 @@ -// Fixes higher in this list will be first in the array returned by `getCodeFixesAtPosition`. - -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// +// Please delete me later. diff --git a/src/services/completions.ts b/src/services/completions.ts index 52ae6803ba3..c01150c8552 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts.Completions { export type Log = (message: string) => void; diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 41d08bc6582..e3c134f7c35 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts.FindAllReferences { export interface SymbolAndEntries { diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts index debec04536a..494a811c238 100644 --- a/src/services/formatting/formatting.ts +++ b/src/services/formatting/formatting.ts @@ -1,8 +1,3 @@ -/// -/// -/// -/// - /* @internal */ namespace ts.formatting { export interface FormatContext { diff --git a/src/services/formatting/formattingScanner.ts b/src/services/formatting/formattingScanner.ts index 9b9c956f670..a53a1e5ce26 100644 --- a/src/services/formatting/formattingScanner.ts +++ b/src/services/formatting/formattingScanner.ts @@ -1,6 +1,3 @@ -/// -/// - /* @internal */ namespace ts.formatting { const standardScanner = createScanner(ScriptTarget.Latest, /*skipTrivia*/ false, LanguageVariant.Standard); diff --git a/src/services/formatting/rulesMap.ts b/src/services/formatting/rulesMap.ts index 75cc68cb268..b10d163343e 100644 --- a/src/services/formatting/rulesMap.ts +++ b/src/services/formatting/rulesMap.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts.formatting { export function getFormatContext(options: FormatCodeSettings): FormatContext { diff --git a/src/services/jsTyping.ts b/src/services/jsTyping.ts index 393b8ca34e0..6b4f7f2e1d4 100644 --- a/src/services/jsTyping.ts +++ b/src/services/jsTyping.ts @@ -1,11 +1,3 @@ -// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. -// See LICENSE.txt in the project root for complete license information. - -/// -/// -/// -/// - /* @internal */ namespace ts.JsTyping { diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index e2176d2c1c9..b029796e718 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -1,5 +1,3 @@ -/// - /* @internal */ namespace ts.NavigationBar { /** diff --git a/src/services/refactors/extractSymbol.ts b/src/services/refactors/extractSymbol.ts index b99a4b26552..176542a0b51 100644 --- a/src/services/refactors/extractSymbol.ts +++ b/src/services/refactors/extractSymbol.ts @@ -1,6 +1,3 @@ -/// -/// - /* @internal */ namespace ts.refactor.extractSymbol { const refactorName = "Extract Symbol"; diff --git a/src/services/refactors/refactors.ts b/src/services/refactors/refactors.ts index da2f08a8e9f..bc845bd8dc0 100644 --- a/src/services/refactors/refactors.ts +++ b/src/services/refactors/refactors.ts @@ -1 +1 @@ -/// +// Please delete me later. diff --git a/src/services/services.ts b/src/services/services.ts index d6405b8e732..ae559e66bcc 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1,37 +1,3 @@ -/// -/// - -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// - namespace ts { /** The version of the language service API */ export const servicesVersion = "0.8"; diff --git a/src/services/shims.ts b/src/services/shims.ts index 4ed1afb8813..b8beccab20b 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -13,8 +13,6 @@ // limitations under the License. // -/// - /* @internal */ let debugObjectHost: { CollectGarbage(): void } = (function (this: any) { return this; })(); diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 250127ecfc6..156539557a3 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -1,4 +1,3 @@ -/// /* @internal */ namespace ts.SignatureHelp { export const enum ArgumentListKind { diff --git a/src/services/transform.ts b/src/services/transform.ts index 07fc3c759e2..200fb9aacb2 100644 --- a/src/services/transform.ts +++ b/src/services/transform.ts @@ -1,5 +1,3 @@ -/// -/// namespace ts { /** * Transform one or more nodes using the supplied transformers. diff --git a/src/services/tsconfig.json b/src/services/tsconfig.json index 4f838df6341..051ee93937a 100644 --- a/src/services/tsconfig.json +++ b/src/services/tsconfig.json @@ -6,81 +6,112 @@ "declaration": true }, "files": [ - "../compiler/core.ts", - "../compiler/performance.ts", - "../compiler/sys.ts", "../compiler/types.ts", + "../compiler/performance.ts", + "../compiler/core.ts", + "../compiler/sys.ts", + "../compiler/diagnosticInformationMap.generated.ts", "../compiler/scanner.ts", - "../compiler/parser.ts", "../compiler/utilities.ts", + "../compiler/parser.ts", "../compiler/binder.ts", "../compiler/symbolWalker.ts", + "../compiler/moduleNameResolver.ts", "../compiler/checker.ts", "../compiler/factory.ts", "../compiler/visitor.ts", "../compiler/transformers/utilities.ts", + "../compiler/transformers/destructuring.ts", "../compiler/transformers/ts.ts", - "../compiler/transformers/jsx.ts", - "../compiler/transformers/esnext.ts", "../compiler/transformers/es2017.ts", + "../compiler/transformers/esnext.ts", + "../compiler/transformers/jsx.ts", "../compiler/transformers/es2016.ts", "../compiler/transformers/es2015.ts", "../compiler/transformers/es5.ts", "../compiler/transformers/generators.ts", - "../compiler/transformers/destructuring.ts", "../compiler/transformers/module/module.ts", "../compiler/transformers/module/system.ts", "../compiler/transformers/module/es2015.ts", "../compiler/transformers/declarations/diagnostics.ts", "../compiler/transformers/declarations.ts", "../compiler/transformer.ts", - "../compiler/comments.ts", "../compiler/sourcemap.ts", + "../compiler/comments.ts", "../compiler/emitter.ts", + "../compiler/watchUtilities.ts", "../compiler/program.ts", "../compiler/builderState.ts", "../compiler/builder.ts", "../compiler/resolutionCache.ts", "../compiler/watch.ts", - "../compiler/watchUtilities.ts", "../compiler/commandLineParser.ts", - "../compiler/diagnosticInformationMap.generated.ts", + "types.ts", "utilities.ts", - "breakpoints.ts", "classifier.ts", + "pathCompletions.ts", "completions.ts", "documentHighlights.ts", "documentRegistry.ts", - "findAllReferences.ts", "importTracker.ts", + "findAllReferences.ts", "goToDefinition.ts", "jsDoc.ts", + "semver.ts", "jsTyping.ts", "navigateTo.ts", "navigationBar.ts", "organizeImports.ts", "outliningElementsCollector.ts", - "pathCompletions.ts", "patternMatcher.ts", "preProcess.ts", "rename.ts", - "services.ts", - "transform.ts", - "transpile.ts", - "semver.ts", - "shims.ts", "signatureHelp.ts", "suggestionDiagnostics.ts", - "sourcemaps.ts", "symbolDisplay.ts", + "transpile.ts", + "formatting/formattingContext.ts", + "formatting/formattingScanner.ts", + "formatting/rule.ts", + "formatting/rules.ts", + "formatting/rulesMap.ts", + "formatting/formatting.ts", + "formatting/smartIndenter.ts", "textChanges.ts", + "codeFixProvider.ts", "refactorProvider.ts", - "codeFixProvider.ts" - ], - "include": [ - "formatting/*", - "codefixes/*", - "refactors/*" + "codefixes/addMissingInvocationForDecorator.ts", + "codefixes/annotateWithTypeFromJSDoc.ts", + "codefixes/convertFunctionToEs6Class.ts", + "codefixes/convertToEs6Module.ts", + "codefixes/correctQualifiedNameToIndexedAccessType.ts", + "codefixes/fixClassIncorrectlyImplementsInterface.ts", + "codefixes/importFixes.ts", + "codefixes/fixSpelling.ts", + "codefixes/fixAddMissingMember.ts", + "codefixes/fixCannotFindModule.ts", + "codefixes/fixClassDoesntImplementInheritedAbstractMember.ts", + "codefixes/fixClassSuperMustPrecedeThisAccess.ts", + "codefixes/fixConstructorForDerivedNeedSuperCall.ts", + "codefixes/fixExtendsInterfaceBecomesImplements.ts", + "codefixes/fixForgottenThisPropertyAccess.ts", + "codefixes/fixUnusedIdentifier.ts", + "codefixes/fixJSDocTypes.ts", + "codefixes/fixAwaitInSyncFunction.ts", + "codefixes/disableJsDiagnostics.ts", + "codefixes/helpers.ts", + "codefixes/inferFromUsage.ts", + "codefixes/fixInvalidImportSyntax.ts", + "codefixes/fixStrictClassInitialization.ts", + "codefixes/useDefaultImport.ts", + "codefixes/fixes.ts", + "refactors/extractSymbol.ts", + "refactors/refactors.ts", + "sourcemaps.ts", + "services.ts", + "breakpoints.ts", + "transform.ts", + "shims.ts" ] } From e1a50366e3c9f51393bc0d411a3e1ed29ef03d0f Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Wed, 11 Apr 2018 15:55:29 -0700 Subject: [PATCH 045/232] .d.ts changed order --- .../reference/api/tsserverlibrary.d.ts | 839 ++++++++++++------ 1 file changed, 545 insertions(+), 294 deletions(-) diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 49b9c2b5eca..d8f93eaa5de 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2926,6 +2926,61 @@ declare namespace ts { function getNodeMajorVersion(): number; let sys: System; } +declare namespace ts { + type ErrorCallback = (message: DiagnosticMessage, length: number) => void; + interface Scanner { + getStartPos(): number; + getToken(): SyntaxKind; + getTextPos(): number; + getTokenPos(): number; + getTokenText(): string; + getTokenValue(): string; + hasExtendedUnicodeEscape(): boolean; + hasPrecedingLineBreak(): boolean; + isIdentifier(): boolean; + isReservedWord(): boolean; + isUnterminated(): boolean; + reScanGreaterToken(): SyntaxKind; + reScanSlashToken(): SyntaxKind; + reScanTemplateToken(): SyntaxKind; + scanJsxIdentifier(): SyntaxKind; + scanJsxAttributeValue(): SyntaxKind; + reScanJsxToken(): JsxTokenSyntaxKind; + scanJsxToken(): JsxTokenSyntaxKind; + scanJSDocToken(): JsDocSyntaxKind; + scan(): SyntaxKind; + getText(): string; + setText(text: string, start?: number, length?: number): void; + setOnError(onError: ErrorCallback): void; + setScriptTarget(scriptTarget: ScriptTarget): void; + setLanguageVariant(variant: LanguageVariant): void; + setTextPos(textPos: number): void; + lookAhead(callback: () => T): T; + scanRange(start: number, length: number, callback: () => T): T; + tryScan(callback: () => T): T; + } + function tokenToString(t: SyntaxKind): string | undefined; + function getPositionOfLineAndCharacter(sourceFile: SourceFileLike, line: number, character: number): number; + function getLineAndCharacterOfPosition(sourceFile: SourceFileLike, position: number): LineAndCharacter; + function isWhiteSpaceLike(ch: number): boolean; + /** Does not include line breaks. For that, see isWhiteSpaceLike. */ + function isWhiteSpaceSingleLine(ch: number): boolean; + function isLineBreak(ch: number): boolean; + function couldStartTrivia(text: string, pos: number): boolean; + function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; + function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; + function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; + function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; + function reduceEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T, memo: U) => U, state: T, initial: U): U; + function reduceEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T, memo: U) => U, state: T, initial: U): U; + function getLeadingCommentRanges(text: string, pos: number): CommentRange[] | undefined; + function getTrailingCommentRanges(text: string, pos: number): CommentRange[] | undefined; + /** Optionally, get the shebang */ + function getShebang(text: string): string | undefined; + function isIdentifierStart(ch: number, languageVersion: ScriptTarget): boolean; + function isIdentifierPart(ch: number, languageVersion: ScriptTarget): boolean; + function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean, languageVariant?: LanguageVariant, text?: string, onError?: ErrorCallback, start?: number, length?: number): Scanner; +} declare namespace ts { function getDefaultLibFileName(options: CompilerOptions): string; function textSpanEnd(span: TextSpan): number; @@ -3272,61 +3327,6 @@ declare namespace ts { function isObjectLiteralElement(node: Node): node is ObjectLiteralElement; function isStringLiteralLike(node: Node): node is StringLiteralLike; } -declare namespace ts { - type ErrorCallback = (message: DiagnosticMessage, length: number) => void; - interface Scanner { - getStartPos(): number; - getToken(): SyntaxKind; - getTextPos(): number; - getTokenPos(): number; - getTokenText(): string; - getTokenValue(): string; - hasExtendedUnicodeEscape(): boolean; - hasPrecedingLineBreak(): boolean; - isIdentifier(): boolean; - isReservedWord(): boolean; - isUnterminated(): boolean; - reScanGreaterToken(): SyntaxKind; - reScanSlashToken(): SyntaxKind; - reScanTemplateToken(): SyntaxKind; - scanJsxIdentifier(): SyntaxKind; - scanJsxAttributeValue(): SyntaxKind; - reScanJsxToken(): JsxTokenSyntaxKind; - scanJsxToken(): JsxTokenSyntaxKind; - scanJSDocToken(): JsDocSyntaxKind; - scan(): SyntaxKind; - getText(): string; - setText(text: string, start?: number, length?: number): void; - setOnError(onError: ErrorCallback): void; - setScriptTarget(scriptTarget: ScriptTarget): void; - setLanguageVariant(variant: LanguageVariant): void; - setTextPos(textPos: number): void; - lookAhead(callback: () => T): T; - scanRange(start: number, length: number, callback: () => T): T; - tryScan(callback: () => T): T; - } - function tokenToString(t: SyntaxKind): string | undefined; - function getPositionOfLineAndCharacter(sourceFile: SourceFileLike, line: number, character: number): number; - function getLineAndCharacterOfPosition(sourceFile: SourceFileLike, position: number): LineAndCharacter; - function isWhiteSpaceLike(ch: number): boolean; - /** Does not include line breaks. For that, see isWhiteSpaceLike. */ - function isWhiteSpaceSingleLine(ch: number): boolean; - function isLineBreak(ch: number): boolean; - function couldStartTrivia(text: string, pos: number): boolean; - function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; - function forEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; - function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean) => U): U | undefined; - function forEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T) => U, state: T): U | undefined; - function reduceEachLeadingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T, memo: U) => U, state: T, initial: U): U; - function reduceEachTrailingCommentRange(text: string, pos: number, cb: (pos: number, end: number, kind: CommentKind, hasTrailingNewLine: boolean, state: T, memo: U) => U, state: T, initial: U): U; - function getLeadingCommentRanges(text: string, pos: number): CommentRange[] | undefined; - function getTrailingCommentRanges(text: string, pos: number): CommentRange[] | undefined; - /** Optionally, get the shebang */ - function getShebang(text: string): string | undefined; - function isIdentifierStart(ch: number, languageVersion: ScriptTarget): boolean; - function isIdentifierPart(ch: number, languageVersion: ScriptTarget): boolean; - function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean, languageVariant?: LanguageVariant, text?: string, onError?: ErrorCallback, start?: number, length?: number): Scanner; -} declare namespace ts { function createNode(kind: SyntaxKind, pos?: number, end?: number): Node; /** @@ -3354,59 +3354,6 @@ declare namespace ts { function isExternalModule(file: SourceFile): boolean; function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean): SourceFile; } -declare namespace ts { - function parseCommandLine(commandLine: ReadonlyArray, readFile?: (path: string) => string | undefined): ParsedCommandLine; - /** - * Read tsconfig.json file - * @param fileName The path to the config file - */ - function readConfigFile(fileName: string, readFile: (path: string) => string | undefined): { - config?: any; - error?: Diagnostic; - }; - /** - * Parse the text of the tsconfig.json file - * @param fileName The path to the config file - * @param jsonText The text of the config file - */ - function parseConfigFileTextToJson(fileName: string, jsonText: string): { - config?: any; - error?: Diagnostic; - }; - /** - * Read tsconfig.json file - * @param fileName The path to the config file - */ - function readJsonConfigFile(fileName: string, readFile: (path: string) => string | undefined): JsonSourceFile; - /** - * Convert the json syntax tree into the json value - */ - function convertToObject(sourceFile: JsonSourceFile, errors: Push): any; - /** - * Parse the contents of a config file (tsconfig.json). - * @param json The contents of the config file to parse - * @param host Instance of ParseConfigHost used to enumerate files in folder. - * @param basePath A root directory to resolve relative path entries in the config - * file to. e.g. outDir - */ - function parseJsonConfigFileContent(json: any, host: ParseConfigHost, basePath: string, existingOptions?: CompilerOptions, configFileName?: string, resolutionStack?: Path[], extraFileExtensions?: ReadonlyArray): ParsedCommandLine; - /** - * Parse the contents of a config file (tsconfig.json). - * @param jsonNode The contents of the config file to parse - * @param host Instance of ParseConfigHost used to enumerate files in folder. - * @param basePath A root directory to resolve relative path entries in the config - * file to. e.g. outDir - */ - function parseJsonSourceFileConfigFileContent(sourceFile: JsonSourceFile, host: ParseConfigHost, basePath: string, existingOptions?: CompilerOptions, configFileName?: string, resolutionStack?: Path[], extraFileExtensions?: ReadonlyArray): ParsedCommandLine; - function convertCompilerOptionsFromJson(jsonOptions: any, basePath: string, configFileName?: string): { - options: CompilerOptions; - errors: Diagnostic[]; - }; - function convertTypeAcquisitionFromJson(jsonOptions: any, basePath: string, configFileName?: string): { - options: TypeAcquisition; - errors: Diagnostic[]; - }; -} declare namespace ts { interface GetEffectiveTypeRootsHost { directoryExists?(directoryName: string): boolean; @@ -3971,6 +3918,312 @@ declare namespace ts { */ function createProgram(rootNames: ReadonlyArray, options: CompilerOptions, host?: CompilerHost, oldProgram?: Program, configFileParsingDiagnostics?: ReadonlyArray): Program; } +declare namespace ts { + interface EmitOutput { + outputFiles: OutputFile[]; + emitSkipped: boolean; + } + interface OutputFile { + name: string; + writeByteOrderMark: boolean; + text: string; + } +} +declare namespace ts { + type AffectedFileResult = { + result: T; + affected: SourceFile | Program; + } | undefined; + interface BuilderProgramHost { + /** + * return true if file names are treated with case sensitivity + */ + useCaseSensitiveFileNames(): boolean; + /** + * If provided this would be used this hash instead of actual file shape text for detecting changes + */ + createHash?: (data: string) => string; + /** + * When emit or emitNextAffectedFile are called without writeFile, + * this callback if present would be used to write files + */ + writeFile?: WriteFileCallback; + } + /** + * Builder to manage the program state changes + */ + interface BuilderProgram { + /** + * Returns current program + */ + getProgram(): Program; + /** + * Get compiler options of the program + */ + getCompilerOptions(): CompilerOptions; + /** + * Get the source file in the program with file name + */ + getSourceFile(fileName: string): SourceFile | undefined; + /** + * Get a list of files in the program + */ + getSourceFiles(): ReadonlyArray; + /** + * Get the diagnostics for compiler options + */ + getOptionsDiagnostics(cancellationToken?: CancellationToken): ReadonlyArray; + /** + * Get the diagnostics that dont belong to any file + */ + getGlobalDiagnostics(cancellationToken?: CancellationToken): ReadonlyArray; + /** + * Get the diagnostics from config file parsing + */ + getConfigFileParsingDiagnostics(): ReadonlyArray; + /** + * Get the syntax diagnostics, for all source files if source file is not supplied + */ + getSyntacticDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): ReadonlyArray; + /** + * Get all the dependencies of the file + */ + getAllDependencies(sourceFile: SourceFile): ReadonlyArray; + /** + * Gets the semantic diagnostics from the program corresponding to this state of file (if provided) or whole program + * The semantic diagnostics are cached and managed here + * Note that it is assumed that when asked about semantic diagnostics through this API, + * the file has been taken out of affected files so it is safe to use cache or get from program and cache the diagnostics + * In case of SemanticDiagnosticsBuilderProgram if the source file is not provided, + * it will iterate through all the affected files, to ensure that cache stays valid and yet provide a way to get all semantic diagnostics + */ + getSemanticDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): ReadonlyArray; + /** + * Emits the JavaScript and declaration files. + * When targetSource file is specified, emits the files corresponding to that source file, + * otherwise for the whole program. + * In case of EmitAndSemanticDiagnosticsBuilderProgram, when targetSourceFile is specified, + * it is assumed that that file is handled from affected file list. If targetSourceFile is not specified, + * it will only emit all the affected files instead of whole program + * + * The first of writeFile if provided, writeFile of BuilderProgramHost if provided, writeFile of compiler host + * in that order would be used to write the files + */ + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers): EmitResult; + /** + * Get the current directory of the program + */ + getCurrentDirectory(): string; + } + /** + * The builder that caches the semantic diagnostics for the program and handles the changed files and affected files + */ + interface SemanticDiagnosticsBuilderProgram extends BuilderProgram { + /** + * Gets the semantic diagnostics from the program for the next affected file and caches it + * Returns undefined if the iteration is complete + */ + getSemanticDiagnosticsOfNextAffectedFile(cancellationToken?: CancellationToken, ignoreSourceFile?: (sourceFile: SourceFile) => boolean): AffectedFileResult>; + } + /** + * The builder that can handle the changes in program and iterate through changed file to emit the files + * The semantic diagnostics are cached per file and managed by clearing for the changed/affected files + */ + interface EmitAndSemanticDiagnosticsBuilderProgram extends BuilderProgram { + /** + * Emits the next affected file's emit result (EmitResult and sourceFiles emitted) or returns undefined if iteration is complete + * The first of writeFile if provided, writeFile of BuilderProgramHost if provided, writeFile of compiler host + * in that order would be used to write the files + */ + emitNextAffectedFile(writeFile?: WriteFileCallback, cancellationToken?: CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: CustomTransformers): AffectedFileResult; + } + /** + * Create the builder to manage semantic diagnostics and cache them + */ + function createSemanticDiagnosticsBuilderProgram(newProgram: Program, host: BuilderProgramHost, oldProgram?: SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray): SemanticDiagnosticsBuilderProgram; + function createSemanticDiagnosticsBuilderProgram(rootNames: ReadonlyArray, options: CompilerOptions, host?: CompilerHost, oldProgram?: SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray): SemanticDiagnosticsBuilderProgram; + /** + * Create the builder that can handle the changes in program and iterate through changed files + * to emit the those files and manage semantic diagnostics cache as well + */ + function createEmitAndSemanticDiagnosticsBuilderProgram(newProgram: Program, host: BuilderProgramHost, oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray): EmitAndSemanticDiagnosticsBuilderProgram; + function createEmitAndSemanticDiagnosticsBuilderProgram(rootNames: ReadonlyArray, options: CompilerOptions, host?: CompilerHost, oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: ReadonlyArray): EmitAndSemanticDiagnosticsBuilderProgram; + /** + * Creates a builder thats just abstraction over program and can be used with watch + */ + function createAbstractBuilder(newProgram: Program, host: BuilderProgramHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: ReadonlyArray): BuilderProgram; + function createAbstractBuilder(rootNames: ReadonlyArray, options: CompilerOptions, host?: CompilerHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: ReadonlyArray): BuilderProgram; +} +declare namespace ts { + type DiagnosticReporter = (diagnostic: Diagnostic) => void; + type WatchStatusReporter = (diagnostic: Diagnostic, newLine: string, options: CompilerOptions) => void; + /** Create the program with rootNames and options, if they are undefined, oldProgram and new configFile diagnostics create new program */ + type CreateProgram = (rootNames: ReadonlyArray | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: T, configFileParsingDiagnostics?: ReadonlyArray) => T; + interface WatchCompilerHost { + /** + * Used to create the program when need for program creation or recreation detected + */ + createProgram: CreateProgram; + /** If provided, callback to invoke after every new program creation */ + afterProgramCreate?(program: T): void; + /** If provided, called with Diagnostic message that informs about change in watch status */ + onWatchStatusChange?(diagnostic: Diagnostic, newLine: string, options: CompilerOptions): void; + useCaseSensitiveFileNames(): boolean; + getNewLine(): string; + getCurrentDirectory(): string; + getDefaultLibFileName(options: CompilerOptions): string; + getDefaultLibLocation?(): string; + createHash?(data: string): string; + /** + * Use to check file presence for source files and + * if resolveModuleNames is not provided (complier is in charge of module resolution) then module files as well + */ + fileExists(path: string): boolean; + /** + * Use to read file text for source files and + * if resolveModuleNames is not provided (complier is in charge of module resolution) then module files as well + */ + readFile(path: string, encoding?: string): string | undefined; + /** If provided, used for module resolution as well as to handle directory structure */ + directoryExists?(path: string): boolean; + /** If provided, used in resolutions as well as handling directory structure */ + getDirectories?(path: string): string[]; + /** If provided, used to cache and handle directory structure modifications */ + readDirectory?(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[]; + /** Symbol links resolution */ + realpath?(path: string): string; + /** If provided would be used to write log about compilation */ + trace?(s: string): void; + /** If provided is used to get the environment variable */ + getEnvironmentVariable?(name: string): string; + /** If provided, used to resolve the module names, otherwise typescript's default module resolution */ + resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[]): ResolvedModule[]; + /** If provided, used to resolve type reference directives, otherwise typescript's default resolution */ + resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string): (ResolvedTypeReferenceDirective | undefined)[]; + /** Used to watch changes in source files, missing files needed to update the program or config file */ + watchFile(path: string, callback: FileWatcherCallback, pollingInterval?: number): FileWatcher; + /** Used to watch resolved module's failed lookup locations, config file specs, type roots where auto type reference directives are added */ + watchDirectory(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; + /** If provided, will be used to set delayed compilation, so that multiple changes in short span are compiled together */ + setTimeout?(callback: (...args: any[]) => void, ms: number, ...args: any[]): any; + /** If provided, will be used to reset existing delayed compilation */ + clearTimeout?(timeoutId: any): void; + } + /** + * Host to create watch with root files and options + */ + interface WatchCompilerHostOfFilesAndCompilerOptions extends WatchCompilerHost { + /** root files to use to generate program */ + rootFiles: string[]; + /** Compiler options */ + options: CompilerOptions; + } + /** + * Reports config file diagnostics + */ + interface ConfigFileDiagnosticsReporter { + /** + * Reports unrecoverable error when parsing config file + */ + onUnRecoverableConfigFileDiagnostic: DiagnosticReporter; + } + /** + * Host to create watch with config file + */ + interface WatchCompilerHostOfConfigFile extends WatchCompilerHost, ConfigFileDiagnosticsReporter { + /** Name of the config file to compile */ + configFileName: string; + /** Options to extend */ + optionsToExtend?: CompilerOptions; + /** + * Used to generate source file names from the config file and its include, exclude, files rules + * and also to cache the directory stucture + */ + readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[]; + } + interface Watch { + /** Synchronize with host and get updated program */ + getProgram(): T; + } + /** + * Creates the watch what generates program using the config file + */ + interface WatchOfConfigFile extends Watch { + } + /** + * Creates the watch that generates program using the root files and compiler options + */ + interface WatchOfFilesAndCompilerOptions extends Watch { + /** Updates the root files in the program, only if this is not config file compilation */ + updateRootFileNames(fileNames: string[]): void; + } + /** + * Create the watch compiler host for either configFile or fileNames and its options + */ + function createWatchCompilerHost(rootFiles: string[], options: CompilerOptions, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): WatchCompilerHostOfFilesAndCompilerOptions; + function createWatchCompilerHost(configFileName: string, optionsToExtend: CompilerOptions | undefined, system: System, createProgram?: CreateProgram, reportDiagnostic?: DiagnosticReporter, reportWatchStatus?: WatchStatusReporter): WatchCompilerHostOfConfigFile; + /** + * Creates the watch from the host for root files and compiler options + */ + function createWatchProgram(host: WatchCompilerHostOfFilesAndCompilerOptions): WatchOfFilesAndCompilerOptions; + /** + * Creates the watch from the host for config file + */ + function createWatchProgram(host: WatchCompilerHostOfConfigFile): WatchOfConfigFile; +} +declare namespace ts { + function parseCommandLine(commandLine: ReadonlyArray, readFile?: (path: string) => string | undefined): ParsedCommandLine; + /** + * Read tsconfig.json file + * @param fileName The path to the config file + */ + function readConfigFile(fileName: string, readFile: (path: string) => string | undefined): { + config?: any; + error?: Diagnostic; + }; + /** + * Parse the text of the tsconfig.json file + * @param fileName The path to the config file + * @param jsonText The text of the config file + */ + function parseConfigFileTextToJson(fileName: string, jsonText: string): { + config?: any; + error?: Diagnostic; + }; + /** + * Read tsconfig.json file + * @param fileName The path to the config file + */ + function readJsonConfigFile(fileName: string, readFile: (path: string) => string | undefined): JsonSourceFile; + /** + * Convert the json syntax tree into the json value + */ + function convertToObject(sourceFile: JsonSourceFile, errors: Push): any; + /** + * Parse the contents of a config file (tsconfig.json). + * @param json The contents of the config file to parse + * @param host Instance of ParseConfigHost used to enumerate files in folder. + * @param basePath A root directory to resolve relative path entries in the config + * file to. e.g. outDir + */ + function parseJsonConfigFileContent(json: any, host: ParseConfigHost, basePath: string, existingOptions?: CompilerOptions, configFileName?: string, resolutionStack?: Path[], extraFileExtensions?: ReadonlyArray): ParsedCommandLine; + /** + * Parse the contents of a config file (tsconfig.json). + * @param jsonNode The contents of the config file to parse + * @param host Instance of ParseConfigHost used to enumerate files in folder. + * @param basePath A root directory to resolve relative path entries in the config + * file to. e.g. outDir + */ + function parseJsonSourceFileConfigFileContent(sourceFile: JsonSourceFile, host: ParseConfigHost, basePath: string, existingOptions?: CompilerOptions, configFileName?: string, resolutionStack?: Path[], extraFileExtensions?: ReadonlyArray): ParsedCommandLine; + function convertCompilerOptionsFromJson(jsonOptions: any, basePath: string, configFileName?: string): { + options: CompilerOptions; + errors: Diagnostic[]; + }; + function convertTypeAcquisitionFromJson(jsonOptions: any, basePath: string, configFileName?: string): { + options: TypeAcquisition; + errors: Diagnostic[]; + }; +} declare namespace ts { interface Node { getSourceFile(): SourceFile; @@ -4883,6 +5136,15 @@ declare namespace ts { */ function getDefaultLibFilePath(options: CompilerOptions): string; } +declare namespace ts { + /** + * Transform one or more nodes using the supplied transformers. + * @param source A single `Node` or an array of `Node` objects. + * @param transformers An array of `TransformerFactory` callbacks used to process the transformation. + * @param compilerOptions Optional compiler options. + */ + function transform(source: T | T[], transformers: TransformerFactory[], compilerOptions?: CompilerOptions): TransformationResult; +} declare namespace ts.server { interface CompressedData { length: number; @@ -7273,181 +7535,6 @@ declare namespace ts.server.protocol { ESNext = "ESNext" } } -declare namespace ts.server { - interface ServerCancellationToken extends HostCancellationToken { - setRequest(requestId: number): void; - resetRequest(requestId: number): void; - } - const nullCancellationToken: ServerCancellationToken; - interface PendingErrorCheck { - fileName: NormalizedPath; - project: Project; - } - type CommandNames = protocol.CommandTypes; - const CommandNames: any; - function formatMessage(msg: T, logger: Logger, byteLength: (s: string, encoding: string) => number, newLine: string): string; - type Event = (body: T, eventName: string) => void; - interface EventSender { - event: Event; - } - interface SessionOptions { - host: ServerHost; - cancellationToken: ServerCancellationToken; - useSingleInferredProject: boolean; - useInferredProjectPerProjectRoot: boolean; - typingsInstaller: ITypingsInstaller; - byteLength: (buf: string, encoding?: string) => number; - hrtime: (start?: number[]) => number[]; - logger: Logger; - /** - * If falsy, all events are suppressed. - */ - canUseEvents: boolean; - eventHandler?: ProjectServiceEventHandler; - /** Has no effect if eventHandler is also specified. */ - suppressDiagnosticEvents?: boolean; - syntaxOnly?: boolean; - throttleWaitMilliseconds?: number; - globalPlugins?: ReadonlyArray; - pluginProbeLocations?: ReadonlyArray; - allowLocalPluginLoads?: boolean; - } - class Session implements EventSender { - private readonly gcTimer; - protected projectService: ProjectService; - private changeSeq; - private currentRequestId; - private errorCheck; - protected host: ServerHost; - private readonly cancellationToken; - protected readonly typingsInstaller: ITypingsInstaller; - protected byteLength: (buf: string, encoding?: string) => number; - private hrtime; - protected logger: Logger; - protected canUseEvents: boolean; - private suppressDiagnosticEvents?; - private eventHandler; - constructor(opts: SessionOptions); - private sendRequestCompletedEvent; - private defaultEventHandler; - private projectsUpdatedInBackgroundEvent; - logError(err: Error, cmd: string): void; - send(msg: protocol.Message): void; - event(body: T, eventName: string): void; - /** @deprecated */ - output(info: any, cmdName: string, reqSeq?: number, errorMsg?: string): void; - private doOutput; - private semanticCheck; - private syntacticCheck; - private suggestionCheck; - private sendDiagnosticsEvent; - /** It is the caller's responsibility to verify that `!this.suppressDiagnosticEvents`. */ - private updateErrorCheck; - private cleanProjects; - private cleanup; - private getEncodedSemanticClassifications; - private getProject; - private getConfigFileAndProject; - private getConfigFileDiagnostics; - private convertToDiagnosticsWithLinePositionFromDiagnosticFile; - private getCompilerOptionsDiagnostics; - private convertToDiagnosticsWithLinePosition; - private getDiagnosticsWorker; - private getDefinition; - private getDefinitionAndBoundSpan; - private mapDefinitionInfo; - private toFileSpan; - private getTypeDefinition; - private getImplementation; - private getOccurrences; - private getSyntacticDiagnosticsSync; - private getSemanticDiagnosticsSync; - private getSuggestionDiagnosticsSync; - private getDocumentHighlights; - private setCompilerOptionsForInferredProjects; - private getProjectInfo; - private getProjectInfoWorker; - private getRenameInfo; - private getProjects; - private getDefaultProject; - private getRenameLocations; - private getReferences; - /** - * @param fileName is the name of the file to be opened - * @param fileContent is a version of the file content that is known to be more up to date than the one on disk - */ - private openClientFile; - private getPosition; - private getPositionInFile; - private getFileAndProject; - private getFileAndLanguageServiceForSyntacticOperation; - private getFileAndProjectWorker; - private getOutliningSpans; - private getTodoComments; - private getDocCommentTemplate; - private getSpanOfEnclosingComment; - private getIndentation; - private getBreakpointStatement; - private getNameOrDottedNameSpan; - private isValidBraceCompletion; - private getQuickInfoWorker; - private getFormattingEditsForRange; - private getFormattingEditsForRangeFull; - private getFormattingEditsForDocumentFull; - private getFormattingEditsAfterKeystrokeFull; - private getFormattingEditsAfterKeystroke; - private getCompletions; - private getCompletionEntryDetails; - private getCompileOnSaveAffectedFileList; - private emitFile; - private getSignatureHelpItems; - private createCheckList; - private getDiagnostics; - private change; - private reload; - private saveToTmp; - private closeClientFile; - private mapLocationNavigationBarItems; - private getNavigationBarItems; - private toLocationNavigationTree; - private toLocationTextSpan; - private getNavigationTree; - private getNavigateToItems; - private getSupportedCodeFixes; - private isLocation; - private extractPositionAndRange; - private getApplicableRefactors; - private getEditsForRefactor; - private organizeImports; - private getCodeFixes; - private getCombinedCodeFix; - private applyCodeActionCommand; - private getStartAndEndPosition; - private mapCodeAction; - private mapTextChangesToCodeEdits; - private mapTextChangesToCodeEditsUsingScriptinfo; - private convertTextChangeToCodeEdit; - private getBraceMatching; - private getDiagnosticsForProject; - getCanonicalFileName(fileName: string): string; - exit(): void; - private notRequired; - private requiredResponse; - private handlers; - addProtocolHandler(command: string, handler: (request: protocol.Request) => HandlerResponse): void; - private setCurrentRequest; - private resetCurrentRequest; - executeWithRequestId(requestId: number, f: () => T): T; - executeCommand(request: protocol.Request): HandlerResponse; - onMessage(message: string): void; - private getFormatOptions; - private getPreferences; - } - interface HandlerResponse { - response?: {}; - responseRequired?: boolean; - } -} declare namespace ts.server { class ScriptInfo { private readonly host; @@ -7522,17 +7609,6 @@ declare namespace ts.server { onProjectClosed(project: Project): void; } } -declare namespace ts { - interface EmitOutput { - outputFiles: OutputFile[]; - emitSkipped: boolean; - } - interface OutputFile { - name: string; - writeByteOrderMark: boolean; - text: string; - } -} declare namespace ts.server { enum ProjectKind { Inferred = 0, @@ -8108,6 +8184,181 @@ declare namespace ts.server { openExternalProject(proj: protocol.ExternalProject): void; } } +declare namespace ts.server { + interface ServerCancellationToken extends HostCancellationToken { + setRequest(requestId: number): void; + resetRequest(requestId: number): void; + } + const nullCancellationToken: ServerCancellationToken; + interface PendingErrorCheck { + fileName: NormalizedPath; + project: Project; + } + type CommandNames = protocol.CommandTypes; + const CommandNames: any; + function formatMessage(msg: T, logger: Logger, byteLength: (s: string, encoding: string) => number, newLine: string): string; + type Event = (body: T, eventName: string) => void; + interface EventSender { + event: Event; + } + interface SessionOptions { + host: ServerHost; + cancellationToken: ServerCancellationToken; + useSingleInferredProject: boolean; + useInferredProjectPerProjectRoot: boolean; + typingsInstaller: ITypingsInstaller; + byteLength: (buf: string, encoding?: string) => number; + hrtime: (start?: number[]) => number[]; + logger: Logger; + /** + * If falsy, all events are suppressed. + */ + canUseEvents: boolean; + eventHandler?: ProjectServiceEventHandler; + /** Has no effect if eventHandler is also specified. */ + suppressDiagnosticEvents?: boolean; + syntaxOnly?: boolean; + throttleWaitMilliseconds?: number; + globalPlugins?: ReadonlyArray; + pluginProbeLocations?: ReadonlyArray; + allowLocalPluginLoads?: boolean; + } + class Session implements EventSender { + private readonly gcTimer; + protected projectService: ProjectService; + private changeSeq; + private currentRequestId; + private errorCheck; + protected host: ServerHost; + private readonly cancellationToken; + protected readonly typingsInstaller: ITypingsInstaller; + protected byteLength: (buf: string, encoding?: string) => number; + private hrtime; + protected logger: Logger; + protected canUseEvents: boolean; + private suppressDiagnosticEvents?; + private eventHandler; + constructor(opts: SessionOptions); + private sendRequestCompletedEvent; + private defaultEventHandler; + private projectsUpdatedInBackgroundEvent; + logError(err: Error, cmd: string): void; + send(msg: protocol.Message): void; + event(body: T, eventName: string): void; + /** @deprecated */ + output(info: any, cmdName: string, reqSeq?: number, errorMsg?: string): void; + private doOutput; + private semanticCheck; + private syntacticCheck; + private suggestionCheck; + private sendDiagnosticsEvent; + /** It is the caller's responsibility to verify that `!this.suppressDiagnosticEvents`. */ + private updateErrorCheck; + private cleanProjects; + private cleanup; + private getEncodedSemanticClassifications; + private getProject; + private getConfigFileAndProject; + private getConfigFileDiagnostics; + private convertToDiagnosticsWithLinePositionFromDiagnosticFile; + private getCompilerOptionsDiagnostics; + private convertToDiagnosticsWithLinePosition; + private getDiagnosticsWorker; + private getDefinition; + private getDefinitionAndBoundSpan; + private mapDefinitionInfo; + private toFileSpan; + private getTypeDefinition; + private getImplementation; + private getOccurrences; + private getSyntacticDiagnosticsSync; + private getSemanticDiagnosticsSync; + private getSuggestionDiagnosticsSync; + private getDocumentHighlights; + private setCompilerOptionsForInferredProjects; + private getProjectInfo; + private getProjectInfoWorker; + private getRenameInfo; + private getProjects; + private getDefaultProject; + private getRenameLocations; + private getReferences; + /** + * @param fileName is the name of the file to be opened + * @param fileContent is a version of the file content that is known to be more up to date than the one on disk + */ + private openClientFile; + private getPosition; + private getPositionInFile; + private getFileAndProject; + private getFileAndLanguageServiceForSyntacticOperation; + private getFileAndProjectWorker; + private getOutliningSpans; + private getTodoComments; + private getDocCommentTemplate; + private getSpanOfEnclosingComment; + private getIndentation; + private getBreakpointStatement; + private getNameOrDottedNameSpan; + private isValidBraceCompletion; + private getQuickInfoWorker; + private getFormattingEditsForRange; + private getFormattingEditsForRangeFull; + private getFormattingEditsForDocumentFull; + private getFormattingEditsAfterKeystrokeFull; + private getFormattingEditsAfterKeystroke; + private getCompletions; + private getCompletionEntryDetails; + private getCompileOnSaveAffectedFileList; + private emitFile; + private getSignatureHelpItems; + private createCheckList; + private getDiagnostics; + private change; + private reload; + private saveToTmp; + private closeClientFile; + private mapLocationNavigationBarItems; + private getNavigationBarItems; + private toLocationNavigationTree; + private toLocationTextSpan; + private getNavigationTree; + private getNavigateToItems; + private getSupportedCodeFixes; + private isLocation; + private extractPositionAndRange; + private getApplicableRefactors; + private getEditsForRefactor; + private organizeImports; + private getCodeFixes; + private getCombinedCodeFix; + private applyCodeActionCommand; + private getStartAndEndPosition; + private mapCodeAction; + private mapTextChangesToCodeEdits; + private mapTextChangesToCodeEditsUsingScriptinfo; + private convertTextChangeToCodeEdit; + private getBraceMatching; + private getDiagnosticsForProject; + getCanonicalFileName(fileName: string): string; + exit(): void; + private notRequired; + private requiredResponse; + private handlers; + addProtocolHandler(command: string, handler: (request: protocol.Request) => HandlerResponse): void; + private setCurrentRequest; + private resetCurrentRequest; + executeWithRequestId(requestId: number, f: () => T): T; + executeCommand(request: protocol.Request): HandlerResponse; + onMessage(message: string): void; + private getFormatOptions; + private getPreferences; + } + interface HandlerResponse { + response?: {}; + responseRequired?: boolean; + } +} export = ts; export as namespace ts; \ No newline at end of file From 79ad7df7e16b58474a641cf8ce57364faf0c3869 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Wed, 11 Apr 2018 15:59:19 -0700 Subject: [PATCH 046/232] Improve user test tsconfig (#23325) * Improve user test tsconfigs Also incorporate updates from the packages themselves (they fixed some of the bugs the compiler noticed). * Fix enhanced-resolve module resolution * Update baselines after merge w/master --- .../reference/user/adonis-framework.log | 11 - tests/baselines/reference/user/antd.log | 20 - .../user/chrome-devtools-frontend.log | 904 +----------------- tests/baselines/reference/user/debug.log | 3 - .../reference/user/enhanced-resolve.log | 1 - tests/baselines/reference/user/npm.log | 18 +- tests/baselines/reference/user/npmlog.log | 1 - tests/baselines/reference/user/uglify-js.log | 150 ++- tests/baselines/reference/user/webpack.log | 2 - .../TypeScript-Node-Starter | 2 +- .../chrome-devtools-frontend/tsconfig.json | 1 + .../cases/user/enhanced-resolve/tsconfig.json | 2 + tests/cases/user/npm/tsconfig.json | 2 +- 13 files changed, 114 insertions(+), 1003 deletions(-) delete mode 100644 tests/baselines/reference/user/antd.log diff --git a/tests/baselines/reference/user/adonis-framework.log b/tests/baselines/reference/user/adonis-framework.log index 2e91020c166..c04db0f663c 100644 --- a/tests/baselines/reference/user/adonis-framework.log +++ b/tests/baselines/reference/user/adonis-framework.log @@ -1,6 +1,5 @@ Exit Code: 1 Standard output: -node_modules/adonis-framework/lib/util.js(18,14): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/lib/util"' because it is not a variable. node_modules/adonis-framework/lib/util.js(24,13): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/providers/ConfigProvider.js(9,33): error TS2307: Cannot find module 'adonis-fold'. node_modules/adonis-framework/providers/EncryptionProvider.js(9,33): error TS2307: Cannot find module 'adonis-fold'. @@ -64,13 +63,10 @@ node_modules/adonis-framework/src/Exceptions/index.js(205,12): error TS2554: Exp node_modules/adonis-framework/src/File/index.js(175,5): error TS2322: Type 'Promise' is not assignable to type 'boolean'. node_modules/adonis-framework/src/File/index.js(273,5): error TS2322: Type 'boolean | ""' is not assignable to type 'boolean'. Type '""' is not assignable to type 'boolean'. -node_modules/adonis-framework/src/Hash/index.js(19,12): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Hash/index"' because it is not a variable. -node_modules/adonis-framework/src/Helpers/index.js(49,15): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Helpers/index"' because it is not a variable. node_modules/adonis-framework/src/Helpers/index.js(105,3): error TS2322: Type 'null' is not assignable to type 'string'. node_modules/adonis-framework/src/Helpers/index.js(106,3): error TS2322: Type 'null' is not assignable to type 'string'. node_modules/adonis-framework/src/Helpers/index.js(330,23): error TS2532: Object is possibly 'undefined'. node_modules/adonis-framework/src/Middleware/index.js(13,21): error TS2307: Cannot find module 'adonis-fold'. -node_modules/adonis-framework/src/Middleware/index.js(57,18): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Middleware/index"' because it is not a variable. node_modules/adonis-framework/src/Middleware/index.js(92,19): error TS2538: Type 'undefined' cannot be used as an index type. node_modules/adonis-framework/src/Middleware/index.js(230,20): error TS8024: JSDoc '@param' tag has name 'Middleware', but there is no parameter with that name. node_modules/adonis-framework/src/Request/index.js(64,15): error TS2304: Cannot find name 'Mixed'. @@ -103,8 +99,6 @@ node_modules/adonis-framework/src/Response/index.js(95,16): error TS2304: Cannot node_modules/adonis-framework/src/Response/index.js(172,15): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Response/index.js(299,15): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Response/index.js(323,15): error TS2304: Cannot find name 'Mixed'. -node_modules/adonis-framework/src/Route/domains.js(14,15): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Route/domains"' because it is not a variable. -node_modules/adonis-framework/src/Route/helpers.js(15,20): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Route/helpers"' because it is not a variable. node_modules/adonis-framework/src/Route/helpers.js(22,13): error TS2304: Cannot find name 'Any'. node_modules/adonis-framework/src/Route/helpers.js(34,3): error TS2322: Type 'string | string[]' is not assignable to type 'string'. Type 'string[]' is not assignable to type 'string'. @@ -112,7 +106,6 @@ node_modules/adonis-framework/src/Route/helpers.js(42,13): error TS2304: Cannot node_modules/adonis-framework/src/Route/helpers.js(54,21): error TS8024: JSDoc '@param' tag has name 'url', but there is no parameter with that name. node_modules/adonis-framework/src/Route/helpers.js(131,21): error TS8024: JSDoc '@param' tag has name 'format', but there is no parameter with that name. node_modules/adonis-framework/src/Route/index.js(30,5): error TS2322: Type 'null' is not assignable to type 'string'. -node_modules/adonis-framework/src/Route/index.js(36,13): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Route/index"' because it is not a variable. node_modules/adonis-framework/src/Route/index.js(58,3): error TS2322: Type 'null' is not assignable to type 'string'. node_modules/adonis-framework/src/Route/index.js(321,13): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Route/index.js(321,20): error TS8029: JSDoc '@param' tag has name 'keys', but there is no parameter with that name. It would match 'arguments' if it had an array type. @@ -134,7 +127,6 @@ node_modules/adonis-framework/src/Route/resource.js(198,22): error TS8029: JSDoc node_modules/adonis-framework/src/Route/resource.js(233,15): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Route/resource.js(261,15): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Route/resource.js(296,15): error TS2304: Cannot find name 'Mixed'. -node_modules/adonis-framework/src/Server/helpers.js(9,15): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Server/helpers"' because it is not a variable. node_modules/adonis-framework/src/Server/helpers.js(17,29): error TS8024: JSDoc '@param' tag has name 'appNamespace', but there is no parameter with that name. node_modules/adonis-framework/src/Server/index.js(17,21): error TS2307: Cannot find module 'adonis-fold'. node_modules/adonis-framework/src/Server/index.js(54,21): error TS2554: Expected 4 arguments, but got 3. @@ -156,7 +148,6 @@ node_modules/adonis-framework/src/Session/SessionManager.js(13,21): error TS2307 node_modules/adonis-framework/src/Session/SessionManager.js(69,22): error TS2339: Property 'drivers' does not exist on type 'Function'. node_modules/adonis-framework/src/Session/SessionManager.js(69,49): error TS2339: Property 'drivers' does not exist on type 'Function'. node_modules/adonis-framework/src/Session/SessionManager.js(71,76): error TS2339: Property 'drivers' does not exist on type 'Function'. -node_modules/adonis-framework/src/Session/Store.js(21,15): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/Session/Store"' because it is not a variable. node_modules/adonis-framework/src/Session/Store.js(28,13): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Session/Store.js(80,13): error TS2304: Cannot find name 'Mixed'. node_modules/adonis-framework/src/Session/index.js(11,2): error TS1003: Identifier expected. @@ -197,11 +188,9 @@ node_modules/adonis-framework/src/View/Form/index.js(601,51): error TS2345: Argu Type 'number' is not assignable to type 'string | any[]'. node_modules/adonis-framework/src/View/index.js(50,23): error TS8024: JSDoc '@param' tag has name 'template_path', but there is no parameter with that name. node_modules/adonis-framework/src/View/index.js(113,15): error TS2304: Cannot find name 'Mixed'. -node_modules/adonis-framework/src/View/loader.js(18,1): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/View/loader"' because it is not a variable. node_modules/adonis-framework/src/View/services.js(10,21): error TS2307: Cannot find module 'adonis-fold'. node_modules/adonis-framework/src/View/services.js(25,23): error TS8024: JSDoc '@param' tag has name 'lexer', but there is no parameter with that name. node_modules/adonis-framework/src/View/services.js(34,22): error TS2339: Property 'CallExtensionAsync' does not exist on type 'Function'. -node_modules/adonis-framework/src/View/services.js(65,1): error TS2539: Cannot assign to '"/home/nathansa/ts/tests/cases/user/adonis-framework/node_modules/adonis-framework/src/View/services"' because it is not a variable. diff --git a/tests/baselines/reference/user/antd.log b/tests/baselines/reference/user/antd.log deleted file mode 100644 index c3ac31f6eaa..00000000000 --- a/tests/baselines/reference/user/antd.log +++ /dev/null @@ -1,20 +0,0 @@ -Exit Code: 1 -Standard output: -node_modules/antd/lib/badge/ScrollNumber.d.ts(28,81): error TS2344: Type '{ className: string; style: { transition: string | boolean; msTransform: string; WebkitTransform:...' does not satisfy the constraint 'HTMLAttributes'. - Types of property 'style' are incompatible. - Type '{ transition: string | boolean; msTransform: string; WebkitTransform: string; transform: string; }' is not assignable to type 'CSSProperties | undefined'. - Type '{ transition: string | boolean; msTransform: string; WebkitTransform: string; transform: string; }' is not assignable to type 'CSSProperties'. - Types of property 'transition' are incompatible. - Type 'string | boolean' is not assignable to type 'string | undefined'. - Type 'true' is not assignable to type 'string | undefined'. -node_modules/antd/lib/badge/ScrollNumber.d.ts(38,77): error TS2344: Type '{ className: string; style: { transition: string | boolean; msTransform: string; WebkitTransform:...' does not satisfy the constraint 'HTMLAttributes'. - Types of property 'style' are incompatible. - Type '{ transition: string | boolean; msTransform: string; WebkitTransform: string; transform: string; }' is not assignable to type 'CSSProperties | undefined'. - Type '{ transition: string | boolean; msTransform: string; WebkitTransform: string; transform: string; }' is not assignable to type 'CSSProperties'. - Types of property 'transition' are incompatible. - Type 'string | boolean' is not assignable to type 'string | undefined'. - Type 'true' is not assignable to type 'string | undefined'. - - - -Standard error: diff --git a/tests/baselines/reference/user/chrome-devtools-frontend.log b/tests/baselines/reference/user/chrome-devtools-frontend.log index e3157063e94..21c7841f0e9 100644 --- a/tests/baselines/reference/user/chrome-devtools-frontend.log +++ b/tests/baselines/reference/user/chrome-devtools-frontend.log @@ -194,14 +194,11 @@ node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(213,14): error TS2551: Property '_domNode' does not exist on type 'AccessibilityNode'. Did you mean 'isDOMNode'? node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(214,29): error TS2551: Property '_domNode' does not exist on type 'AccessibilityNode'. Did you mean 'isDOMNode'? node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(232,26): error TS2339: Property 'accessibilityAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(245,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(255,24): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityModel.js(303,26): error TS2339: Property 'printSelfAndChildren' does not exist on type 'DOMNode'. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(9,11): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(13,40): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(14,41): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(56,28): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. -node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(58,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(62,61): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(78,26): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. node_modules/chrome-devtools-frontend/front_end/accessibility/AccessibilityNodeView.js(88,45): error TS2694: Namespace 'Protocol' has no exported member 'Accessibility'. @@ -287,7 +284,6 @@ node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(49,2 node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(54,24): error TS2694: Namespace 'Protocol' has no exported member 'Animation'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(61,31): error TS2339: Property 'AnimationModel' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(65,31): error TS2339: Property 'remove' does not exist on type 'string[]'. -node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(91,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(104,45): error TS2339: Property 'AnimationModel' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(123,26): error TS2339: Property 'AnimationModel' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationModel.js(168,33): error TS2339: Property 'AnimationModel' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. @@ -359,7 +355,6 @@ node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(8 node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(81,47): error TS2339: Property 'AnimationModel' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(89,19): error TS2339: Property 'AnimationModel' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(90,50): error TS2339: Property 'AnimationModel' does not exist on type '{ new (effect?: AnimationEffectReadOnly, timeline?: AnimationTimeline): Animation; prototype: Ani...'. -node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(94,24): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(103,57): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(105,28): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/animation/AnimationTimeline.js(110,48): error TS2339: Property 'createChild' does not exist on type 'Element'. @@ -540,7 +535,6 @@ node_modules/chrome-devtools-frontend/front_end/application_test_runner/Resource node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(18,20): error TS2339: Property 'mainTarget' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(30,19): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(31,16): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. -node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(40,21): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(48,18): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(56,16): error TS2339: Property 'resourceTreeModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/application_test_runner/ResourcesTestRunner.js(76,8): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? @@ -576,7 +570,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(45,63): Types of parameters 'serviceWorkerManager' and 'model' are incompatible. Type 'T' is not assignable to type 'ServiceWorkerManager'. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(94,50): error TS2339: Property 'asParsedURL' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(96,30): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(126,14): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(135,14): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(147,42): error TS2555: Expected at least 2 arguments, but got 1. @@ -605,7 +598,7 @@ node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(363,24): Type 'TemplateStringsArray' is not assignable to type 'string[]'. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(363,55): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(365,46): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(379,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. +node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(379,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(384,31): error TS2339: Property 'singleton' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(390,34): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/audits2/Audits2Panel.js(399,15): error TS2503: Cannot find namespace 'ReportRenderer'. @@ -789,7 +782,7 @@ node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestR node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(76,33): error TS2339: Property 'textElement' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(77,40): error TS2339: Property 'checkboxElement' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(89,29): error TS2339: Property 'disabled' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(102,24): error TS2461: Type 'NodeListOf' is not an array type. +node_modules/chrome-devtools-frontend/front_end/audits2_test_runner/Audits2TestRunner.js(102,24): error TS2488: Type 'NodeListOf' must have a '[Symbol.iterator]()' method that returns an iterator. node_modules/chrome-devtools-frontend/front_end/audits2_worker.js(5,11): error TS2339: Property 'Runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker.js(6,8): error TS2339: Property 'importScripts' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/Audits2Service.js(33,31): error TS1003: Identifier expected. @@ -808,181 +801,24 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2,121): error TS2554: Expected 1 arguments, but got 2. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2,141): error TS2554: Expected 1 arguments, but got 2. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2,203): error TS2339: Property 'code' does not exist on type 'Error'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(21,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(55,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(89,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(123,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(159,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(193,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(227,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(261,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(295,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(331,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(366,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(401,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(435,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(471,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(505,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(539,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(573,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(606,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(642,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(677,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(711,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(745,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(780,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(817,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(852,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(887,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(923,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(953,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(983,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1013,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1043,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1073,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1103,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1134,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1164,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1194,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1224,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1259,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1295,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1329,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1364,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1401,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1438,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1472,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1507,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1541,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1663,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1801,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(1903,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2066,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2153,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2335,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2371,16): error TS2569: Type 'Uint8Array' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2420,26): error TS2569: Type 'IterableIterator<[any, any]>' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2468,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2712,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2810,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(2902,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3017,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3096,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3181,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3380,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3434,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3576,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3650,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3706,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3713,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3807,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3897,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(3962,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4072,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4128,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4145,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4228,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4244,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4251,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4401,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4450,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4501,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4561,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4610,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4694,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4750,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4832,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4914,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(4976,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5096,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5200,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5290,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5432,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5494,9): error TS2339: Property 'stableSort' does not exist on type '{ category: any; group: any; duration: any; }[]'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5526,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5588,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5618,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5648,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5704,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5878,16): error TS2554: Expected 0-1 arguments, but got 2. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5879,17): error TS2554: Expected 0-1 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5950,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(5991,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6082,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6254,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6400,21): error TS2339: Property 'valuesArray' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6538,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6711,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6784,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6885,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(6964,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7034,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7063,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7088,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7193,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7290,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7344,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7457,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7533,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7599,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7669,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7746,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7825,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7907,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(7993,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8042,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8097,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8112,74): error TS2339: Property 'name' does not exist on type 'ComputedArtifact'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8232,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8382,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8450,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8623,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8675,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8679,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8683,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8787,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8813,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8898,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(8902,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9093,1): error TS2554: Expected 0-2 arguments, but got 3. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9117,1): error TS2554: Expected 0-2 arguments, but got 3. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9196,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9227,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9272,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9329,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9467,15): error TS2339: Property 'axe' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9708,34): error TS2345: Argument of type 'any[][]' is not assignable to parameter of type 'Iterable<[any, any]>'. - Types of property '[Symbol.iterator]' are incompatible. - Type '() => IterableIterator' is not assignable to type '() => Iterator<[any, any]>'. - Type 'IterableIterator' is not assignable to type 'Iterator<[any, any]>'. - Types of property 'next' are incompatible. - Type '{ (value?: any): IteratorResult; (value?: any): IteratorResult; }' is not assignable to type '{ (value?: any): IteratorResult<[any, any]>; (value?: any): IteratorResult<[any, any]>; }'. - Type 'IteratorResult' is not assignable to type 'IteratorResult<[any, any]>'. - Type 'any[]' is not assignable to type '[any, any]'. - Property '0' is missing in type 'any[]'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9948,10): error TS2693: 'ShadowRoot' only refers to a type, but is being used as a value here. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(9969,4): error TS2693: 'ShadowRoot' only refers to a type, but is being used as a value here. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(10092,16): error TS2304: Cannot find name 'd41d8cd98f00b204e9800998ecf8427e_LibraryDetectorTests'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(10513,19): error TS2461: Type 'NodeListOf' is not an array type. +node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(10513,19): error TS2488: Type 'NodeListOf' must have a '[Symbol.iterator]()' method that returns an iterator. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(10811,19): error TS2304: Cannot find name 'getElementsInDocument'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(11931,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(11938,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(11948,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12197,22): error TS2554: Expected 0 arguments, but got 2. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12286,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12327,24): error TS2554: Expected 0 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12810,22): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12980,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12985,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12990,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(12995,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(13000,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(13005,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(13607,7): error TS2339: Property 'protocolMethod' does not exist on type 'Error'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(13608,7): error TS2339: Property 'protocolError' does not exist on type 'Error'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(13744,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(13802,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(13841,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(14352,1): error TS2722: Cannot invoke an object which is possibly 'undefined'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(14860,28): error TS2339: Property '__nativeError' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(14940,8): error TS2339: Property '____lastLongTask' does not exist on type 'Window'. @@ -992,7 +828,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(14957,8): error TS2339: Property '____lhPerformanceObserver' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(14975,21): error TS2339: Property '____lastLongTask' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15145,7): error TS2339: Property 'code' does not exist on type 'Error'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15516,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15626,5): error TS2304: Cannot find name 'fs'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15629,17): error TS2304: Cannot find name 'fs'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15630,28): error TS2304: Cannot find name 'fs'. @@ -1008,7 +843,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15810,1): error TS2304: Cannot find name 'fs'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15814,1): error TS2304: Cannot find name 'fs'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15818,1): error TS2304: Cannot find name 'fs'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15842,20): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15873,16): error TS2339: Property '_logs' does not exist on type 'typeof ConsoleQuieter'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15873,37): error TS2339: Property '_logs' does not exist on type 'typeof ConsoleQuieter'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15876,16): error TS2339: Property '_logs' does not exist on type 'typeof ConsoleQuieter'. @@ -1016,32 +850,13 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15882,16): error TS2339: Property '_logs' does not exist on type 'typeof ConsoleQuieter'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15891,16): error TS2339: Property '_logs' does not exist on type 'typeof ConsoleQuieter'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15894,16): error TS2339: Property '_logs' does not exist on type 'typeof ConsoleQuieter'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15930,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15937,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15944,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15951,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(15958,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16016,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16023,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16030,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16037,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16044,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16100,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16107,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16114,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16121,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16213,5): error TS2554: Expected 0 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16219,5): error TS2554: Expected 0 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16432,35): error TS2569: Type 'IterableIterator<[any, any]>' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16581,25): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(16733,11): error TS2339: Property 'NodeTimingData' does not exist on type 'typeof Simulator'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(17089,26): error TS2339: Property '__proto__' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(17089,45): error TS2339: Property '__proto__' does not exist on type 'Document'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(17501,1): error TS2322: Type 'any[]' is not assignable to type 'string'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(17725,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(18010,1): error TS2554: Expected 0 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(18341,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(19246,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(19499,6): error TS2339: Property 'Util' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(19585,1): error TS2322: Type 'Promise<{ [x: string]: any; artifacts: any; auditResults: any[]; }>' is not assignable to type 'Promise'. Type '{ [x: string]: any; artifacts: any; auditResults: any[]; }' is not assignable to type 'void'. @@ -1260,22 +1075,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(30800,1): error TS2323: Cannot redeclare exported variable 'isPrimitive'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(30802,1): error TS2323: Cannot redeclare exported variable 'isBuffer'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(30828,1): error TS2323: Cannot redeclare exported variable 'log'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31010,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31014,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31018,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31022,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31026,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31030,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31034,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31038,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31042,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31046,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31050,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31054,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31058,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31062,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31066,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31070,12): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31089,1): error TS2323: Cannot redeclare exported variable 'log'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31094,37): error TS2304: Cannot find name 'chrome'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(31095,21): error TS2304: Cannot find name 'chrome'. @@ -1456,7 +1255,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(41572,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(41583,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(41644,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(41645,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(41735,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(41760,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(41768,18): error TS2339: Property 'asParsedURL' does not exist on type 'String'. @@ -1526,7 +1324,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(42262,12): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(42270,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(42275,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(42319,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(42329,12): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(42337,12): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(42346,12): error TS2304: Cannot find name 'WebInspector'. @@ -1655,9 +1452,7 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44340,15): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44348,15): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44356,15): error TS2339: Property 'inverse' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44359,16): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44361,8): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44428,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44469,8): error TS2339: Property 'pushAll' does not exist on type 'any[]'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44495,27): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(44595,19): error TS2339: Property 'spread' does not exist on type 'Promise'. @@ -1753,7 +1548,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(46776,24): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(46785,25): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(46786,26): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(46846,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(46882,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(46882,38): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(46891,90): error TS2304: Cannot find name 'WebInspector'. @@ -1804,7 +1598,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(47454,27): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(47481,16): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(47531,19): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(47544,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(47575,15): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(47623,18): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(47696,1): error TS2304: Cannot find name 'WebInspector'. @@ -1908,68 +1701,18 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48725,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48728,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48730,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48747,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48752,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48760,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48765,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48771,21): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48781,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48786,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48794,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48802,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48814,31): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48860,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48896,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48901,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48909,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48914,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48925,31): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48931,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48941,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48951,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48956,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48964,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48988,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(48993,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49001,31): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49010,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49015,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49023,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49028,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49087,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49092,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49100,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49105,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49114,31): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49121,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49126,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49134,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49189,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49218,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49226,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49234,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49241,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49263,31): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49281,31): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49296,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49299,22): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49306,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49311,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49333,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49338,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49346,31): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49352,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49357,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49361,31): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49367,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49394,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49397,23): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49404,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49407,21): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49435,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49449,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49517,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49533,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49565,25): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49656,14): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49676,8): error TS2304: Cannot find name 'WebInspector'. @@ -1988,11 +1731,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49860,11): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49872,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49890,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49894,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49902,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49910,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49918,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49926,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49936,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(49943,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(50006,1): error TS2304: Cannot find name 'WebInspector'. @@ -2846,8 +2584,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54594,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54605,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54609,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54613,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54618,5): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54621,31): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54624,11): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(54637,1): error TS2304: Cannot find name 'WebInspector'. @@ -3176,18 +2912,15 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59352,12): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59353,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59354,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59355,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59367,17): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59405,92): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59423,22): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59424,19): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59442,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59442,53): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59469,12): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59470,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59471,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59472,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59473,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59538,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59540,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59543,22): error TS2304: Cannot find name 'WebInspector'. @@ -3196,7 +2929,6 @@ node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighth node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59552,10): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59560,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59562,1): error TS2304: Cannot find name 'WebInspector'. -node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59563,18): error TS2569: Type 'Map' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59566,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59570,1): error TS2304: Cannot find name 'WebInspector'. node_modules/chrome-devtools-frontend/front_end/audits2_worker/lighthouse/lighthouse-background.js(59576,19): error TS2304: Cannot find name 'WebInspector'. @@ -3524,7 +3256,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(60 Types of parameters 'debuggerModel' and 'model' are incompatible. Type 'T' is not assignable to type 'DebuggerModel'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(97,52): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(114,30): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(120,52): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(123,34): error TS2339: Property 'clear' does not exist on type 'Multimap'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(153,34): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. @@ -3558,8 +3289,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(67 Types of property 'modelAdded' are incompatible. Type '(debuggerModel: DebuggerModel) => void' is not assignable to type '(model: T) => void'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(713,51): error TS2339: Property 'valuesArray' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(750,28): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(788,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(863,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(905,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(1012,37): error TS2339: Property 'length' does not exist on type 'V'. @@ -3572,7 +3301,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js( Type 'T' is not assignable to type 'CSSModel'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(64,19): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: any; Regular: string; Inline: string; Attributes: string; }' and 'string'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(104,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'rawLocations' must be of type 'CSSLocation[]', but here has type 'any[]'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(105,27): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(106,20): error TS2339: Property 'pushAll' does not exist on type 'CSSLocation[]'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(126,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(132,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. @@ -3599,7 +3327,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.j node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(218,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/ContentProviderBasedProject.js(39,25): error TS2694: Namespace 'Workspace' has no exported member 'projectTypes'. node_modules/chrome-devtools-frontend/front_end/bindings/ContentProviderBasedProject.js(180,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/bindings/ContentProviderBasedProject.js(233,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(26,52): error TS2345: Argument of type 'this' is not assignable to parameter of type '{ [x: string]: any; modelAdded(model: T): void; modelRemoved(model: T): void; }'. Type 'DebuggerWorkspaceBinding' is not assignable to type '{ [x: string]: any; modelAdded(model: T): void; modelRemoved(model: T): void; }'. Types of property 'modelAdded' are incompatible. @@ -3610,8 +3337,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBindin node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(85,5): error TS2322: Type 'StackTraceTopFrameLocation' is not assignable to type '{ [x: string]: any; update(): void; uiLocation(): UILocation; dispose(): void; isBlackboxed(): bo...'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(85,5): error TS2322: Type 'StackTraceTopFrameLocation' is not assignable to type '{ [x: string]: any; update(): void; uiLocation(): UILocation; dispose(): void; isBlackboxed(): bo...'. Property '_updateScheduled' does not exist on type '{ [x: string]: any; update(): void; uiLocation(): UILocation; dispose(): void; isBlackboxed(): bo...'. -node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(143,27): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(144,11): error TS2403: Subsequent variable declarations must have the same type. Variable 'rawLocation' must be of type 'Location', but here has type 'any'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(195,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(207,34): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(230,22): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -3635,20 +3360,16 @@ node_modules/chrome-devtools-frontend/front_end/bindings/FileUtils.js(130,16): e node_modules/chrome-devtools-frontend/front_end/bindings/FileUtils.js(143,22): error TS2339: Property 'readyState' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/bindings/FileUtils.js(146,31): error TS2339: Property 'result' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/bindings/FileUtils.js(178,32): error TS2339: Property 'error' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/bindings/FileUtils.js(190,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/bindings/FileUtils.js(194,23): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/bindings/FileUtils.js(227,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/LiveLocation.js(11,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/bindings/LiveLocation.js(18,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/bindings/LiveLocation.js(93,26): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(158,14): error TS2551: Property 'networkProjectManager' does not exist on type 'typeof Bindings'. Did you mean 'NetworkProjectManager'? node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(175,14): error TS2551: Property 'networkProjectManager' does not exist on type 'typeof Bindings'. Did you mean 'NetworkProjectManager'? node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(223,37): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(270,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(286,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(308,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(330,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/bindings/NetworkProject.js(338,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings/PresentationConsoleMessageHelper.js(66,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/PresentationConsoleMessageHelper.js(130,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/PresentationConsoleMessageHelper.js(181,19): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: any; Verbose: string; Info: string; Warning: string; Error: string; }' and 'string'. @@ -3692,7 +3413,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(43 node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(63,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(90,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(108,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(114,27): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(124,52): error TS2345: Argument of type 'T' is not assignable to parameter of type 'CSSStyleSheetHeader'. node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(136,63): error TS2345: Argument of type 'CSSStyleSheetHeader' is not assignable to parameter of type 'T'. node_modules/chrome-devtools-frontend/front_end/bindings/SASSSourceMapping.js(161,17): error TS2339: Property 'pushAll' does not exist on type 'any[]'. @@ -3701,19 +3421,15 @@ node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js( node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(111,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(129,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(146,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(157,27): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(192,26): error TS2339: Property 'addEventListener' does not exist on type 'UISourceCode'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(194,26): error TS2339: Property 'addEventListener' does not exist on type 'UISourceCode'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(229,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(239,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(251,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(280,24): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(307,26): error TS2339: Property 'firstValue' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(315,26): error TS2339: Property 'firstValue' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(323,26): error TS2339: Property 'firstValue' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(331,26): error TS2339: Property 'firstValue' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/bindings/StylesSourceMapping.js(342,26): error TS2339: Property 'firstValue' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/bindings/TempFile.js(63,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/bindings/TempFile.js(91,25): error TS2304: Cannot find name 'FileError'. node_modules/chrome-devtools-frontend/front_end/bindings/TempFile.js(96,42): error TS2304: Cannot find name 'FileError'. node_modules/chrome-devtools-frontend/front_end/bindings/TempFile.js(176,25): error TS2304: Cannot find name 'FileError'. @@ -3741,7 +3457,6 @@ node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTes node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTestRunner.js(108,11): error TS2339: Property 'src' does not exist on type 'HTMLElement'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTestRunner.js(150,14): error TS2339: Property 'cssModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTestRunner.js(159,16): error TS2339: Property 'cssModel' does not exist on type 'typeof TestRunner'. -node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTestRunner.js(169,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTestRunner.js(190,27): error TS2339: Property 'debuggerModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTestRunner.js(191,32): error TS2339: Property 'debuggerModel' does not exist on type 'typeof TestRunner'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/BindingsTestRunner.js(197,27): error TS2339: Property 'cssModel' does not exist on type 'typeof TestRunner'. @@ -3754,16 +3469,13 @@ node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFil node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js(107,8): error TS2339: Property 'isDirectory' does not exist on type 'typeof TestFileSystem'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js(108,8): error TS2339: Property '_timestamp' does not exist on type 'typeof TestFileSystem'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js(109,8): error TS2339: Property '_parent' does not exist on type 'typeof TestFileSystem'. -node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js(113,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js(263,8): error TS2339: Property '_children' does not exist on type 'typeof TestFileSystem'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js(275,8): error TS2551: Property '_entry' does not exist on type 'typeof TestFileSystem'. Did you mean 'Entry'? node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js(276,8): error TS2339: Property '_modificationTimesDelta' does not exist on type 'typeof TestFileSystem'. -node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/OverridesTestRunner.js(7,13): error TS1055: Type '{ isolatedFileSystem: IsolatedFileSystem; project: { [x: string]: any; workspace(): Workspace; id...' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. +node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/OverridesTestRunner.js(7,13): error TS1064: The return type of an async function or method must be the global Promise type. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/OverridesTestRunner.js(23,75): error TS2345: Argument of type 'boolean' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/PersistenceTestRunner.js(76,79): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/PersistenceTestRunner.js(77,82): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. -node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/PersistenceTestRunner.js(84,25): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/bindings_test_runner/PersistenceTestRunner.js(106,25): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(7,51): error TS2694: Namespace 'ChangesView' has no exported member 'Row'. node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(9,2): error TS1131: Property or signature expected. node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(22,42): error TS2694: Namespace 'ChangesHighlighter' has no exported member 'DiffState'. @@ -4108,7 +3820,6 @@ node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(200,45) node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(217,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(221,31): error TS2345: Argument of type 'ToolbarButton' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. -node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(222,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(241,27): error TS2339: Property 'focus' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(251,13): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(251,39): error TS2339: Property 'sprintf' does not exist on type 'StringConstructor'. @@ -4179,7 +3890,6 @@ node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(870,45) node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(881,37): error TS2339: Property 'catchException' does not exist on type 'Promise'. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(918,37): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(933,29): error TS2339: Property 'keysArray' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(940,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(1009,39): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(1016,34): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/color_picker/Spectrum.js(1038,27): error TS2339: Property 'copyText' does not exist on type 'typeof InspectorFrontendHost'. @@ -4283,7 +3993,6 @@ node_modules/chrome-devtools-frontend/front_end/common/Object.js(159,15): error node_modules/chrome-devtools-frontend/front_end/common/Object.js(165,31): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/common/Object.js(172,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/common/OutputStream.js(13,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/common/OutputStream.js(31,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(122,26): error TS2339: Property '_urlRegexInstance' does not exist on type 'typeof ParsedURL'. node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(123,31): error TS2339: Property '_urlRegexInstance' does not exist on type 'typeof ParsedURL'. node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(141,22): error TS2339: Property '_urlRegexInstance' does not exist on type 'typeof ParsedURL'. @@ -4292,7 +4001,6 @@ node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(152,25): err node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(161,25): error TS2339: Property 'asParsedURL' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(211,34): error TS2339: Property 'asParsedURL' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(215,29): error TS2339: Property 'asParsedURL' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(293,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(375,18): error TS2339: Property 'asParsedURL' does not exist on type 'String'. node_modules/chrome-devtools-frontend/front_end/common/SegmentedRange.js(48,37): error TS2339: Property 'lowerBound' does not exist on type 'Segment[]'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(49,10): error TS2339: Property 'runtime' does not exist on type 'Window'. @@ -4316,7 +4024,6 @@ node_modules/chrome-devtools-frontend/front_end/common/Settings.js(273,31): erro node_modules/chrome-devtools-frontend/front_end/common/Settings.js(277,41): error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(281,31): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(285,44): error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. -node_modules/chrome-devtools-frontend/front_end/common/Settings.js(288,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(350,49): error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(393,27): error TS2345: Argument of type '{ [x: string]: any; pattern: string; }[]' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(401,3): error TS2416: Property 'get' in type 'RegExpSetting' is not assignable to the same property in base type 'Setting'. @@ -4364,18 +4071,17 @@ node_modules/chrome-devtools-frontend/front_end/common/Settings.js(615,9): error node_modules/chrome-devtools-frontend/front_end/common/Settings.js(616,33): error TS2339: Property 'length' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(663,61): error TS2345: Argument of type '{ [x: string]: any; }[]' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(678,74): error TS2345: Argument of type '{ [x: string]: any; 'throughput': number; 'latency': number; }' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/common/Settings.js(687,25): error TS2495: Type 'V[keyof V]' is not an array type or a string type. +node_modules/chrome-devtools-frontend/front_end/common/Settings.js(687,25): error TS2488: Type 'V[keyof V]' must have a '[Symbol.iterator]()' method that returns an iterator. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(690,17): error TS2345: Argument of type '{ [x: string]: any; }' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(717,17): error TS2345: Argument of type '{ title: any; value: { [x: string]: any; download: any; upload: any; latency: any; }; }[]' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(734,17): error TS2345: Argument of type '{ [x: string]: any; }' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(741,20): error TS2339: Property 'name' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(742,20): error TS2339: Property 'timeline' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(751,20): error TS2345: Argument of type '{ [x: string]: any; }' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/common/Settings.js(773,28): error TS2495: Type 'V' is not an array type or a string type. +node_modules/chrome-devtools-frontend/front_end/common/Settings.js(773,28): error TS2488: Type 'V' must have a '[Symbol.iterator]()' method that returns an iterator. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(795,20): error TS2339: Property 'product' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(825,34): error TS2339: Property 'length' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/common/Settings.js(826,30): error TS2345: Argument of type 'undefined[]' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/common/StaticContentProvider.js(68,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/common/Throttler.js(102,5): error TS2322: Type 'Timer' is not assignable to type 'number'. node_modules/chrome-devtools-frontend/front_end/common/Throttler.js(113,34): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/common/Throttler.js(114,18): error TS2339: Property 'FinishCallback' does not exist on type 'typeof Throttler'. @@ -4387,8 +4093,6 @@ node_modules/chrome-devtools-frontend/front_end/common/UIString.js(81,54): error node_modules/chrome-devtools-frontend/front_end/common/UIString.js(93,6): error TS2339: Property 'ls' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/common/Worker.js(52,30): error TS2339: Property 'data' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/common/Worker.js(82,25): error TS2315: Type 'MessageEvent' is not generic. -node_modules/chrome-devtools-frontend/front_end/common/Worker.js(84,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/common/Worker.js(91,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(39,45): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(40,46): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(41,38): error TS2555: Expected at least 2 arguments, but got 1. @@ -4404,7 +4108,6 @@ node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebar node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(157,13): error TS2339: Property '_item' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(177,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(180,45): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(221,22): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(233,106): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(234,38): error TS2300: Duplicate identifier 'Item'. node_modules/chrome-devtools-frontend/front_end/components/DOMBreakpointsSidebarPane.js(234,38): error TS2339: Property 'Item' does not exist on type 'typeof DOMBreakpointsSidebarPane'. @@ -4468,9 +4171,7 @@ node_modules/chrome-devtools-frontend/front_end/components/DockController.js(193 node_modules/chrome-devtools-frontend/front_end/components/DockController.js(193,5): error TS2322: Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. Property 'item' is missing in type 'ToolbarButton'. -node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(58,27): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(62,24): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(73,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(125,94): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(127,41): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(214,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. @@ -4506,7 +4207,7 @@ node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(565,16): node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(572,16): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(580,16): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(587,16): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(594,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. +node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(601,13): error TS2365: Operator '===' cannot be applied to types 'string' and 'V'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(611,46): error TS2339: Property 'openInNewTab' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(614,105): error TS2339: Property 'copyText' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(616,5): error TS2322: Type '({ [x: string]: any; section: string; title: string; handler: any; } | { section: string; title: ...' is not assignable to type '{ title: string; handler: () => any; }[]'. @@ -4529,7 +4230,6 @@ node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(732,19): node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(739,30): error TS2339: Property 'value' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(748,46): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(769,67): error TS2339: Property 'openInNewTab' does not exist on type 'typeof InspectorFrontendHost'. -node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(770,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/components/Linkifier.js(779,64): error TS2339: Property 'copyText' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/components/Reload.js(7,27): error TS2339: Property 'setIsDocked' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleContextSelector.js(8,9): error TS2339: Property 'ConsoleContextSelector' does not exist on type '{ new (): Console; prototype: Console; }'. @@ -4668,7 +4368,6 @@ node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(104,31): Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(111,31): error TS2345: Argument of type 'ToolbarSettingCheckbox' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarSettingCheckbox' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. - Property 'item' is missing in type 'ToolbarSettingCheckbox'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(112,31): error TS2345: Argument of type 'ToolbarItem' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarItem' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. Property 'item' is missing in type 'ToolbarItem'. @@ -4676,7 +4375,6 @@ node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(114,31): Type 'ToolbarText' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(116,31): error TS2345: Argument of type 'ToolbarSettingToggle' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarSettingToggle' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. - Property 'item' is missing in type 'ToolbarSettingToggle'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(119,53): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(120,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/console/ConsoleView.js(123,9): error TS2555: Expected at least 2 arguments, but got 1. @@ -4881,7 +4579,7 @@ node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(80 node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(848,32): error TS2339: Property 'ConsoleViewMessage' does not exist on type '{ new (): Console; prototype: Console; }'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(851,19): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(852,19): error TS2339: Property 'style' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(855,29): error TS2495: Type 'HTMLCollection' is not an array type or a string type. +node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(855,29): error TS2488: Type 'HTMLCollection' must have a '[Symbol.iterator]()' method that returns an iterator. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(873,17): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(877,19): error TS2339: Property 'format' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(884,13): error TS2339: Property 'style' does not exist on type 'Element'. @@ -4916,7 +4614,6 @@ node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(11 node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(1172,36): error TS2339: Property 'type' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(1175,34): error TS2339: Property 'type' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(1180,5): error TS2322: Type 'number' is not assignable to type 'string'. -node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(1183,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(1192,39): error TS2339: Property 'childTextNodes' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(1211,38): error TS2339: Property 'deepTextContent' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewMessage.js(1314,19): error TS2339: Property 'ConsoleViewMessage' does not exist on type '{ new (): Console; prototype: Console; }'. @@ -5021,7 +4718,6 @@ node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewport.js(294,3 Property 'item' does not exist on type 'number'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewport.js(325,34): error TS2339: Property 'getComponentSelection' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewport.js(349,32): error TS2339: Property 'lowerBound' does not exist on type 'Int32Array'. -node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewport.js(397,33): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewport.js(417,45): error TS2339: Property 'getComponentSelection' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/console/ConsoleViewport.js(432,33): error TS2339: Property 'item' does not exist on type 'number | { item: number; node: Node; offset: number; }'. Property 'item' does not exist on type 'number'. @@ -5136,7 +4832,6 @@ node_modules/chrome-devtools-frontend/front_end/console_test_runner/ConsoleTestR node_modules/chrome-devtools-frontend/front_end/console_test_runner/ConsoleTestRunner.js(510,29): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. node_modules/chrome-devtools-frontend/front_end/console_test_runner/ConsoleTestRunner.js(524,51): error TS2339: Property 'traverseNextTextNode' does not exist on type 'Node'. node_modules/chrome-devtools-frontend/front_end/console_test_runner/ConsoleTestRunner.js(528,25): error TS2339: Property 'traverseNextTextNode' does not exist on type 'Node'. -node_modules/chrome-devtools-frontend/front_end/console_test_runner/ConsoleTestRunner.js(557,22): error TS2522: The 'arguments' object cannot be referenced in an async function or method in ES3 and ES5. Consider using a standard function or method. node_modules/chrome-devtools-frontend/front_end/console_test_runner/ConsoleTestRunner.js(563,30): error TS2339: Property 'ConsoleView' does not exist on type '{ new (): Console; prototype: Console; }'. node_modules/chrome-devtools-frontend/front_end/cookie_table/CookiesTable.js(39,36): error TS1138: Parameter declaration expected. node_modules/chrome-devtools-frontend/front_end/cookie_table/CookiesTable.js(39,36): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. @@ -5181,9 +4876,7 @@ node_modules/chrome-devtools-frontend/front_end/cookie_table/CookiesTable.js(489 node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(7,2): error TS1131: Property or signature expected. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(13,10): error TS2339: Property 'RawLocation' does not exist on type 'typeof Coverage'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(50,68): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(59,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(115,45): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(124,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(135,32): error TS2694: Namespace 'Coverage' has no exported member 'RawLocation'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(169,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'location' must be of type 'Location', but here has type 'CSSLocation'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(170,31): error TS2339: Property 'header' does not exist on type 'Location'. @@ -5214,7 +4907,8 @@ node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(43, node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(45,41): error TS2339: Property 'asWidget' does not exist on type 'SortableDataGrid'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(55,35): error TS2339: Property 'rootNode' does not exist on type 'SortableDataGrid'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(76,20): error TS2339: Property 'rootNode' does not exist on type 'SortableDataGrid'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(85,22): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. +node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(87,30): error TS2339: Property 'parent' does not exist on type 'GridNode'. +node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(94,14): error TS2339: Property 'remove' does not exist on type 'GridNode'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(96,24): error TS2339: Property 'rootNode' does not exist on type 'SortableDataGrid'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(112,11): error TS2339: Property 'consume' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageListView.js(117,31): error TS2339: Property 'selectedNode' does not exist on type 'SortableDataGrid'. @@ -5248,22 +4942,21 @@ node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(8,57): node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(9,10): error TS2339: Property 'CoverageSegment' does not exist on type 'typeof Coverage'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(14,10): error TS2339: Property 'CoverageType' does not exist on type 'typeof Coverage'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(34,42): error TS2694: Namespace 'Protocol' has no exported member 'Profiler'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(73,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(99,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(100,37): error TS2339: Property 'CoverageType' does not exist on type 'typeof Coverage'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(103,46): error TS2345: Argument of type 'CSSStyleSheetHeader' is not assignable to parameter of type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. Property '_cssModel' does not exist on type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(116,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(131,31): error TS2694: Namespace 'Protocol' has no exported member 'Profiler'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(141,27): error TS2339: Property 'CoverageType' does not exist on type 'typeof Coverage'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(148,28): error TS2339: Property 'CoverageType' does not exist on type 'typeof Coverage'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(160,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(170,31): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(175,64): error TS2694: Namespace 'Coverage' has no exported member 'RangeUseCount'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(188,23): error TS2569: Type 'Map' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(190,48): error TS2694: Namespace 'Coverage' has no exported member 'RangeUseCount'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(191,11): error TS2403: Subsequent variable declarations must have the same type. Variable 'entry' must be of type 'any', but here has type 'CoverageInfo'. +node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(191,11): error TS2403: Subsequent variable declarations must have the same type. Variable 'entry' must be of type '[CSSStyleSheetHeader, any[]]', but here has type 'CoverageInfo'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(193,28): error TS2339: Property 'CoverageType' does not exist on type 'typeof Coverage'. +node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(197,5): error TS2322: Type '[CSSStyleSheetHeader, any[]][]' is not assignable to type 'CoverageInfo[]'. +node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(197,5): error TS2322: Type '[CSSStyleSheetHeader, any[]][]' is not assignable to type 'CoverageInfo[]'. + Type '[CSSStyleSheetHeader, any[]]' is not assignable to type 'CoverageInfo'. + Property '_contentProvider' is missing in type '[CSSStyleSheetHeader, any[]]'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(201,31): error TS2694: Namespace 'Coverage' has no exported member 'RangeUseCount'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(202,32): error TS2694: Namespace 'Coverage' has no exported member 'CoverageSegment'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageModel.js(210,23): error TS2339: Property 'peekLast' does not exist on type 'any[]'. @@ -5294,7 +4987,6 @@ node_modules/chrome-devtools-frontend/front_end/coverage/CoverageView.js(34,31): node_modules/chrome-devtools-frontend/front_end/coverage/CoverageView.js(40,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageView.js(43,31): error TS2345: Argument of type 'ToolbarInput' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarInput' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. - Property 'item' is missing in type 'ToolbarInput'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageView.js(49,42): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageView.js(50,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageView.js(51,31): error TS2345: Argument of type 'ToolbarSettingCheckbox' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. @@ -5309,7 +5001,6 @@ node_modules/chrome-devtools-frontend/front_end/coverage/CoverageView.js(231,59) node_modules/chrome-devtools-frontend/front_end/coverage_test_runner/CoverageTestRunner.js(12,27): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/coverage_test_runner/CoverageTestRunner.js(20,27): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/coverage_test_runner/CoverageTestRunner.js(28,27): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/coverage_test_runner/CoverageTestRunner.js(33,13): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/coverage_test_runner/CoverageTestRunner.js(37,76): error TS2339: Property 'LineDecorator' does not exist on type 'typeof CoverageView'. node_modules/chrome-devtools-frontend/front_end/coverage_test_runner/CoverageTestRunner.js(52,31): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/coverage_test_runner/CoverageTestRunner.js(87,31): error TS2339: Property 'runtime' does not exist on type 'Window'. @@ -5400,7 +5091,6 @@ node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(701,35): e node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(711,35): error TS2339: Property 'rows' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(750,41): error TS2345: Argument of type 'NODE_TYPE' is not assignable to parameter of type 'DataGridNode'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(752,16): error TS2339: Property 'refresh' does not exist on type 'NODE_TYPE'. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(755,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(766,22): error TS2339: Property 'remove' does not exist on type 'Element | { __index: number; __position: number; }'. Property 'remove' does not exist on type '{ __index: number; __position: number; }'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(772,60): error TS2339: Property 'rows' does not exist on type 'Element'. @@ -5501,24 +5191,12 @@ node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1324,19): node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1334,14): error TS2551: Property 'dirty' does not exist on type 'DataGridNode'. Did you mean '_dirty'? node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1336,14): error TS2551: Property 'inactive' does not exist on type 'DataGridNode'. Did you mean '_inactive'? node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1360,13): error TS2339: Property 'removeChildren' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1370,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1377,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1385,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1390,48): error TS2339: Property '_isRoot' does not exist on type 'NODE_TYPE'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1391,28): error TS2339: Property 'expanded' does not exist on type 'NODE_TYPE'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1396,41): error TS2339: Property 'parent' does not exist on type 'NODE_TYPE'. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1406,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1416,24): error TS2339: Property 'revealed' does not exist on type 'NODE_TYPE'. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1490,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1493,37): error TS2339: Property '_isRoot' does not exist on type 'NODE_TYPE'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1494,33): error TS2339: Property 'depth' does not exist on type 'NODE_TYPE'. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1503,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1510,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1517,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1526,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1533,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1543,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1550,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1592,14): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1638,28): error TS2339: Property 'nextSibling' does not exist on type 'NODE_TYPE'. node_modules/chrome-devtools-frontend/front_end/data_grid/DataGrid.js(1640,24): error TS2339: Property 'previousSibling' does not exist on type 'NODE_TYPE'. @@ -5711,7 +5389,6 @@ node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(64,32): e node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(87,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(91,33): error TS2694: Namespace 'Adb' has no exported member 'Device'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(96,27): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(104,26): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(107,28): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(108,24): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(127,16): error TS2339: Property '_title' does not exist on type 'Element'. @@ -5726,8 +5403,6 @@ node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(153,22): node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(156,34): error TS2694: Namespace 'Adb' has no exported member 'Config'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(161,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(164,34): error TS2694: Namespace 'Adb' has no exported member 'PortForwardingStatus'. -node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(170,14): error TS2403: Subsequent variable declarations must have the same type. Variable 'deviceId' must be of type 'string', but here has type 'any'. -node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(170,26): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(179,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(180,38): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(191,29): error TS2339: Property 'setDevicesUpdatesEnabled' does not exist on type 'typeof InspectorFrontendHost'. @@ -5808,7 +5483,6 @@ node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(625,42): node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(627,50): error TS2694: Namespace 'DevicesView' has no exported member 'BrowserSection'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(632,21): error TS2694: Namespace 'Adb' has no exported member 'Device'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(637,19): error TS2694: Namespace 'Adb' has no exported member 'Device'. -node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(654,27): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(657,27): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(675,36): error TS2694: Namespace 'DevicesView' has no exported member 'BrowserSection'. node_modules/chrome-devtools-frontend/front_end/devices/DevicesView.js(679,26): error TS2339: Property 'createChild' does not exist on type 'Element'. @@ -6086,9 +5760,7 @@ node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(10 node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(133,24): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(134,22): error TS2339: Property 'caseInsensetiveComparator' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(152,32): error TS2339: Property 'checked' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(194,27): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(203,36): error TS2339: Property 'valuesArray' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(215,22): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(241,41): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/elements/ClassesPaneWidget.js(257,5): error TS2322: Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarToggle' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. @@ -6255,8 +5927,6 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsPanel.js(912,15 node_modules/chrome-devtools-frontend/front_end/elements/ElementsSidebarPane.js(66,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(44,50): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(111,66): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(197,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(201,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(239,29): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(246,48): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(247,33): error TS2555: Expected at least 2 arguments, but got 1. @@ -6337,7 +6007,6 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js( node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(1169,30): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(1170,31): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(1172,28): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(1191,27): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(1246,15): error TS2339: Property 'setTextContentTruncatedIfNeeded' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(1251,41): error TS2339: Property 'createChild' does not exist on type 'Node'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeElement.js(1313,20): error TS2339: Property 'createTextChild' does not exist on type 'DocumentFragment'. @@ -6385,16 +6054,11 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js( node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(254,11): error TS2339: Property 'handled' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(270,26): error TS2694: Namespace 'Protocol' has no exported member 'Error'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(271,26): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(301,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(305,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(316,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(460,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(495,29): error TS2339: Property 'totalOffsetLeft' does not exist on type 'HTMLElement'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(515,19): error TS2694: Namespace 'UI' has no exported member 'PopoverRequest'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(520,19): error TS2339: Property 'parentElementOrShadowHost' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(525,17): error TS2339: Property 'boxInWindow' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(527,29): error TS2339: Property 'enclosingNodeOrSelfWithNodeName' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(541,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(594,19): error TS2339: Property 'hovered' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(608,30): error TS2345: Argument of type '{ mode: string; showInfo: boolean; }' is not assignable to parameter of type '{ mode: string; showInfo: boolean; selectors: string; }'. Property 'selectors' is missing in type '{ mode: string; showInfo: boolean; }'. @@ -6414,7 +6078,6 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js( node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1084,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1106,44): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1110,89): error TS2339: Property 'scrollTop' does not exist on type 'Node'. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1119,24): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1130,37): error TS2339: Property 'scrollTop' does not exist on type 'Node'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1258,12): error TS2339: Property 'value' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1261,28): error TS2339: Property 'expandAllButton' does not exist on type 'TreeElement'. @@ -6438,8 +6101,6 @@ node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js( node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1621,26): error TS2339: Property 'createTextChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1622,10): error TS2339: Property 'classList' does not exist on type 'Node'. node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1623,24): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1631,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/elements/ElementsTreeOutline.js(1638,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/elements/EventListenersWidget.js(46,50): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/elements/EventListenersWidget.js(51,46): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/elements/EventListenersWidget.js(55,40): error TS2555: Expected at least 2 arguments, but got 1. @@ -6682,14 +6343,11 @@ node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(18 node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1809,20): error TS2339: Property 'focus' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1833,57): error TS2339: Property 'media' does not exist on type 'CSSRule'. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1843,75): error TS2339: Property 'peekLast' does not exist on type 'string[]'. -node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1857,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1866,49): error TS2694: Namespace 'StylePropertyTreeElement' has no exported member 'Context'. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1963,35): error TS2339: Property 'key' does not exist on type 'CSSRule'. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1984,25): error TS2339: Property 'key' does not exist on type 'CSSRule'. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(1987,17): error TS2339: Property 'setKeyText' does not exist on type 'CSSRule'. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(2018,64): error TS2339: Property 'key' does not exist on type 'CSSRule'. -node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(2090,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(2094,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(2109,7): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(2109,46): error TS2339: Property '_updateFilter' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/elements/StylesSidebarPane.js(2148,30): error TS2694: Namespace 'CSSModel' has no exported member 'ContrastInfo'. @@ -6902,7 +6560,6 @@ node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(535 node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(554,24): error TS2694: Namespace 'Protocol' has no exported member 'Emulation'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(576,40): error TS2339: Property 'Emulation' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(633,24): error TS2694: Namespace 'Protocol' has no exported member 'Page'. -node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(634,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(661,22): error TS2339: Property 'Emulation' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(662,22): error TS2339: Property 'Emulation' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeModel.js(664,44): error TS2339: Property 'Emulation' does not exist on type 'typeof Protocol'. @@ -7049,13 +6706,10 @@ node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(191, node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(192,15): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(280,30): error TS2339: Property 'positionAt' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(283,31): error TS2339: Property 'positionAt' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(376,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(396,14): error TS2339: Property 'width' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(397,14): error TS2339: Property 'height' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(398,24): error TS2339: Property 'getContext' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(411,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(423,24): error TS2694: Namespace 'Protocol' has no exported member 'Page'. -node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(424,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(443,14): error TS2339: Property 'width' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(444,14): error TS2339: Property 'height' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeView.js(445,24): error TS2339: Property 'getContext' does not exist on type 'Element'. @@ -7072,7 +6726,6 @@ node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(5 node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(84,26): error TS2339: Property '_wrapperInstance' does not exist on type 'typeof DeviceModeView'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(98,34): error TS2339: Property '_wrapperInstance' does not exist on type 'typeof DeviceModeView'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(101,43): error TS2339: Property '_wrapperInstance' does not exist on type 'typeof DeviceModeView'. -node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(107,26): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(120,45): error TS2694: Namespace 'Protocol' has no exported member 'Page'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(121,38): error TS2339: Property '_wrapperInstance' does not exist on type 'typeof DeviceModeView'. node_modules/chrome-devtools-frontend/front_end/emulation/DeviceModeWrapper.js(128,43): error TS2339: Property '_wrapperInstance' does not exist on type 'typeof DeviceModeView'. @@ -7098,11 +6751,7 @@ node_modules/chrome-devtools-frontend/front_end/emulation/DevicesSettingsTab.js( node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(13,42): error TS2694: Namespace 'EmulatedDevice' has no exported member 'Orientation'. node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(15,42): error TS2694: Namespace 'EmulatedDevice' has no exported member 'Orientation'. node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(23,50): error TS2694: Namespace 'EmulatedDevice' has no exported member 'Mode'. -node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(48,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. -node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(65,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. -node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(76,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(84,45): error TS2694: Namespace 'EmulatedDevice' has no exported member 'Orientation'. -node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(86,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(106,53): error TS2694: Namespace 'EmulatedDevice' has no exported member 'Orientation'. node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(195,49): error TS2694: Namespace 'EmulatedDevice' has no exported member 'Mode'. node_modules/chrome-devtools-frontend/front_end/emulation/EmulatedDevices.js(243,40): error TS2694: Namespace 'EmulatedDevice' has no exported member 'Orientation'. @@ -7261,11 +6910,10 @@ node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersUt node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(6,2): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(7,16): error TS2551: Property 'EventListenersResult' does not exist on type 'typeof EventListeners'. Did you mean 'EventListenersView'? node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(27,37): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(35,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. +node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(35,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(51,32): error TS2694: Namespace 'EventListeners' has no exported member 'FrameworkEventListenersObject'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(70,32): error TS2694: Namespace 'EventListeners' has no exported member 'FrameworkEventListenersObject'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(88,29): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(102,29): error TS2569: Type 'IArguments' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(150,46): error TS2339: Property 'eventListener' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(156,45): error TS2339: Property 'eventListener' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(158,47): error TS2339: Property 'eventListener' does not exist on type 'TreeElement'. @@ -7292,7 +6940,6 @@ node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(268,2 node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(270,25): error TS2339: Property 'registerHandler' does not exist on type 'ExtensionServerClient'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(274,25): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(278,23): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(281,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(314,12): error TS8022: JSDoc '@extends' is not attached to a class. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(322,55): error TS2339: Property 'nextObjectId' does not exist on type 'ExtensionServerClient'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(327,23): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. @@ -7314,8 +6961,6 @@ node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(515,2 node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(569,23): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(586,23): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(597,23): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(610,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(614,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(623,23): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(627,23): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(662,21): error TS2339: Property 'sendRequest' does not exist on type 'ExtensionServerClient'. @@ -7836,7 +7481,6 @@ node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapsho node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(187,16): error TS2339: Property 'nodeIndex' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(188,5): error TS2322: Type 'void' is not assignable to type 'HeapSnapshotNode'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(314,5): error TS2322: Type 'void' is not assignable to type 'HeapSnapshotNode'. -node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(347,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(759,27): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(778,52): error TS2339: Property 'HeapSnapshotProgressEvent' does not exist on type 'typeof HeapSnapshotModel'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(787,52): error TS2339: Property 'HeapSnapshotProgressEvent' does not exist on type 'typeof HeapSnapshotModel'. @@ -7844,8 +7488,6 @@ node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapsho Property 'flatMap' is missing in type 'Uint32Array'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(920,34): error TS2345: Argument of type 'Uint32Array' is not assignable to parameter of type 'number[]'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1045,5): error TS2322: Type 'void' is not assignable to type 'HeapSnapshotNode'. -node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1051,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1058,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1083,14): error TS2339: Property 'key' does not exist on type '(arg0: HeapSnapshotNode) => boolean'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1086,14): error TS2339: Property 'key' does not exist on type '(arg0: HeapSnapshotNode) => boolean'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1143,31): error TS2339: Property 'key' does not exist on type '(arg0: HeapSnapshotNode) => boolean'. @@ -8309,11 +7951,17 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(858 node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(861,81): error TS2339: Property 'image' does not exist on type 'WebGLTexture'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(928,26): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(932,39): error TS2345: Argument of type 'any[][]' is not assignable to parameter of type 'Iterable<[any, any]>'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1013,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. + Types of property '[Symbol.iterator]' are incompatible. + Type '() => IterableIterator' is not assignable to type '() => Iterator<[any, any]>'. + Type 'IterableIterator' is not assignable to type 'Iterator<[any, any]>'. + Types of property 'next' are incompatible. + Type '{ (value?: any): IteratorResult; (value?: any): IteratorResult; }' is not assignable to type '{ (value?: any): IteratorResult<[any, any]>; (value?: any): IteratorResult<[any, any]>; }'. + Type 'IteratorResult' is not assignable to type 'IteratorResult<[any, any]>'. + Type 'any[]' is not assignable to type '[any, any]'. + Property '0' is missing in type 'any[]'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1080,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1098,15): error TS2304: Cannot find name 'CSSMatrix'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1143,19): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/Layers3DView.js(1175,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/layer_viewer/PaintProfilerView.js(42,49): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/PaintProfilerView.js(43,48): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/PaintProfilerView.js(44,40): error TS2555: Expected at least 2 arguments, but got 1. @@ -8375,12 +8023,10 @@ node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(88,32): node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(107,24): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(108,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(151,31): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. -node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(152,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(171,32): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(221,24): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(384,25): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(392,33): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. -node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(408,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(437,36): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(449,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/layers/LayerTreeModel.js(458,24): error TS2694: Namespace 'Protocol' has no exported member 'LayerTree'. @@ -8586,7 +8232,6 @@ node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingMana node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingManager.js(185,54): error TS2339: Property 'CPUThrottlingRates' does not exist on type 'typeof MobileThrottling'. node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingManager.js(186,36): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingManager.js(188,20): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingManager.js(191,25): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingManager.js(202,54): error TS2339: Property 'CPUThrottlingRates' does not exist on type 'typeof MobileThrottling'. node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingManager.js(218,82): error TS2339: Property 'selectedIndex' does not exist on type 'EventTarget'. node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingManager.js(224,32): error TS2555: Expected at least 2 arguments, but got 1. @@ -8669,7 +8314,6 @@ node_modules/chrome-devtools-frontend/front_end/mobile_throttling/ThrottlingSett node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(18,32): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(19,37): error TS2345: Argument of type 'ToolbarCheckbox' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarCheckbox' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. - Property 'item' is missing in type 'ToolbarCheckbox'. node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(21,42): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(23,37): error TS2345: Argument of type 'ToolbarButton' is not assignable to parameter of type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarButton' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. @@ -8697,7 +8341,6 @@ node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(147,5 node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(155,26): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(157,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(158,26): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(193,28): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/network/BlockedURLsPane.js(226,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/network/EventSourceMessagesView.js(17,56): error TS2694: Namespace 'DataGrid' has no exported member 'ColumnDescriptor'. node_modules/chrome-devtools-frontend/front_end/network/EventSourceMessagesView.js(18,25): error TS2555: Expected at least 2 arguments, but got 1. @@ -8722,11 +8365,8 @@ node_modules/chrome-devtools-frontend/front_end/network/EventSourceMessagesView. node_modules/chrome-devtools-frontend/front_end/network/EventSourceMessagesView.js(86,14): error TS2339: Property 'title' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/network/EventSourceMessagesView.js(104,13): error TS2315: Type 'Object' is not generic. node_modules/chrome-devtools-frontend/front_end/network/EventSourceMessagesView.js(104,29): error TS1005: '>' expected. -node_modules/chrome-devtools-frontend/front_end/network/HARWriter.js(36,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/network/HARWriter.js(50,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/network/HARWriter.js(54,23): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/HARWriter.js(74,36): error TS2694: Namespace 'NetworkRequest' has no exported member 'ContentData'. -node_modules/chrome-devtools-frontend/front_end/network/HARWriter.js(89,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/network/HARWriter.js(93,23): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/NetworkConfigView.js(12,25): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/network/NetworkConfigView.js(14,25): error TS2339: Property 'createChild' does not exist on type 'Element'. @@ -8914,9 +8554,7 @@ node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(853,22 node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(867,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(916,20): error TS2339: Property 'window' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(938,41): error TS2339: Property 'firstValue' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(946,22): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(974,22): error TS2339: Property 'dataGrid' does not exist on type 'NetworkNode'. -node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(981,22): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1074,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1099,47): error TS2339: Property 'Security' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1104,47): error TS2339: Property 'Security' does not exist on type 'typeof Protocol'. @@ -8943,8 +8581,6 @@ node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1194,9 node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1204,13): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1214,13): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1223,13): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1229,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. -node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1239,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1254,27): error TS2339: Property 'copyText' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1262,27): error TS2339: Property 'copyText' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/network/NetworkLogView.js(1274,29): error TS2339: Property 'copyText' does not exist on type 'typeof InspectorFrontendHost'. @@ -9167,9 +8803,7 @@ node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.j node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(384,39): error TS2339: Property 'expanded' does not exist on type 'NetworkNode'. node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(385,71): error TS2339: Property 'flatChildren' does not exist on type 'NetworkNode'. node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(397,64): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; Unknown: number; Foreground: number; Background: number; Selection: number; }'. -node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(420,23): error TS2569: Type 'Map' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(421,62): error TS2694: Namespace 'NetworkWaterfallColumn' has no exported member '_LayerStyle'. -node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(444,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(458,23): error TS2694: Namespace 'Network' has no exported member 'RequestTimeRangeNames'. node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(464,12): error TS2678: Type 'string' is not comparable to type '{ [x: string]: any; Push: string; Queueing: string; Blocking: string; Connecting: string; DNS: st...'. node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(465,12): error TS2678: Type 'string' is not comparable to type '{ [x: string]: any; Push: string; Queueing: string; Blocking: string; Connecting: string; DNS: st...'. @@ -9183,7 +8817,6 @@ node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.j node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(615,54): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/network/NetworkWaterfallColumn.js(616,32): error TS2339: Property '_TextLayer' does not exist on type 'typeof NetworkWaterfallColumn'. node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(55,48): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(73,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(81,26): error TS2554: Expected 4 arguments, but got 0. node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(83,20): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestCookiesView.js(84,20): error TS2555: Expected at least 2 arguments, but got 1. @@ -9259,18 +8892,11 @@ node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(53 Type 'Category' is not assignable to type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(554,31): error TS2345: Argument of type 'true' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/network/RequestHeadersView.js(561,31): error TS2345: Argument of type 'false' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/network/RequestPreviewView.js(42,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/network/RequestPreviewView.js(55,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/network/RequestPreviewView.js(60,33): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/network/RequestPreviewView.js(78,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/network/RequestPreviewView.js(93,31): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(46,34): error TS2694: Namespace 'NetworkRequest' has no exported member 'ContentData'. -node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(68,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(98,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(112,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(118,33): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(121,31): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/network/RequestResponseView.js(164,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/network/RequestTimingView.js(48,23): error TS2694: Namespace 'Network' has no exported member 'RequestTimeRangeNames'. node_modules/chrome-devtools-frontend/front_end/network/RequestTimingView.js(53,12): error TS2678: Type 'string' is not comparable to type '{ [x: string]: any; Push: string; Queueing: string; Blocking: string; Connecting: string; DNS: st...'. node_modules/chrome-devtools-frontend/front_end/network/RequestTimingView.js(54,16): error TS2555: Expected at least 2 arguments, but got 1. @@ -9402,9 +9028,6 @@ node_modules/chrome-devtools-frontend/front_end/network/ResourceWebSocketFrameVi Property '_contentURL' does not exist on type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/network_log/HAREntry.js(130,29): error TS2339: Property 'localizedFailDescription' does not exist on type 'NetworkRequest'. node_modules/chrome-devtools-frontend/front_end/network_log/HAREntry.js(150,36): error TS2694: Namespace 'HAREntry' has no exported member 'Timing'. -node_modules/chrome-devtools-frontend/front_end/network_log/HAREntry.js(281,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/network_log/HAREntry.js(288,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/network_log/HAREntry.js(299,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/network_log/HAREntry.js(318,4): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/network_log/HAREntry.js(319,21): error TS2339: Property 'Timing' does not exist on type 'typeof HAREntry'. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(44,57): error TS2345: Argument of type 'this' is not assignable to parameter of type '{ [x: string]: any; modelAdded(model: T): void; modelRemoved(model: T): void; }'. @@ -9427,14 +9050,11 @@ node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(208,46 node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(226,38): error TS2694: Namespace 'NetworkLog' has no exported member 'InitiatorGraph'. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(256,29): error TS2339: Property 'addAll' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(289,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(329,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'request' must be of type 'NetworkRequest', but here has type 'any'. -node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(329,27): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(355,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(369,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(379,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(388,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(398,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(411,25): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(446,75): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(476,95): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/network_log/NetworkLog.js(477,23): error TS2339: Property 'InitiatorGraph' does not exist on type 'typeof NetworkLog'. @@ -9484,21 +9104,17 @@ node_modules/chrome-devtools-frontend/front_end/object_ui/CustomPreviewComponent node_modules/chrome-devtools-frontend/front_end/object_ui/CustomPreviewComponent.js(125,18): error TS2339: Property 'classList' does not exist on type 'Node'. node_modules/chrome-devtools-frontend/front_end/object_ui/CustomPreviewComponent.js(230,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(25,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. -node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(73,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(73,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(118,32): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(132,51): error TS2339: Property 'naturalOrderComparator' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(156,24): error TS2339: Property 'subtitle' does not exist on type '{ text: string; title: string; priority: number; }'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(156,35): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(165,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(165,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(183,37): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(183,97): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(218,34): error TS2694: Namespace 'RuntimeModel' has no exported member 'EvaluationResult'. -node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(219,17): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(219,66): error TS2694: Namespace 'JavaScriptAutocomplete' has no exported member 'CompletionGroup'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(262,63): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(322,17): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(335,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'scope' must be of type 'Scope', but here has type '{ properties: RemoteObjectProperty[]; name: string; }'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(336,54): error TS2339: Property 'properties' does not exist on type 'Scope'. node_modules/chrome-devtools-frontend/front_end/object_ui/JavaScriptAutocomplete.js(342,54): error TS2694: Namespace 'JavaScriptAutocomplete' has no exported member 'CompletionGroup'. @@ -9593,17 +9209,12 @@ node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSectio node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(923,51): error TS2339: Property 'parentObject' does not exist on type 'RemoteObjectProperty'. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(924,51): error TS2339: Property 'parentObject' does not exist on type 'RemoteObjectProperty'. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(980,18): error TS2339: Property 'sprintf' does not exist on type 'StringConstructor'. -node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1057,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1069,18): error TS2403: Subsequent variable declarations must have the same type. Variable 'i' must be of type 'any', but here has type 'number'. -node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1078,13): error TS2403: Subsequent variable declarations must have the same type. Variable 'groupStart' must be of type 'any', but here has type 'number'. -node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1080,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1153,23): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1182,26): error TS2339: Property '_readOnly' does not exist on type 'ObjectPropertyTreeElement'. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1211,20): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1211,44): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1241,23): error TS2339: Property 'parentObject' does not exist on type 'RemoteObjectProperty'. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1243,26): error TS2339: Property '_readOnly' does not exist on type 'ObjectPropertyTreeElement'. -node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1312,26): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1319,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1328,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/object_ui/ObjectPropertiesSection.js(1336,22): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -9766,10 +9377,8 @@ node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(32,2 node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(33,32): error TS2339: Property 'positionTicks' does not exist on type 'ProfileNode'. node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(40,34): error TS2339: Property 'positionTicks' does not exist on type 'ProfileNode'. node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(41,31): error TS2339: Property 'positionTicks' does not exist on type 'ProfileNode'. -node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(71,26): error TS2569: Type 'Map>' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(135,16): error TS2339: Property 'uninstallGutter' does not exist on type 'CodeMirrorTextEditor'. node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(138,16): error TS2339: Property 'installGutter' does not exist on type 'CodeMirrorTextEditor'. -node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(139,28): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(142,30): error TS2339: Property 'constrain' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(145,15): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/perf_ui/LineLevelProfile.js(146,18): error TS2339: Property 'setGutterDecoration' does not exist on type 'CodeMirrorTextEditor'. @@ -9822,8 +9431,6 @@ node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(104,80): node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(119,35): error TS2694: Namespace 'TimelineGrid' has no exported member 'DividersData'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(132,68): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; Unknown: number; Foreground: number; Background: number; Selection: number; }'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(135,64): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; Unknown: number; Foreground: number; Background: number; Selection: number; }'. -node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(150,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(154,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(189,25): error TS2339: Property '_labelElement' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(196,23): error TS2339: Property '_labelElement' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineGrid.js(199,15): error TS2339: Property 'style' does not exist on type 'Element'. @@ -9842,12 +9449,10 @@ node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js( node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(46,54): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(70,34): error TS2339: Property 'offsetX' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(70,57): error TS2339: Property 'offsetLeft' does not exist on type 'EventTarget'. -node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(77,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(84,14): error TS2339: Property 'remove' does not exist on type 'any[]'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(85,14): error TS2339: Property 'appendChildren' does not exist on type 'DocumentFragment'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(112,30): error TS2339: Property 'offsetWidth' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(152,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(176,22): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(186,57): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(213,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/perf_ui/TimelineOverviewPane.js(319,19): error TS2339: Property 'preciseMillisToString' does not exist on type 'NumberConstructor'. @@ -9880,7 +9485,6 @@ node_modules/chrome-devtools-frontend/front_end/performance_test_runner/Timeline node_modules/chrome-devtools-frontend/front_end/performance_test_runner/TimelineTestRunner.js(254,19): error TS2554: Expected 2 arguments, but got 3. node_modules/chrome-devtools-frontend/front_end/performance_test_runner/TimelineTestRunner.js(310,93): error TS2339: Property 'InvalidationFormatters' does not exist on type 'typeof PerformanceTestRunner'. node_modules/chrome-devtools-frontend/front_end/performance_test_runner/TimelineTestRunner.js(321,53): error TS2345: Argument of type 'number' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/performance_test_runner/TimelineTestRunner.js(337,27): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/performance_test_runner/TimelineTestRunner.js(347,23): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? node_modules/chrome-devtools-frontend/front_end/performance_test_runner/TimelineTestRunner.js(355,6): error TS2551: Property 'panels' does not exist on type 'typeof UI'. Did you mean 'Panel'? node_modules/chrome-devtools-frontend/front_end/persistence/Automapping.js(67,40): error TS2339: Property 'valuesArray' does not exist on type 'Set'. @@ -9907,7 +9511,7 @@ node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.j node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(73,29): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(78,46): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(82,25): error TS2339: Property 'tabIndex' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(98,24): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. +node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(102,44): error TS2345: Argument of type 'string' is not assignable to parameter of type 'T'. node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(111,37): error TS2345: Argument of type 'Entry' is not assignable to parameter of type 'T'. node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(118,38): error TS2345: Argument of type 'Entry' is not assignable to parameter of type 'T'. node_modules/chrome-devtools-frontend/front_end/persistence/EditFileSystemView.js(122,45): error TS2345: Argument of type '""' is not assignable to parameter of type 'T'. @@ -9934,13 +9538,10 @@ node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceB node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(156,28): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(160,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(163,67): error TS2694: Namespace 'IsolatedFileSystemManager' has no exported member 'FilesChangedData'. -node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(188,28): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(190,30): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(222,26): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Debugger: string; Formatter: string; Network: string; Snippets: string; FileS...'. -node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(421,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(432,23): error TS2339: Property 'intersectOrdered' does not exist on type 'string[]'. node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(432,61): error TS2339: Property 'naturalOrderComparator' does not exist on type 'StringConstructor'. -node_modules/chrome-devtools-frontend/front_end/persistence/FileSystemWorkspaceBinding.js(517,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(68,25): error TS2554: Expected 0-1 arguments, but got 2. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(75,10): error TS2339: Property 'catchException' does not exist on type 'Promise'. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(83,59): error TS2339: Property 'message' does not exist on type 'DOMError'. @@ -9949,10 +9550,8 @@ node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.j node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(117,35): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(124,36): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(160,25): error TS2304: Cannot find name 'FileEntry'. -node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(189,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(189,25): error TS2304: Cannot find name 'DirectoryEntry'. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(210,25): error TS2304: Cannot find name 'DirectoryEntry'. -node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(225,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(239,27): error TS2304: Cannot find name 'FileEntry'. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(267,17): error TS2304: Cannot find name 'FileEntry'. node_modules/chrome-devtools-frontend/front_end/persistence/IsolatedFileSystem.js(278,17): error TS2304: Cannot find name 'FileError'. @@ -9999,7 +9598,6 @@ node_modules/chrome-devtools-frontend/front_end/persistence/NetworkPersistenceMa node_modules/chrome-devtools-frontend/front_end/persistence/NetworkPersistenceManager.js(74,5): error TS2322: Type 'V' is not assignable to type 'boolean'. node_modules/chrome-devtools-frontend/front_end/persistence/NetworkPersistenceManager.js(140,55): error TS2339: Property 'hashCode' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/persistence/NetworkPersistenceManager.js(341,70): error TS2339: Property 'Network' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/persistence/NetworkPersistenceManager.js(418,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(21,51): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(58,23): error TS1138: Parameter declaration expected. node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(58,23): error TS8024: JSDoc '@param' tag has name 'function', but there is no parameter with that name. @@ -10128,9 +9726,7 @@ node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1057,39): node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1108,15): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1116,15): error TS2339: Property 'firstValue' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1126,15): error TS2339: Property 'addAll' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1127,17): error TS2569: Type 'Iterable | T[]' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1136,15): error TS2339: Property 'containsAll' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1137,17): error TS2569: Type 'Iterable | T[]' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1148,15): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1155,21): error TS2304: Cannot find name 'VALUE'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1157,15): error TS2339: Property 'valuesArray' does not exist on type 'Map'. @@ -10139,12 +9735,9 @@ node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1164,15): node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1169,24): error TS2304: Cannot find name 'KEY'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1169,30): error TS2304: Cannot find name 'VALUE'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1171,15): error TS2339: Property 'inverse' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1173,19): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1237,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1277,14): error TS2339: Property 'pushAll' does not exist on type 'any[]'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1277,40): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1299,35): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. -node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1325,20): error TS2568: Type 'IArguments' is not an array type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1326,32): error TS2556: Expected 0 arguments, but got 1 or more. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1335,19): error TS2339: Property 'spread' does not exist on type 'Promise'. node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1348,19): error TS2339: Property 'catchException' does not exist on type 'Promise'. @@ -10159,10 +9752,8 @@ node_modules/chrome-devtools-frontend/front_end/platform/utilities.js(1430,18): node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(11,31): error TS1005: '>' expected. node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(17,38): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(55,29): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(69,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(108,36): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(113,18): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(118,30): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(127,5): error TS2322: Type 'true | V' is not assignable to type 'boolean'. Type 'V' is not assignable to type 'boolean'. node_modules/chrome-devtools-frontend/front_end/product_registry/BadgePool.js(134,18): error TS2339: Property 'parentNodeOrShadowHost' does not exist on type 'Element'. @@ -10230,12 +9821,9 @@ node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(73,5) Property '_cpuProfile' does not exist on type '{ [x: string]: any; minimumBoundary(): number; totalTime(): number; formatValue(value: number, pr...'. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(82,43): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(85,29): error TS2339: Property 'instance' does not exist on type 'typeof CPUProfileType'. -node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(114,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(115,30): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(115,70): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(132,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(133,12): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(136,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(137,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(141,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/profiler/CPUProfileView.js(144,49): error TS2694: Namespace 'CPUProfilerModel' has no exported member 'EventData'. @@ -10264,12 +9852,9 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(43,5 Property '_profile' does not exist on type '{ [x: string]: any; minimumBoundary(): number; totalTime(): number; formatValue(value: number, pr...'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(52,52): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(54,38): error TS2339: Property 'instance' does not exist on type 'typeof SamplingHeapProfileType'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(81,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(82,30): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(82,71): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(98,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(99,12): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(102,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(103,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(114,26): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapProfileView.js(167,65): error TS2345: Argument of type 'SamplingHeapProfileType' is not assignable to parameter of type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. @@ -10365,7 +9950,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.j node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(673,34): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(675,16): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(700,24): error TS2694: Namespace 'Protocol' has no exported member 'HeapProfiler'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotDataGrids.js(701,15): error TS1055: Type 'Promise<{ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise HeapSnapshotProviderProxy' is not assignable to type '() => { [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(981,27): error TS2339: Property 'snapshot' does not exist on type 'HeapSnapshotSortableDataGrid'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(986,15): error TS1055: Type 'Promise<({ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; is...'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1001,5): error TS2322: Type '(this | ({ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; is...'. Type 'this | ({ [x: string]: any; dispose(): void; nodePosition(snapshotObjectId: number): Promise; isE...'. @@ -10461,9 +10044,7 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.j Property 'nodePosition' is missing in type 'HeapSnapshotConstructorNode'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1019,14): error TS2339: Property '_searchMatched' does not exist on type 'HeapSnapshotConstructorNode'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1029,81): error TS2339: Property 'snapshot' does not exist on type 'HeapSnapshotSortableDataGrid'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1112,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1140,22): error TS2339: Property 'pushAll' does not exist on type 'any[]'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1149,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1178,28): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1179,30): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1180,67): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. @@ -10498,20 +10079,14 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.j node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1347,44): error TS2339: Property 'heapProfilerModel' does not exist on type 'HeapSnapshotSortableDataGrid'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(1349,38): error TS2339: Property '_linkifier' does not exist on type 'HeapSnapshotSortableDataGrid'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(43,29): error TS1005: '>' expected. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(155,24): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(161,40): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(284,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(286,38): error TS2555: Expected at least 4 arguments, but got 3. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(329,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(405,12): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(431,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(435,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(440,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(443,30): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(450,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(457,12): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(460,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(464,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotProxy.js(507,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(42,11): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(48,9): error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. @@ -10521,7 +10096,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(113 node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(115,41): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(132,9): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...' and 'TrackingHeapSnapshotProfileType'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(192,24): error TS2694: Namespace 'Protocol' has no exported member 'HeapProfiler'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(223,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(228,53): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(229,56): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(230,57): error TS2555: Expected at least 2 arguments, but got 1. @@ -10540,9 +10114,7 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(257 Type 'ToolbarComboBox' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; } & ToolbarItem'. Type 'ToolbarComboBox' is not assignable to type '{ [x: string]: any; item(): any & ToolbarItem; }'. Property 'item' is missing in type 'ToolbarComboBox'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(316,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(344,50): error TS2551: Property 'jumpBackwards' does not exist on type 'SearchConfig'. Did you mean 'jumpBackward'? -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(371,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(397,25): error TS2339: Property '_loadPromise' does not exist on type 'ProfileHeader'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(405,24): error TS2345: Argument of type 'SearchConfig' is not assignable to parameter of type 'SearchConfig'. Property 'toSearchRegex' is missing in type 'SearchConfig'. @@ -10577,12 +10149,9 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(947 Type '(heapProfilerModel: HeapProfilerModel) => void' is not assignable to type '(model: T) => void'. Types of parameters 'heapProfilerModel' and 'model' are incompatible. Type 'T' is not assignable to type 'HeapProfilerModel'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(988,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(989,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1006,34): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1010,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1011,12): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1014,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1015,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1038,26): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1042,5): error TS2322: Type 'ProfileHeader' is not assignable to type 'HeapProfileHeader'. @@ -10598,7 +10167,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(109 node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1122,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1139,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1155,35): error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1167,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1168,30): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1169,30): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1195,48): error TS2345: Argument of type 'V' is not assignable to parameter of type 'boolean'. @@ -10609,9 +10177,7 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(121 node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1217,51): error TS2339: Property '_heapProfilerModel' does not exist on type 'ProfileHeader'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1219,35): error TS2345: Argument of type 'string' is not assignable to parameter of type 'symbol'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1225,13): error TS2339: Property '_finishLoad' does not exist on type 'ProfileHeader'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1247,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1248,12): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1251,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1252,12): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1258,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1313,11): error TS2345: Argument of type 'HeapSnapshotProfileType' is not assignable to parameter of type '{ [x: string]: any; showProfile(profile: ProfileHeader): Widget; showObject(snapshotObjectId: any...'. @@ -10622,7 +10188,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(140 node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1411,27): error TS2339: Property 'HeapSnapshotProgressEvent' does not exist on type 'typeof HeapSnapshotModel'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1430,30): error TS2339: Property 'bytesToString' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1476,61): error TS2339: Property 'toISO8601Compact' does not exist on type 'Date'. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1522,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1525,23): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1547,44): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotView.js(1557,77): error TS2339: Property '_profileSamples' does not exist on type 'HeapProfileHeader'. @@ -10711,8 +10276,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(226, node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(228,40): error TS2352: Type 'DataGridNode' cannot be converted to type '{ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatPe...'. Type 'DataGridNode' is not comparable to type '{ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatPe...'. Property 'formatValue' is missing in type 'DataGridNode'. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(250,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(254,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(262,43): error TS2345: Argument of type 'this' is not assignable to parameter of type 'ProfileDataGridTree | ({ [x: string]: any; formatValue(value: number, node: any & ProfileDataGrid...'. Type 'ProfileDataGridNode' is not assignable to type 'ProfileDataGridTree | ({ [x: string]: any; formatValue(value: number, node: any & ProfileDataGrid...'. Type 'ProfileDataGridNode' is not assignable to type '{ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatPe...'. @@ -10734,7 +10297,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(312, Type 'this' is not assignable to type '{ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatPe...'. Type 'ProfileDataGridNode' is not assignable to type '{ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatPe...'. Property 'formatValue' is missing in type 'ProfileDataGridNode'. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(375,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileDataGrid.js(412,46): error TS2345: Argument of type 'this[][]' is not assignable to parameter of type '({ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatP...'. Type 'this[]' is not assignable to type '({ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatP...'. Type 'this' is not assignable to type '{ [x: string]: any; formatValue(value: number, node: any & ProfileDataGridNode): string; formatPe...'. @@ -10756,7 +10318,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js( node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(79,41): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(83,41): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(87,41): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(89,22): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(120,38): error TS2339: Property 'radioElement' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(131,34): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(138,42): error TS2345: Argument of type 'V' is not assignable to parameter of type 'string'. @@ -10764,11 +10325,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js( node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(140,37): error TS2345: Argument of type 'V' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(141,48): error TS2345: Argument of type 'V' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileLauncherView.js(157,42): error TS2345: Argument of type 'string' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileType.js(63,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileType.js(67,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileType.js(71,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileType.js(75,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileType.js(86,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileType.js(239,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileType.js(244,24): error TS2694: Namespace 'Protocol' has no exported member 'HeapProfiler'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(10,11): error TS2555: Expected at least 2 arguments, but got 1. @@ -10823,9 +10379,7 @@ node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(350,34): node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(354,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(368,5): error TS2554: Expected 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(404,68): error TS2339: Property 'bytesToString' does not exist on type 'NumberConstructor'. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(417,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(459,56): error TS2339: Property 'toISO8601Compact' does not exist on type 'Date'. -node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(472,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(475,23): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(482,24): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/profiler/ProfileView.js(485,23): error TS2555: Expected at least 2 arguments, but got 1. @@ -11032,7 +10586,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheModel. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheModel.js(40,26): error TS2339: Property 'applicationCacheAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheModel.js(55,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheModel.js(71,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheModel.js(151,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationCacheModel.js(166,34): error TS2694: Namespace 'Protocol' has no exported member 'ApplicationCache'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(51,60): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(59,54): error TS2555: Expected at least 2 arguments, but got 1. @@ -11050,26 +10603,18 @@ node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSideba node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(295,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(317,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(336,34): error TS2339: Property 'remove' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(353,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(594,20): error TS2339: Property 'itemURL' does not exist on type 'BaseStorageTreeElement'. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(627,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(654,31): error TS2345: Argument of type 'true' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(661,31): error TS2345: Argument of type 'false' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(682,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(728,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(751,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(785,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(795,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(814,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(825,31): error TS2339: Property 'remove' does not exist on type 'SWCacheTreeElement[]'. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(864,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(879,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(918,25): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(926,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(951,25): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(959,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(984,25): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(992,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1017,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1052,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1062,22): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -11077,28 +10622,18 @@ node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSideba node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1094,35): error TS2339: Property 'remove' does not exist on type 'IDBDatabaseTreeElement[]'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1099,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1113,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1165,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1179,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1225,20): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1276,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1298,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1356,51): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1358,31): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1416,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1449,23): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1451,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1453,25): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1487,81): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1493,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1518,45): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1530,55): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1537,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1555,9): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1581,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1585,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1621,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1625,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/ApplicationPanelSidebar.js(1629,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(11,26): error TS2339: Property 'Storage' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(22,42): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(37,48): error TS2555: Expected at least 2 arguments, but got 1. @@ -11116,7 +10651,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(58 node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(63,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(63,69): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(104,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(124,22): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(129,18): error TS2339: Property 'storageAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(132,35): error TS2339: Property 'Storage' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(133,26): error TS2339: Property 'Storage' does not exist on type 'typeof Protocol'. @@ -11128,7 +10662,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(16 node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(174,23): error TS2339: Property 'disabled' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(176,37): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(178,25): error TS2339: Property 'disabled' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(185,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(192,39): error TS2339: Property 'storageAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(193,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/resources/ClearStorageView.js(199,51): error TS2339: Property 'bytesToString' does not exist on type 'NumberConstructor'. @@ -11176,9 +10709,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageItemsView.js node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageItemsView.js(275,38): error TS2339: Property 'key' does not exist on type 'DataGridNode'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(49,25): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(55,26): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. -node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(56,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(61,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(66,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(71,41): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(119,26): error TS2339: Property 'domstorageAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(126,19): error TS2339: Property 'registerDOMStorageDispatcher' does not exist on type 'Target'. @@ -11193,14 +10723,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(298 node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(306,24): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(315,24): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. node_modules/chrome-devtools-frontend/front_end/resources/DOMStorageModel.js(325,24): error TS2694: Namespace 'Protocol' has no exported member 'DOMStorage'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(49,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(54,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(59,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(64,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(69,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(74,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(79,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(84,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(98,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(112,17): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(130,26): error TS2339: Property 'databaseAgent' does not exist on type 'Target'. @@ -11208,7 +10730,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(131,1 node_modules/chrome-devtools-frontend/front_end/resources/DatabaseModel.js(191,24): error TS2694: Namespace 'Protocol' has no exported member 'Database'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(38,42): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(52,62): error TS2339: Property 'hasSelection' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(60,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(60,39): error TS2694: Namespace 'SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseQueryView.js(151,19): error TS2339: Property 'createTextChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(31,11): error TS2555: Expected at least 2 arguments, but got 1. @@ -11222,7 +10743,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(5 Property 'item' is missing in type 'ToolbarButton'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(77,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(114,37): error TS2339: Property 'valuesArray' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(116,21): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(130,18): error TS2339: Property 'removeChildren' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/resources/DatabaseTableView.js(139,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(41,12): error TS2339: Property 'registerStorageDispatcher' does not exist on type 'Target'. @@ -11235,13 +10755,8 @@ node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(112, node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(215,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(223,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(258,36): error TS2339: Property 'asParsedURL' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(272,30): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(276,30): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(316,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(411,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(412,66): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(579,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBModel.js(605,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(43,62): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(49,59): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/IndexedDBViews.js(50,52): error TS2555: Expected at least 2 arguments, but got 1. @@ -11307,13 +10822,8 @@ node_modules/chrome-devtools-frontend/front_end/resources/ResourcesPanel.js(22,4 node_modules/chrome-devtools-frontend/front_end/resources/ResourcesPanel.js(43,59): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/resources/ResourcesPanel.js(69,5): error TS2322: Type 'V' is not assignable to type 'string[]'. node_modules/chrome-devtools-frontend/front_end/resources/ResourcesPanel.js(76,48): error TS2345: Argument of type 'string[]' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/resources/ResourcesPanel.js(108,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/resources/ResourcesPanel.js(191,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(58,5): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '((child: TreeElement) => void) | ((treeElement: any) => void)' has no compatible call signatures. node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(69,33): error TS2339: Property 'remove' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(145,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(162,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(268,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(302,27): error TS2339: Property 'openInNewTab' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(311,26): error TS2339: Property 'draggable' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/resources/ResourcesSection.js(321,11): error TS2339: Property 'dataTransfer' does not exist on type 'MouseEvent'. @@ -11353,7 +10863,6 @@ node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheView node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheViews.js(260,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheViews.js(280,49): error TS2339: Property 'data' does not exist on type 'NODE_TYPE'. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheViews.js(285,24): error TS2694: Namespace 'Protocol' has no exported member 'CacheStorage'. -node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheViews.js(316,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheViews.js(316,44): error TS2694: Namespace 'NetworkRequest' has no exported member 'ContentData'. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheViews.js(381,43): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkerCacheViews.js(382,43): error TS2555: Expected at least 2 arguments, but got 1. @@ -11380,14 +10889,9 @@ node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js( Type '(serviceWorkerManager: ServiceWorkerManager) => void' is not assignable to type '(model: T) => void'. Types of parameters 'serviceWorkerManager' and 'model' are incompatible. Type 'T' is not assignable to type 'ServiceWorkerManager'. -node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(85,30): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(118,25): error TS2569: Type 'IterableIterator
' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(120,7): error TS2447: The '|=' operator is not allowed for boolean types. Consider using '||' instead. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(121,7): error TS2447: The '|=' operator is not allowed for boolean types. Consider using '||' instead. -node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(137,25): error TS2569: Type 'IterableIterator
' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(150,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(161,30): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(173,30): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(211,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(238,24): error TS2339: Property 'filterRegex' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/resources/ServiceWorkersView.js(262,30): error TS2339: Property 'asParsedURL' does not exist on type 'string'. @@ -11626,37 +11130,26 @@ node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(50,12): error TS node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(67,16): error TS2315: Type 'SourceMapManager' is not generic. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(102,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(203,31): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(207,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(238,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(241,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(244,34): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(262,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(265,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(268,34): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(290,41): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(304,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(319,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(328,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(329,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(334,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(348,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(356,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(365,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(365,38): error TS2694: Namespace 'CSSModel' has no exported member 'ContrastInfo'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(369,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(377,41): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(387,45): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(406,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(407,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(412,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(415,71): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Regular: string; Inline: string; Attributes: string; }'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(417,75): error TS2345: Argument of type 'string' is not assignable to parameter of type '{ [x: string]: any; Regular: string; Inline: string; Attributes: string; }'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(460,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(463,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(466,34): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(484,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(487,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(507,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(511,46): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(533,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(544,39): error TS2339: Property 'valuesArray' does not exist on type 'Map'. @@ -11671,11 +11164,8 @@ node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(624,35): error T node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(626,34): error TS2339: Property 'remove' does not exist on type 'Map>'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(633,33): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(647,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(650,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(674,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(675,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(687,46): error TS2339: Property 'valuesArray' does not exist on type 'Map'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(707,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(751,112): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(752,14): error TS2339: Property 'RuleUsage' does not exist on type 'typeof CSSModel'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(754,136): error TS1003: Identifier expected. @@ -11689,7 +11179,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(885,24): error T node_modules/chrome-devtools-frontend/front_end/sdk/CSSModel.js(897,33): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSProperty.js(18,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSProperty.js(39,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSProperty.js(123,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. node_modules/chrome-devtools-frontend/front_end/sdk/CSSProperty.js(156,36): error TS2345: Argument of type 'number' is not assignable to parameter of type '{ [x: string]: any; WindowDocked: number; WindowUndocked: number; ScriptsBreakpointSet: number; T...'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSProperty.js(166,64): error TS2339: Property 'substring' does not exist on type 'string | V'. Property 'substring' does not exist on type 'V'. @@ -11723,7 +11212,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(11,24 node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(40,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(40,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. Property '_contentURL' does not exist on type '{ [x: string]: any; contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...'. -node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(139,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(10,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(30,29): error TS2339: Property 'sendMessageToBackend' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(34,22): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -11731,7 +11219,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(41,22): error node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(71,27): error TS2339: Property 'reattach' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(87,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(168,52): error TS2694: Namespace 'Connection' has no exported member 'Params'. -node_modules/chrome-devtools-frontend/front_end/sdk/ContentProviders.js(102,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(14,24): error TS2694: Namespace 'Protocol' has no exported member 'Network'. node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(40,27): error TS2339: Property 'asParsedURL' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/sdk/CookieModel.js(65,26): error TS2339: Property 'networkAgent' does not exist on type 'Target'. @@ -11748,12 +11235,11 @@ node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(246,25): err node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(250,33): error TS2694: Namespace 'Protocol' has no exported member 'Network'. node_modules/chrome-devtools-frontend/front_end/sdk/CookieParser.js(325,53): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(11,26): error TS2339: Property 'domdebuggerAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(33,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(69,50): error TS2694: Namespace 'DOMBreakpoint' has no exported member 'Type'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(78,50): error TS2694: Namespace 'DOMBreakpoint' has no exported member 'Type'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(98,50): error TS2694: Namespace 'DOMBreakpoint' has no exported member 'Type'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(154,59): error TS2694: Namespace 'DOMBreakpoint' has no exported member 'Type'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(184,28): error TS2495: Type 'V' is not an array type or a string type. +node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(184,28): error TS2488: Type 'V' must have a '[Symbol.iterator]()' method that returns an iterator. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(190,60): error TS2694: Namespace 'DOMBreakpoint' has no exported member 'Type'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(232,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(242,57): error TS2339: Property 'filter' does not exist on type 'V'. @@ -11762,11 +11248,10 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(275,55): node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(276,52): error TS2339: Property 'DOMDebugger' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(292,33): error TS2694: Namespace 'EventListener' has no exported member 'Origin'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(387,7): error TS2322: Type 'Promise' is not assignable to type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(397,16): error TS1251: Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(466,34): error TS2694: Namespace 'EventListener' has no exported member 'Origin'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(469,5): error TS2322: Type 'string | { [x: string]: any; Raw: string; Framework: string; FrameworkUser: string; }' is not assignable to type '{ [x: string]: any; Raw: string; Framework: string; FrameworkUser: string; }'. Type 'string' is not assignable to type '{ [x: string]: any; Raw: string; Framework: string; FrameworkUser: string; }'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(572,28): error TS2495: Type 'V' is not an array type or a string type. +node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(572,28): error TS2488: Type 'V' must have a '[Symbol.iterator]()' method that returns an iterator. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(578,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(581,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(583,9): error TS2555: Expected at least 2 arguments, but got 1. @@ -11805,9 +11290,7 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(673,59): Type '(domDebuggerModel: DOMDebuggerModel) => void' is not assignable to type '(model: T) => void'. Types of parameters 'domDebuggerModel' and 'model' are incompatible. Type 'T' is not assignable to type 'DOMDebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(777,21): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(779,37): error TS2345: Argument of type '{ url: any; enabled: boolean; }[]' is not assignable to parameter of type 'V'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(828,21): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. +node_modules/chrome-devtools-frontend/front_end/sdk/DOMDebuggerModel.js(779,37): error TS2345: Argument of type '{ url: string; enabled: boolean; }[]' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(47,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(59,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(136,53): error TS2339: Property 'documentElement' does not exist on type 'DOMDocument'. @@ -11828,10 +11311,8 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(437,30): error T node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(440,36): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(447,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(454,35): error TS2694: Namespace 'DOMNode' has no exported member 'Attribute'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(462,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(466,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(484,34): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(491,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(495,30): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(507,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(511,30): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. @@ -11839,7 +11320,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(514,36): error T node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(519,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(523,30): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(526,36): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(531,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(536,29): error TS2339: Property 'copyText' does not exist on type 'typeof InspectorFrontendHost'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(554,31): error TS2339: Property 'index' does not exist on type 'DOMNode'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(555,16): error TS2339: Property 'index' does not exist on type 'DOMNode'. @@ -11856,24 +11336,19 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(761,40): error T node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(768,33): error TS2694: Namespace 'Protocol' has no exported member 'Error'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(775,34): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(778,40): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(834,26): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(852,31): error TS2339: Property 'baseURL' does not exist on type 'DOMNode'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(853,65): error TS2339: Property 'baseURL' does not exist on type 'DOMNode'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(860,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(872,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(880,34): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(896,7): error TS2322: Type 'DOMNode' is not assignable to type 'this'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(940,29): error TS2339: Property 'pageAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(969,66): error TS1003: Identifier expected. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(970,13): error TS2339: Property 'Attribute' does not exist on type 'typeof DOMNode'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(993,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1042,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1062,26): error TS2339: Property 'domAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1070,12): error TS2339: Property 'registerDOMDispatcher' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1165,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1166,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1176,34): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1184,15): error TS1055: Type 'Promise>' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1188,46): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1203,34): error TS2694: Namespace 'Protocol' has no exported member 'Error'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1208,26): error TS2694: Namespace 'Protocol' has no exported member 'Error'. @@ -11882,7 +11357,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1220,24): error node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1235,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1248,31): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1251,32): error TS2339: Property 'addAll' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1258,24): error TS2569: Type 'Set' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1277,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1288,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1300,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. @@ -11905,11 +11379,8 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1425,24): error node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1426,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1442,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1443,32): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1464,23): error TS2569: Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1473,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1477,28): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1479,30): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1484,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1501,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1509,24): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/DOMModel.js(1511,34): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. @@ -11943,30 +11414,22 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(42,26): err node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(45,17): error TS2315: Type 'SourceMapManager' is not generic. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(90,16): error TS2315: Type 'SourceMapManager' is not generic. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(231,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(250,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(250,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(267,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(281,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(281,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(286,35): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(304,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(304,43): error TS2694: Namespace 'DebuggerModel' has no exported member 'SetBreakpointResult'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(310,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(319,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(320,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(324,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(325,73): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(332,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(340,27): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(346,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(347,15): error TS1055: Type 'Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(347,34): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(351,30): error TS2339: Property 'Error' does not exist on type 'typeof Protocol'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(355,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(356,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(371,37): error TS2569: Type 'IterableIterator