From de9dab9ba31e74125bb6fb53f68314975188c2ff Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 12:26:00 +0200 Subject: [PATCH 01/32] JS: Move some predicates into NameResolution --- .../ql/lib/semmle/javascript/internal/NameResolution.qll | 4 ++++ .../ql/lib/semmle/javascript/internal/TypeResolution.qll | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 96e72108e2ec..cbcca9fe8106 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -408,6 +408,10 @@ module NameResolution { */ predicate trackModule = ValueFlow::TrackNode::track/1; + predicate trackClassValue = ValueFlow::TrackNode::track/1; + + predicate trackFunctionValue = ValueFlow::TrackNode::track/1; + /** * Holds if `moduleName` appears to start with a package name, as opposed to a relative file import. */ diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index ddf5757a38cc..9829651621e4 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -4,8 +4,6 @@ private import semmle.javascript.internal.UnderlyingTypes private import semmle.javascript.dataflow.internal.sharedlib.SummaryTypeTracker as SummaryTypeTracker module TypeResolution { - predicate trackClassValue = ValueFlow::TrackNode::track/1; - predicate trackType = TypeFlow::TrackNode::track/1; /** @@ -24,8 +22,6 @@ module TypeResolution { ) } - predicate trackFunctionValue = ValueFlow::TrackNode::track/1; - /** * Gets the representative for the type containing the given member. * From 2a0c7c8801b0b03a5e1cf447fc44aa9ccba79abc Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 12:26:28 +0200 Subject: [PATCH 02/32] JS: Add classHasGlobalName into NameResolution --- .../ql/lib/semmle/javascript/internal/NameResolution.qll | 6 ++++++ .../ql/lib/semmle/javascript/internal/UnderlyingTypes.qll | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index cbcca9fe8106..5725181baa05 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -513,4 +513,10 @@ module NameResolution { qualifiedName = append(prefix, step) ) } + + pragma[nomagic] + predicate classHasGlobalName(DataFlow::ClassNode cls, string name) { + cls.flowsTo(AccessPath::getAnAssignmentTo(name)) and + not cls.getTopLevel().isExterns() // don't propagate externs classes + } } diff --git a/javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll b/javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll index 8f6628278c4f..5461cb3d50f2 100644 --- a/javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll +++ b/javascript/ql/lib/semmle/javascript/internal/UnderlyingTypes.qll @@ -119,10 +119,4 @@ module UnderlyingTypes { // The caller is responsible for handling the class hierarchy. ) } - - pragma[nomagic] - private predicate classHasGlobalName(DataFlow::ClassNode cls, string name) { - cls.flowsTo(AccessPath::getAnAssignmentTo(name)) and - not cls.getTopLevel().isExterns() // don't propagate externs classes - } } From b82e84930c0b200efbbdcb55efda9a20dfdb2246 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 12:27:07 +0200 Subject: [PATCH 03/32] JS: Add public API --- javascript/ql/lib/semmle/javascript/AST.qll | 19 +++ .../lib/semmle/javascript/TypeAnnotations.qll | 9 + .../javascript/internal/BindingInfo.qll | 159 ++++++++++++++++++ .../javascript/internal/NameResolution.qll | 15 ++ 4 files changed, 202 insertions(+) create mode 100644 javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index 90b8494d1663..bcde7bbaf4a2 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -5,6 +5,8 @@ import javascript private import internal.StmtContainers private import semmle.javascript.internal.CachedStages +private import semmle.javascript.internal.TypeResolution +private import semmle.javascript.internal.BindingInfo /** * A program element corresponding to JavaScript code, such as an expression @@ -472,5 +474,22 @@ module AST { /** Gets the data flow node associated with this program element. */ DataFlow::ValueNode flow() { result = DataFlow::valueNode(this) } + + /** + * Gets information about the results of name-resolution for this expression. + * + * This can be used to map an expression to the class it refers to, or + * associate it with a named value coming from an dependency. + */ + ExprNameBindingNode getNameBinding() { result = this } + + /** + * Gets information about the type of this expression. + * + * This can be used to map an expression to the classes it may be an instance of + * (according to the type system), or to associate it with a named type coming + * from a dependency. + */ + TypeNameBindingNode getTypeBinding() { TypeResolution::valueHasType(this, result) } } } diff --git a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll index 318ad2f8873e..d9944b311eab 100644 --- a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll +++ b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll @@ -6,11 +6,20 @@ import javascript private import internal.StmtContainers private import internal.NameResolution private import internal.UnderlyingTypes +private import internal.BindingInfo /** * A type annotation, either in the form of a TypeScript type or a JSDoc comment. */ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { + /** + * Gets information about the results of name-resolution for this type. + * + * This can be used to map a type name to the class/interface it refers to, or + * associate it with a named type coming from an dependency. + */ + TypeNameBindingNode getTypeBinding() { result = this } + /** Holds if this is the `any` type. */ predicate isAny() { none() } diff --git a/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll new file mode 100644 index 000000000000..e5d3c3e48196 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll @@ -0,0 +1,159 @@ +/** + * Provides a limited public interface to name/type resolution information. + */ + +private import javascript +private import semmle.javascript.internal.NameResolution +private import semmle.javascript.internal.TypeResolution +private import semmle.javascript.internal.UnderlyingTypes + +/** + * Interface for accessing name-resolution info about type names. + */ +class TypeNameBindingNode extends NameResolution::Node { + /** + * Holds if type refers to, or is an alias for, the given type name relative to the global scope. + * + * For example: + * ```ts + * var x: Document; // hasQualifiedName("Document") + * var x: Electron; // hasQualifiedName("Electron") + * var x: Electron.BrowserWindow; // hasQualifiedName("Electron.BrowserWindow") + * ``` + */ + predicate hasQualifiedName(string qualifiedName) { + NameResolution::nodeRefersToModule(this, "global", qualifiedName) + } + + /** + * Holds if this refers a value exported by the given module, with the given + * qualified name. If the `qualifiedName` is empty, this refers to the module itself. + * + * For example, the type annotations below have the following name bindings: + * ```ts + * import { Request } from "express"; + * + * var x: Request; // hasUnderlyingType("express", "Request") + * var x: Request | null; // no result (see hasUnderlyingType) + * var x: Request & { prop: string }; // no result (see hasUnderlyingType) + * + * interface CustomSubtype extends Request {} + * + * var x: CustomSubtype; // no result (see hasUnderlyingType) + * + * var x: typeof import("express"); // hasUnderlyingType("express", "") + * ``` + */ + predicate hasQualifiedName(string moduleName, string qualifiedName) { + NameResolution::nodeRefersToModule(this, moduleName, qualifiedName) + } + + /** + * Holds if this type refers to the given type exported from the given module, after + * unfolding unions and intersections, and following subtype relations. + * + * For example: + * ```ts + * import { Request } from "express"; + * + * var x: Request; // hasUnderlyingType("express", "Request") + * var x: Request | null; // hasUnderlyingType("express", "Request") + * var x: Request & { prop: string }; // hasUnderlyingType("express", "Request") + * + * interface CustomSubtype extends Request {} + * + * var x: CustomSubtype; // hasUnderlyingType("express", "Request") + * ``` + */ + predicate hasUnderlyingType(string moduleName, string qualifiedName) { + UnderlyingTypes::nodeHasUnderlyingType(this, moduleName, qualifiedName) + } + + /** + * Holds if this type refers to the given type from the global scope, after + * unfolding unions and intersections, and following subtype relations. + * + * For example: + * ```ts + * var x: Document; // hasUnderlyingType("Document") + * var x: Document | null; // hasUnderlyingType("Document") + * var x: Document & { prop: string }; // hasUnderlyingType("Document") + * + * interface CustomSubtype extends Document {} + * + * var x: CustomSubtype; // hasUnderlyingType("Document") + * ``` + */ + predicate hasUnderlyingType(string qualifiedName) { + UnderlyingTypes::nodeHasUnderlyingType(this, qualifiedName) + } + + /** + * Gets the declaration of the type being referenced by this name. + * + * For example: + * ```ts + * class Foo {} + * + * type T = Foo; + * var x: T; // getTypeDefinition() maps T to the class Foo above + * ``` + * + * Note that this has no result for function-style classes referenced from + * a JSDoc comment. + */ + TypeDefinition getTypeDefinition() { TypeResolution::trackType(result) = this } + + /** + * Gets a class that this type refers to, after unfolding unions and intersections (but not subtyping). + * + * For example, the type of `x` maps to the class `C` in each example below: + * ```ts + * class C {} + * + * var x: C; + * var x: C | null; + * var x: C & { prop: string }; + * ``` + */ + DataFlow::ClassNode getAnUnderlyingClass() { + UnderlyingTypes::nodeHasUnderlyingClassType(this, result) + } +} + +/** + * Interface for accessing name-resolution info about expressions. + */ +class ExprNameBindingNode extends NameResolution::Node { + /** + * Holds if this refers a value exported by the given module, with the given + * qualified name. If the `qualifiedName` is empty, this refers to the module itself. + * + * For example, the type annotations below have the following name bindings: + * ```ts + * import * as f from "foo"; + * + * var x = f; // hasQualifiedName(f, "") + * var x = f.x.y; // hasQualifiedName(f, "x.y") + * ``` + */ + predicate hasQualifiedName(string moduleName, string qualifiedName) { + NameResolution::nodeRefersToModule(this, moduleName, qualifiedName) + } + + /** + * Gets the class, or function acting as a class, referenced by this name. + * + * ```ts + * class Foo {} + * const T = Foo; + * var x = T; // getClassNode() maps T to the class Foo above + * + * function Bar() {} + * Bar.prototype.blah = function() {}; + * const S = Bar; + * var x = S; // getClassNode() maps S to the function Bar above + * ``` + */ + DataFlow::ClassNode getClassNode() { NameResolution::nodeRefersToClass(this, result) } +} diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 5725181baa05..7496b6c0482a 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -519,4 +519,19 @@ module NameResolution { cls.flowsTo(AccessPath::getAnAssignmentTo(name)) and not cls.getTopLevel().isExterns() // don't propagate externs classes } + + /** + * Holds if `node` refers to the given class. + */ + pragma[nomagic] + predicate nodeRefersToClass(Node node, DataFlow::ClassNode cls) { + exists(string name | + classHasGlobalName(cls, name) and + nodeRefersToModule(node, "global", name) + ) + or + trackClassValue(cls.getAstNode()) = node + or + trackFunctionValue(cls.getAstNode()) = node + } } From 17a687b38f5021e30bd2f7af0b0d21bec2ed4697 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 14:26:01 +0200 Subject: [PATCH 04/32] JS: Update type usage in Nest library model --- .../ql/lib/semmle/javascript/frameworks/Nest.qll | 15 +++++++-------- .../semmle/javascript/internal/BindingInfo.qll | 13 +++++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll index d6bcb9ddd400..34fca2d57c98 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll @@ -5,8 +5,6 @@ import javascript private import semmle.javascript.security.dataflow.ServerSideUrlRedirectCustomizations private import semmle.javascript.dataflow.internal.PreCallGraphStep -private import semmle.javascript.internal.NameResolution -private import semmle.javascript.internal.TypeResolution /** * Provides classes and predicates for reasoning about [Nest](https://nestjs.com/). @@ -137,7 +135,7 @@ module NestJS { hasSanitizingPipe(this, true) and // Note: we could consider types with class-validator decorators to be sanitized here, but instead we consider the root // object to be tainted, but omit taint steps for the individual properties names that have sanitizing decorators. See ClassValidator.qll. - TypeResolution::isSanitizingPrimitiveType(this.getParameter().getTypeAnnotation()) + this.getParameter().getTypeBinding().isSanitizingPrimitiveType() } } @@ -337,9 +335,10 @@ module NestJS { handler.isReturnValueReflected() and this = handler.getAReturn() and // Only returned strings are sinks. If we can find a type for the return value, it must be string-like. - not exists(NameResolution::Node type | - TypeResolution::valueHasType(this.asExpr(), type) and - not TypeResolution::hasUnderlyingStringOrAnyType(type) + ( + this.asExpr().getTypeBinding().hasUnderlyingStringOrAnyType() + or + not exists(this.asExpr().getTypeBinding()) ) } @@ -475,7 +474,7 @@ module NestJS { /** Gets the class being referenced at `node` without relying on the call graph. */ private DataFlow::ClassNode getClassFromNode(DataFlow::Node node) { - result.getAstNode() = node.analyze().getAValue().(AbstractClass).getClass() + result = node.asExpr().getNameBinding().getClassNode() } private predicate providerClassPair( @@ -491,7 +490,7 @@ module NestJS { private class DependencyInjectionStep extends PreCallGraphStep { override predicate classInstanceSource(DataFlow::ClassNode cls, DataFlow::Node node) { exists(DataFlow::ClassNode interfaceClass | - node.asExpr().(Parameter).getType().(ClassType).getClass() = interfaceClass.getAstNode() and + node.asExpr().getTypeBinding().getTypeDefinition() = interfaceClass.getAstNode() and providerClassPair(interfaceClass, cls) ) } diff --git a/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll index e5d3c3e48196..bc3db9ef3a9d 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll @@ -119,6 +119,19 @@ class TypeNameBindingNode extends NameResolution::Node { DataFlow::ClassNode getAnUnderlyingClass() { UnderlyingTypes::nodeHasUnderlyingClassType(this, result) } + + /** + * Holds if this type contains `string` or `any`, possibly wrapped in a promise. + */ + predicate hasUnderlyingStringOrAnyType() { TypeResolution::hasUnderlyingStringOrAnyType(this) } + + /** + * Holds if this refers to a type that is considered untaintable (if actually enforced at runtime). + * + * Specifically, the types `number`, `boolean`, `null`, `undefined`, `void`, `never`, as well as literal types (`"foo"`) + * and enums and enum members have this property. + */ + predicate isSanitizingPrimitiveType() { TypeResolution::isSanitizingPrimitiveType(this) } } /** From 9d4c38b5f1d17bd915460f95044bde8901f854fb Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 3 Jun 2025 13:50:27 +0200 Subject: [PATCH 05/32] JS: Update type usage in definitions.qll --- javascript/ql/lib/definitions.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/definitions.qll b/javascript/ql/lib/definitions.qll index 2f1c99b7c606..54ad0c3548a6 100644 --- a/javascript/ql/lib/definitions.qll +++ b/javascript/ql/lib/definitions.qll @@ -126,7 +126,7 @@ private predicate propertyLookup(Expr prop, AstNode write, string kind) { private predicate typeLookup(AstNode ref, AstNode decl, string kind) { exists(TypeAccess typeAccess | ref = typeAccess.getIdentifier() and - decl = typeAccess.getTypeName().getADefinition() and + decl = typeAccess.getTypeBinding().getTypeDefinition() and kind = "T" ) } From ace8b09a3602cddf78d01c67179836f7a4918bad Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 11 Jun 2025 10:45:44 +0200 Subject: [PATCH 06/32] JS: Update type usage in ClassValidator.qll --- .../ql/lib/semmle/javascript/frameworks/ClassValidator.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ClassValidator.qll b/javascript/ql/lib/semmle/javascript/frameworks/ClassValidator.qll index 35f966217bda..8b2ef364054f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ClassValidator.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ClassValidator.qll @@ -50,7 +50,7 @@ module ClassValidator { pragma[noinline] private ClassDefinition getClassReferencedByPropRead(DataFlow::PropRead read) { - read.getBase().asExpr().getType().unfold().(ClassType).getClass() = result + read.getBase().asExpr().getTypeBinding().getAnUnderlyingClass().getAstNode() = result } /** From b71d09630a67c0d40f4f73560432781657c5fa16 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 14:33:02 +0200 Subject: [PATCH 07/32] JS: Update type usage in Electron model --- .../semmle/javascript/frameworks/Electron.qll | 19 ++++++++++--------- .../frameworks/Electron/tests.expected | 2 ++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll b/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll index 48b1875a445e..796770b96ee0 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Electron.qll @@ -41,18 +41,19 @@ module Electron { BrowserView() { this = DataFlow::moduleMember("electron", "BrowserView").getAnInstantiation() } } - /** - * An expression of type `BrowserWindow` or `BrowserView`. - */ - private class BrowserObjectByType extends BrowserObject { - BrowserObjectByType() { - exists(string tp | tp = "BrowserWindow" or tp = "BrowserView" | - this.asExpr().getType().hasUnderlyingType("electron", tp) - ) + private class ElectronEntryPoint extends API::EntryPoint { + ElectronEntryPoint() { this = "Electron.Browser" } + + override DataFlow::SourceNode getASource() { + result.hasUnderlyingType(["Electron.BrowserWindow", "Electron.BrowserView"]) } } - private API::Node browserObject() { result.asSource() instanceof NewBrowserObject } + private API::Node browserObject() { + result.asSource() instanceof NewBrowserObject or + result = API::Node::ofType("electron", ["BrowserWindow", "BrowserView"]) or + result = any(ElectronEntryPoint e).getANode() + } /** * A data flow node whose value may originate from a browser object instantiation. diff --git a/javascript/ql/test/library-tests/frameworks/Electron/tests.expected b/javascript/ql/test/library-tests/frameworks/Electron/tests.expected index 3050fb8fa533..72fb0a737b85 100644 --- a/javascript/ql/test/library-tests/frameworks/Electron/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/Electron/tests.expected @@ -16,6 +16,8 @@ browserObject | electron.js:63:3:63:5 | win | | electron.js:65:18:65:20 | win | | electronTs.ts:3:12:3:13 | bw | +| electronTs.ts:3:12:3:13 | bw | +| electronTs.ts:3:40:3:41 | bv | | electronTs.ts:3:40:3:41 | bv | | electronTs.ts:4:3:4:4 | bw | | electronTs.ts:5:3:5:4 | bv | From 8b2a424fb004e96bddd8fb419b35ba3c81afc0db Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 14:33:13 +0200 Subject: [PATCH 08/32] JS: Update type usage use in Express model --- javascript/ql/lib/semmle/javascript/frameworks/Express.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll index bcfcffb82a0f..8c016b3afe91 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll @@ -48,7 +48,7 @@ module Express { private predicate isRouter(DataFlow::Node e) { isRouter(e, _) or - e.asExpr().getType().hasUnderlyingType("express", "Router") + e.(DataFlow::SourceNode).hasUnderlyingType("express", "Router") or // created by `webpack-dev-server` WebpackDevServer::webpackDevServerApp().flowsTo(e) From fb92d9b034a783e7a15533f057affda2bd9983ae Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 16:07:47 +0200 Subject: [PATCH 09/32] JS: Update type usage in UnreachableMethodOverloads This query depended on the cons-hashing performed by type extraction to determine if two types are the same. This is not trivial to restore, but not important enough to reimplement right now, so for now just simplifying the query's ability to recognise that two types are the same. --- .../UnreachableMethodOverloads.ql | 42 ++++++++++++------- .../UnreachableMethodOverloads.expected | 3 -- .../Declarations/UnreachableOverloads/tst.ts | 6 +-- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql index a68617ea2f11..912d58ab54ca 100644 --- a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +++ b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql @@ -45,20 +45,22 @@ string getKind(MemberDeclaration m) { /** * A call-signature that originates from a MethodSignature in the AST. */ -private class MethodCallSig extends CallSignatureType { - string name; - - MethodCallSig() { - exists(MethodSignature sig | - this = sig.getBody().getCallSignature() and - name = sig.getName() - ) +private class MethodCallSig extends Function { + private MethodSignature signature; + + MethodCallSig() { this = signature.getBody() } + + int getNumOptionalParameter() { + result = count(Parameter p | p = this.getParameter(_) and p.isDeclaredOptional()) + } + + int getNumRequiredParameter() { + result = count(Parameter p | p = this.getParameter(_) and not p.isDeclaredOptional()) } - /** - * Gets the name of any member that has this signature. - */ - string getName() { result = name } + SignatureKind getKind() { result = SignatureKind::function() } + + TypeExpr getTypeParameterBound(int i) { result = this.getTypeParameter(i).getBound() } } pragma[noinline] @@ -75,6 +77,7 @@ private MethodCallSig getMethodCallSigWithFingerprint( /** * Holds if the two call signatures could be overloads of each other and have the same parameter types. */ +pragma[inline] predicate matchingCallSignature(MethodCallSig method, MethodCallSig other) { other = getMethodCallSigWithFingerprint(method.getName(), method.getNumOptionalParameter(), @@ -109,6 +112,16 @@ private MethodSignature getMethodSignatureWithFingerprint( result.getBody().getNumParameter() = numParameters } +bindingset[t1, t2] +pragma[inline_late] +private predicate sameType(TypeExpr t1, TypeExpr t2) { + t1.(PredefinedTypeExpr).getName() = t2.(PredefinedTypeExpr).getName() + or + t1 instanceof ThisTypeExpr and t2 instanceof ThisTypeExpr + or + t1.(LocalTypeAccess).getLocalTypeName() = t2.(LocalTypeAccess).getLocalTypeName() +} + /** * Holds if the two method signatures are overloads of each other and have the same parameter types. */ @@ -122,14 +135,13 @@ predicate signaturesMatch(MethodSignature method, MethodSignature other) { not exists(method.getBody().getThisTypeAnnotation()) and not exists(other.getBody().getThisTypeAnnotation()) or - method.getBody().getThisTypeAnnotation().getType() = - other.getBody().getThisTypeAnnotation().getType() + sameType(method.getBody().getThisTypeAnnotation(), other.getBody().getThisTypeAnnotation()) ) and // The types are compared in matchingCallSignature. This is a consistency check that the textual representation of the type-annotations are somewhat similar. forall(int i | i in [0 .. -1 + method.getBody().getNumParameter()] | getParameterTypeAnnotation(method, i) = getParameterTypeAnnotation(other, i) ) and - matchingCallSignature(method.getBody().getCallSignature(), other.getBody().getCallSignature()) + matchingCallSignature(method.getBody(), other.getBody()) } from ClassOrInterface decl, string name, MethodSignature previous, MethodSignature unreachable diff --git a/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/UnreachableMethodOverloads.expected b/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/UnreachableMethodOverloads.expected index 44bd568e7674..24767950a661 100644 --- a/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/UnreachableMethodOverloads.expected +++ b/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/UnreachableMethodOverloads.expected @@ -1,5 +1,2 @@ -| tst.ts:3:3:3:30 | method( ... number; | This overload of method() is unreachable, the $@ overload will always be selected. | tst.ts:2:3:2:30 | method( ... string; | previous | | tst.ts:6:3:6:17 | types1(): any[] | This overload of types1() is unreachable, the $@ overload will always be selected. | tst.ts:5:3:5:18 | types1(): T[] | previous | -| tst.ts:15:3:15:74 | on(even ... nction; | This overload of on() is unreachable, the $@ overload will always be selected. | tst.ts:14:3:14:74 | on(even ... nction; | previous | | tst.ts:21:3:21:28 | bar(thi ... number; | This overload of bar() is unreachable, the $@ overload will always be selected. | tst.ts:20:3:20:28 | bar(thi ... string; | previous | -| tst.ts:27:3:27:30 | method( ... number; | This overload of method() is unreachable, the $@ overload will always be selected. | tst.ts:26:3:26:30 | method( ... string; | previous | diff --git a/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/tst.ts b/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/tst.ts index 17d95f835cf7..4ffd64bc7c18 100644 --- a/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/tst.ts +++ b/javascript/ql/test/query-tests/Declarations/UnreachableOverloads/tst.ts @@ -1,6 +1,6 @@ declare class Foobar { method(foo: number): string; - method(foo: number): number; // $ Alert + method(foo: number): number; // $ MISSING: Alert types1(): T[] types1(): any[] // $ Alert @@ -12,7 +12,7 @@ declare class Foobar { types3(t: T): number on(event: string, fn?: (event?: any, ...args: any[]) => void): Function; - on(event: string, fn?: (event?: any, ...args: any[]) => void): Function; // $ Alert + on(event: string, fn?: (event?: any, ...args: any[]) => void): Function; // $ MISSING: Alert foo(this: string): string; foo(this: number): number; @@ -24,7 +24,7 @@ declare class Foobar { declare class Base { method(foo: number): string; - method(foo: number): number; // $ Alert + method(foo: number): number; // $ MISSING: Alert overRiddenInSub(): string; overRiddenInSub(): number; From e459884b696b125d9dd1de2924288f0b3ac9b9c4 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 12:46:43 +0200 Subject: [PATCH 10/32] JS: Update API usage in ViewComponentInput --- javascript/ql/lib/semmle/javascript/ViewComponentInput.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll b/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll index 7ab04ad5bd26..43cd337685db 100644 --- a/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll +++ b/javascript/ql/lib/semmle/javascript/ViewComponentInput.qll @@ -3,7 +3,6 @@ */ private import javascript -private import semmle.javascript.internal.TypeResolution /** * An input to a view component, such as React props. @@ -16,7 +15,7 @@ abstract class ViewComponentInput extends DataFlow::Node { private class ViewComponentInputAsThreatModelSource extends ThreatModelSource::Range instanceof ViewComponentInput { ViewComponentInputAsThreatModelSource() { - not TypeResolution::valueHasSanitizingPrimitiveType(this.asExpr()) + not this.asExpr().getTypeBinding().isSanitizingPrimitiveType() } final override string getThreatModel() { result = "view-component-input" } From fcb6882f169fab17f54db329cc556587d41cf8cb Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 12:48:39 +0200 Subject: [PATCH 11/32] JS: Update API usage in MissingAwait --- javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll | 5 +++++ javascript/ql/src/Expressions/MissingAwait.ql | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll index bc3db9ef3a9d..9250e3373700 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll @@ -132,6 +132,11 @@ class TypeNameBindingNode extends NameResolution::Node { * and enums and enum members have this property. */ predicate isSanitizingPrimitiveType() { TypeResolution::isSanitizingPrimitiveType(this) } + + /** + * Holds if the given type is a Promise object. Does not hold for unions unless all parts of the union are promises. + */ + predicate isPromiseType() { TypeResolution::isPromiseType(this) } } /** diff --git a/javascript/ql/src/Expressions/MissingAwait.ql b/javascript/ql/src/Expressions/MissingAwait.ql index a537156da015..851dcc00d574 100644 --- a/javascript/ql/src/Expressions/MissingAwait.ql +++ b/javascript/ql/src/Expressions/MissingAwait.ql @@ -11,7 +11,6 @@ */ import javascript -private import semmle.javascript.internal.TypeResolution /** * Holds if `call` is a call to an `async` function. @@ -30,7 +29,7 @@ predicate isPromise(DataFlow::SourceNode node, boolean nullable) { isAsyncCall(node, nullable) or not isAsyncCall(node, _) and - TypeResolution::valueHasPromiseType(node.asExpr()) and + node.asExpr().getTypeBinding().isPromiseType() and nullable = true } From 6d389c31c726b65f36482acff3dde709f0863f50 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 16:31:19 +0200 Subject: [PATCH 12/32] JS: Update an outdated QLDoc comment --- javascript/ql/lib/semmle/javascript/Expr.qll | 2 -- 1 file changed, 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index d7fe610b4f11..f30e03cbdcb4 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -1013,8 +1013,6 @@ class InvokeExpr extends @invokeexpr, Expr { /** * Gets the statically resolved target function, as determined by the TypeScript type system, if any. * - * This predicate is only populated for files extracted with full TypeScript extraction. - * * Note that the resolved function may be overridden in a subclass and thus is not * necessarily the actual target of this invocation at runtime. */ From f5ac3fd611007e1fc46aaf9cc6d825b1bacba245 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 3 Jun 2025 13:52:00 +0200 Subject: [PATCH 13/32] JS: Remove old metric-meta query TypedExprs.ql This was used in the very old dist-compare tool, but has no use anymore --- .../query-suite/not_included_in_qls.expected | 1 - javascript/ql/src/meta/types/TypedExprs.ql | 17 ----------------- 2 files changed, 18 deletions(-) delete mode 100644 javascript/ql/src/meta/types/TypedExprs.ql diff --git a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected index c80c3fc76da1..0429922f7fcc 100644 --- a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -146,4 +146,3 @@ ql/javascript/ql/src/meta/analysis-quality/UnresolvableImports.ql ql/javascript/ql/src/meta/extraction-metrics/FileData.ql ql/javascript/ql/src/meta/extraction-metrics/MissingMetrics.ql ql/javascript/ql/src/meta/extraction-metrics/PhaseTimings.ql -ql/javascript/ql/src/meta/types/TypedExprs.ql diff --git a/javascript/ql/src/meta/types/TypedExprs.ql b/javascript/ql/src/meta/types/TypedExprs.ql deleted file mode 100644 index 5e9efc349dc6..000000000000 --- a/javascript/ql/src/meta/types/TypedExprs.ql +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @name Typed expressions - * @description The number of expressions for which the TypeScript extractor could - * extract a type other than 'any'. - * @kind metric - * @metricType project - * @metricAggregate sum - * @tags meta - * @id js/meta/typed-expressions - */ - -import javascript -import meta.MetaMetrics - -predicate isProperType(Type t) { not t instanceof AnyType } - -select projectRoot(), count(Expr e | isProperType(e.getType())) From ee9c4fa76341bd09414d7324778fc7cf9352d035 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 14:34:28 +0200 Subject: [PATCH 14/32] JS: Deprecate everything that depends on type extraction --- javascript/ql/lib/javascript.qll | 2 +- .../lib/semmle/javascript/CanonicalNames.qll | 9 +- .../ql/lib/semmle/javascript/Classes.qll | 2 +- javascript/ql/lib/semmle/javascript/Expr.qll | 12 +- .../ql/lib/semmle/javascript/Functions.qll | 4 +- .../lib/semmle/javascript/TypeAnnotations.qll | 2 +- .../ql/lib/semmle/javascript/TypeScript.qll | 117 +++++++++--------- 7 files changed, 73 insertions(+), 75 deletions(-) diff --git a/javascript/ql/lib/javascript.qll b/javascript/ql/lib/javascript.qll index d75eed29b8e0..46f35dee84fb 100644 --- a/javascript/ql/lib/javascript.qll +++ b/javascript/ql/lib/javascript.qll @@ -47,7 +47,7 @@ import semmle.javascript.NodeJS import semmle.javascript.NPM import semmle.javascript.Paths import semmle.javascript.Promises -import semmle.javascript.CanonicalNames +deprecated import semmle.javascript.CanonicalNames import semmle.javascript.RangeAnalysis import semmle.javascript.Regexp import semmle.javascript.Routing diff --git a/javascript/ql/lib/semmle/javascript/CanonicalNames.qll b/javascript/ql/lib/semmle/javascript/CanonicalNames.qll index d83aeefdc9a5..87f7c25b36de 100644 --- a/javascript/ql/lib/semmle/javascript/CanonicalNames.qll +++ b/javascript/ql/lib/semmle/javascript/CanonicalNames.qll @@ -1,6 +1,7 @@ /** * Provides classes for working with name resolution of namespaces and types. */ +deprecated module; import javascript @@ -18,7 +19,7 @@ import javascript * * This class is only populated when full TypeScript extraction is enabled. */ -class CanonicalName extends @symbol { +deprecated class CanonicalName extends @symbol { /** * Gets the parent of this canonical name, that is, the prefix of its qualified name. */ @@ -218,7 +219,7 @@ class CanonicalName extends @symbol { /** * The canonical name for a type. */ -class TypeName extends CanonicalName { +deprecated class TypeName extends CanonicalName { TypeName() { exists(TypeReference ref | type_symbol(ref, this)) or exists(TypeDefinition def | ast_node_symbol(def, this)) or @@ -261,7 +262,7 @@ class TypeName extends CanonicalName { /** * The canonical name for a namespace. */ -class Namespace extends CanonicalName { +deprecated class Namespace extends CanonicalName { Namespace() { this.getAChild().isExportedMember() or exists(NamespaceDefinition def | ast_node_symbol(def, this)) or @@ -309,7 +310,7 @@ class Namespace extends CanonicalName { /** * The canonical name for a function. */ -class CanonicalFunctionName extends CanonicalName { +deprecated class CanonicalFunctionName extends CanonicalName { CanonicalFunctionName() { exists(Function fun | ast_node_symbol(fun, this)) or exists(InvokeExpr invoke | ast_node_symbol(invoke, this)) diff --git a/javascript/ql/lib/semmle/javascript/Classes.qll b/javascript/ql/lib/semmle/javascript/Classes.qll index f5877a78371b..394ab7910276 100644 --- a/javascript/ql/lib/semmle/javascript/Classes.qll +++ b/javascript/ql/lib/semmle/javascript/Classes.qll @@ -119,7 +119,7 @@ class ClassOrInterface extends @class_or_interface, TypeParameterized { * * Anonymous classes and interfaces do not have a canonical name. */ - TypeName getTypeName() { result.getADefinition() = this } + deprecated TypeName getTypeName() { result.getADefinition() = this } /** * Gets the ClassOrInterface corresponding to either a super type or an implemented interface. diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index f30e03cbdcb4..f1177d1a773b 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -176,7 +176,7 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { * Has no result if the expression is in a JavaScript file or in a TypeScript * file that was extracted without type information. */ - Type getType() { ast_node_type(this, result) } + deprecated Type getType() { ast_node_type(this, result) } /** * Holds if the syntactic context that the expression appears in relies on the expression @@ -993,7 +993,7 @@ class InvokeExpr extends @invokeexpr, Expr { * * This predicate is only populated for files extracted with full TypeScript extraction. */ - CallSignatureType getResolvedSignature() { invoke_expr_signature(this, result) } + deprecated CallSignatureType getResolvedSignature() { invoke_expr_signature(this, result) } /** * Gets the index of the targeted call signature among the overload signatures @@ -1008,7 +1008,7 @@ class InvokeExpr extends @invokeexpr, Expr { * * This predicate is only populated for files extracted with full TypeScript extraction. */ - CanonicalFunctionName getResolvedCalleeName() { ast_node_symbol(this, result) } + deprecated CanonicalFunctionName getResolvedCalleeName() { ast_node_symbol(this, result) } /** * Gets the statically resolved target function, as determined by the TypeScript type system, if any. @@ -1016,11 +1016,7 @@ class InvokeExpr extends @invokeexpr, Expr { * Note that the resolved function may be overridden in a subclass and thus is not * necessarily the actual target of this invocation at runtime. */ - Function getResolvedCallee() { - TypeResolution::callTarget(this, result) - or - result = this.getResolvedCalleeName().getImplementation() - } + Function getResolvedCallee() { TypeResolution::callTarget(this, result) } } /** diff --git a/javascript/ql/lib/semmle/javascript/Functions.qll b/javascript/ql/lib/semmle/javascript/Functions.qll index 150dbea3f01b..b72bfbc888e9 100644 --- a/javascript/ql/lib/semmle/javascript/Functions.qll +++ b/javascript/ql/lib/semmle/javascript/Functions.qll @@ -434,12 +434,12 @@ class Function extends @function, Parameterized, TypeParameterized, StmtContaine * * This predicate is only populated for files extracted with full TypeScript extraction. */ - CanonicalFunctionName getCanonicalName() { ast_node_symbol(this, result) } + deprecated CanonicalFunctionName getCanonicalName() { ast_node_symbol(this, result) } /** * Gets the call signature of this function, as determined by the TypeScript compiler, if any. */ - CallSignatureType getCallSignature() { declared_function_signature(this, result) } + deprecated CallSignatureType getCallSignature() { declared_function_signature(this, result) } } /** diff --git a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll index d9944b311eab..6d0a13c4a38f 100644 --- a/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll +++ b/javascript/ql/lib/semmle/javascript/TypeAnnotations.qll @@ -135,7 +135,7 @@ class TypeAnnotation extends @type_annotation, NodeInStmtContainer { * * Note that this has no result for JSDoc type annotations. */ - Type getType() { none() } + deprecated Type getType() { none() } /** * Gets the class referenced by this type annotation, if any. diff --git a/javascript/ql/lib/semmle/javascript/TypeScript.qll b/javascript/ql/lib/semmle/javascript/TypeScript.qll index ab670700c24b..350efcea18eb 100644 --- a/javascript/ql/lib/semmle/javascript/TypeScript.qll +++ b/javascript/ql/lib/semmle/javascript/TypeScript.qll @@ -32,7 +32,7 @@ class NamespaceDefinition extends Stmt, @namespace_definition, AST::ValueNode { /** * Gets the canonical name of the namespace being defined. */ - Namespace getNamespace() { result.getADefinition() = this } + deprecated Namespace getNamespace() { result.getADefinition() = this } } /** @@ -112,12 +112,12 @@ class TypeDefinition extends AstNode, @type_definition { /** * Gets the canonical name of the type being defined. */ - TypeName getTypeName() { result.getADefinition() = this } + deprecated TypeName getTypeName() { result.getADefinition() = this } /** * Gets the type defined by this declaration. */ - Type getType() { ast_node_type(this.getIdentifier(), result) } + deprecated Type getType() { ast_node_type(this.getIdentifier(), result) } override string getAPrimaryQlClass() { result = "TypeDefinition" } } @@ -269,7 +269,7 @@ class TypeAliasDeclaration extends @type_alias_declaration, TypeParameterized, S /** * Gets the canonical name of the type being defined. */ - TypeName getTypeName() { result.getADefinition() = this } + deprecated TypeName getTypeName() { result.getADefinition() = this } override string getAPrimaryQlClass() { result = "TypeAliasDeclaration" } } @@ -549,7 +549,7 @@ class LocalNamespaceName extends @local_namespace_name, LexicalName { /** * Gets the canonical name of the namespace referenced by this name. */ - Namespace getNamespace() { result = this.getADeclaration().getNamespace() } + deprecated Namespace getNamespace() { result = this.getADeclaration().getNamespace() } override DeclarationSpace getDeclarationSpace() { result = "namespace" } } @@ -569,7 +569,7 @@ class TypeExpr extends ExprOrType, @typeexpr, TypeAnnotation { * Has no result if this occurs in a TypeScript file that was extracted * without type information. */ - override Type getType() { ast_node_type(this, result) } + deprecated override Type getType() { ast_node_type(this, result) } override Stmt getEnclosingStmt() { result = ExprOrType.super.getEnclosingStmt() } @@ -693,7 +693,7 @@ class TypeAccess extends @typeaccess, TypeExpr, TypeRef { /** * Gets the canonical name of the type being accessed. */ - TypeName getTypeName() { ast_node_symbol(this, result) } + deprecated TypeName getTypeName() { ast_node_symbol(this, result) } override string getAPrimaryQlClass() { result = "TypeAccess" } } @@ -1380,7 +1380,7 @@ class LocalNamespaceDecl extends VarDecl, NamespaceRef { /** * Gets the canonical name of the namespace being defined or aliased by this name. */ - Namespace getNamespace() { ast_node_symbol(this, result) } + deprecated Namespace getNamespace() { ast_node_symbol(this, result) } } /** @@ -1398,7 +1398,7 @@ class NamespaceAccess extends TypeExpr, NamespaceRef, @namespace_access { /** * Gets the canonical name of the namespace being accessed. */ - Namespace getNamespace() { ast_node_symbol(this, result) } + deprecated Namespace getNamespace() { ast_node_symbol(this, result) } override string getAPrimaryQlClass() { result = "NamespaceAccess" } } @@ -1507,7 +1507,7 @@ class EnumDeclaration extends NamespaceDefinition, @enum_declaration, AST::Value /** * Gets the canonical name of the type being defined. */ - TypeName getTypeName() { ast_node_symbol(this, result) } + deprecated TypeName getTypeName() { ast_node_symbol(this, result) } /** * Gets the local namespace name introduced by the enumeration, for use in @@ -1595,7 +1595,7 @@ class EnumMember extends AstNode, @enum_member { /** * Gets the canonical name of the type defined by this enum member. */ - TypeName getTypeName() { ast_node_symbol(this, result) } + deprecated TypeName getTypeName() { ast_node_symbol(this, result) } override string getAPrimaryQlClass() { result = "EnumMember" } } @@ -1776,7 +1776,7 @@ class TypeRootFolder extends Folder { * For instance, there may be many AST nodes representing different uses of the * `number` keyword, but there only exists one `number` type. */ -class Type extends @type { +deprecated class Type extends @type { /** * Gets a string representation of this type. */ @@ -1975,7 +1975,7 @@ class Type extends @type { /** * A union type or intersection type, such as `string | number` or `T & U`. */ -class UnionOrIntersectionType extends Type, @union_or_intersection_type { +deprecated class UnionOrIntersectionType extends Type, @union_or_intersection_type { /** * Gets the `i`th member of this union or intersection, starting at 0. */ @@ -1998,12 +1998,12 @@ class UnionOrIntersectionType extends Type, @union_or_intersection_type { * Note that the `boolean` type is represented as the union `true | false`, * but is still displayed as `boolean` in string representations. */ -class UnionType extends UnionOrIntersectionType, @union_type { } +deprecated class UnionType extends UnionOrIntersectionType, @union_type { } /** * An intersection type, such as `T & {x: number}`. */ -class IntersectionType extends UnionOrIntersectionType, @intersection_type { } +deprecated class IntersectionType extends UnionOrIntersectionType, @intersection_type { } /** * A type that describes a JavaScript `Array` object. @@ -2016,7 +2016,7 @@ class IntersectionType extends UnionOrIntersectionType, @intersection_type { } * Foreign array-like objects such as `HTMLCollection` are not normal JavaScript arrays, * and their corresponding types are not considered array types either. */ -class ArrayType extends Type { +deprecated class ArrayType extends Type { ArrayType() { this instanceof @tuple_type or this.(TypeReference).hasQualifiedName("Array") or @@ -2032,7 +2032,7 @@ class ArrayType extends Type { /** * An array type such as `Array`, or equivalently, `string[]`. */ -class PlainArrayType extends ArrayType, TypeReference { +deprecated class PlainArrayType extends ArrayType, TypeReference { PlainArrayType() { this.hasQualifiedName("Array") } override Type getNumberIndexType() { result = this.getTypeArgument(0) } @@ -2041,14 +2041,14 @@ class PlainArrayType extends ArrayType, TypeReference { /** * A read-only array type such as `ReadonlyArray`. */ -class ReadonlyArrayType extends ArrayType, TypeReference { +deprecated class ReadonlyArrayType extends ArrayType, TypeReference { ReadonlyArrayType() { this.hasQualifiedName("ReadonlyArray") } } /** * A tuple type, such as `[number, string]`. */ -class TupleType extends ArrayType, @tuple_type { +deprecated class TupleType extends ArrayType, @tuple_type { /** * Gets the `i`th member of this tuple type, starting at 0. */ @@ -2104,32 +2104,32 @@ class TupleType extends ArrayType, @tuple_type { /** * The predefined `any` type. */ -class AnyType extends Type, @any_type { } +deprecated class AnyType extends Type, @any_type { } /** * The predefined `unknown` type. */ -class UnknownType extends Type, @unknown_type { } +deprecated class UnknownType extends Type, @unknown_type { } /** * The predefined `string` type. */ -class StringType extends Type, @string_type { } +deprecated class StringType extends Type, @string_type { } /** * The predefined `number` type. */ -class NumberType extends Type, @number_type { } +deprecated class NumberType extends Type, @number_type { } /** * The predefined `bigint` type. */ -class BigIntType extends Type, @bigint_type { } +deprecated class BigIntType extends Type, @bigint_type { } /** * A boolean, number, or string literal type. */ -class LiteralType extends Type, @literal_type { +deprecated class LiteralType extends Type, @literal_type { /** * Gets the string value of this literal. */ @@ -2139,7 +2139,7 @@ class LiteralType extends Type, @literal_type { /** * The boolean literal type `true` or `false`. */ -class BooleanLiteralType extends LiteralType, @boolean_literal_type { +deprecated class BooleanLiteralType extends LiteralType, @boolean_literal_type { /** * Gets the boolean value represented by this type. */ @@ -2153,7 +2153,7 @@ class BooleanLiteralType extends LiteralType, @boolean_literal_type { /** * A number literal as a static type. */ -class NumberLiteralType extends LiteralType, @number_literal_type { +deprecated class NumberLiteralType extends LiteralType, @number_literal_type { override string getStringValue() { type_literal_value(this, result) } /** @@ -2170,14 +2170,14 @@ class NumberLiteralType extends LiteralType, @number_literal_type { /** * A string literal as a static type. */ -class StringLiteralType extends LiteralType, @string_literal_type { +deprecated class StringLiteralType extends LiteralType, @string_literal_type { override string getStringValue() { type_literal_value(this, result) } } /** * A bigint literal as a static type. */ -class BigIntLiteralType extends LiteralType { +deprecated class BigIntLiteralType extends LiteralType { override string getStringValue() { type_literal_value(this, result) } /** @@ -2194,7 +2194,7 @@ class BigIntLiteralType extends LiteralType { /** * The `boolean` type, internally represented as the union type `true | false`. */ -class BooleanType extends UnionType { +deprecated class BooleanType extends UnionType { BooleanType() { this.getAnElementType() instanceof @true_type and this.getAnElementType() instanceof @false_type and @@ -2205,7 +2205,7 @@ class BooleanType extends UnionType { /** * The `string` type or a string literal type. */ -class StringLikeType extends Type { +deprecated class StringLikeType extends Type { StringLikeType() { this instanceof StringType or this instanceof StringLiteralType @@ -2215,7 +2215,7 @@ class StringLikeType extends Type { /** * The `number` type or a number literal type. */ -class NumberLikeType extends Type { +deprecated class NumberLikeType extends Type { NumberLikeType() { this instanceof NumberType or this instanceof NumberLiteralType @@ -2225,7 +2225,7 @@ class NumberLikeType extends Type { /** * The `boolean`, `true,` or `false` type. */ -class BooleanLikeType extends Type { +deprecated class BooleanLikeType extends Type { BooleanLikeType() { this instanceof BooleanType or this instanceof BooleanLiteralType @@ -2235,37 +2235,37 @@ class BooleanLikeType extends Type { /** * The `void` type. */ -class VoidType extends Type, @void_type { } +deprecated class VoidType extends Type, @void_type { } /** * The `undefined` type. */ -class UndefinedType extends Type, @undefined_type { } +deprecated class UndefinedType extends Type, @undefined_type { } /** * The `null` type. */ -class NullType extends Type, @null_type { } +deprecated class NullType extends Type, @null_type { } /** * The `never` type. */ -class NeverType extends Type, @never_type { } +deprecated class NeverType extends Type, @never_type { } /** * The `symbol` type or a specific `unique symbol` type. */ -class SymbolType extends Type, @symbol_type { } +deprecated class SymbolType extends Type, @symbol_type { } /** * The `symbol` type. */ -class PlainSymbolType extends SymbolType, @plain_symbol_type { } +deprecated class PlainSymbolType extends SymbolType, @plain_symbol_type { } /** * A `unique symbol` type. */ -class UniqueSymbolType extends SymbolType, @unique_symbol_type { +deprecated class UniqueSymbolType extends SymbolType, @unique_symbol_type { /** * Gets the canonical name of the variable exposing the symbol. */ @@ -2294,12 +2294,12 @@ class UniqueSymbolType extends SymbolType, @unique_symbol_type { /** * The `object` type. */ -class ObjectKeywordType extends Type, @objectkeyword_type { } +deprecated class ObjectKeywordType extends Type, @objectkeyword_type { } /** * A type that refers to a class, interface, enum, or enum member. */ -class TypeReference extends Type, @type_reference { +deprecated class TypeReference extends Type, @type_reference { /** * Gets the canonical name of the type being referenced. */ @@ -2352,7 +2352,7 @@ class TypeReference extends Type, @type_reference { /** * A type that refers to a class, possibly with type arguments. */ -class ClassType extends TypeReference { +deprecated class ClassType extends TypeReference { ClassDefinition declaration; ClassType() { declaration = this.getADefinition() } @@ -2366,7 +2366,7 @@ class ClassType extends TypeReference { /** * A type that refers to an interface, possibly with type arguents. */ -class InterfaceType extends TypeReference { +deprecated class InterfaceType extends TypeReference { InterfaceDeclaration declaration; InterfaceType() { declaration = this.getADefinition() } @@ -2380,7 +2380,7 @@ class InterfaceType extends TypeReference { /** * A type that refers to an enum. */ -class EnumType extends TypeReference { +deprecated class EnumType extends TypeReference { EnumDeclaration declaration; EnumType() { declaration = this.getADefinition() } @@ -2394,7 +2394,7 @@ class EnumType extends TypeReference { /** * A type that refers to the value of an enum member. */ -class EnumLiteralType extends TypeReference { +deprecated class EnumLiteralType extends TypeReference { EnumMember declaration; EnumLiteralType() { declaration = this.getADefinition() } @@ -2408,7 +2408,7 @@ class EnumLiteralType extends TypeReference { /** * A type that refers to a type alias. */ -class TypeAliasReference extends TypeReference { +deprecated class TypeAliasReference extends TypeReference { TypeAliasReference() { type_alias(this, _) } /** @@ -2422,12 +2422,12 @@ class TypeAliasReference extends TypeReference { /** * An anonymous interface type, such as `{ x: number }`. */ -class AnonymousInterfaceType extends Type, @object_type { } +deprecated class AnonymousInterfaceType extends Type, @object_type { } /** * A type that refers to a type variable. */ -class TypeVariableType extends Type, @typevariable_type { +deprecated class TypeVariableType extends Type, @typevariable_type { /** * Gets a syntactic declaration of this type variable. * @@ -2467,7 +2467,7 @@ class TypeVariableType extends Type, @typevariable_type { /** * A type that refers to a type variable declared on a class, interface or function. */ -class CanonicalTypeVariableType extends TypeVariableType, @canonical_type_variable_type { +deprecated class CanonicalTypeVariableType extends TypeVariableType, @canonical_type_variable_type { override TypeName getHostType() { result = this.getCanonicalName().getParent() } override CanonicalName getCanonicalName() { type_symbol(this, result) } @@ -2487,7 +2487,7 @@ class CanonicalTypeVariableType extends TypeVariableType, @canonical_type_variab * - `(x: T) => T` * - `(x: S, y: T) => T`. */ -class LexicalTypeVariableType extends TypeVariableType, @lexical_type_variable_type { +deprecated class LexicalTypeVariableType extends TypeVariableType, @lexical_type_variable_type { override string getName() { types(this, _, result) // The toString value contains the name. } @@ -2504,7 +2504,7 @@ class LexicalTypeVariableType extends TypeVariableType, @lexical_type_variable_t * } * ``` */ -class ThisType extends Type, @this_type { +deprecated class ThisType extends Type, @this_type { /** * Gets the type containing the `this` type. */ @@ -2517,7 +2517,7 @@ class ThisType extends Type, @this_type { * The type of a named value, `typeof X`, typically denoting the type of * a class constructor, namespace object, enum object, or module object. */ -class TypeofType extends Type, @typeof_type { +deprecated class TypeofType extends Type, @typeof_type { /** * Gets the canonical name of the named value. */ @@ -2592,7 +2592,7 @@ module SignatureKind { /** * A function or constructor signature in a TypeScript type. */ -class CallSignatureType extends @signature_type { +deprecated class CallSignatureType extends @signature_type { /** * Gets a value indicating if this is a function or constructor signature. */ @@ -2741,12 +2741,13 @@ class CallSignatureType extends @signature_type { /** * A function call signature in a type, that is, a signature without the `new` keyword. */ -class FunctionCallSignatureType extends CallSignatureType, @function_signature_type { } +deprecated class FunctionCallSignatureType extends CallSignatureType, @function_signature_type { } /** * A constructor call signature in a type, that is, a signature with the `new` keyword. */ -class ConstructorCallSignatureType extends CallSignatureType, @constructor_signature_type { } +deprecated class ConstructorCallSignatureType extends CallSignatureType, @constructor_signature_type +{ } /** * A type name that defines a promise. @@ -2756,7 +2757,7 @@ class ConstructorCallSignatureType extends CallSignatureType, @constructor_signa * - It has one type parameter, say, `T` * - It has a `then` method whose first argument is a callback that takes a `T` as argument. */ -private class PromiseTypeName extends TypeName { +deprecated private class PromiseTypeName extends TypeName { PromiseTypeName() { // The name must suggest it is a promise. this.getName().matches(["%Promise", "%PromiseLike", "%Thenable", "%Deferred"]) and @@ -2780,7 +2781,7 @@ private class PromiseTypeName extends TypeName { * This includes types whose name and `then` method signature suggest it is a promise, * such as `PromiseLike` and `Thenable`. */ -class PromiseType extends TypeReference { +deprecated class PromiseType extends TypeReference { PromiseType() { this.getNumTypeArgument() = 1 and this.getTypeName() instanceof PromiseTypeName From f5f12c2f81640db20c082d020be397098d928d7c Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 16:31:46 +0200 Subject: [PATCH 15/32] JS: Delete or simplify TypeScript type-specific tests --- .../TypeScript/ArrayTypes/tests.expected | 17 - .../TypeScript/ArrayTypes/tests.ql | 11 - .../TypeScript/ArrayTypes/tsconfig.json | 1 - .../TypeScript/ArrayTypes/tst.ts | 19 - .../TypeScript/BaseTypes/BaseTypes.expected | 15 - .../TypeScript/BaseTypes/BaseTypes.ql | 4 - .../TypeScript/BaseTypes/SelfTypes.expected | 17 - .../TypeScript/BaseTypes/SelfTypes.ql | 4 - .../TypeScript/BaseTypes/tsconfig.json | 1 - .../library-tests/TypeScript/BaseTypes/tst.ts | 39 - .../TypeScript/BigInts/tests.expected | 7 - .../library-tests/TypeScript/BigInts/tests.ql | 4 - .../CallResolution/CallResolution.expected | 24 - .../CallResolution/CallResolution.ql | 4 - .../CallResolution/CallTarget.expected | 36 - .../TypeScript/CallResolution/CallTarget.ql | 11 - .../TypeScript/CallResolution/tsconfig.json | 1 - .../TypeScript/CallResolution/tst.ts | 85 - .../CallSignatureTypes/test.expected | 131 - .../TypeScript/CallSignatureTypes/test.ql | 41 - .../CallSignatureTypes/tsconfig.json | 1 - .../TypeScript/CallSignatureTypes/tst.ts | 65 - .../DeclarationFiles/TypeResolution.expected | 8 - .../DeclarationFiles/TypeResolution.ql | 4 - .../TypeScript/EmbeddedInScript/Test.expected | 28 - .../TypeScript/EmbeddedInScript/Test.ql | 4 - .../TypeScript/ExpansiveTypes/Types.expected | 77 - .../TypeScript/ExpansiveTypes/Types.ql | 4 - .../TypeScript/ExpansiveTypes/dummy.ts | 1 - .../ExpansiveTypes/expansive_by_inference.ts | 8 - .../ExpansiveTypes/expansive_class.ts | 5 - .../expansive_object_literal.ts | 7 - .../ExpansiveTypes/expansive_signature.ts | 25 - .../ExpansiveTypes/leading_into_expansion.ts | 13 - .../TypeScript/ExpansiveTypes/mutual.ts | 17 - .../ExpansiveTypes/mutual_multigraph.ts | 24 - .../ExpansiveTypes/shared_non_expansive.ts | 12 - .../TypeScript/ExpansiveTypes/simple.ts | 5 - .../ExpansiveTypes/through_non_expansive.ts | 10 - .../TypeScript/ExpansiveTypes/tsconfig.json | 1 - .../ExpansiveTypes/used_from_expansion.ts | 15 - .../ExternalBaseTypes/BaseTypes.expected | 3 - .../TypeScript/ExternalBaseTypes/BaseTypes.ql | 5 - .../node_modules/@types/mylib/index.d.ts | 4 - .../TypeScript/ExternalBaseTypes/options | 1 - .../ExternalBaseTypes/tsconfig.json | 5 - .../TypeScript/ExternalBaseTypes/tst.ts | 3 - .../TypeScript/ExternalTypes/augmentation.ts | 9 - .../ExternalTypes/client_esmodule.ts | 16 - .../ExternalTypes/client_esmodule_extra.ts | 7 - .../ExternalTypes/client_legacy_global.ts | 3 - .../ExternalTypes/client_legacy_module.ts | 3 - .../ExternalTypes/client_modern_global.ts | 3 - .../ExternalTypes/client_modern_module.ts | 3 - .../node_modules/@types/esmodule/index.d.ts | 10 - .../@types/esmodule/otherfile.d.ts | 1 - .../@types/esmodule/util/extra.d.ts | 1 - .../@types/esmodule/util/index.d.ts | 1 - .../node_modules/@types/legacy/index.d.ts | 13 - .../node_modules/@types/modern/index.d.ts | 12 - .../TypeScript/ExternalTypes/options | 1 - .../TypeScript/ExternalTypes/tests.expected | 28 - .../TypeScript/ExternalTypes/tests.ql | 26 - .../TypeScript/ExternalTypes/tsconfig.json | 5 - .../HasUnderlyingType.expected | 10 - .../HasUnderlyingType/HasUnderlyingType.ql | 9 - .../TypeScript/HasUnderlyingType/foo.ts | 5 - .../HasUnderlyingType/tsconfig.json | 3 - .../TypeScript/HasUnderlyingType/tst.ts | 9 - .../ImportOwnPackage/TypeNames.expected | 22 - .../TypeScript/ImportOwnPackage/TypeNames.ql | 11 - .../TypeScript/ImportOwnPackage/bar/client.ts | 13 - .../TypeScript/ImportOwnPackage/foo/index.ts | 9 - .../ImportOwnPackage/foo/package.json | 3 - .../TypeScript/ImportOwnPackage/tsconfig.json | 3 - .../TypeScript/IndexTypes/test.expected | 2 - .../TypeScript/IndexTypes/test.ql | 3 - .../TypeScript/IndexTypes/tsconfig.json | 1 - .../TypeScript/IndexTypes/tst.ts | 8 - .../InfiniteTypes/recursiveMappedType.ts | 8 - .../TypeScript/InfiniteTypes/test.expected | 2 - .../TypeScript/InfiniteTypes/test.ql | 4 - .../TypeScript/InfiniteTypes/tsconfig.json | 3 - .../LexicalTypes/TypeReferences.expected | 16 - .../TypeScript/LexicalTypes/TypeReferences.ql | 4 - .../TypeScript/LexicalTypes/bar.ts | 12 - .../TypeScript/LexicalTypes/dummy.ts | 1 - .../TypeScript/LexicalTypes/foo.ts | 20 - .../TypeScript/LexicalTypes/tsconfig.json | 1 - .../LiteralTypes/FloatLiteralTypes.expected | 4 - .../LiteralTypes/FloatLiteralTypes.ql | 4 - .../LiteralTypes/IntLiteralTypes.expected | 2 - .../LiteralTypes/IntLiteralTypes.ql | 4 - .../LiteralTypes/LiteralTypes.expected | 11 - .../TypeScript/LiteralTypes/LiteralTypes.ql | 4 - .../TypeScript/LiteralTypes/tsconfig.json | 3 - .../TypeScript/LiteralTypes/tst.ts | 12 - .../TypeScript/NestedLiteral/test.expected | 36 - .../TypeScript/NestedLiteral/test.ql | 4 - .../TypeScript/NestedLiteral/tsconfig.json | 1 - .../TypeScript/NestedLiteral/tst.ts | 30 - .../TypeScript/Nullability/Types.expected | 10 - .../TypeScript/Nullability/Types.ql | 5 - .../TypeScript/Nullability/tsconfig.json | 6 - .../TypeScript/Nullability/tst.ts | 10 - .../TypeScript/PathMapping/Imports.expected | 11 - .../TypeScript/PathMapping/Imports.ql | 6 - .../TypeScript/PathMapping/src/lib/foo.ts | 3 - .../TypeScript/PathMapping/test/test_foo.ts | 6 - .../TypeScript/PathMapping/tsconfig.json | 9 - .../PromiseType/DefinitelyTyped-LICENSE | 8 - .../PromiseType/PromiseType.expected | 9 - .../TypeScript/PromiseType/PromiseType.ql | 12 - .../TypeScript/PromiseType/QDeferred.expected | 1 - .../TypeScript/PromiseType/QDeferred.ql | 5 - .../PromiseType/es6-promise-LICENSE | 19 - .../TypeScript/PromiseType/es6-promise.d.ts | 9 - .../TypeScript/PromiseType/jquery.d.ts | 41 - .../node_modules/@types/q/index.d.ts | 27 - .../TypeScript/PromiseType/promise-LICENSE | 19 - .../TypeScript/PromiseType/promise.d.ts | 11 - .../TypeScript/PromiseType/tsconfig.json | 3 - .../TypeScript/PromiseType/tst.ts | 34 - .../Namespaces.expected | 33 - .../QualifiedNameResolution/Namespaces.ql | 4 - .../ResolveNamespace.expected | 31 - .../ResolveNamespace.ql | 4 - .../ResolveTypeName.expected | 27 - .../ResolveTypeName.ql | 4 - .../QualifiedNameResolution/ambient.ts | 5 - .../QualifiedNameResolution/dummy.ts | 1 - .../QualifiedNameResolution/enums.ts | 10 - .../export-class-client-renamed.ts | 3 - .../export-class-client.ts | 3 - .../QualifiedNameResolution/export-class.ts | 3 - .../export-default-type-client.ts | 3 - .../export-default-type.ts | 5 - .../export-qualified-client.ts | 3 - .../export-qualified.ts | 7 - .../export-specifiers-client.ts | 6 - .../export-specifiers.ts | 13 - .../QualifiedNameResolution/global.ts | 5 - .../import-in-namespace.ts | 11 - .../namespaces-client.ts | 6 - .../QualifiedNameResolution/namespaces.ts | 43 - .../QualifiedNameResolution/otherlib.ts | 1 - .../reexport-all-client.ts | 11 - .../QualifiedNameResolution/reexport-all.ts | 3 - .../reexport-named-client.ts | 11 - .../QualifiedNameResolution/reexport-named.ts | 2 - .../QualifiedNameResolution/tsconfig.json | 1 - .../RegressionTests/AllowJs/main.ts | 2 - .../RegressionTests/AllowJs/test.expected | 5 - .../RegressionTests/AllowJs/test.ql | 4 - .../RegressionTests/AllowJs/tsconfig.json | 6 - .../TypeScript/RegressionTests/AllowJs/tst.js | 6 - .../RegressionTests/EmptyName/test.expected | 5 +- .../RegressionTests/EmptyName/test.ql | 3 +- .../ExportEqualsExpr/test.expected | 8 +- .../RegressionTests/ExportEqualsExpr/test.ql | 3 +- .../GenericTypeAlias/test.expected | 15 - .../RegressionTests/GenericTypeAlias/test.ql | 8 - .../GenericTypeAlias/tsconfig.json | 3 - .../RegressionTests/GenericTypeAlias/tst.ts | 5 - .../RegressionTests/ImportSelf/test.expected | 4 +- .../RegressionTests/ImportSelf/test.ql | 4 +- .../RecursiveTypeAlias/Test.expected | 1 + .../RecursiveTypeAlias/Test.ql | 3 +- .../SemicolonInName/test.expected | 3 +- .../RegressionTests/SemicolonInName/test.ql | 3 +- .../node_modules/@types/foo/index.d.ts | 1 - .../TraceResolution/test.expected | 4 - .../RegressionTests/TraceResolution/test.ql | 4 - .../RegressionTests/TraceResolution/test.ts | 3 - .../TraceResolution/tsconfig.json | 6 - .../TypeRootFile/test.expected | 3 - .../RegressionTests/TypeRootFile/test.ql | 4 - .../TypeRootFile/tsconfig.json | 6 - .../RegressionTests/TypeRootFile/tst.ts | 1 - .../TypeRootFile/typeroot.d.ts | 0 .../TypeScript/TSConfigReferences/src/main.ts | 4 - .../TSConfigReferences/test.expected | 11 - .../TypeScript/TSConfigReferences/test.ql | 5 - .../TSConfigReferences/tsconfig.foo.json | 9 - .../TSConfigReferences/tsconfig.json | 7 - .../TypeAliases/TypeAliases.expected | 36 - .../TypeScript/TypeAliases/TypeAliases.ql | 8 - .../TypeVariableTypes/tests.expected | 28 - .../TypeScript/TypeVariableTypes/tests.ql | 43 - .../TypeVariableTypes/tsconfig.json | 1 - .../TypeScript/TypeVariableTypes/tst.ts | 34 - .../TypeScript/Types/badTypes.ts | 6 - .../TypeScript/Types/boolean-type.ts | 15 - .../library-tests/TypeScript/Types/dummy.ts | 4 - .../TypeScript/Types/middle-rest.ts | 3 - .../TypeScript/Types/printAst.expected | 6042 ----------------- .../TypeScript/Types/printAst.ql | 2 - .../TypeScript/Types/something.json | 3 - .../TypeScript/Types/tests.expected | 1545 ----- .../library-tests/TypeScript/Types/tests.ql | 45 - .../TypeScript/Types/tsconfig.json | 9 - .../library-tests/TypeScript/Types/tst.ts | 520 -- .../TypeScript/Types/tstModuleCJS.cts | 3 - .../TypeScript/Types/tstModuleES.mts | 3 - .../TypeScript/Types/tstSuffixA.ts | 3 - .../TypeScript/Types/tstSuffixB.ios.ts | 3 - .../TypeScript/Types/tstSuffixB.ts | 3 - .../TypeScript/Types/type_alias.ts | 27 - .../Types/type_definition_objects.ts | 10 - .../TypeScript/Types/type_definitions.ts | 22 - 210 files changed, 10 insertions(+), 10356 deletions(-) delete mode 100644 javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/ArrayTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/ArrayTypes/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/BaseTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/BaseTypes/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallResolution/CallResolution.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallResolution/CallResolution.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallResolution/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallResolution/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/dummy.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_by_inference.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_class.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_object_literal.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_signature.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/leading_into_expansion.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual_multigraph.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/shared_non_expansive.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/simple.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/through_non_expansive.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/used_from_expansion.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/node_modules/@types/mylib/index.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/options delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/augmentation.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule_extra.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_global.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_module.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_global.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_module.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/index.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/otherfile.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/extra.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/index.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/legacy/index.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/modern/index.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/options delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/ExternalTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/foo.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/bar/client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/index.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/package.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/IndexTypes/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/IndexTypes/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/IndexTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/IndexTypes/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/InfiniteTypes/recursiveMappedType.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/InfiniteTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/LexicalTypes/bar.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/LexicalTypes/dummy.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/LexicalTypes/foo.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/LexicalTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/LiteralTypes/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/NestedLiteral/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/NestedLiteral/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Nullability/Types.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/Nullability/Types.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/Nullability/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/Nullability/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/PathMapping/src/lib/foo.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/PathMapping/test/test_foo.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/PathMapping/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/DefinitelyTyped-LICENSE delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise-LICENSE delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/jquery.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/node_modules/@types/q/index.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/promise-LICENSE delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/promise.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/PromiseType/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ambient.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/dummy.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/enums.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client-renamed.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type-client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified-client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers-client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/global.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/import-in-namespace.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces-client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/otherlib.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all-client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named-client.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/main.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tst.js delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/node_modules/@types/foo/index.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/typeroot.d.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/TSConfigReferences/src/main.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.foo.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/badTypes.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/boolean-type.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/dummy.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/middle-rest.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/printAst.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/printAst.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/something.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tests.expected delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tests.ql delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tsconfig.json delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tst.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tstModuleCJS.cts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tstModuleES.mts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tstSuffixA.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ios.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/type_alias.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/type_definition_objects.ts delete mode 100644 javascript/ql/test/library-tests/TypeScript/Types/type_definitions.ts diff --git a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.expected b/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.expected deleted file mode 100644 index dac5bb14db46..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.expected +++ /dev/null @@ -1,17 +0,0 @@ -arrayTypes -| [number, string] | `string \| number` | -| number[] | `number` | -| readonly T[] | `T` | -| readonly number[] | `number` | -| readonly number[][] | `number[]` | -numberIndexTypes -| NumberIndexable | object | -| [number, string] | string \| number | -| number[] | number | -| readonly T[] | T | -| readonly number[] | number | -| readonly number[][] | number[] | -| string | string | -stringIndexTypes -| StringIndexable | object | -tupleTypes diff --git a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.ql b/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.ql deleted file mode 100644 index 907a5d78639d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tests.ql +++ /dev/null @@ -1,11 +0,0 @@ -import javascript - -query predicate arrayTypes(ArrayType array, string elem) { - elem = "`" + array.getArrayElementType() + "`" -} - -query predicate numberIndexTypes(Type type, Type numType) { type.getNumberIndexType() = numType } - -query predicate stringIndexTypes(Type type, Type strType) { type.getStringIndexType() = strType } - -query predicate tupleTypes(TupleType type, Type arrType) { arrType = type.getUnderlyingArrayType() } diff --git a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tsconfig.json deleted file mode 100644 index 9e26dfeeb6e6..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tst.ts b/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tst.ts deleted file mode 100644 index 98ca0c2eb216..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ArrayTypes/tst.ts +++ /dev/null @@ -1,19 +0,0 @@ -let plain: number[]; -let readonly: ReadonlyArray; -let tuple: [number, string]; - -interface NumberIndexable { - length: number; - [n: number]: object; -} - -interface StringIndexable { - length: number; - [n: string]: object; -} - -let numberIndexable: NumberIndexable; -let stringIndexable: StringIndexable; - -let readonlySyntax: readonly number[]; -let readonlySyntax2: readonly number[][]; diff --git a/javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.expected b/javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.expected deleted file mode 100644 index b6e9c06ec571..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.expected +++ /dev/null @@ -1,15 +0,0 @@ -| CEverything | CGenericBase | -| CEverything | IBase | -| CEverything | IGenericSub | -| CGenericSub | CGenericBase | -| CImplements | IBase | -| CImplementsGeneric | IGenericBase | -| CImplementsString | IGenericBase | -| CStringSub | CGenericBase | -| CSub | CBase | -| IEmptySub | IEmpty | -| IGenericSub | IGenericBase | -| IMulti | IBase | -| IMulti | IGenericBase | -| IStringSub | IGenericBase | -| ISub | IBase | diff --git a/javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.ql b/javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.ql deleted file mode 100644 index c54177d9c09b..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/BaseTypes/BaseTypes.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from TypeName typename -select typename.getName(), typename.getABaseTypeName().getName() diff --git a/javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.expected b/javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.expected deleted file mode 100644 index c82909543dfc..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.expected +++ /dev/null @@ -1,17 +0,0 @@ -| CBase | CBase | -| CEverything | CEverything | -| CGenericBase | CGenericBase | -| CGenericSub | CGenericSub | -| CImplements | CImplements | -| CImplementsGeneric | CImplementsGeneric | -| CImplementsString | CImplementsString | -| CStringSub | CStringSub | -| CSub | CSub | -| IBase | IBase | -| IEmpty | IEmpty | -| IEmptySub | IEmptySub | -| IGenericBase | IGenericBase | -| IGenericSub | IGenericSub | -| IMulti | IMulti | -| IStringSub | IStringSub | -| ISub | ISub | diff --git a/javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.ql b/javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.ql deleted file mode 100644 index 34a00e7d76ab..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/BaseTypes/SelfTypes.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from TypeName tn -select tn.getName(), tn.getType() diff --git a/javascript/ql/test/library-tests/TypeScript/BaseTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/BaseTypes/tsconfig.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/BaseTypes/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/javascript/ql/test/library-tests/TypeScript/BaseTypes/tst.ts b/javascript/ql/test/library-tests/TypeScript/BaseTypes/tst.ts deleted file mode 100644 index b2b4a60b4efb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/BaseTypes/tst.ts +++ /dev/null @@ -1,39 +0,0 @@ -interface IBase { - x: string; -} -interface ISub extends IBase { - y: string; -} - -interface IGenericBase { - w: T; -} -interface IStringSub extends IGenericBase {} -interface IGenericSub extends IGenericBase {} - -class CBase {} -class CSub extends CBase {} - -class CGenericBase {} -class CStringSub extends CGenericBase {} -class CGenericSub extends CGenericBase {} - -interface IMulti extends IBase, IGenericBase {} - -abstract class CImplements implements IBase { - x: string; -} -abstract class CImplementsString implements IGenericBase { - w: string; -} -abstract class CImplementsGeneric implements IGenericBase { - w: Q; -} - -abstract class CEverything extends CGenericBase implements IGenericSub, IBase { - x: string; - w: T; -} - -interface IEmpty {} -interface IEmptySub extends IEmpty {} diff --git a/javascript/ql/test/library-tests/TypeScript/BigInts/tests.expected b/javascript/ql/test/library-tests/TypeScript/BigInts/tests.expected index dcbb70d415a2..3891c6c9f12c 100644 --- a/javascript/ql/test/library-tests/TypeScript/BigInts/tests.expected +++ b/javascript/ql/test/library-tests/TypeScript/BigInts/tests.expected @@ -4,14 +4,7 @@ exprFloatValue | tst.ts:3:25:3:56 | 1000000 ... 000000n | 1.0E30 | exprIntValue | tst.ts:1:25:1:28 | 100n | 100 | -exprWithBigIntType -| tst.ts:1:5:1:11 | hundred | -| tst.ts:2:5:2:12 | bigValue | -| tst.ts:3:5:3:20 | bigNegativeValue | -| tst.ts:5:5:5:14 | bigintType | literalTypeExprIntValue | tst.ts:6:24:6:28 | 1000n | 1000 | typeExpr | tst.ts:5:24:5:29 | bigint | -typeIntValue -| 1000n | 1000 | diff --git a/javascript/ql/test/library-tests/TypeScript/BigInts/tests.ql b/javascript/ql/test/library-tests/TypeScript/BigInts/tests.ql index 233d75f428d3..120ff4434a44 100644 --- a/javascript/ql/test/library-tests/TypeScript/BigInts/tests.ql +++ b/javascript/ql/test/library-tests/TypeScript/BigInts/tests.ql @@ -4,12 +4,8 @@ query predicate exprFloatValue(BigIntLiteral literal, float f) { f = literal.get query predicate exprIntValue(BigIntLiteral literal, int i) { i = literal.getIntValue() } -query predicate exprWithBigIntType(Expr e) { e.getType() instanceof BigIntType } - query predicate literalTypeExprIntValue(BigIntLiteralTypeExpr type, int val) { val = type.getIntValue() } query predicate typeExpr(TypeExpr type) { type.isBigInt() } - -query predicate typeIntValue(BigIntLiteralType type, int i) { type.getIntValue() = i } diff --git a/javascript/ql/test/library-tests/TypeScript/CallResolution/CallResolution.expected b/javascript/ql/test/library-tests/TypeScript/CallResolution/CallResolution.expected deleted file mode 100644 index a942a68076b2..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallResolution/CallResolution.expected +++ /dev/null @@ -1,24 +0,0 @@ -| tst.ts:52:3:52:23 | obj.sim ... od(str) | (x: string): number | 0 | -| tst.ts:53:3:53:24 | obj.gen ... od(str) | (x: string): string | 0 | -| tst.ts:54:3:54:24 | obj.gen ... od(num) | (x: number): number | 0 | -| tst.ts:55:3:55:27 | obj.ove ... od(num) | (x: number): number | 0 | -| tst.ts:56:3:56:27 | obj.ove ... od(str) | (x: string): string | 1 | -| tst.ts:57:3:57:26 | obj.ove ... hod([]) | (x: any): any | 2 | -| tst.ts:58:3:58:36 | obj.gen ... ([num]) | (x: number[]): number | 0 | -| tst.ts:59:3:59:39 | obj.gen ... : str}) | (x: Box): string | 1 | -| tst.ts:60:3:60:34 | obj.gen ... od(num) | (x: any): any | 2 | -| tst.ts:64:3:64:23 | obj.sim ... od(str) | (x: string): number | 0 | -| tst.ts:65:3:65:24 | obj.gen ... od(str) | (x: string): string | 0 | -| tst.ts:66:3:66:24 | obj.gen ... od(num) | (x: number): number | 0 | -| tst.ts:67:3:67:27 | obj.ove ... od(num) | (x: number): number | 0 | -| tst.ts:68:3:68:27 | obj.ove ... od(str) | (x: string): string | 1 | -| tst.ts:69:3:69:36 | obj.gen ... ([num]) | (x: number[]): number | 0 | -| tst.ts:70:3:70:39 | obj.gen ... : str}) | (x: Box): string | 1 | -| tst.ts:74:3:74:28 | new Sim ... or(str) | new (x: string): SimpleConstructor | 0 | -| tst.ts:75:3:75:29 | new Gen ... or(str) | new (x: string): GenericConstructor | 0 | -| tst.ts:76:3:76:29 | new Gen ... or(num) | new (x: number): GenericConstructor | 0 | -| tst.ts:77:3:77:37 | new Ove ... m, num) | new (x: number, y: number): OverloadedConstructor | 0 | -| tst.ts:78:3:78:37 | new Ove ... r, str) | new (x: string, y: string): OverloadedConstructor | 1 | -| tst.ts:79:3:79:48 | new Gen ... [str]) | new (x: string[], y: string[]): GenericOverloadedConstructor | 0 | -| tst.ts:80:3:80:54 | new Gen ... : num}) | new (x: Box, y: Box): GenericOverloadedConstructor): T; | -| tst.ts:58:3:58:36 | obj.gen ... ([num]) | TestInterface.genericOverloadedMethod in global scope | generic ... []): T; | -| tst.ts:59:3:59:39 | obj.gen ... : str}) | TestInterface.genericOverloadedMethod in global scope | generic ... ): any; | -| tst.ts:59:3:59:39 | obj.gen ... : str}) | TestInterface.genericOverloadedMethod in global scope | generic ... T>): T; | -| tst.ts:59:3:59:39 | obj.gen ... : str}) | TestInterface.genericOverloadedMethod in global scope | generic ... []): T; | -| tst.ts:60:3:60:34 | obj.gen ... od(num) | TestInterface.genericOverloadedMethod in global scope | generic ... ): any; | -| tst.ts:60:3:60:34 | obj.gen ... od(num) | TestInterface.genericOverloadedMethod in global scope | generic ... T>): T; | -| tst.ts:60:3:60:34 | obj.gen ... od(num) | TestInterface.genericOverloadedMethod in global scope | generic ... []): T; | -| tst.ts:64:3:64:23 | obj.sim ... od(str) | TestClass.simpleMethod in global scope | simpleM ... ength } | -| tst.ts:65:3:65:24 | obj.gen ... od(str) | TestClass.genericMethod in global scope | generic ... rn x; } | -| tst.ts:66:3:66:24 | obj.gen ... od(num) | TestClass.genericMethod in global scope | generic ... rn x; } | -| tst.ts:67:3:67:27 | obj.ove ... od(num) | TestClass.overloadedMethod in global scope | overloa ... number; | -| tst.ts:67:3:67:27 | obj.ove ... od(num) | TestClass.overloadedMethod in global scope | overloa ... rn x; } | -| tst.ts:67:3:67:27 | obj.ove ... od(num) | TestClass.overloadedMethod in global scope | overloa ... string; | -| tst.ts:68:3:68:27 | obj.ove ... od(str) | TestClass.overloadedMethod in global scope | overloa ... number; | -| tst.ts:68:3:68:27 | obj.ove ... od(str) | TestClass.overloadedMethod in global scope | overloa ... rn x; } | -| tst.ts:68:3:68:27 | obj.ove ... od(str) | TestClass.overloadedMethod in global scope | overloa ... string; | -| tst.ts:69:3:69:36 | obj.gen ... ([num]) | TestClass.genericOverloadedMethod in global scope | generic ... T>): T; | -| tst.ts:69:3:69:36 | obj.gen ... ([num]) | TestClass.genericOverloadedMethod in global scope | generic ... []): T; | -| tst.ts:69:3:69:36 | obj.gen ... ([num]) | TestClass.genericOverloadedMethod in global scope | generic ... null; } | -| tst.ts:70:3:70:39 | obj.gen ... : str}) | TestClass.genericOverloadedMethod in global scope | generic ... T>): T; | -| tst.ts:70:3:70:39 | obj.gen ... : str}) | TestClass.genericOverloadedMethod in global scope | generic ... []): T; | -| tst.ts:70:3:70:39 | obj.gen ... : str}) | TestClass.genericOverloadedMethod in global scope | generic ... null; } | diff --git a/javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.ql b/javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.ql deleted file mode 100644 index 759c9d5e7c7f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallResolution/CallTarget.ql +++ /dev/null @@ -1,11 +0,0 @@ -import javascript - -string getTarget(InvokeExpr e) { - result = e.getResolvedCallee().toString() - or - not exists(e.getResolvedCallee()) and - result = "no concrete target" -} - -from InvokeExpr invoke -select invoke, invoke.getResolvedCalleeName(), getTarget(invoke) diff --git a/javascript/ql/test/library-tests/TypeScript/CallResolution/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/CallResolution/tsconfig.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallResolution/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/javascript/ql/test/library-tests/TypeScript/CallResolution/tst.ts b/javascript/ql/test/library-tests/TypeScript/CallResolution/tst.ts deleted file mode 100644 index 9f893a6f1478..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallResolution/tst.ts +++ /dev/null @@ -1,85 +0,0 @@ -interface Box { x: T } - -interface TestInterface { - simpleMethod(x: string): number; - - genericMethod(x: T): T; - - overloadedMethod(x: number): number; - overloadedMethod(x: string): string; - overloadedMethod(x: any): any; - - genericOverloadedMethod(x: T[]): T; - genericOverloadedMethod(x: Box): T; - genericOverloadedMethod(x: any): any; -} - -class TestClass { - simpleMethod(x: string): number { return x.length } - - genericMethod(x: T): T { return x; } - - overloadedMethod(x: number): number; - overloadedMethod(x: string): string; - overloadedMethod(x: any): any { return x; } - - genericOverloadedMethod(x: T[]): T; - genericOverloadedMethod(x: Box): T; - genericOverloadedMethod(x: any): any { return x.x || x[0] || null; } -} - -class SimpleConstructor { - constructor(x: string) {} -} - -class GenericConstructor { - constructor(x: T) {} -} - -class OverloadedConstructor { - constructor(x: number, y: number); - constructor(x: string, y: string); - constructor(x: any, y: any) {} -} - -class GenericOverloadedConstructor { - constructor(x: T[], y: T[]); - constructor(x: Box, y: Box); - constructor(x: any, y: any) {} -} - -function useTestInterface(obj: TestInterface, str: string, num: number) { - obj.simpleMethod(str); - obj.genericMethod(str); - obj.genericMethod(num); - obj.overloadedMethod(num); - obj.overloadedMethod(str); - obj.overloadedMethod([]); - obj.genericOverloadedMethod([num]); - obj.genericOverloadedMethod({x: str}); - obj.genericOverloadedMethod(num); -} - -function useTestClass(obj: TestClass, str: string, num: number) { - obj.simpleMethod(str); - obj.genericMethod(str); - obj.genericMethod(num); - obj.overloadedMethod(num); - obj.overloadedMethod(str); - obj.genericOverloadedMethod([num]); - obj.genericOverloadedMethod({x: str}); -} - -function testConstructors(str: string, num: number) { - new SimpleConstructor(str); - new GenericConstructor(str); - new GenericConstructor(num); - new OverloadedConstructor(num, num); - new OverloadedConstructor(str, str); - new GenericOverloadedConstructor([str], [str]); - new GenericOverloadedConstructor({x: num}, {x: num}); -} - -function testCallback(callback: (x: string) => U): U { - return callback("str"); -} diff --git a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.expected b/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.expected deleted file mode 100644 index 2c6bf9153a8b..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.expected +++ /dev/null @@ -1,131 +0,0 @@ -test_ExprSignature -| tst.ts:2:4:2:4 | x | number | -| tst.ts:6:4:6:4 | x | number | -| tst.ts:7:4:7:4 | x | string | -| tst.ts:8:4:8:4 | x | any | -| tst.ts:12:8:12:8 | x | number | -| tst.ts:16:8:16:8 | x | number | -| tst.ts:17:8:17:8 | x | any | -| tst.ts:21:3:21:28 | method( ... string; | (x: number): string | -| tst.ts:21:10:21:10 | x | number | -| tst.ts:23:3:23:38 | overloa ... number; | (x: any): any | -| tst.ts:23:3:23:38 | overloa ... number; | (x: number): number | -| tst.ts:23:3:23:38 | overloa ... number; | (x: string): string | -| tst.ts:23:20:23:20 | x | number | -| tst.ts:24:3:24:38 | overloa ... string; | (x: any): any | -| tst.ts:24:3:24:38 | overloa ... string; | (x: number): number | -| tst.ts:24:3:24:38 | overloa ... string; | (x: string): string | -| tst.ts:24:20:24:20 | x | string | -| tst.ts:25:3:25:32 | overloa ... ): any; | (x: any): any | -| tst.ts:25:3:25:32 | overloa ... ): any; | (x: number): number | -| tst.ts:25:3:25:32 | overloa ... ): any; | (x: string): string | -| tst.ts:25:20:25:20 | x | any | -| tst.ts:28:5:28:5 | m | Method | -| tst.ts:29:1:29:1 | m | Method | -| tst.ts:29:1:29:8 | m.method | (x: number): string | -| tst.ts:29:1:29:12 | m.method(42) | string | -| tst.ts:29:10:29:11 | 42 | 42 | -| tst.ts:30:1:30:1 | m | Method | -| tst.ts:30:1:30:18 | m.overloadedMethod | (x: any): any | -| tst.ts:30:1:30:18 | m.overloadedMethod | (x: number): number | -| tst.ts:30:1:30:18 | m.overloadedMethod | (x: string): string | -| tst.ts:30:1:30:25 | m.overl ... ("foo") | string | -| tst.ts:30:20:30:24 | "foo" | "foo" | -| tst.ts:33:3:33:10 | callback | (x: number): string | -| tst.ts:33:13:33:33 | (x: num ... string | (x: number): string | -| tst.ts:33:14:33:14 | x | number | -| tst.ts:37:3:37:18 | method(x: T): T; | (x: T): T | -| tst.ts:37:10:37:10 | x | T | -| tst.ts:40:10:40:12 | foo | (g: Generic): string | -| tst.ts:40:14:40:14 | g | Generic | -| tst.ts:41:10:41:10 | g | Generic | -| tst.ts:41:10:41:17 | g.method | (x: string): string | -| tst.ts:41:10:41:24 | g.method("foo") | string | -| tst.ts:41:19:41:23 | "foo" | "foo" | -| tst.ts:44:15:44:15 | C | C | -| tst.ts:45:3:45:25 | constru ... tring); | any | -| tst.ts:45:15:45:15 | x | string | -| tst.ts:46:3:46:25 | constru ... umber); | any | -| tst.ts:46:15:46:15 | x | number | -| tst.ts:50:3:50:36 | method( ... ing[]); | (x: number, ...y: string[]): any | -| tst.ts:50:10:50:10 | x | number | -| tst.ts:50:24:50:24 | y | string[] | -| tst.ts:51:4:51:4 | x | number | -| tst.ts:51:18:51:18 | y | string[] | -| tst.ts:52:7:52:7 | x | number | -| tst.ts:52:21:52:21 | y | string[] | -| tst.ts:54:3:54:34 | method2 ... ing[]); | (x: number, y: string[]): any | -| tst.ts:54:11:54:11 | x | number | -| tst.ts:54:22:54:22 | y | string[] | -| tst.ts:55:3:55:32 | method3 ... tring); | (x: number, y: string): any | -| tst.ts:55:11:55:11 | x | number | -| tst.ts:55:22:55:22 | y | string | -| tst.ts:59:3:59:25 | method( ... ing[]); | (...y: string[]): any | -| tst.ts:59:13:59:13 | y | string[] | -| tst.ts:60:7:60:7 | y | string[] | -| tst.ts:61:10:61:10 | y | string[] | -| tst.ts:63:3:63:23 | method2 ... ing[]); | (y: string[]): any | -| tst.ts:63:11:63:11 | y | string[] | -| tst.ts:64:3:64:21 | method3(y: string); | (y: string): any | -| tst.ts:64:11:64:11 | y | string | -test_TypeReferenceSig -| Callable | function | 0 | (x: number): string | -| Newable | constructor | 0 | new (x: number): any | -| OnlyRestParams | constructor | 0 | new (...y: string[]): any | -| OnlyRestParams | function | 0 | (...y: string[]): any | -| OverloadedCallable | function | 0 | (x: number): number | -| OverloadedCallable | function | 1 | (x: string): string | -| OverloadedCallable | function | 2 | (x: any): any | -| OverloadedNewable | constructor | 0 | new (x: number): OverloadedNewable | -| OverloadedNewable | constructor | 1 | new (x: any): any | -| WithRestParams | constructor | 0 | new (x: number, ...y: string[]): any | -| WithRestParams | function | 0 | (x: number, ...y: string[]): any | -test_FunctionCallSig -| tst.ts:2:3:2:22 | (x: number): string; | (x: number): string | -| tst.ts:6:3:6:22 | (x: number): number; | (x: number): number | -| tst.ts:7:3:7:22 | (x: string): string; | (x: string): string | -| tst.ts:8:3:8:16 | (x: any): any; | (x: any): any | -| tst.ts:12:3:12:23 | new (x: ... ): any; | new (x: number): any | -| tst.ts:16:3:16:37 | new (x: ... ewable; | new (x: number): OverloadedNewable | -| tst.ts:17:3:17:20 | new (x: any): any; | new (x: any): any | -| tst.ts:21:3:21:28 | method( ... string; | (x: number): string | -| tst.ts:23:3:23:38 | overloa ... number; | (x: number): number | -| tst.ts:24:3:24:38 | overloa ... string; | (x: string): string | -| tst.ts:25:3:25:32 | overloa ... ): any; | (x: any): any | -| tst.ts:33:13:33:33 | (x: num ... string | (x: number): string | -| tst.ts:37:3:37:18 | method(x: T): T; | (x: T): T | -| tst.ts:40:1:42:1 | functio ... oo");\\n} | (g: Generic): string | -| tst.ts:45:3:45:25 | constru ... tring); | new (x: string): C | -| tst.ts:46:3:46:25 | constru ... umber); | new (x: number): C | -| tst.ts:50:3:50:36 | method( ... ing[]); | (x: number, ...y: string[]): any | -| tst.ts:51:3:51:30 | (x: num ... ing[]); | (x: number, ...y: string[]): any | -| tst.ts:52:3:52:33 | new(x: ... ing[]); | new (x: number, ...y: string[]): any | -| tst.ts:54:3:54:34 | method2 ... ing[]); | (x: number, y: string[]): any | -| tst.ts:55:3:55:32 | method3 ... tring); | (x: number, y: string): any | -| tst.ts:59:3:59:25 | method( ... ing[]); | (...y: string[]): any | -| tst.ts:60:3:60:19 | (...y: string[]); | (...y: string[]): any | -| tst.ts:61:3:61:22 | new(...y: string[]); | new (...y: string[]): any | -| tst.ts:63:3:63:23 | method2 ... ing[]); | (y: string[]): any | -| tst.ts:64:3:64:21 | method3(y: string); | (y: string): any | -test_getRestParameterType -| (...y: string[]): any | string | -| (x: number, ...y: string[]): any | string | -| new (...y: string[]): any | string | -| new (x: number, ...y: string[]): any | string | -test_getRestParameterArray -| (...y: string[]): any | string[] | -| (x: number, ...y: string[]): any | string[] | -| new (...y: string[]): any | string[] | -| new (x: number, ...y: string[]): any | string[] | -test_RestSig_getParameter -| (...y: string[]): any | 0 | y | string | -| (x: number, ...y: string[]): any | 0 | x | number | -| (x: number, ...y: string[]): any | 1 | y | string | -| new (...y: string[]): any | 0 | y | string | -| new (x: number, ...y: string[]): any | 0 | x | number | -| new (x: number, ...y: string[]): any | 1 | y | string | -test_RestSig_numRequiredParams -| (...y: string[]): any | 0 | -| (x: number, ...y: string[]): any | 1 | -| new (...y: string[]): any | 0 | -| new (x: number, ...y: string[]): any | 1 | diff --git a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.ql b/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.ql deleted file mode 100644 index 03cc288f0540..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/test.ql +++ /dev/null @@ -1,41 +0,0 @@ -import javascript - -string getASignatureOrElseType(Type t) { - result = t.getASignature(_).toString() - or - not exists(t.getASignature(_)) and - result = t.toString() -} - -query predicate test_ExprSignature(Expr expr, string type) { - not exists(MethodDeclaration decl | decl.getNameExpr() = expr) and - not exists(DotExpr dot | expr = dot.getPropertyNameExpr()) and - type = getASignatureOrElseType(expr.getType()) -} - -query predicate test_TypeReferenceSig( - TypeReference type, SignatureKind kind, int n, CallSignatureType sig -) { - sig = type.getSignature(kind, n) -} - -query predicate test_FunctionCallSig(Function f, CallSignatureType sig) { - sig = f.getCallSignature() -} - -query Type test_getRestParameterType(CallSignatureType sig) { result = sig.getRestParameterType() } - -query Type test_getRestParameterArray(CallSignatureType sig) { - result = sig.getRestParameterArrayType() -} - -query predicate test_RestSig_getParameter(CallSignatureType sig, int n, string name, Type type) { - sig.hasRestParameter() and - name = sig.getParameterName(n) and - type = sig.getParameter(n) -} - -query int test_RestSig_numRequiredParams(CallSignatureType sig) { - sig.hasRestParameter() and - result = sig.getNumRequiredParameter() -} diff --git a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tsconfig.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tst.ts b/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tst.ts deleted file mode 100644 index ed0ab3bcfd60..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/CallSignatureTypes/tst.ts +++ /dev/null @@ -1,65 +0,0 @@ -interface Callable { - (x: number): string; -} - -interface OverloadedCallable { - (x: number): number; - (x: string): string; - (x: any): any; -} - -interface Newable { - new (x: number): any; -} - -interface OverloadedNewable { - new (x: number): OverloadedNewable; - new (x: any): any; -} - -interface Method { - method(x: number): string; - - overloadedMethod(x: number): number; - overloadedMethod(x: string): string; - overloadedMethod(x: any): any; -} - -let m: Method; -m.method(42); -m.overloadedMethod("foo"); - -interface FunctionTypeField { - callback: (x: number) => string; -} - -interface Generic { - method(x: T): T; -} - -function foo(g: Generic) { - return g.method("foo"); -} - -declare class C { - constructor(x: string); - constructor(x: number); -} - -interface WithRestParams { - method(x: number, ...y: string[]); - (x: number, ...y: string[]); - new(x: number, ...y: string[]); - - method2(x: number, y: string[]); - method3(x: number, y: string); -} - -interface OnlyRestParams { - method(...y: string[]); - (...y: string[]); - new(...y: string[]); - - method2(y: string[]); - method3(y: string); -} diff --git a/javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.expected b/javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.expected deleted file mode 100644 index 470c051d2285..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.expected +++ /dev/null @@ -1,8 +0,0 @@ -| client1.ts:4:9:4:19 | F.Component | Component in module 'framework1' | -| client1.ts:5:9:5:29 | Util.De ... mponent | Util.DefaultComponent in global scope | -| client2.ts:4:9:4:19 | F.Component | Component in module 'framework2' | -| client2.ts:5:9:5:30 | Util2.D ... mponent | Util2.DefaultComponent in global scope | -| client2_lazy.ts:4:9:4:19 | F.Component | Component in module 'framework2' | -| client2_lazy.ts:5:9:5:30 | Util2.D ... mponent | Util2.DefaultComponent in global scope | -| declare-module-client2.ts:5:8:5:8 | C | C in module 'foo' | -| declare-module-client.ts:5:8:5:8 | C | C in module 'foo' | diff --git a/javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.ql b/javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.ql deleted file mode 100644 index dbaf61b998f6..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/DeclarationFiles/TypeResolution.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from TypeAccess access -select access, access.getTypeName() diff --git a/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected b/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected index 2bb7faf59eb9..c2ef20983621 100644 --- a/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected +++ b/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.expected @@ -1,34 +1,6 @@ classDeclaration | test.vue:3:18:5:3 | class M ... er;\\n } | | test_tsx.vue:3:18:5:3 | class M ... er;\\n } | -exprType -| htmlfile.html:4:22:4:24 | foo | () => void | -| htmlfile.html:4:33:4:41 | "./other" | any | -| htmlfile.html:5:17:5:22 | result | number[] | -| htmlfile.html:5:26:5:28 | foo | () => void | -| htmlfile.html:5:26:5:30 | foo() | void | -| htmlfile.html:5:26:5:42 | foo() as number[] | number[] | -| other.ts:1:8:1:16 | Component | typeof default in test.vue | -| other.ts:1:23:1:34 | "./test.vue" | any | -| other.ts:2:8:2:19 | ComponentTsx | typeof default in test_tsx.vue | -| other.ts:2:26:2:41 | "./test_tsx.vue" | any | -| other.ts:4:1:4:15 | new Component() | MyComponent | -| other.ts:4:5:4:13 | Component | typeof default in test.vue | -| other.ts:5:1:5:18 | new ComponentTsx() | MyComponentTsx | -| other.ts:5:5:5:16 | ComponentTsx | typeof default in test_tsx.vue | -| other.ts:7:17:7:19 | foo | () => void | -| test.vue:2:15:2:19 | other | typeof other.ts | -| test.vue:2:26:2:34 | "./other" | any | -| test.vue:3:24:3:34 | MyComponent | MyComponent | -| test.vue:4:7:4:7 | x | number | -| test_tsx.vue:2:15:2:19 | other | typeof other.ts | -| test_tsx.vue:2:26:2:34 | "./other" | any | -| test_tsx.vue:3:24:3:37 | MyComponentTsx | MyComponentTsx | -| test_tsx.vue:4:7:4:7 | x | number | -symbols -| other.ts:1:1:8:0 | | other.ts | -| test.vue:2:3:6:0 | | test.vue | -| test_tsx.vue:2:3:6:0 | | test_tsx.vue | importTarget | htmlfile.html:4:13:4:42 | import ... other"; | other.ts:1:1:8:0 | | | other.ts:1:1:1:35 | import ... t.vue"; | test.vue:2:3:6:0 | | diff --git a/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.ql b/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.ql index 43a718bf77b9..e333dc900d99 100644 --- a/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.ql +++ b/javascript/ql/test/library-tests/TypeScript/EmbeddedInScript/Test.ql @@ -2,8 +2,4 @@ import javascript query ClassDefinition classDeclaration() { any() } -query Type exprType(Expr e) { result = e.getType() } - -query predicate symbols(Module mod, CanonicalName name) { ast_node_symbol(mod, name) } - query predicate importTarget(Import imprt, Module mod) { imprt.getImportedModule() = mod } diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.expected b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.expected deleted file mode 100644 index b769d79a261b..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.expected +++ /dev/null @@ -1,77 +0,0 @@ -| After | -| AfterX | -| Before | -| BeforeX | -| Box> | -| Box | -| Box | -| Box | -| Box | -| C | -| C | -| Expand | -| Expand | -| ExpandUsingObjectLiteral | -| ExpandUsingObjectLiteral | -| Expansive | -| Expansive | -| Expansive | -| Expansive | -| Expansive | -| Expansive | -| ExpansiveA | -| ExpansiveA | -| ExpansiveA | -| ExpansiveA | -| ExpansiveB | -| ExpansiveB | -| ExpansiveB | -| ExpansiveB | -| ExpansiveB | -| ExpansiveB | -| ExpansiveByInference | -| ExpansiveByInference | -| ExpansiveC | -| ExpansiveC | -| ExpansiveC | -| ExpansiveC | -| ExpansiveC | -| ExpansiveC | -| ExpansiveConstructSignature | -| ExpansiveConstructSignature | -| ExpansiveD | -| ExpansiveD | -| ExpansiveD | -| ExpansiveD | -| ExpansiveFunctionType | -| ExpansiveFunctionType | -| ExpansiveMethod | -| ExpansiveMethod | -| ExpansiveParameter | -| ExpansiveParameter | -| ExpansiveSignature | -| ExpansiveSignature | -| ExpansiveSignatureTypeBound | -| ExpansiveSignatureTypeBound | -| ExpansiveX | -| ExpansiveX | -| NonExpansive> | -| NonExpansive | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | -| T[] | diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.ql b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.ql deleted file mode 100644 index 6890e2937766..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/Types.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from TypeReference type -select type diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/dummy.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/dummy.ts deleted file mode 100644 index 91779e66b25f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/dummy.ts +++ /dev/null @@ -1 +0,0 @@ -export let x = 1; \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_by_inference.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_by_inference.ts deleted file mode 100644 index 62e41ce4c679..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_by_inference.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as dummy from "./dummy"; - -class ExpansiveByInference { - x: T; - y = new ExpansiveByInference([this.x]); // Inferred to be `ExpansiveByInference` - - constructor(arg: T) {} -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_class.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_class.ts deleted file mode 100644 index 354a9f9230c3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_class.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as dummy from "./dummy"; - -class C { - x: C; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_object_literal.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_object_literal.ts deleted file mode 100644 index 9225f1e1bbf3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_object_literal.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as dummy from "./dummy"; - -interface ExpandUsingObjectLiteral { - x: { - foo: ExpandUsingObjectLiteral - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_signature.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_signature.ts deleted file mode 100644 index 6bdfd8e1f2aa..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/expansive_signature.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as dummy from "./dummy"; - -interface ExpansiveSignature { - x: { (): ExpansiveSignature; } -} - -interface ExpansiveParameter { - x: { (param: ExpansiveParameter): void; } -} - -interface ExpansiveConstructSignature { - x: { new(): ExpansiveConstructSignature; } -} - -interface ExpansiveMethod { - method(): ExpansiveMethod; -} - -interface ExpansiveFunctionType { - x: () => ExpansiveFunctionType; -} - -interface ExpansiveSignatureTypeBound { - foo : { >(x: G): G }; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/leading_into_expansion.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/leading_into_expansion.ts deleted file mode 100644 index 0df863991dba..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/leading_into_expansion.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as dummy from "./dummy"; - -interface Before { - x: Expansive; -} - -interface Expansive { - x: Expansive; -} - -interface After { - x: Expansive; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual.ts deleted file mode 100644 index 05682c459281..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as dummy from "./dummy"; - -interface ExpansiveA { - x: ExpansiveB; -} - -interface ExpansiveB { - x: ExpansiveA; -} - - -interface ExpansiveC { - x: ExpansiveD; -} -interface ExpansiveD { - x: ExpansiveC; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual_multigraph.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual_multigraph.ts deleted file mode 100644 index 22a2917fe412..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/mutual_multigraph.ts +++ /dev/null @@ -1,24 +0,0 @@ -import * as dummy from "./dummy"; - -// The expansive edge may be preceded by non-expansive edges. - -interface ExpansiveA { - a: ExpansiveB; - b: ExpansiveB; - x: ExpansiveB; -} - -interface ExpansiveB { - x: ExpansiveA; -} - - -interface ExpansiveC { - x: ExpansiveD; -} - -interface ExpansiveD { - a: ExpansiveC; - b: ExpansiveC; - x: ExpansiveC; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/shared_non_expansive.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/shared_non_expansive.ts deleted file mode 100644 index 86dab87ad90e..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/shared_non_expansive.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as dummy from "./dummy"; - -// Box is not expansive by itself but expansions may go "through" it. -interface Box { - x: S; -} - -// A too simple algorithm might classify this as expansive. -interface NonExpansive { - x: NonExpansive>; - y: Box; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/simple.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/simple.ts deleted file mode 100644 index 8421124d7b83..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/simple.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as dummy from "./dummy"; - -interface Expansive { - x: Expansive; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/through_non_expansive.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/through_non_expansive.ts deleted file mode 100644 index 8724e9fd6c91..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/through_non_expansive.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as dummy from "./dummy"; - -interface Expand { - x: Box> -} - -// Box is not expansive by itself but expansions may go "through" it. -interface Box { - x: S; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/tsconfig.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/used_from_expansion.ts b/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/used_from_expansion.ts deleted file mode 100644 index 8ab40e5944a9..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExpansiveTypes/used_from_expansion.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as dummy from "./dummy"; - -interface BeforeX { - x: number; -} - -interface ExpansiveX { - a: BeforeX; - x: ExpansiveX; - b: BeforeX; -} - -interface AfterX { - x: string; -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.expected b/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.expected deleted file mode 100644 index 48d4d2cf1d1e..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.expected +++ /dev/null @@ -1,3 +0,0 @@ -| B in module 'mylib' | A in module 'mylib' | -| C in module 'mylib' | B in module 'mylib' | -| D in module 'mylib' | C in module 'mylib' | diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.ql b/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.ql deleted file mode 100644 index b6595b03cba4..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/BaseTypes.ql +++ /dev/null @@ -1,5 +0,0 @@ -import javascript - -from TypeName tn -where tn.hasQualifiedName("mylib", _) -select tn, tn.getABaseTypeName() diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/node_modules/@types/mylib/index.d.ts b/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/node_modules/@types/mylib/index.d.ts deleted file mode 100644 index 62cf0bacbf3d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/node_modules/@types/mylib/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface A {} -export interface B extends A {} -export interface C extends B {} -export interface D extends C {} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/options b/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/options deleted file mode 100644 index e59bfd7d72ef..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options:--exclude node_modules/** diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tsconfig.json deleted file mode 100644 index c4df0713286c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./" - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tst.ts b/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tst.ts deleted file mode 100644 index 698f658d1064..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalBaseTypes/tst.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { D } from "mylib"; - -export var foo: D = null; diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/augmentation.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/augmentation.ts deleted file mode 100644 index 36ece00b15da..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/augmentation.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ExternalType1, Augmentation } from "esmodule"; - -declare module "esmodule" { - export interface Augmentation { - x: ExternalType1; - } -} - -let x: Augmentation; diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule.ts deleted file mode 100644 index c90291d0a0b8..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ExternalType1, externalSymbol } from "esmodule"; - -function f(arg: ExternalType1) { - let y = arg.x; // y should be ExternalType2 -} - -let foo = 5; - -let bar: { x: number }; - -interface InternalType { - x: number; - [externalSymbol]: number; -} -let symb = externalSymbol; - diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule_extra.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule_extra.ts deleted file mode 100644 index 8fda57d2d783..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_esmodule_extra.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { OtherClass } from "esmodule/otherfile"; -import { UtilClass } from "esmodule/util"; -import { UtilExtraClass } from "esmodule/util/extra"; - -let c1 = new OtherClass(); -let c2 = new UtilClass(); -let c3 = new UtilExtraClass(); diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_global.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_global.ts deleted file mode 100644 index ee07ed41dc5f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_global.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// - -let d = new LegacyGlobals.LegacySubclass(); diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_module.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_module.ts deleted file mode 100644 index f0f45868d660..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_legacy_module.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { LegacyClass } from "legacy"; - -let c: LegacyClass; diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_global.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_global.ts deleted file mode 100644 index b849a9b3b451..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_global.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// - -let d = new ModernGlobals.ModernSubclass(); diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_module.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_module.ts deleted file mode 100644 index a79aded70600..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/client_modern_module.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ModernClass } from "modern"; - -let c: ModernClass; \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/index.d.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/index.d.ts deleted file mode 100644 index 577a29e73b79..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface ExternalType1 { - x: ExternalType2; -} - -export interface ExternalType2 { - x: number; - y: number; -} - -export const externalSymbol: unique symbol; diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/otherfile.d.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/otherfile.d.ts deleted file mode 100644 index 75147c48c6cb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/otherfile.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare class OtherClass {} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/extra.d.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/extra.d.ts deleted file mode 100644 index 358c567c5f59..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/extra.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare class UtilExtraClass {} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/index.d.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/index.d.ts deleted file mode 100644 index 90c9487a34b7..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/esmodule/util/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare class UtilClass {} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/legacy/index.d.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/legacy/index.d.ts deleted file mode 100644 index f90170361347..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/legacy/index.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare namespace __Legacy { - export class LegacyClass {} -} - -declare module "legacy" { - export = __Legacy; -} - -declare namespace LegacyGlobals { - import Legacy = __Legacy; - - class LegacySubclass extends Legacy.LegacyClass {} -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/modern/index.d.ts b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/modern/index.d.ts deleted file mode 100644 index f02e5b7601cf..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/node_modules/@types/modern/index.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export = Modern; -export as namespace Modern; - -declare namespace Modern { - class ModernClass {} -} - -declare global { - namespace ModernGlobals { - class ModernSubclass extends Modern.ModernClass {} - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/options b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/options deleted file mode 100644 index e59bfd7d72ef..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options:--exclude node_modules/** diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.expected b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.expected deleted file mode 100644 index 26ee4c9b67cb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.expected +++ /dev/null @@ -1,28 +0,0 @@ -globalQualifiedNames -| LegacyClass | __Legacy.LegacyClass | -| LegacySubclass | LegacyGlobals.LegacySubclass | -| ModernClass | Modern.ModernClass | -| ModernSubclass | ModernGlobals.ModernSubclass | -moduleQualifiedName -| Augmentation | esmodule | Augmentation | -| ExternalType1 | esmodule | ExternalType1 | -| ExternalType2 | esmodule | ExternalType2 | -| LegacyClass | legacy | LegacyClass | -| ModernClass | modern | ModernClass | -| OtherClass | esmodule/otherfile | OtherClass | -| UtilClass | esmodule/util | UtilClass | -| UtilExtraClass | esmodule/util/extra | UtilExtraClass | -types -| Augmentation | defined in augmentation.ts | -| ExternalType1 | has no definition | -| ExternalType2 | has no definition | -| InternalType | defined in client_esmodule.ts | -| LegacyClass | has no definition | -| LegacySubclass | has no definition | -| ModernClass | has no definition | -| ModernSubclass | has no definition | -| OtherClass | has no definition | -| UtilClass | has no definition | -| UtilExtraClass | has no definition | -uniqueSymbols -| typeof externalSymbol | esmodule | externalSymbol | diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.ql b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.ql deleted file mode 100644 index aedebb37bc90..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tests.ql +++ /dev/null @@ -1,26 +0,0 @@ -import javascript - -query predicate globalQualifiedNames(TypeReference type, string globalName) { - type.hasQualifiedName(globalName) and - not type.hasTypeArguments() -} - -query predicate moduleQualifiedName(TypeReference type, string moduleName, string exportedName) { - type.hasQualifiedName(moduleName, exportedName) and - not type.hasTypeArguments() -} - -string getDefinition(TypeReference ref) { - if exists(ref.getADefinition()) - then result = "defined in " + ref.getADefinition().getFile().getBaseName() - else result = "has no definition" -} - -query predicate types(TypeReference type, string def) { - not type.hasTypeArguments() and - def = getDefinition(type) -} - -query predicate uniqueSymbols(UniqueSymbolType symbol, string moduleName, string exportedName) { - symbol.hasQualifiedName(moduleName, exportedName) -} diff --git a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tsconfig.json deleted file mode 100644 index c4df0713286c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ExternalTypes/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./" - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected deleted file mode 100644 index 91eb164f394c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.expected +++ /dev/null @@ -1,10 +0,0 @@ -#select -| foo.ts:3:12:3:12 | x | foo.Bar in unknown scope | -| foo.ts:4:10:4:10 | x | foo.Bar in unknown scope | -| tst.ts:8:14:8:16 | arg | Base in global scope | -| tst.ts:8:14:8:16 | arg | Sub in global scope | -underlyingTypeNode -| foo | | file://:0:0:0:0 | use moduleImport("foo").getMember("exports") | -| foo | | file://:0:0:0:0 | use moduleImport("foo").getMember("exports").getMember("") | -| foo | | foo.ts:1:8:1:10 | use moduleImport("foo").getMember("exports").getMember("default") | -| foo | Bar | foo.ts:3:12:3:12 | use moduleImport("foo").getMember("exports").getMember("Bar").getInstance() | diff --git a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.ql b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.ql deleted file mode 100644 index 72d4e6d0f3d2..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/HasUnderlyingType.ql +++ /dev/null @@ -1,9 +0,0 @@ -import javascript - -from Expr e, TypeName typeName -where e.getType().hasUnderlyingTypeName(typeName) -select e, typeName - -query API::Node underlyingTypeNode(string mod, string name) { - result = API::Node::ofType(mod, name) -} diff --git a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/foo.ts b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/foo.ts deleted file mode 100644 index 1b5be79068a8..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/foo.ts +++ /dev/null @@ -1,5 +0,0 @@ -import foo from "foo"; - -function f(x: foo.Bar) { - return x; -} diff --git a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tsconfig.json deleted file mode 100644 index 4a2c2e629213..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "include": ["."] -} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tst.ts b/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tst.ts deleted file mode 100644 index 02ca64296b5d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/HasUnderlyingType/tst.ts +++ /dev/null @@ -1,9 +0,0 @@ -interface Base { - x: T; -} -interface Sub extends Base { - y: S; -} - -function foo(arg: (Sub & {w: number}) | string) { -} diff --git a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.expected b/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.expected deleted file mode 100644 index 3bca461afe29..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.expected +++ /dev/null @@ -1,22 +0,0 @@ -getTypeString -| bar/client.ts:9:23:9:27 | Inter | Inter | -| bar/client.ts:10:12:10:14 | Bar | Bar | -| foo/index.ts:2:10:2:12 | Bar | Bar | -| foo/index.ts:7:18:7:22 | Inter | Inter | -| foo/index.ts:8:10:8:12 | Bar | Bar | -importSpec -| false | bar/client.ts:1:10:1:12 | Foo | -| false | bar/client.ts:7:10:7:20 | Foo as Foo2 | -| true | bar/client.ts:7:23:7:32 | type Inter | -| true | bar/client.ts:7:35:7:42 | type Bar | -#select -| bar/client.ts:3:5:3:5 | f | my-awesome-package | Foo | -| bar/client.ts:3:9:3:17 | new Foo() | my-awesome-package | Foo | -| bar/client.ts:4:5:4:5 | b | my-awesome-package | Bar | -| bar/client.ts:4:9:4:9 | f | my-awesome-package | Foo | -| bar/client.ts:4:9:4:15 | f.bar() | my-awesome-package | Bar | -| bar/client.ts:11:16:11:24 | new Foo() | my-awesome-package | Foo | -| bar/client.ts:11:16:11:30 | new Foo().bar() | my-awesome-package | Bar | -| foo/index.ts:1:14:1:16 | Foo | my-awesome-package | Foo | -| foo/index.ts:2:23:2:31 | new Bar() | my-awesome-package | Bar | -| foo/index.ts:5:14:5:16 | Bar | my-awesome-package | Bar | diff --git a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.ql b/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.ql deleted file mode 100644 index 1db3ef62aede..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/TypeNames.ql +++ /dev/null @@ -1,11 +0,0 @@ -import javascript - -query string getTypeString(TypeExpr te) { result = te.getType().toString() } - -query ImportSpecifier importSpec(boolean typeOnly) { - if result.isTypeOnly() then typeOnly = true else typeOnly = false -} - -from Expr e, string mod, string name -where e.getType().(TypeReference).hasQualifiedName(mod, name) -select e, mod, name diff --git a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/bar/client.ts b/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/bar/client.ts deleted file mode 100644 index 6e5d88b412e5..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/bar/client.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Foo } from "../foo"; - -let f = new Foo(); -let b = f.bar(); - - -import { Foo as Foo2, type Inter, type Bar } from "../foo"; - -class Impl implements Inter { - bar(): Bar { - return new Foo().bar(); - } -} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/index.ts b/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/index.ts deleted file mode 100644 index ee83e5fa92dc..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export class Foo { - bar(): Bar { return new Bar() } -} - -export class Bar {} - -export interface Inter { - bar(): Bar; -} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/package.json b/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/package.json deleted file mode 100644 index 0d82c265b2f4..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/foo/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "my-awesome-package" -} diff --git a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/tsconfig.json deleted file mode 100644 index 850cac831e76..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/ImportOwnPackage/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "include": ["foo", "bar"] -} diff --git a/javascript/ql/test/library-tests/TypeScript/IndexTypes/test.expected b/javascript/ql/test/library-tests/TypeScript/IndexTypes/test.expected deleted file mode 100644 index 4779b178e4f6..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/IndexTypes/test.expected +++ /dev/null @@ -1,2 +0,0 @@ -| Foo | boolean | -| typeof Foo in global scope | string | diff --git a/javascript/ql/test/library-tests/TypeScript/IndexTypes/test.ql b/javascript/ql/test/library-tests/TypeScript/IndexTypes/test.ql deleted file mode 100644 index ff6a2a4836f4..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/IndexTypes/test.ql +++ /dev/null @@ -1,3 +0,0 @@ -import javascript - -query Type stringIndexType(Type t) { result = t.getStringIndexType() } diff --git a/javascript/ql/test/library-tests/TypeScript/IndexTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/IndexTypes/tsconfig.json deleted file mode 100644 index 9e26dfeeb6e6..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/IndexTypes/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/IndexTypes/tst.ts b/javascript/ql/test/library-tests/TypeScript/IndexTypes/tst.ts deleted file mode 100644 index 9035ff2b2acf..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/IndexTypes/tst.ts +++ /dev/null @@ -1,8 +0,0 @@ - // static index signature - class Foo { - static hello = "world"; - static [n: string]: string; - [n: string]: boolean; - } - Foo["whatever"] = "foo"; - new Foo()["something"] = true; \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/recursiveMappedType.ts b/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/recursiveMappedType.ts deleted file mode 100644 index a3a47ab49ad3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/recursiveMappedType.ts +++ /dev/null @@ -1,8 +0,0 @@ -interface X { - a: RecursiveMappedType & X; - b: boolean; -} - -type RecursiveMappedType = { - [P in keyof V]?: X & RecursiveMappedType -} diff --git a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.expected b/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.expected deleted file mode 100644 index 7a7033e01dd5..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.expected +++ /dev/null @@ -1,2 +0,0 @@ -| recursiveMappedType.ts:2:5:2:5 | a | RecursiveMappedType & X | -| recursiveMappedType.ts:3:5:3:5 | b | boolean | diff --git a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.ql b/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.ql deleted file mode 100644 index 574b7c54d4ef..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/test.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from Expr e -select e, e.getType() diff --git a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/tsconfig.json deleted file mode 100644 index d144c8ddb02c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/InfiniteTypes/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "include": ["."] -} diff --git a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.expected b/javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.expected deleted file mode 100644 index 4e6e39d9f47b..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.expected +++ /dev/null @@ -1,16 +0,0 @@ -| C | 1 | bar.ts:10:10:10:24 | class C {} | -| C | 1 | foo.ts:10:10:10:24 | class C {} | -| C | 1 | bar.ts:10:10:10:24 | class C {} | -| C | 1 | foo.ts:10:10:10:24 | class C {} | -| ExportedClass | 1 | bar.ts:4:8:4:34 | class E ... Bar> {} | -| ExportedClass | 1 | foo.ts:4:8:4:34 | class E ... Foo> {} | -| ExportedClass | 1 | bar.ts:4:8:4:34 | class E ... Bar> {} | -| ExportedClass | 1 | foo.ts:4:8:4:34 | class E ... Foo> {} | -| InnerC | 1 | foo.ts:13:3:13:23 | class I ... oo1> {} | -| InnerC | 1 | foo.ts:18:3:18:23 | class I ... oo2> {} | -| InnerC | 1 | foo.ts:13:3:13:23 | class I ... oo1> {} | -| InnerC | 1 | foo.ts:18:3:18:23 | class I ... oo2> {} | -| LocalClass | 1 | bar.ts:3:1:3:24 | class L ... Bar> {} | -| LocalClass | 1 | foo.ts:3:1:3:24 | class L ... Foo> {} | -| LocalClass | 1 | bar.ts:3:1:3:24 | class L ... Bar> {} | -| LocalClass | 1 | foo.ts:3:1:3:24 | class L ... Foo> {} | diff --git a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.ql b/javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.ql deleted file mode 100644 index 1609bba97f83..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/TypeReferences.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from TypeReference ref -select ref, count(ref.getADefinition()), ref.getADefinition() diff --git a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/bar.ts b/javascript/ql/test/library-tests/TypeScript/LexicalTypes/bar.ts deleted file mode 100644 index 7dcb2840feee..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/bar.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as dummy from "./dummy"; - -class LocalClass {} -export class ExportedClass {} - -let localBar = new LocalClass(); -let exportedBar = new ExportedClass(); - -namespace LocalNamespace { - export class C {} - let barC = new C(); -} diff --git a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/dummy.ts b/javascript/ql/test/library-tests/TypeScript/LexicalTypes/dummy.ts deleted file mode 100644 index c6f5ebf6678c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/dummy.ts +++ /dev/null @@ -1 +0,0 @@ -export let x = 5; diff --git a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/foo.ts b/javascript/ql/test/library-tests/TypeScript/LexicalTypes/foo.ts deleted file mode 100644 index a8e24920d87e..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/foo.ts +++ /dev/null @@ -1,20 +0,0 @@ -import * as dummy from "./dummy"; - -class LocalClass {} -export class ExportedClass {} - -let localFoo = new LocalClass(); -let exportedFoo = new ExportedClass(); - -namespace LocalNamespace { - export class C {} - let fooC = new C(); - - class InnerC {} - let innerFoo1 = new InnerC(); -} - -namespace LocalNamespace { - class InnerC {} - let innerFoo2 = new InnerC(); -} diff --git a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/LexicalTypes/tsconfig.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LexicalTypes/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.expected b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.expected deleted file mode 100644 index 55f7be1ebe83..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.expected +++ /dev/null @@ -1,4 +0,0 @@ -| 32 | 32.0 | -| 40.123 | 40.123 | -| 45 | 45.0 | -| 1099511627776 | 1.099511627776E12 | diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.ql b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.ql deleted file mode 100644 index d503725ac286..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/FloatLiteralTypes.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from NumberLiteralType type -select type, type.getFloatValue() diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.expected b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.expected deleted file mode 100644 index 6abc5f39062f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.expected +++ /dev/null @@ -1,2 +0,0 @@ -| 32 | 32 | -| 45 | 45 | diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.ql b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.ql deleted file mode 100644 index 7012836516ea..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/IntLiteralTypes.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from NumberLiteralType type -select type, type.getIntValue() diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.expected b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.expected deleted file mode 100644 index f0a26f408879..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.expected +++ /dev/null @@ -1,11 +0,0 @@ -| 32 | 32 | -| 40.123 | 40.123 | -| 45 | 45 | -| 1099511627776 | 1099511627776 | -| "31" | 31 | -| "" | | -| "A;B;C" | A;B;C | -| "dsfg" | dsfg | -| "sdfg" | sdfg | -| false | false | -| true | true | diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.ql b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.ql deleted file mode 100644 index 7c491d90ef42..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/LiteralTypes.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from LiteralType type -select type, type.getStringValue() diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/tsconfig.json deleted file mode 100644 index d144c8ddb02c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "include": ["."] -} diff --git a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/tst.ts b/javascript/ql/test/library-tests/TypeScript/LiteralTypes/tst.ts deleted file mode 100644 index ac75b4cf822f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/LiteralTypes/tst.ts +++ /dev/null @@ -1,12 +0,0 @@ -let intValue = 45; -let floatValue = 40.123; -let hexValue = 0x20; // 32 -let intWith40Bits = 1099511627776; -let stringValue = "dsfg"; -let stringValueType: "sdfg"; -let emptyStringType: "" = ""; -let semicolonString = "A;B;C"; -let numberStringValue = "31"; -let longStringValue = "very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string"; -let trueValue = true; -let falseValue = false; diff --git a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.expected b/javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.expected deleted file mode 100644 index 2504915fb037..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.expected +++ /dev/null @@ -1,36 +0,0 @@ -| tst.ts:2:3:2:6 | name | string | -| tst.ts:3:3:3:10 | children | T[] | -| tst.ts:6:5:6:11 | context | T | -| tst.ts:6:18:17:1 | {\\n nam ... }\\n ]\\n} | T | -| tst.ts:7:3:7:6 | name | string | -| tst.ts:7:9:7:11 | 'x' | "x" | -| tst.ts:8:3:8:10 | children | ({ name: string; } \| { name: string; children: ... | -| tst.ts:8:13:16:3 | [\\n { ... }\\n ] | T[] | -| tst.ts:9:5:9:18 | { name: 'x1' } | T | -| tst.ts:9:7:9:10 | name | string | -| tst.ts:9:13:9:16 | 'x1' | "x1" | -| tst.ts:10:5:15:5 | {\\n ... ]\\n } | T | -| tst.ts:11:7:11:10 | name | string | -| tst.ts:11:13:11:16 | 'x2' | "x2" | -| tst.ts:12:7:12:14 | children | { name: string; }[] | -| tst.ts:12:17:14:7 | [\\n ... ] | T[] | -| tst.ts:13:9:13:22 | { name: 'x3' } | T | -| tst.ts:13:11:13:14 | name | string | -| tst.ts:13:17:13:20 | 'x3' | "x3" | -| tst.ts:19:5:19:13 | nocontext | { name: string; children: ({ name: string; chil... | -| tst.ts:19:17:30:1 | {\\n nam ... }\\n ]\\n} | { name: string; children: ({ name: string; } \| ... | -| tst.ts:20:3:20:6 | name | string | -| tst.ts:20:9:20:11 | 'x' | "x" | -| tst.ts:21:3:21:10 | children | ({ name: string; } \| { name: string; children: ... | -| tst.ts:21:13:29:3 | [\\n { ... }\\n ] | ({ name: string; } \| { name: string; children: ... | -| tst.ts:22:5:22:18 | { name: 'x1' } | { name: string; } | -| tst.ts:22:7:22:10 | name | string | -| tst.ts:22:13:22:16 | 'x1' | "x1" | -| tst.ts:23:5:28:5 | {\\n ... ]\\n } | { name: string; children: { name: string; }[]; } | -| tst.ts:24:7:24:10 | name | string | -| tst.ts:24:13:24:16 | 'x2' | "x2" | -| tst.ts:25:7:25:14 | children | { name: string; }[] | -| tst.ts:25:17:27:7 | [\\n ... ] | { name: string; }[] | -| tst.ts:26:9:26:22 | { name: 'x3' } | { name: string; } | -| tst.ts:26:11:26:14 | name | string | -| tst.ts:26:17:26:20 | 'x3' | "x3" | diff --git a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.ql b/javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.ql deleted file mode 100644 index 574b7c54d4ef..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/test.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from Expr e -select e, e.getType() diff --git a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/NestedLiteral/tsconfig.json deleted file mode 100644 index a0565aca7581..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{ "include": ["."] } diff --git a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/tst.ts b/javascript/ql/test/library-tests/TypeScript/NestedLiteral/tst.ts deleted file mode 100644 index 65515c62e945..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/NestedLiteral/tst.ts +++ /dev/null @@ -1,30 +0,0 @@ -interface T { - name: string; - children?: T[]; -} - -let context: T = { - name: 'x', - children: [ - { name: 'x1' }, - { - name: 'x2', - children: [ - { name: 'x3' } - ] - } - ] -} - -let nocontext = { - name: 'x', - children: [ - { name: 'x1' }, - { - name: 'x2', - children: [ - { name: 'x3' } - ] - } - ] -} diff --git a/javascript/ql/test/library-tests/TypeScript/Nullability/Types.expected b/javascript/ql/test/library-tests/TypeScript/Nullability/Types.expected deleted file mode 100644 index 6db617b3e77d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Nullability/Types.expected +++ /dev/null @@ -1,10 +0,0 @@ -exprType -| tst.ts:1:5:1:16 | stringOrNUll | string \| null | -| tst.ts:2:5:2:21 | stringOrUndefined | string \| undefined | -| tst.ts:3:5:3:27 | stringO ... defined | string \| null \| undefined | -| tst.ts:4:5:4:16 | stringOrVoid | string \| void | -| tst.ts:7:5:7:21 | stringOrNullAlias | StringOrNullAlias | -| tst.ts:8:5:8:32 | stringO ... defined | string \| null \| undefined | -| tst.ts:10:5:10:23 | arrayOfStringOrNull | (string \| null)[] | -unaliasedType -| StringOrNullAlias | string \| null | diff --git a/javascript/ql/test/library-tests/TypeScript/Nullability/Types.ql b/javascript/ql/test/library-tests/TypeScript/Nullability/Types.ql deleted file mode 100644 index 0ca2bd6e15da..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Nullability/Types.ql +++ /dev/null @@ -1,5 +0,0 @@ -import javascript - -query Type exprType(Expr e) { result = e.getType() } - -query Type unaliasedType(TypeAliasReference ref) { result = ref.getAliasedType() } diff --git a/javascript/ql/test/library-tests/TypeScript/Nullability/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/Nullability/tsconfig.json deleted file mode 100644 index 6bb7671fa14c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Nullability/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "include": ["."], - "compilerOptions": { - "strict": true - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/Nullability/tst.ts b/javascript/ql/test/library-tests/TypeScript/Nullability/tst.ts deleted file mode 100644 index f8ca1e565db7..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Nullability/tst.ts +++ /dev/null @@ -1,10 +0,0 @@ -let stringOrNUll: string | null; -let stringOrUndefined: string | undefined; -let stringOrNullOrUndefined: string | null | undefined; -let stringOrVoid: string | void; - -type StringOrNullAlias = string | null; -let stringOrNullAlias: StringOrNullAlias; -let stringOrNullAliasOrUndefined: StringOrNullAlias | undefined; - -let arrayOfStringOrNull: Array; diff --git a/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected b/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected deleted file mode 100644 index 886391b14552..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.expected +++ /dev/null @@ -1,11 +0,0 @@ -symbols -| src/lib/foo.ts:1:1:4:0 | | src/lib/foo.ts | -| src/lib/foo.ts:1:8:3:1 | functio ... 123;\\n} | foo in src/lib/foo.ts | -| test/test_foo.ts:1:1:1:28 | import ... @/foo"; | src/lib/foo.ts | -| test/test_foo.ts:1:1:7:0 | | test/test_foo.ts | -| test/test_foo.ts:2:17:2:32 | require("@/foo") | src/lib/foo.ts | -| test/test_foo.ts:4:1:4:5 | foo() | foo in src/lib/foo.ts | -| test/test_foo.ts:6:1:6:12 | foolib.foo() | foo in src/lib/foo.ts | -#select -| test/test_foo.ts:1:1:1:28 | import ... @/foo"; | src/lib/foo.ts:1:1:4:0 | | -| test/test_foo.ts:2:17:2:32 | require("@/foo") | src/lib/foo.ts:1:1:4:0 | | diff --git a/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.ql b/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.ql deleted file mode 100644 index 8f93f6f37345..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PathMapping/Imports.ql +++ /dev/null @@ -1,6 +0,0 @@ -import javascript - -query predicate symbols(AstNode astNode, CanonicalName symbol) { ast_node_symbol(astNode, symbol) } - -from Import imprt -select imprt, imprt.getImportedModule() diff --git a/javascript/ql/test/library-tests/TypeScript/PathMapping/src/lib/foo.ts b/javascript/ql/test/library-tests/TypeScript/PathMapping/src/lib/foo.ts deleted file mode 100644 index 0ef2bf692fde..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PathMapping/src/lib/foo.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function foo() { - return 123; -} diff --git a/javascript/ql/test/library-tests/TypeScript/PathMapping/test/test_foo.ts b/javascript/ql/test/library-tests/TypeScript/PathMapping/test/test_foo.ts deleted file mode 100644 index d30f56c53e70..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PathMapping/test/test_foo.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { foo } from "@/foo"; -import foolib = require("@/foo"); - -foo(); - -foolib.foo(); diff --git a/javascript/ql/test/library-tests/TypeScript/PathMapping/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/PathMapping/tsconfig.json deleted file mode 100644 index 476d1ad1ee5d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PathMapping/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "include": ["."], - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["./src/lib/*"] - } - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/DefinitelyTyped-LICENSE b/javascript/ql/test/library-tests/TypeScript/PromiseType/DefinitelyTyped-LICENSE deleted file mode 100644 index c3ee6e73d573..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/DefinitelyTyped-LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -This project is licensed under the MIT license. -Copyrights are respective of each contributor listed at the beginning of each definition file. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.expected b/javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.expected deleted file mode 100644 index 40c1f30e72a3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.expected +++ /dev/null @@ -1,9 +0,0 @@ -| p1 | MyPromise | string | -| p2 | MyPromise | any | -| p3 | Promise | string | -| p5 | PromiseLike | string | -| p6 | Thenable | string | -| p8 | ThenPromise | string | -| p9 | JQueryPromise | string | -| p10 | JQueryGenericPromise | string | -| p11 | JQueryDeferred | string | diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.ql b/javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.ql deleted file mode 100644 index 477c4dc888fb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/PromiseType.ql +++ /dev/null @@ -1,12 +0,0 @@ -import javascript - -string getElementType(PromiseType t) { - result = t.getElementType().toString() - or - not exists(t.getElementType().toString()) and - result = "" -} - -from VarDecl decl, PromiseType type -where type = decl.getTypeAnnotation().getType() -select decl.getName(), type, getElementType(type) diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.expected b/javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.expected deleted file mode 100644 index b3567dfe8d36..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.expected +++ /dev/null @@ -1 +0,0 @@ -| tst.ts:33:5:33:15 | notPromise4 | diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.ql b/javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.ql deleted file mode 100644 index 7d11a5e5dcd3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/QDeferred.ql +++ /dev/null @@ -1,5 +0,0 @@ -import javascript - -from Expr e -where e.getType().hasUnderlyingType("q", "Deferred") -select e diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise-LICENSE b/javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise-LICENSE deleted file mode 100644 index 954ec5992df7..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise-LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise.d.ts b/javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise.d.ts deleted file mode 100644 index 815584496e89..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/es6-promise.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// Based on the .d.ts file from the '@types/es6-promise' package (https://github.com/stefanpenner/es6-promise/blob/master/es6-promise.d.ts), -// licensed under the MIT license; see file es6-promise-LICENSE. - -export interface Thenable { - then (onFulfilled?: (value: R) => U | Thenable, onRejected?: (error: any) => U | Thenable): Thenable; - then (onFulfilled?: (value: R) => U | Thenable, onRejected?: (error: any) => void): Thenable; -} - -export type IThenable = Thenable; diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/jquery.d.ts b/javascript/ql/test/library-tests/TypeScript/PromiseType/jquery.d.ts deleted file mode 100644 index 4bde0e5ffef7..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/jquery.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Based on the .d.ts file from the '@types/jquery' package (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/jquery/index.d.ts), -// which is licensed under the MIT license; see file DefinitelyTyped-LICENSE. -// Type definitions for jquery 3.3 -// Project: https://jquery.com -// Definitions by: Leonard Thieu -// Boris Yankov -// Christian Hoffmeister -// Steve Fenton -// Diullei Gomes -// Tass Iliopoulos -// Jason Swearingen -// Sean Hill -// Guus Goossens -// Kelly Summerlin -// Basarat Ali Syed -// Nicholas Wolverson -// Derek Cicerone -// Andrew Gaspar -// Seikichi Kondo -// Benjamin Jackman -// Poul Sorensen -// Josh Strobl -// John Reilly -// Dick van den Brink -// Thomas Schulz -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 2.3 - -interface JQueryGenericPromise { - then(doneFilter: (value?: T, ...values: any[]) => U|JQueryPromise, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise; - then(doneFilter: (value?: T, ...values: any[]) => void, failFilter?: (...reasons: any[]) => any, progressFilter?: (...progression: any[]) => any): JQueryPromise; -} - -interface JQueryPromise extends JQueryGenericPromise { - state(): string; - promise(target?: any): JQueryPromise; -} - -interface JQueryDeferred extends JQueryGenericPromise { - notify(value?: any, ...args: any[]): JQueryDeferred; -} diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/node_modules/@types/q/index.d.ts b/javascript/ql/test/library-tests/TypeScript/PromiseType/node_modules/@types/q/index.d.ts deleted file mode 100644 index de520c5faa5e..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/node_modules/@types/q/index.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -// Based on the .d.ts file from the '@types/q' package (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/q/index.d.ts) -// which is licensed under the MIT license; see file DefinitelyTyped-LICENSE. -// Type definitions for Q 1.5 -// Project: https://github.com/kriskowal/q -// Definitions by: Barrie Nemetchek -// Andrew Gaspar -// John Reilly -// Michel Boudreau -// TeamworkGuy2 -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 2.3 - -export = Q; - -declare namespace Q { - export type IWhenable = PromiseLike | T; - export type IPromise = PromiseLike; - - export interface Deferred { - promise: Promise; - resolve(value?: IWhenable): void; - } - - export interface Promise { - then(onFulfill?: ((value: T) => IWhenable) | null, onReject?: ((error: any) => IWhenable) | null, onProgress?: ((progress: any) => any) | null): Promise; - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/promise-LICENSE b/javascript/ql/test/library-tests/TypeScript/PromiseType/promise-LICENSE deleted file mode 100644 index 7a1f763640a9..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/promise-LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/promise.d.ts b/javascript/ql/test/library-tests/TypeScript/PromiseType/promise.d.ts deleted file mode 100644 index 85aec3783fea..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/promise.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Based on the .d.ts file from the 'promise' package (https://github.com/then/promise/blob/master/index.d.ts), -// which is licensed under the MIT license; see file promise-LICENSE. - -export interface Thenable { - then(onfulfilled?: ((value: T) => TResult1 | Thenable) | undefined | null, onrejected?: ((reason: any) => TResult2 | Thenable) | undefined | null): Thenable; -} - -export interface ThenPromise { - then(onfulfilled?: ((value: T) => TResult1 | Thenable) | undefined | null, onrejected?: ((reason: any) => TResult2 | Thenable) | undefined | null): ThenPromise; - catch(onrejected?: ((reason: any) => TResult | Thenable) | undefined | null): ThenPromise; -} diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/PromiseType/tsconfig.json deleted file mode 100644 index 4a2c2e629213..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "include": ["."] -} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/PromiseType/tst.ts b/javascript/ql/test/library-tests/TypeScript/PromiseType/tst.ts deleted file mode 100644 index 1600caf88f4d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/PromiseType/tst.ts +++ /dev/null @@ -1,34 +0,0 @@ -import * as Q from "q"; -import { Thenable, IThenable } from "./es6-promise"; -import * as promise from "./promise"; - -interface MyPromise { - then(callback: (x: T) => any): MyPromise; -} - -let p1: MyPromise; -let p2: MyPromise; -let p3: Promise; -let p4: Q.IPromise; -let p5: PromiseLike; -let p6: Thenable; -let p7: IThenable; -let p8: promise.ThenPromise; -let p9: JQueryPromise; -let p10: JQueryGenericPromise; -let p11: JQueryDeferred; - -interface NotPromise { - then(x: T): T; -} -interface WrongName { - then(callback: (x:T) => any): WrongName; -} -interface StringPromise { - then(callback: (x: string) => any): StringPromise; -} -let notPromise1: NotPromise; -let notPromise2: WrongName; -let notPromise3: StringPromise; -let notPromise4: Q.Deferred; // different API - lacks 'then' method - diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected deleted file mode 100644 index 0494011bc70a..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.expected +++ /dev/null @@ -1,33 +0,0 @@ -| A in enums.ts | -| A in export-qualified.ts | -| A in namespaces.ts | -| A.B in export-qualified.ts | -| A.C in namespaces.ts | -| A.E in enums.ts | -| B in namespaces.ts:3 | -| B in namespaces.ts:10 | -| B.Bx in namespaces.ts:3 | -| B.Bx in namespaces.ts:10 | -| D in export-specifiers.ts | -| D in namespaces.ts | -| D in otherlib.ts | -| D.F in namespaces.ts | -| E in namespaces.ts:17 | -| E in namespaces.ts:22 | -| Foo in global scope | -| G in namespaces.ts | -| G.J in namespaces.ts | -| Glob in global scope | -| H in namespaces.ts:27 | -| H.I in namespaces.ts:27 | -| N in export-specifiers.ts | -| X in global scope | -| X in namespaces.ts | -| X.Y in namespaces.ts | -| X.Y.Z in namespaces.ts | -| Y in global scope | -| export-class.ts | -| namespaces.ts | -| otherlib.ts | -| reexport-all.ts | -| reexport-named.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.ql b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.ql deleted file mode 100644 index a7f5c980cccb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/Namespaces.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from Namespace namespace -select namespace.toString() diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected deleted file mode 100644 index 7ec8faec19ff..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.expected +++ /dev/null @@ -1,31 +0,0 @@ -| ambient.ts:5:16:5:18 | Foo | Foo in global scope | -| enums.ts:9:8:9:8 | A | A in enums.ts | -| enums.ts:9:8:9:10 | A.E | A.E in enums.ts | -| enums.ts:10:8:10:8 | A | A in enums.ts | -| export-qualified-client.ts:3:8:3:9 | AB | A.B in export-qualified.ts | -| export-specifiers-client.ts:4:8:4:8 | N | N in export-specifiers.ts | -| export-specifiers-client.ts:5:8:5:8 | D | D in export-specifiers.ts | -| global.ts:5:9:5:12 | Glob | Glob in global scope | -| import-in-namespace.ts:9:13:9:13 | A | X in global scope | -| namespaces-client.ts:4:9:4:10 | ns | namespaces.ts | -| namespaces-client.ts:4:9:4:12 | ns.G | G in namespaces.ts | -| namespaces-client.ts:5:9:5:9 | G | G in namespaces.ts | -| namespaces-client.ts:6:9:6:9 | G | G in namespaces.ts | -| namespaces-client.ts:6:9:6:11 | G.J | G.J in namespaces.ts | -| reexport-all-client.ts:4:9:4:10 | ns | reexport-all.ts | -| reexport-all-client.ts:4:9:4:12 | ns.G | G in namespaces.ts | -| reexport-all-client.ts:5:9:5:9 | G | G in namespaces.ts | -| reexport-all-client.ts:6:9:6:9 | G | G in namespaces.ts | -| reexport-all-client.ts:6:9:6:11 | G.J | G.J in namespaces.ts | -| reexport-all-client.ts:8:8:8:8 | D | D in otherlib.ts | -| reexport-all-client.ts:9:8:9:9 | ns | reexport-all.ts | -| reexport-all-client.ts:9:8:9:11 | ns.D | D in otherlib.ts | -| reexport-all-client.ts:11:8:11:9 | ns | reexport-all.ts | -| reexport-named-client.ts:4:9:4:10 | ns | reexport-named.ts | -| reexport-named-client.ts:4:9:4:12 | ns.G | G in namespaces.ts | -| reexport-named-client.ts:5:9:5:9 | G | G in namespaces.ts | -| reexport-named-client.ts:6:9:6:9 | G | G in namespaces.ts | -| reexport-named-client.ts:6:9:6:11 | G.J | G.J in namespaces.ts | -| reexport-named-client.ts:8:8:8:8 | X | D in namespaces.ts | -| reexport-named-client.ts:9:8:9:9 | ns | reexport-named.ts | -| reexport-named-client.ts:9:8:9:11 | ns.X | D in namespaces.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.ql b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.ql deleted file mode 100644 index 3009390546bd..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveNamespace.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from NamespaceAccess access -select access, access.getNamespace().toString() diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected deleted file mode 100644 index 1629bdac5b15..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.expected +++ /dev/null @@ -1,27 +0,0 @@ -| ambient.ts:5:16:5:20 | Foo.C | Foo.C in global scope | -| enums.ts:9:8:9:12 | A.E.x | A.E.x in enums.ts | -| enums.ts:10:8:10:10 | A.E | A.E in enums.ts | -| export-class-client-renamed.ts:3:8:3:8 | X | Banana in export-class.ts | -| export-class-client.ts:3:8:3:13 | Banana | Banana in export-class.ts | -| export-qualified-client.ts:3:8:3:11 | AB.C | A.B.C in export-qualified.ts | -| export-specifiers-client.ts:4:8:4:10 | N.C | N.C in export-specifiers.ts | -| export-specifiers-client.ts:5:8:5:10 | D.C | D.C in export-specifiers.ts | -| export-specifiers-client.ts:6:8:6:8 | C | C in export-specifiers.ts | -| global.ts:5:9:5:14 | Glob.C | Glob.C in global scope | -| import-in-namespace.ts:9:13:9:15 | A.C | X.C in global scope | -| import-in-namespace.ts:10:13:10:13 | D | X.C in global scope | -| namespaces-client.ts:4:9:4:14 | ns.G.C | G.C in namespaces.ts | -| namespaces-client.ts:5:9:5:11 | G.C | G.C in namespaces.ts | -| namespaces-client.ts:6:9:6:13 | G.J.C | G.J.C in namespaces.ts | -| reexport-all-client.ts:4:9:4:14 | ns.G.C | G.C in namespaces.ts | -| reexport-all-client.ts:5:9:5:11 | G.C | G.C in namespaces.ts | -| reexport-all-client.ts:6:9:6:13 | G.J.C | G.J.C in namespaces.ts | -| reexport-all-client.ts:8:8:8:10 | D.F | D.F in unknown scope | -| reexport-all-client.ts:9:8:9:13 | ns.D.F | ns.D.F in unknown scope | -| reexport-all-client.ts:11:8:11:16 | ns.Banana | Banana in export-class.ts | -| reexport-named-client.ts:4:9:4:14 | ns.G.C | G.C in namespaces.ts | -| reexport-named-client.ts:5:9:5:11 | G.C | G.C in namespaces.ts | -| reexport-named-client.ts:6:9:6:13 | G.J.C | G.J.C in namespaces.ts | -| reexport-named-client.ts:8:8:8:10 | X.F | X.F in unknown scope | -| reexport-named-client.ts:9:8:9:13 | ns.X.F | ns.X.F in unknown scope | -| reexport-named-client.ts:11:9:11:9 | Y | Banana in export-class.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.ql b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.ql deleted file mode 100644 index 0960b3043863..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ResolveTypeName.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from TypeAccess access -select access, access.getTypeName().toString() diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ambient.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ambient.ts deleted file mode 100644 index 0d4eaacd18f8..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/ambient.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare namespace Foo { - class C {} -} - -declare var x: Foo.C; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/dummy.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/dummy.ts deleted file mode 100644 index 089c0a05a539..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/dummy.ts +++ /dev/null @@ -1 +0,0 @@ -export var X = 5; \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/enums.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/enums.ts deleted file mode 100644 index b7a66b0b3cca..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/enums.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as dummylib from './dummy'; // ensure file is treated as a module - -namespace A { - export enum E { - x, y - } -} - -var x: A.E.x; -var y: A.E; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client-renamed.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client-renamed.ts deleted file mode 100644 index 2ed89259ea04..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client-renamed.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {Banana as X} from './export-class'; - -var x: X; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client.ts deleted file mode 100644 index 52d327402242..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class-client.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {Banana} from './export-class'; - -var x: Banana; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class.ts deleted file mode 100644 index 3e2fe9842823..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-class.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as dummylib from './dummy'; // ensure file is treated as a module - -export class Banana {} diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type-client.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type-client.ts deleted file mode 100644 index cfdec84c1254..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type-client.ts +++ /dev/null @@ -1,3 +0,0 @@ -import T from './export-default-type-client'; - -var x: T; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type.ts deleted file mode 100644 index 6313e8c0d160..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-default-type.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as dummylib from './dummy'; // ensure file is treated as a module - -class C {} - -export default C; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified-client.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified-client.ts deleted file mode 100644 index 1d39e3ef3ccb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified-client.ts +++ /dev/null @@ -1,3 +0,0 @@ -import AB from './export-qualified'; - -var x: AB.C; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts deleted file mode 100644 index 237131fbebd1..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-qualified.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as dummylib from './dummy'; // ensure file is treated as a module - -namespace A.B { - export class C {} -} - -export default A.B; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers-client.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers-client.ts deleted file mode 100644 index 937efff9e3ed..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers-client.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {N, C} from './export-specifiers'; -import D from './export-specifiers'; - -var x: N.C; -var y: D.C; -var z: C; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts deleted file mode 100644 index ad0a6f5da59f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/export-specifiers.ts +++ /dev/null @@ -1,13 +0,0 @@ -import * as dummylib from './dummy'; // ensure file is treated as a module - -namespace N { - export class C {} -} -namespace D { - export class C {} -} - -class C {} - -export {N, C}; -export default D; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/global.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/global.ts deleted file mode 100644 index 6ee6dbbd5afb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/global.ts +++ /dev/null @@ -1,5 +0,0 @@ -namespace Glob { - export class C {} -} - -var x : Glob.C; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/import-in-namespace.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/import-in-namespace.ts deleted file mode 100644 index 17ad81aae9cd..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/import-in-namespace.ts +++ /dev/null @@ -1,11 +0,0 @@ -namespace X { - export class C {} -} - -namespace Y { - import A = X; - import D = X.C; - - var foo : A.C; - var bar : D; -} diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces-client.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces-client.ts deleted file mode 100644 index 3ee30fb0abcb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces-client.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as ns from './namespaces' -import {G} from './namespaces' - -var x : ns.G.C; -var y : G.C; -var z : G.J.C; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces.ts deleted file mode 100644 index 10530e5789d3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/namespaces.ts +++ /dev/null @@ -1,43 +0,0 @@ -import * as dummylib from './dummy'; // ensure file is treated as a module - -namespace A { - namespace B { - export namespace Bx {} - } - export namespace C {;} -} - -namespace A { - namespace B { // distinct from previous `B` - export namespace Bx {} // distinct from previous `Bx` - } - export namespace C {;} // same as previous `C` -} - -export namespace D { - namespace E {;} - export namespace F {;} -} - -export namespace D { - namespace E {;} // distinct from previous `E` - export namespace F {;} // same as previous `F` -} - -export namespace G { - namespace H { - export namespace I {} - } - namespace H { // same as previous `H` - export namespace I {} // same as previous `I` - } - export class C {} - export namespace J { - export class C {} - } -} - -namespace X.Y.Z {;} -namespace X { - export namespace Y.Z {;} -} diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/otherlib.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/otherlib.ts deleted file mode 100644 index 3d11847269a0..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/otherlib.ts +++ /dev/null @@ -1 +0,0 @@ -export namespace D {;} diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all-client.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all-client.ts deleted file mode 100644 index c94b2a0f6fe6..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all-client.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as ns from './reexport-all' -import {G, D} from './reexport-all' - -var x : ns.G.C; -var y : G.C; -var z : G.J.C; - -var u: D.F; -var v: ns.D.F; - -var b: ns.Banana; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts deleted file mode 100644 index 314919e92e29..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-all.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './namespaces'; -export * from './export-class'; -export {D} from './otherlib'; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named-client.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named-client.ts deleted file mode 100644 index 1b33aa5aec0d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named-client.ts +++ /dev/null @@ -1,11 +0,0 @@ -import * as ns from './reexport-named' -import {G, X, Y} from './reexport-named' - -var x : ns.G.C; -var y : G.C; -var z : G.J.C; - -var u: X.F; -var v: ns.X.F; - -var bn: Y diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named.ts b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named.ts deleted file mode 100644 index 3398c598c6f0..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/reexport-named.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {G, D as X} from './namespaces'; -export {Banana as Y} from './export-class'; diff --git a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/tsconfig.json deleted file mode 100644 index 9e26dfeeb6e6..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/QualifiedNameResolution/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/main.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/main.ts deleted file mode 100644 index b512cdbf8aec..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/main.ts +++ /dev/null @@ -1,2 +0,0 @@ -import f = require("./tst"); -f("world"); diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.expected deleted file mode 100644 index f54412aae1ba..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.expected +++ /dev/null @@ -1,5 +0,0 @@ -| main.ts:1:8:1:8 | f | (x: string) => string | -| main.ts:1:20:1:26 | "./tst" | any | -| main.ts:2:1:2:1 | f | (x: string) => string | -| main.ts:2:1:2:10 | f("world") | string | -| main.ts:2:3:2:9 | "world" | "world" | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.ql deleted file mode 100644 index 574b7c54d4ef..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/test.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from Expr e -select e, e.getType() diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tsconfig.json deleted file mode 100644 index da105dfc1937..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true - }, - "include": ["."] -} diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tst.js b/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tst.js deleted file mode 100644 index 73496edb942b..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/AllowJs/tst.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @param {String} x - */ -module.exports = function(x) { - return 'Hello ' + x; -} diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected index 85cb86df42a2..6c41a8ed4625 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.expected @@ -1,4 +1 @@ -| MK in unknown scope | -| Mapped in test.ts | -| fn in test.ts | -| test.ts | +| Just test extraction | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ql index 3212e219ccd1..75d972c7ba1f 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ql +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ql @@ -1,4 +1,3 @@ import javascript -from CanonicalName name -select name +select "Just test extraction" diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected index 24fc12058753..6c41a8ed4625 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.expected @@ -1,7 +1 @@ -| "bar" in global scope | -| C in module 'bar' | -| Foo in global scope | -| Foo in tst.ts | -| module 'bar' | -| module 'foo' | -| tst.ts | +| Just test extraction | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.ql index 3212e219ccd1..75d972c7ba1f 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.ql +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ExportEqualsExpr/test.ql @@ -1,4 +1,3 @@ import javascript -from CanonicalName name -select name +select "Just test extraction" diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.expected deleted file mode 100644 index 0be0c0ae2510..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.expected +++ /dev/null @@ -1,15 +0,0 @@ -typeAliases -| tst.ts:1:8:1:41 | type Fo ... R \| A>; | -| tst.ts:3:8:3:42 | type Ba ... R, A]>; | -| tst.ts:5:8:5:47 | type Ba ... => A>; | -typeAliasType -| tst.ts:1:8:1:41 | type Fo ... R \| A>; | Foo | -| tst.ts:3:8:3:42 | type Ba ... R, A]>; | Bar | -| tst.ts:5:8:5:47 | type Ba ... => A>; | Baz | -getAliasedType -| Bar | () => Bar<[R, A]> | -| Bar<[R, A]> | () => Bar<[[R, A], A]> | -| Baz<(x: R) => A> | () => Baz<(x: (x: R) => A) => A> | -| Baz | () => Baz<(x: R) => A> | -| Foo | () => Foo | -| Foo | () => Foo | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.ql deleted file mode 100644 index 5fa86781b95e..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/test.ql +++ /dev/null @@ -1,8 +0,0 @@ -import javascript - -// The extractor would hang on this test case, it doesn't matter too much what the output of the test is. -query TypeAliasDeclaration typeAliases() { any() } - -query Type typeAliasType(TypeAliasDeclaration decl) { result = decl.getTypeName().getType() } - -query Type getAliasedType(TypeAliasReference ref) { result = ref.getAliasedType() } diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tsconfig.json deleted file mode 100644 index 82194fc7ab06..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "include": ["."] -} diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tst.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tst.ts deleted file mode 100644 index 92f63a28b967..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/GenericTypeAlias/tst.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type Foo = () => Foo; - -export type Bar = () => Bar<[R, A]>; - -export type Baz = () => Baz<(x: R) => A>; diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.expected index 756178b48073..6c41a8ed4625 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.expected @@ -1,3 +1 @@ -| bar.ts:1:10:1:10 | A | any | -| bar.ts:1:19:1:29 | "@blah/foo" | any | -| bar.ts:3:5:3:5 | x | A | +| Just test extraction | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.ql index d194e75f71ad..75d972c7ba1f 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.ql +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/ImportSelf/test.ql @@ -1,5 +1,3 @@ import javascript -// We're mainly testing extraction succeeds, so just test that some types are extracted. -from Expr e -select e, e.getType() +select "Just test extraction" diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.expected index e69de29bb2d1..6c41a8ed4625 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.expected @@ -0,0 +1 @@ +| Just test extraction | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.ql index 1d9bf4c9aae4..75d972c7ba1f 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.ql +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/RecursiveTypeAlias/Test.ql @@ -1,4 +1,3 @@ import javascript -from TypeAliasDeclaration decl -select decl, decl.getDefinition().getType() +select "Just test extraction" diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected index 603eaba0d279..6c41a8ed4625 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.expected @@ -1,2 +1 @@ -| Bar.Foo in global scope | Bar in global scope | -| fn in test.ts | test.ts | +| Just test extraction | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ql index b722f0aa2d68..75d972c7ba1f 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ql +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ql @@ -1,4 +1,3 @@ import javascript -from CanonicalName typename -select typename, typename.getParent() +select "Just test extraction" diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/node_modules/@types/foo/index.d.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/node_modules/@types/foo/index.d.ts deleted file mode 100644 index 2a567fce490c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/node_modules/@types/foo/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function foo(); diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.expected deleted file mode 100644 index bab38be1e231..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.expected +++ /dev/null @@ -1,4 +0,0 @@ -| test.ts:1:10:1:12 | foo | () => any | -| test.ts:1:21:1:25 | "foo" | any | -| test.ts:3:1:3:3 | foo | () => any | -| test.ts:3:1:3:5 | foo() | any | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ql deleted file mode 100644 index 574b7c54d4ef..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from Expr e -select e, e.getType() diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ts deleted file mode 100644 index c888001b9817..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/test.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { foo } from "foo"; - -foo(); diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/tsconfig.json deleted file mode 100644 index fa0f06c0ad8f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TraceResolution/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "include": ["."], - "compilerOptions": { - "traceResolution": true - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.expected b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.expected deleted file mode 100644 index 840934a14d38..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.expected +++ /dev/null @@ -1,3 +0,0 @@ -| tsconfig.json:0:0:0:0 | tsconfig.json | -| tst.ts:0:0:0:0 | tst.ts | -| typeroot.d.ts:0:0:0:0 | typeroot.d.ts | diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.ql b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.ql deleted file mode 100644 index c014228798bb..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/test.ql +++ /dev/null @@ -1,4 +0,0 @@ -import javascript - -from File file -select file diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tsconfig.json deleted file mode 100644 index cfce6655fd75..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "include": ["."], - "compilerOptions": { - "typeRoots": ["typeroot.d.ts"] - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tst.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tst.ts deleted file mode 100644 index 72a84dc0cde2..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/tst.ts +++ /dev/null @@ -1 +0,0 @@ -let x = 5; \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/typeroot.d.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/TypeRootFile/typeroot.d.ts deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/src/main.ts b/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/src/main.ts deleted file mode 100644 index 403c78e0d0d5..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function main(foo: string) { - let x = foo; - console.log(x); -} diff --git a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.expected b/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.expected deleted file mode 100644 index 47ea4115ae61..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.expected +++ /dev/null @@ -1,11 +0,0 @@ -types -| (...data: any[]) => void | -| (foo: string) => void | -| Console | -| any | -| any[] | -| string | -| void | -jsonFiles -| tsconfig.foo.json:0:0:0:0 | tsconfig.foo.json | -| tsconfig.json:0:0:0:0 | tsconfig.json | diff --git a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.ql b/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.ql deleted file mode 100644 index 25ace33c8a38..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/test.ql +++ /dev/null @@ -1,5 +0,0 @@ -import javascript - -query predicate types(Type type) { any() } - -query predicate jsonFiles(File file) { file.getExtension() = "json" } diff --git a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.foo.json b/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.foo.json deleted file mode 100644 index 658aef62ac0e..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.foo.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": [ - "src" - ], - "compilerOptions": { - "composite": true - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.json deleted file mode 100644 index b0f85a63f5f2..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TSConfigReferences/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "include": [], - "files": [], - "references": [ - { "path": "./tsconfig.foo.json" }, - ], -} diff --git a/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.expected b/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.expected index 061c2e241bce..7d3bd949b9ed 100644 --- a/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.expected +++ b/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.expected @@ -1,4 +1,3 @@ -#select | tst.ts:1:1:1:16 | type A = number; | tst.ts:1:6:1:6 | A | 0 | tst.ts:1:10:1:15 | number | | tst.ts:2:1:2:16 | type B = T[]; | tst.ts:2:6:2:6 | B | 1 | tst.ts:2:13:2:15 | T[] | | tst.ts:8:10:8:20 | type C = A; | tst.ts:8:15:8:15 | C | 0 | tst.ts:8:19:8:19 | A | @@ -7,38 +6,3 @@ | tst.ts:18:1:18:21 | type Un ... Union2; | tst.ts:18:6:18:11 | Union3 | 0 | tst.ts:18:15:18:20 | Union2 | | tst.ts:19:1:19:21 | type Un ... Union3; | tst.ts:19:6:19:11 | Union4 | 0 | tst.ts:19:15:19:20 | Union3 | | tst.ts:20:1:20:30 | type Un ... number; | tst.ts:20:6:20:11 | Union5 | 0 | tst.ts:20:15:20:29 | Union4 \| number | -rightHandSide -| tst.ts:1:1:1:16 | type A = number; | number | -| tst.ts:2:1:2:16 | type B = T[]; | T[] | -| tst.ts:8:10:8:20 | type C = A; | number | -| tst.ts:15:1:15:23 | type Un ... \| Two; | One \| Two | -| tst.ts:17:1:17:36 | type Un ... mber }; | Union & { x: number; } | -| tst.ts:18:1:18:21 | type Un ... Union2; | Union & { x: number; } | -| tst.ts:19:1:19:21 | type Un ... Union3; | Union & { x: number; } | -| tst.ts:20:1:20:30 | type Un ... number; | number \| Union2 | -getAliasedType -| B | T[] | -| B | number[] | -| Union | One \| Two | -| Union2 | Union & { x: number; } | -| Union5 | number \| Union2 | -getTypeArgument -| B | 0 | T | -| B | 0 | number | -unfold -| B | B | -| B | T[] | -| B | B | -| B | number[] | -| Union | One | -| Union | Two | -| Union | Union | -| Union2 | One | -| Union2 | Two | -| Union2 | Union2 | -| Union2 | { x: number; } | -| Union5 | One | -| Union5 | Two | -| Union5 | Union5 | -| Union5 | number | -| Union5 | { x: number; } | diff --git a/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.ql b/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.ql index e8133898ff23..2e1eae5f8dad 100644 --- a/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.ql +++ b/javascript/ql/test/library-tests/TypeScript/TypeAliases/TypeAliases.ql @@ -2,11 +2,3 @@ import javascript from TypeAliasDeclaration decl select decl, decl.getIdentifier(), decl.getNumTypeParameter(), decl.getDefinition() - -query Type rightHandSide(TypeAliasDeclaration decl) { result = decl.getDefinition().getType() } - -query Type getAliasedType(TypeAliasReference ref) { result = ref.getAliasedType() } - -query Type getTypeArgument(TypeAliasReference ref, int n) { result = ref.getTypeArgument(n) } - -query Type unfold(TypeAliasReference t) { result = t.unfold() } diff --git a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.expected b/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.expected deleted file mode 100644 index 8bdb4cbe3324..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.expected +++ /dev/null @@ -1,28 +0,0 @@ -canonicalTypeVariableType -| T | GenericMethods.T in global scope | -| T | Repeated.T in global scope | -lexicalTypeVariableType -| D | D | -| E | E | -| S | S | -signatureTypeParameters -| (x: D): D | 0 | 1 | D | no bound | -| (x: () => E): E | 0 | 1 | E | no bound | -| (x: E[] \| (() => E)): E | 0 | 1 | E | no bound | -| (x: E[]): E | 0 | 1 | E | no bound | -| (x: S, y: T[]): S | 0 | 1 | S | any[] | -| (x: S, y: S): S | 0 | 1 | S | no bound | -| (x: S, y: T): [S, T] | 0 | 1 | S | no bound | -thisType -| Apple.this | Apple | -| Banana.this | Banana | -typeVariableCanonicalNames -| T | GenericMethods.T in global scope | -| T | Repeated.T in global scope | -typeVariableDecl -| T | GenericMethods.T in global scope | tst.ts:22:26:22:26 | T | -| T | Repeated.T in global scope | tst.ts:3:20:3:20 | T | -| T | Repeated.T in global scope | tst.ts:7:20:7:20 | T | -typeVariableHost -| T | GenericMethods.T in global scope | GenericMethods in global scope | -| T | Repeated.T in global scope | Repeated in global scope | diff --git a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.ql b/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.ql deleted file mode 100644 index 3971f3d6437b..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tests.ql +++ /dev/null @@ -1,43 +0,0 @@ -import javascript - -query predicate canonicalTypeVariableType(CanonicalTypeVariableType type, CanonicalName name) { - type.getCanonicalName() = name -} - -query predicate lexicalTypeVariableType(LexicalTypeVariableType type, string name) { - type.getName() = name -} - -string getBound(CallSignatureType sig, int n) { - result = sig.getTypeParameterBound(n).toString() - or - not exists(sig.getTypeParameterBound(n)) and - result = "no bound" and - n = [0 .. sig.getNumTypeParameter() - 1] -} - -query predicate signatureTypeParameters( - CallSignatureType sig, int n, int numTypeParam, string paramName, string bound -) { - sig.getNumTypeParameter() = numTypeParam and - sig.getTypeParameterName(n) = paramName and - bound = getBound(sig, n) -} - -query predicate thisType(ThisType type, TypeReference enclosing) { - type.getEnclosingType() = enclosing -} - -query predicate typeVariableCanonicalNames(TypeVariableType type, CanonicalName name) { - type.getCanonicalName() = name -} - -query predicate typeVariableDecl(TypeVariableType tv, CanonicalName name, TypeParameter decl) { - tv.getCanonicalName() = name and - tv.getADeclaration() = decl -} - -query predicate typeVariableHost(TypeVariableType type, CanonicalName name, TypeName hostType) { - type.getCanonicalName() = name and - type.getHostType() = hostType -} diff --git a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tsconfig.json deleted file mode 100644 index 0967ef424bce..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tst.ts b/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tst.ts deleted file mode 100644 index ab3c2052c74f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/TypeVariableTypes/tst.ts +++ /dev/null @@ -1,34 +0,0 @@ -// There should only be one canonical type variable for `T` below. - -interface Repeated { - x: T; -} - -interface Repeated { - y: T; -} - - -function genericFunction(x: D): D { - return x; -} - -function overloaded(x: E[]): E; -function overloaded(x: () => E): E; -function overloaded(x: E[] | (() => E)): E { - return null; -} - -interface GenericMethods { - method(x: S, y: T[]): S; - method(x: S, y: T): [S, T]; - method(x: S, y: S): S; - method(x: any, y: any): any; -} - -interface Banana { - getThisBanana(): this; -} -interface Apple { - getThisApple(): this; -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/badTypes.ts b/javascript/ql/test/library-tests/TypeScript/Types/badTypes.ts deleted file mode 100644 index c8b819e1ee73..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/badTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Test case taken from babel: https://github.com/babel/babel/blob/main/packages/babel-parser/test/fixtures/typescript/regression/keyword-qualified-type-2/input.ts - -// These are valid TypeScript syntax (the parser doesn't produce any error), -// but they are always type-checking errors. -interface A extends this.B {} -type T = typeof var.bar; diff --git a/javascript/ql/test/library-tests/TypeScript/Types/boolean-type.ts b/javascript/ql/test/library-tests/TypeScript/Types/boolean-type.ts deleted file mode 100644 index f19b1d913c26..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/boolean-type.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as dummy from "./dummy"; - -var true1: true; -var true2: true | true; - -var false1: false; -var false2: false | false; - -var boolean1: boolean; -var boolean2: true | false; -var boolean3: false | true; - -var boolean4: boolean | boolean; -var boolean5: boolean | true; -var boolean6: false | boolean; diff --git a/javascript/ql/test/library-tests/TypeScript/Types/dummy.ts b/javascript/ql/test/library-tests/TypeScript/Types/dummy.ts deleted file mode 100644 index d36be434986c..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/dummy.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Dummy file to be imported so the other files are seen as modules. -export let x = 5; - -export let reg = /ab+c/; \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/Types/middle-rest.ts b/javascript/ql/test/library-tests/TypeScript/Types/middle-rest.ts deleted file mode 100644 index 4ca8c74d334d..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/middle-rest.ts +++ /dev/null @@ -1,3 +0,0 @@ -let foo: [boolean, ...string[], number]; - -foo = [true, "hello", 123]; \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected b/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected deleted file mode 100644 index 3860acf0afb3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.expected +++ /dev/null @@ -1,6042 +0,0 @@ -nodes -| badTypes.ts:5:1:5:29 | [InterfaceDeclaration,TypeDefinition] interfa ... is.B {} | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... is.B {} | -| badTypes.ts:5:1:5:29 | [InterfaceDeclaration,TypeDefinition] interfa ... is.B {} | semmle.order | 1 | -| badTypes.ts:5:11:5:11 | [Identifier] A | semmle.label | [Identifier] A | -| badTypes.ts:6:1:6:24 | [TypeAliasDeclaration,TypeDefinition] type T ... ar.bar; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type T ... ar.bar; | -| badTypes.ts:6:1:6:24 | [TypeAliasDeclaration,TypeDefinition] type T ... ar.bar; | semmle.order | 2 | -| badTypes.ts:6:6:6:6 | [Identifier] T | semmle.label | [Identifier] T | -| badTypes.ts:6:10:6:23 | [TypeofTypeExpr] typeof var.bar | semmle.label | [TypeofTypeExpr] typeof var.bar | -| badTypes.ts:6:17:6:19 | [LocalVarTypeAccess] var | semmle.label | [LocalVarTypeAccess] var | -| badTypes.ts:6:17:6:23 | [VarTypeAccess] var.bar | semmle.label | [VarTypeAccess] var.bar | -| badTypes.ts:6:21:6:23 | [Identifier] bar | semmle.label | [Identifier] bar | -| boolean-type.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| boolean-type.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 3 | -| boolean-type.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | -| boolean-type.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | -| boolean-type.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | -| boolean-type.ts:3:1:3:16 | [DeclStmt] var true1 = ... | semmle.label | [DeclStmt] var true1 = ... | -| boolean-type.ts:3:1:3:16 | [DeclStmt] var true1 = ... | semmle.order | 4 | -| boolean-type.ts:3:5:3:9 | [VarDecl] true1 | semmle.label | [VarDecl] true1 | -| boolean-type.ts:3:5:3:15 | [VariableDeclarator] true1: true | semmle.label | [VariableDeclarator] true1: true | -| boolean-type.ts:3:12:3:15 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| boolean-type.ts:4:1:4:23 | [DeclStmt] var true2 = ... | semmle.label | [DeclStmt] var true2 = ... | -| boolean-type.ts:4:1:4:23 | [DeclStmt] var true2 = ... | semmle.order | 5 | -| boolean-type.ts:4:5:4:9 | [VarDecl] true2 | semmle.label | [VarDecl] true2 | -| boolean-type.ts:4:5:4:22 | [VariableDeclarator] true2: true \| true | semmle.label | [VariableDeclarator] true2: true \| true | -| boolean-type.ts:4:12:4:15 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| boolean-type.ts:4:12:4:22 | [UnionTypeExpr] true \| true | semmle.label | [UnionTypeExpr] true \| true | -| boolean-type.ts:4:19:4:22 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| boolean-type.ts:6:1:6:18 | [DeclStmt] var false1 = ... | semmle.label | [DeclStmt] var false1 = ... | -| boolean-type.ts:6:1:6:18 | [DeclStmt] var false1 = ... | semmle.order | 6 | -| boolean-type.ts:6:5:6:10 | [VarDecl] false1 | semmle.label | [VarDecl] false1 | -| boolean-type.ts:6:5:6:17 | [VariableDeclarator] false1: false | semmle.label | [VariableDeclarator] false1: false | -| boolean-type.ts:6:13:6:17 | [LiteralTypeExpr] false | semmle.label | [LiteralTypeExpr] false | -| boolean-type.ts:7:1:7:26 | [DeclStmt] var false2 = ... | semmle.label | [DeclStmt] var false2 = ... | -| boolean-type.ts:7:1:7:26 | [DeclStmt] var false2 = ... | semmle.order | 7 | -| boolean-type.ts:7:5:7:10 | [VarDecl] false2 | semmle.label | [VarDecl] false2 | -| boolean-type.ts:7:5:7:25 | [VariableDeclarator] false2: ... \| false | semmle.label | [VariableDeclarator] false2: ... \| false | -| boolean-type.ts:7:13:7:17 | [LiteralTypeExpr] false | semmle.label | [LiteralTypeExpr] false | -| boolean-type.ts:7:13:7:25 | [UnionTypeExpr] false \| false | semmle.label | [UnionTypeExpr] false \| false | -| boolean-type.ts:7:21:7:25 | [LiteralTypeExpr] false | semmle.label | [LiteralTypeExpr] false | -| boolean-type.ts:9:1:9:22 | [DeclStmt] var boolean1 = ... | semmle.label | [DeclStmt] var boolean1 = ... | -| boolean-type.ts:9:1:9:22 | [DeclStmt] var boolean1 = ... | semmle.order | 8 | -| boolean-type.ts:9:5:9:12 | [VarDecl] boolean1 | semmle.label | [VarDecl] boolean1 | -| boolean-type.ts:9:5:9:21 | [VariableDeclarator] boolean1: boolean | semmle.label | [VariableDeclarator] boolean1: boolean | -| boolean-type.ts:9:15:9:21 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| boolean-type.ts:10:1:10:27 | [DeclStmt] var boolean2 = ... | semmle.label | [DeclStmt] var boolean2 = ... | -| boolean-type.ts:10:1:10:27 | [DeclStmt] var boolean2 = ... | semmle.order | 9 | -| boolean-type.ts:10:5:10:12 | [VarDecl] boolean2 | semmle.label | [VarDecl] boolean2 | -| boolean-type.ts:10:5:10:26 | [VariableDeclarator] boolean ... \| false | semmle.label | [VariableDeclarator] boolean ... \| false | -| boolean-type.ts:10:15:10:18 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| boolean-type.ts:10:15:10:26 | [UnionTypeExpr] true \| false | semmle.label | [UnionTypeExpr] true \| false | -| boolean-type.ts:10:22:10:26 | [LiteralTypeExpr] false | semmle.label | [LiteralTypeExpr] false | -| boolean-type.ts:11:1:11:27 | [DeclStmt] var boolean3 = ... | semmle.label | [DeclStmt] var boolean3 = ... | -| boolean-type.ts:11:1:11:27 | [DeclStmt] var boolean3 = ... | semmle.order | 10 | -| boolean-type.ts:11:5:11:12 | [VarDecl] boolean3 | semmle.label | [VarDecl] boolean3 | -| boolean-type.ts:11:5:11:26 | [VariableDeclarator] boolean ... \| true | semmle.label | [VariableDeclarator] boolean ... \| true | -| boolean-type.ts:11:15:11:19 | [LiteralTypeExpr] false | semmle.label | [LiteralTypeExpr] false | -| boolean-type.ts:11:15:11:26 | [UnionTypeExpr] false \| true | semmle.label | [UnionTypeExpr] false \| true | -| boolean-type.ts:11:23:11:26 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| boolean-type.ts:13:1:13:32 | [DeclStmt] var boolean4 = ... | semmle.label | [DeclStmt] var boolean4 = ... | -| boolean-type.ts:13:1:13:32 | [DeclStmt] var boolean4 = ... | semmle.order | 11 | -| boolean-type.ts:13:5:13:12 | [VarDecl] boolean4 | semmle.label | [VarDecl] boolean4 | -| boolean-type.ts:13:5:13:31 | [VariableDeclarator] boolean ... boolean | semmle.label | [VariableDeclarator] boolean ... boolean | -| boolean-type.ts:13:15:13:21 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| boolean-type.ts:13:15:13:31 | [UnionTypeExpr] boolean \| boolean | semmle.label | [UnionTypeExpr] boolean \| boolean | -| boolean-type.ts:13:25:13:31 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| boolean-type.ts:14:1:14:29 | [DeclStmt] var boolean5 = ... | semmle.label | [DeclStmt] var boolean5 = ... | -| boolean-type.ts:14:1:14:29 | [DeclStmt] var boolean5 = ... | semmle.order | 12 | -| boolean-type.ts:14:5:14:12 | [VarDecl] boolean5 | semmle.label | [VarDecl] boolean5 | -| boolean-type.ts:14:5:14:28 | [VariableDeclarator] boolean ... \| true | semmle.label | [VariableDeclarator] boolean ... \| true | -| boolean-type.ts:14:15:14:21 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| boolean-type.ts:14:15:14:28 | [UnionTypeExpr] boolean \| true | semmle.label | [UnionTypeExpr] boolean \| true | -| boolean-type.ts:14:25:14:28 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| boolean-type.ts:15:1:15:30 | [DeclStmt] var boolean6 = ... | semmle.label | [DeclStmt] var boolean6 = ... | -| boolean-type.ts:15:1:15:30 | [DeclStmt] var boolean6 = ... | semmle.order | 13 | -| boolean-type.ts:15:5:15:12 | [VarDecl] boolean6 | semmle.label | [VarDecl] boolean6 | -| boolean-type.ts:15:5:15:29 | [VariableDeclarator] boolean ... boolean | semmle.label | [VariableDeclarator] boolean ... boolean | -| boolean-type.ts:15:15:15:19 | [LiteralTypeExpr] false | semmle.label | [LiteralTypeExpr] false | -| boolean-type.ts:15:15:15:29 | [UnionTypeExpr] false \| boolean | semmle.label | [UnionTypeExpr] false \| boolean | -| boolean-type.ts:15:23:15:29 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| dummy.ts:2:1:2:17 | [ExportDeclaration] export let x = 5; | semmle.label | [ExportDeclaration] export let x = 5; | -| dummy.ts:2:1:2:17 | [ExportDeclaration] export let x = 5; | semmle.order | 14 | -| dummy.ts:2:8:2:17 | [DeclStmt] let x = ... | semmle.label | [DeclStmt] let x = ... | -| dummy.ts:2:12:2:12 | [VarDecl] x | semmle.label | [VarDecl] x | -| dummy.ts:2:12:2:16 | [VariableDeclarator] x = 5 | semmle.label | [VariableDeclarator] x = 5 | -| dummy.ts:2:16:2:16 | [Literal] 5 | semmle.label | [Literal] 5 | -| dummy.ts:4:1:4:24 | [ExportDeclaration] export ... /ab+c/; | semmle.label | [ExportDeclaration] export ... /ab+c/; | -| dummy.ts:4:1:4:24 | [ExportDeclaration] export ... /ab+c/; | semmle.order | 15 | -| dummy.ts:4:8:4:24 | [DeclStmt] let reg = ... | semmle.label | [DeclStmt] let reg = ... | -| dummy.ts:4:12:4:14 | [VarDecl] reg | semmle.label | [VarDecl] reg | -| dummy.ts:4:12:4:23 | [VariableDeclarator] reg = /ab+c/ | semmle.label | [VariableDeclarator] reg = /ab+c/ | -| dummy.ts:4:18:4:23 | [RegExpLiteral] /ab+c/ | semmle.label | [RegExpLiteral] /ab+c/ | -| dummy.ts:4:19:4:19 | [RegExpNormalConstant] a | semmle.label | [RegExpNormalConstant] a | -| dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | semmle.label | [RegExpSequence] ab+c | -| dummy.ts:4:20:4:20 | [RegExpNormalConstant] b | semmle.label | [RegExpNormalConstant] b | -| dummy.ts:4:20:4:21 | [RegExpPlus] b+ | semmle.label | [RegExpPlus] b+ | -| dummy.ts:4:22:4:22 | [RegExpNormalConstant] c | semmle.label | [RegExpNormalConstant] c | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Arguments) | semmle.label | (Arguments) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (Parameters) | semmle.label | (Parameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| file://:0:0:0:0 | (TypeParameters) | semmle.label | (TypeParameters) | -| middle-rest.ts:1:1:1:40 | [DeclStmt] let foo = ... | semmle.label | [DeclStmt] let foo = ... | -| middle-rest.ts:1:1:1:40 | [DeclStmt] let foo = ... | semmle.order | 16 | -| middle-rest.ts:1:5:1:7 | [VarDecl] foo | semmle.label | [VarDecl] foo | -| middle-rest.ts:1:5:1:39 | [VariableDeclarator] foo: [b ... number] | semmle.label | [VariableDeclarator] foo: [b ... number] | -| middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | semmle.label | [TupleTypeExpr] [boolea ... number] | -| middle-rest.ts:1:11:1:17 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| middle-rest.ts:1:20:1:30 | [RestTypeExpr] ...string[] | semmle.label | [RestTypeExpr] ...string[] | -| middle-rest.ts:1:23:1:28 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| middle-rest.ts:1:23:1:30 | [ArrayTypeExpr] string[] | semmle.label | [ArrayTypeExpr] string[] | -| middle-rest.ts:1:33:1:38 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| middle-rest.ts:3:1:3:3 | [VarRef] foo | semmle.label | [VarRef] foo | -| middle-rest.ts:3:1:3:26 | [AssignExpr] foo = [ ... ", 123] | semmle.label | [AssignExpr] foo = [ ... ", 123] | -| middle-rest.ts:3:1:3:27 | [ExprStmt] foo = [ ... , 123]; | semmle.label | [ExprStmt] foo = [ ... , 123]; | -| middle-rest.ts:3:1:3:27 | [ExprStmt] foo = [ ... , 123]; | semmle.order | 17 | -| middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | semmle.label | [ArrayExpr] [true, "hello", 123] | -| middle-rest.ts:3:8:3:11 | [Literal] true | semmle.label | [Literal] true | -| middle-rest.ts:3:14:3:20 | [Literal] "hello" | semmle.label | [Literal] "hello" | -| middle-rest.ts:3:23:3:25 | [Literal] 123 | semmle.label | [Literal] 123 | -| tsconfig.json:1:1:9:1 | [JsonObject] {compilerOptions: ...} | semmle.label | [JsonObject] {compilerOptions: ...} | -| tsconfig.json:1:1:9:1 | [JsonObject] {compilerOptions: ...} | semmle.order | 18 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | semmle.label | [JsonObject] {module: ...} | -| tsconfig.json:3:15:3:22 | [JsonString] "esnext" | semmle.label | [JsonString] "esnext" | -| tsconfig.json:4:15:4:22 | [JsonString] "esnext" | semmle.label | [JsonString] "esnext" | -| tsconfig.json:5:12:5:28 | [JsonArray] ["dom", ...] | semmle.label | [JsonArray] ["dom", ...] | -| tsconfig.json:5:13:5:17 | [JsonString] "dom" | semmle.label | [JsonString] "dom" | -| tsconfig.json:5:20:5:27 | [JsonString] "esnext" | semmle.label | [JsonString] "esnext" | -| tsconfig.json:6:26:6:29 | [JsonBoolean] true | semmle.label | [JsonBoolean] true | -| tsconfig.json:7:23:7:34 | [JsonArray] [".ios", ...] | semmle.label | [JsonArray] [".ios", ...] | -| tsconfig.json:7:24:7:29 | [JsonString] ".ios" | semmle.label | [JsonString] ".ios" | -| tsconfig.json:7:32:7:33 | [JsonString] "" | semmle.label | [JsonString] "" | -| tst.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| tst.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 19 | -| tst.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | -| tst.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | -| tst.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | -| tst.ts:3:1:3:19 | [DeclStmt] var numVar = ... | semmle.label | [DeclStmt] var numVar = ... | -| tst.ts:3:1:3:19 | [DeclStmt] var numVar = ... | semmle.order | 20 | -| tst.ts:3:5:3:10 | [VarDecl] numVar | semmle.label | [VarDecl] numVar | -| tst.ts:3:5:3:18 | [VariableDeclarator] numVar: number | semmle.label | [VariableDeclarator] numVar: number | -| tst.ts:3:13:3:18 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:5:1:5:18 | [DeclStmt] var num1 = ... | semmle.label | [DeclStmt] var num1 = ... | -| tst.ts:5:1:5:18 | [DeclStmt] var num1 = ... | semmle.order | 21 | -| tst.ts:5:5:5:8 | [VarDecl] num1 | semmle.label | [VarDecl] num1 | -| tst.ts:5:5:5:17 | [VariableDeclarator] num1 = numVar | semmle.label | [VariableDeclarator] num1 = numVar | -| tst.ts:5:12:5:17 | [VarRef] numVar | semmle.label | [VarRef] numVar | -| tst.ts:6:1:6:13 | [DeclStmt] var num2 = ... | semmle.label | [DeclStmt] var num2 = ... | -| tst.ts:6:1:6:13 | [DeclStmt] var num2 = ... | semmle.order | 22 | -| tst.ts:6:5:6:8 | [VarDecl] num2 | semmle.label | [VarDecl] num2 | -| tst.ts:6:5:6:12 | [VariableDeclarator] num2 = 5 | semmle.label | [VariableDeclarator] num2 = 5 | -| tst.ts:6:12:6:12 | [Literal] 5 | semmle.label | [Literal] 5 | -| tst.ts:7:1:7:23 | [DeclStmt] var num3 = ... | semmle.label | [DeclStmt] var num3 = ... | -| tst.ts:7:1:7:23 | [DeclStmt] var num3 = ... | semmle.order | 23 | -| tst.ts:7:5:7:8 | [VarDecl] num3 | semmle.label | [VarDecl] num3 | -| tst.ts:7:5:7:22 | [VariableDeclarator] num3 = num1 + num2 | semmle.label | [VariableDeclarator] num3 = num1 + num2 | -| tst.ts:7:12:7:15 | [VarRef] num1 | semmle.label | [VarRef] num1 | -| tst.ts:7:12:7:22 | [BinaryExpr] num1 + num2 | semmle.label | [BinaryExpr] num1 + num2 | -| tst.ts:7:19:7:22 | [VarRef] num2 | semmle.label | [VarRef] num2 | -| tst.ts:9:1:9:19 | [DeclStmt] var strVar = ... | semmle.label | [DeclStmt] var strVar = ... | -| tst.ts:9:1:9:19 | [DeclStmt] var strVar = ... | semmle.order | 24 | -| tst.ts:9:5:9:10 | [VarDecl] strVar | semmle.label | [VarDecl] strVar | -| tst.ts:9:5:9:18 | [VariableDeclarator] strVar: string | semmle.label | [VariableDeclarator] strVar: string | -| tst.ts:9:13:9:18 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:10:1:10:20 | [DeclStmt] var hello = ... | semmle.label | [DeclStmt] var hello = ... | -| tst.ts:10:1:10:20 | [DeclStmt] var hello = ... | semmle.order | 25 | -| tst.ts:10:5:10:9 | [VarDecl] hello | semmle.label | [VarDecl] hello | -| tst.ts:10:5:10:19 | [VariableDeclarator] hello = "hello" | semmle.label | [VariableDeclarator] hello = "hello" | -| tst.ts:10:13:10:19 | [Literal] "hello" | semmle.label | [Literal] "hello" | -| tst.ts:11:1:11:20 | [DeclStmt] var world = ... | semmle.label | [DeclStmt] var world = ... | -| tst.ts:11:1:11:20 | [DeclStmt] var world = ... | semmle.order | 26 | -| tst.ts:11:5:11:9 | [VarDecl] world | semmle.label | [VarDecl] world | -| tst.ts:11:5:11:19 | [VariableDeclarator] world = "world" | semmle.label | [VariableDeclarator] world = "world" | -| tst.ts:11:13:11:19 | [Literal] "world" | semmle.label | [Literal] "world" | -| tst.ts:12:1:12:30 | [DeclStmt] var msg = ... | semmle.label | [DeclStmt] var msg = ... | -| tst.ts:12:1:12:30 | [DeclStmt] var msg = ... | semmle.order | 27 | -| tst.ts:12:5:12:7 | [VarDecl] msg | semmle.label | [VarDecl] msg | -| tst.ts:12:5:12:29 | [VariableDeclarator] msg = h ... + world | semmle.label | [VariableDeclarator] msg = h ... + world | -| tst.ts:12:11:12:15 | [VarRef] hello | semmle.label | [VarRef] hello | -| tst.ts:12:11:12:21 | [BinaryExpr] hello + " " | semmle.label | [BinaryExpr] hello + " " | -| tst.ts:12:11:12:29 | [BinaryExpr] hello + " " + world | semmle.label | [BinaryExpr] hello + " " + world | -| tst.ts:12:19:12:21 | [Literal] " " | semmle.label | [Literal] " " | -| tst.ts:12:25:12:29 | [VarRef] world | semmle.label | [VarRef] world | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | semmle.label | [FunctionDeclStmt] functio ... + y; } | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | semmle.order | 28 | -| tst.ts:14:10:14:15 | [VarDecl] concat | semmle.label | [VarDecl] concat | -| tst.ts:14:17:14:17 | [SimpleParameter] x | semmle.label | [SimpleParameter] x | -| tst.ts:14:20:14:25 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:14:28:14:28 | [SimpleParameter] y | semmle.label | [SimpleParameter] y | -| tst.ts:14:31:14:36 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:14:40:14:45 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:14:47:14:63 | [BlockStmt] { return x + y; } | semmle.label | [BlockStmt] { return x + y; } | -| tst.ts:14:49:14:61 | [ReturnStmt] return x + y; | semmle.label | [ReturnStmt] return x + y; | -| tst.ts:14:56:14:56 | [VarRef] x | semmle.label | [VarRef] x | -| tst.ts:14:56:14:60 | [BinaryExpr] x + y | semmle.label | [BinaryExpr] x + y | -| tst.ts:14:60:14:60 | [VarRef] y | semmle.label | [VarRef] y | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | semmle.label | [FunctionDeclStmt] functio ... + y; } | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | semmle.order | 29 | -| tst.ts:16:10:16:12 | [VarDecl] add | semmle.label | [VarDecl] add | -| tst.ts:16:14:16:14 | [SimpleParameter] x | semmle.label | [SimpleParameter] x | -| tst.ts:16:17:16:22 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:16:25:16:25 | [SimpleParameter] y | semmle.label | [SimpleParameter] y | -| tst.ts:16:28:16:33 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:16:37:16:42 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:16:44:16:60 | [BlockStmt] { return x + y; } | semmle.label | [BlockStmt] { return x + y; } | -| tst.ts:16:46:16:58 | [ReturnStmt] return x + y; | semmle.label | [ReturnStmt] return x + y; | -| tst.ts:16:53:16:53 | [VarRef] x | semmle.label | [VarRef] x | -| tst.ts:16:53:16:57 | [BinaryExpr] x + y | semmle.label | [BinaryExpr] x + y | -| tst.ts:16:57:16:57 | [VarRef] y | semmle.label | [VarRef] y | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | semmle.label | [FunctionDeclStmt] functio ... + y; } | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | semmle.order | 30 | -| tst.ts:18:10:18:16 | [VarDecl] untyped | semmle.label | [VarDecl] untyped | -| tst.ts:18:18:18:18 | [SimpleParameter] x | semmle.label | [SimpleParameter] x | -| tst.ts:18:21:18:21 | [SimpleParameter] y | semmle.label | [SimpleParameter] y | -| tst.ts:18:24:18:40 | [BlockStmt] { return x + y; } | semmle.label | [BlockStmt] { return x + y; } | -| tst.ts:18:26:18:38 | [ReturnStmt] return x + y; | semmle.label | [ReturnStmt] return x + y; | -| tst.ts:18:33:18:33 | [VarRef] x | semmle.label | [VarRef] x | -| tst.ts:18:33:18:37 | [BinaryExpr] x + y | semmle.label | [BinaryExpr] x + y | -| tst.ts:18:37:18:37 | [VarRef] y | semmle.label | [VarRef] y | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | semmle.label | [FunctionDeclStmt] functio ... + y; } | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | semmle.order | 31 | -| tst.ts:20:10:20:21 | [VarDecl] partialTyped | semmle.label | [VarDecl] partialTyped | -| tst.ts:20:23:20:23 | [SimpleParameter] x | semmle.label | [SimpleParameter] x | -| tst.ts:20:26:20:26 | [SimpleParameter] y | semmle.label | [SimpleParameter] y | -| tst.ts:20:29:20:34 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:20:37:20:53 | [BlockStmt] { return x + y; } | semmle.label | [BlockStmt] { return x + y; } | -| tst.ts:20:39:20:51 | [ReturnStmt] return x + y; | semmle.label | [ReturnStmt] return x + y; | -| tst.ts:20:46:20:46 | [VarRef] x | semmle.label | [VarRef] x | -| tst.ts:20:46:20:50 | [BinaryExpr] x + y | semmle.label | [BinaryExpr] x + y | -| tst.ts:20:50:20:50 | [VarRef] y | semmle.label | [VarRef] y | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | semmle.label | [ForOfStmt] for (le ... 2]) {} | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | semmle.order | 32 | -| tst.ts:22:6:22:20 | [DeclStmt] let numFromLoop = ... | semmle.label | [DeclStmt] let numFromLoop = ... | -| tst.ts:22:10:22:20 | [VarDecl] numFromLoop | semmle.label | [VarDecl] numFromLoop | -| tst.ts:22:10:22:20 | [VariableDeclarator] numFromLoop | semmle.label | [VariableDeclarator] numFromLoop | -| tst.ts:22:25:22:30 | [ArrayExpr] [1, 2] | semmle.label | [ArrayExpr] [1, 2] | -| tst.ts:22:26:22:26 | [Literal] 1 | semmle.label | [Literal] 1 | -| tst.ts:22:29:22:29 | [Literal] 2 | semmle.label | [Literal] 2 | -| tst.ts:22:33:22:34 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:24:1:24:20 | [DeclStmt] let array = ... | semmle.label | [DeclStmt] let array = ... | -| tst.ts:24:1:24:20 | [DeclStmt] let array = ... | semmle.order | 33 | -| tst.ts:24:5:24:9 | [VarDecl] array | semmle.label | [VarDecl] array | -| tst.ts:24:5:24:19 | [VariableDeclarator] array: number[] | semmle.label | [VariableDeclarator] array: number[] | -| tst.ts:24:12:24:17 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:24:12:24:19 | [ArrayTypeExpr] number[] | semmle.label | [ArrayTypeExpr] number[] | -| tst.ts:26:1:26:25 | [DeclStmt] let voidType = ... | semmle.label | [DeclStmt] let voidType = ... | -| tst.ts:26:1:26:25 | [DeclStmt] let voidType = ... | semmle.order | 34 | -| tst.ts:26:5:26:12 | [VarDecl] voidType | semmle.label | [VarDecl] voidType | -| tst.ts:26:5:26:24 | [VariableDeclarator] voidType: () => void | semmle.label | [VariableDeclarator] voidType: () => void | -| tst.ts:26:15:26:24 | [FunctionExpr] () => void | semmle.label | [FunctionExpr] () => void | -| tst.ts:26:15:26:24 | [FunctionTypeExpr] () => void | semmle.label | [FunctionTypeExpr] () => void | -| tst.ts:26:21:26:24 | [KeywordTypeExpr] void | semmle.label | [KeywordTypeExpr] void | -| tst.ts:27:1:27:29 | [DeclStmt] let undefinedType = ... | semmle.label | [DeclStmt] let undefinedType = ... | -| tst.ts:27:1:27:29 | [DeclStmt] let undefinedType = ... | semmle.order | 35 | -| tst.ts:27:5:27:17 | [VarDecl] undefinedType | semmle.label | [VarDecl] undefinedType | -| tst.ts:27:5:27:28 | [VariableDeclarator] undefin ... defined | semmle.label | [VariableDeclarator] undefin ... defined | -| tst.ts:27:20:27:28 | [KeywordTypeExpr] undefined | semmle.label | [KeywordTypeExpr] undefined | -| tst.ts:28:1:28:26 | [DeclStmt] let nullType = ... | semmle.label | [DeclStmt] let nullType = ... | -| tst.ts:28:1:28:26 | [DeclStmt] let nullType = ... | semmle.order | 36 | -| tst.ts:28:5:28:12 | [VarDecl] nullType | semmle.label | [VarDecl] nullType | -| tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | semmle.label | [VariableDeclarator] nullTyp ... = null | -| tst.ts:28:15:28:18 | [KeywordTypeExpr] null | semmle.label | [KeywordTypeExpr] null | -| tst.ts:28:22:28:25 | [Literal] null | semmle.label | [Literal] null | -| tst.ts:29:1:29:27 | [DeclStmt] let neverType = ... | semmle.label | [DeclStmt] let neverType = ... | -| tst.ts:29:1:29:27 | [DeclStmt] let neverType = ... | semmle.order | 37 | -| tst.ts:29:5:29:13 | [VarDecl] neverType | semmle.label | [VarDecl] neverType | -| tst.ts:29:5:29:26 | [VariableDeclarator] neverTy ... > never | semmle.label | [VariableDeclarator] neverTy ... > never | -| tst.ts:29:16:29:26 | [FunctionExpr] () => never | semmle.label | [FunctionExpr] () => never | -| tst.ts:29:16:29:26 | [FunctionTypeExpr] () => never | semmle.label | [FunctionTypeExpr] () => never | -| tst.ts:29:22:29:26 | [KeywordTypeExpr] never | semmle.label | [KeywordTypeExpr] never | -| tst.ts:30:1:30:23 | [DeclStmt] let symbolType = ... | semmle.label | [DeclStmt] let symbolType = ... | -| tst.ts:30:1:30:23 | [DeclStmt] let symbolType = ... | semmle.order | 38 | -| tst.ts:30:5:30:14 | [VarDecl] symbolType | semmle.label | [VarDecl] symbolType | -| tst.ts:30:5:30:22 | [VariableDeclarator] symbolType: symbol | semmle.label | [VariableDeclarator] symbolType: symbol | -| tst.ts:30:17:30:22 | [KeywordTypeExpr] symbol | semmle.label | [KeywordTypeExpr] symbol | -| tst.ts:31:1:31:45 | [DeclStmt] const uniqueSymbolType = ... | semmle.label | [DeclStmt] const uniqueSymbolType = ... | -| tst.ts:31:1:31:45 | [DeclStmt] const uniqueSymbolType = ... | semmle.order | 39 | -| tst.ts:31:7:31:22 | [VarDecl] uniqueSymbolType | semmle.label | [VarDecl] uniqueSymbolType | -| tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | semmle.label | [VariableDeclarator] uniqueS ... = null | -| tst.ts:31:25:31:37 | [KeywordTypeExpr] unique symbol | semmle.label | [KeywordTypeExpr] unique symbol | -| tst.ts:31:41:31:44 | [Literal] null | semmle.label | [Literal] null | -| tst.ts:32:1:32:23 | [DeclStmt] let objectType = ... | semmle.label | [DeclStmt] let objectType = ... | -| tst.ts:32:1:32:23 | [DeclStmt] let objectType = ... | semmle.order | 40 | -| tst.ts:32:5:32:14 | [VarDecl] objectType | semmle.label | [VarDecl] objectType | -| tst.ts:32:5:32:22 | [VariableDeclarator] objectType: object | semmle.label | [VariableDeclarator] objectType: object | -| tst.ts:32:17:32:22 | [KeywordTypeExpr] object | semmle.label | [KeywordTypeExpr] object | -| tst.ts:33:1:33:39 | [DeclStmt] let intersection = ... | semmle.label | [DeclStmt] let intersection = ... | -| tst.ts:33:1:33:39 | [DeclStmt] let intersection = ... | semmle.order | 41 | -| tst.ts:33:5:33:16 | [VarDecl] intersection | semmle.label | [VarDecl] intersection | -| tst.ts:33:5:33:38 | [VariableDeclarator] interse ... string} | semmle.label | [VariableDeclarator] interse ... string} | -| tst.ts:33:19:33:24 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:33:19:33:38 | [IntersectionTypeExpr] string & {x: string} | semmle.label | [IntersectionTypeExpr] string & {x: string} | -| tst.ts:33:28:33:38 | [InterfaceTypeExpr] {x: string} | semmle.label | [InterfaceTypeExpr] {x: string} | -| tst.ts:33:29:33:29 | [Label] x | semmle.label | [Label] x | -| tst.ts:33:29:33:37 | [FieldDeclaration] x: string | semmle.label | [FieldDeclaration] x: string | -| tst.ts:33:32:33:37 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:34:1:34:28 | [DeclStmt] let tuple = ... | semmle.label | [DeclStmt] let tuple = ... | -| tst.ts:34:1:34:28 | [DeclStmt] let tuple = ... | semmle.order | 42 | -| tst.ts:34:5:34:9 | [VarDecl] tuple | semmle.label | [VarDecl] tuple | -| tst.ts:34:5:34:27 | [VariableDeclarator] tuple: ... string] | semmle.label | [VariableDeclarator] tuple: ... string] | -| tst.ts:34:12:34:27 | [TupleTypeExpr] [number, string] | semmle.label | [TupleTypeExpr] [number, string] | -| tst.ts:34:13:34:18 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:34:21:34:26 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:36:1:36:56 | [DeclStmt] let tupleWithOptionalElement = ... | semmle.label | [DeclStmt] let tupleWithOptionalElement = ... | -| tst.ts:36:1:36:56 | [DeclStmt] let tupleWithOptionalElement = ... | semmle.order | 43 | -| tst.ts:36:5:36:28 | [VarDecl] tupleWithOptionalElement | semmle.label | [VarDecl] tupleWithOptionalElement | -| tst.ts:36:5:36:55 | [VariableDeclarator] tupleWi ... umber?] | semmle.label | [VariableDeclarator] tupleWi ... umber?] | -| tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | semmle.label | [TupleTypeExpr] [number ... umber?] | -| tst.ts:36:32:36:37 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:36:40:36:45 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:36:48:36:53 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:36:48:36:54 | [OptionalTypeExpr] number? | semmle.label | [OptionalTypeExpr] number? | -| tst.ts:37:1:37:19 | [DeclStmt] let emptyTuple = ... | semmle.label | [DeclStmt] let emptyTuple = ... | -| tst.ts:37:1:37:19 | [DeclStmt] let emptyTuple = ... | semmle.order | 44 | -| tst.ts:37:5:37:14 | [VarDecl] emptyTuple | semmle.label | [VarDecl] emptyTuple | -| tst.ts:37:5:37:18 | [VariableDeclarator] emptyTuple: [] | semmle.label | [VariableDeclarator] emptyTuple: [] | -| tst.ts:37:17:37:18 | [TupleTypeExpr] [] | semmle.label | [TupleTypeExpr] [] | -| tst.ts:38:1:38:48 | [DeclStmt] let tupleWithRestElement = ... | semmle.label | [DeclStmt] let tupleWithRestElement = ... | -| tst.ts:38:1:38:48 | [DeclStmt] let tupleWithRestElement = ... | semmle.order | 45 | -| tst.ts:38:5:38:24 | [VarDecl] tupleWithRestElement | semmle.label | [VarDecl] tupleWithRestElement | -| tst.ts:38:5:38:47 | [VariableDeclarator] tupleWi ... ring[]] | semmle.label | [VariableDeclarator] tupleWi ... ring[]] | -| tst.ts:38:27:38:47 | [TupleTypeExpr] [number ... ring[]] | semmle.label | [TupleTypeExpr] [number ... ring[]] | -| tst.ts:38:28:38:33 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:38:36:38:46 | [RestTypeExpr] ...string[] | semmle.label | [RestTypeExpr] ...string[] | -| tst.ts:38:39:38:44 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:38:39:38:46 | [ArrayTypeExpr] string[] | semmle.label | [ArrayTypeExpr] string[] | -| tst.ts:39:1:39:69 | [DeclStmt] let tupleWithOptionalAndRestElements = ... | semmle.label | [DeclStmt] let tupleWithOptionalAndRestElements = ... | -| tst.ts:39:1:39:69 | [DeclStmt] let tupleWithOptionalAndRestElements = ... | semmle.order | 46 | -| tst.ts:39:5:39:36 | [VarDecl] tupleWithOptionalAndRestElements | semmle.label | [VarDecl] tupleWithOptionalAndRestElements | -| tst.ts:39:5:39:68 | [VariableDeclarator] tupleWi ... mber[]] | semmle.label | [VariableDeclarator] tupleWi ... mber[]] | -| tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | semmle.label | [TupleTypeExpr] [number ... mber[]] | -| tst.ts:39:40:39:45 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:39:48:39:53 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:39:48:39:54 | [OptionalTypeExpr] string? | semmle.label | [OptionalTypeExpr] string? | -| tst.ts:39:57:39:67 | [RestTypeExpr] ...number[] | semmle.label | [RestTypeExpr] ...number[] | -| tst.ts:39:60:39:65 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:39:60:39:67 | [ArrayTypeExpr] number[] | semmle.label | [ArrayTypeExpr] number[] | -| tst.ts:40:1:40:25 | [DeclStmt] let unknownType = ... | semmle.label | [DeclStmt] let unknownType = ... | -| tst.ts:40:1:40:25 | [DeclStmt] let unknownType = ... | semmle.order | 47 | -| tst.ts:40:5:40:15 | [VarDecl] unknownType | semmle.label | [VarDecl] unknownType | -| tst.ts:40:5:40:24 | [VariableDeclarator] unknownType: unknown | semmle.label | [VariableDeclarator] unknownType: unknown | -| tst.ts:40:18:40:24 | [KeywordTypeExpr] unknown | semmle.label | [KeywordTypeExpr] unknown | -| tst.ts:42:1:42:40 | [DeclStmt] let constArrayLiteral = ... | semmle.label | [DeclStmt] let constArrayLiteral = ... | -| tst.ts:42:1:42:40 | [DeclStmt] let constArrayLiteral = ... | semmle.order | 48 | -| tst.ts:42:5:42:21 | [VarDecl] constArrayLiteral | semmle.label | [VarDecl] constArrayLiteral | -| tst.ts:42:5:42:39 | [VariableDeclarator] constAr ... s const | semmle.label | [VariableDeclarator] constAr ... s const | -| tst.ts:42:25:42:30 | [ArrayExpr] [1, 2] | semmle.label | [ArrayExpr] [1, 2] | -| tst.ts:42:25:42:39 | [TypeAssertion] [1, 2] as const | semmle.label | [TypeAssertion] [1, 2] as const | -| tst.ts:42:26:42:26 | [Literal] 1 | semmle.label | [Literal] 1 | -| tst.ts:42:29:42:29 | [Literal] 2 | semmle.label | [Literal] 2 | -| tst.ts:42:35:42:39 | [KeywordTypeExpr] const | semmle.label | [KeywordTypeExpr] const | -| tst.ts:43:1:43:49 | [DeclStmt] let constObjectLiteral = ... | semmle.label | [DeclStmt] let constObjectLiteral = ... | -| tst.ts:43:1:43:49 | [DeclStmt] let constObjectLiteral = ... | semmle.order | 49 | -| tst.ts:43:5:43:22 | [VarDecl] constObjectLiteral | semmle.label | [VarDecl] constObjectLiteral | -| tst.ts:43:5:43:48 | [VariableDeclarator] constOb ... s const | semmle.label | [VariableDeclarator] constOb ... s const | -| tst.ts:43:26:43:39 | [ObjectExpr] {foo: ...} | semmle.label | [ObjectExpr] {foo: ...} | -| tst.ts:43:26:43:48 | [TypeAssertion] { foo: ... s const | semmle.label | [TypeAssertion] { foo: ... s const | -| tst.ts:43:28:43:30 | [Label] foo | semmle.label | [Label] foo | -| tst.ts:43:28:43:37 | [Property] foo: "foo" | semmle.label | [Property] foo: "foo" | -| tst.ts:43:33:43:37 | [Literal] "foo" | semmle.label | [Literal] "foo" | -| tst.ts:43:44:43:48 | [KeywordTypeExpr] const | semmle.label | [KeywordTypeExpr] const | -| tst.ts:46:1:51:1 | [TryStmt] try { } ... ; } } | semmle.label | [TryStmt] try { } ... ; } } | -| tst.ts:46:1:51:1 | [TryStmt] try { } ... ; } } | semmle.order | 50 | -| tst.ts:46:5:46:7 | [BlockStmt] { } | semmle.label | [BlockStmt] { } | -| tst.ts:47:1:51:1 | [CatchClause] catch ( ... ; } } | semmle.label | [CatchClause] catch ( ... ; } } | -| tst.ts:47:8:47:8 | [SimpleParameter] e | semmle.label | [SimpleParameter] e | -| tst.ts:47:20:51:1 | [BlockStmt] { if ... ; } } | semmle.label | [BlockStmt] { if ... ; } } | -| tst.ts:48:3:50:3 | [IfStmt] if (typ ... e; } | semmle.label | [IfStmt] if (typ ... e; } | -| tst.ts:48:7:48:14 | [UnaryExpr] typeof e | semmle.label | [UnaryExpr] typeof e | -| tst.ts:48:7:48:27 | [BinaryExpr] typeof ... string" | semmle.label | [BinaryExpr] typeof ... string" | -| tst.ts:48:14:48:14 | [VarRef] e | semmle.label | [VarRef] e | -| tst.ts:48:20:48:27 | [Literal] "string" | semmle.label | [Literal] "string" | -| tst.ts:48:30:50:3 | [BlockStmt] { ... e; } | semmle.label | [BlockStmt] { ... e; } | -| tst.ts:49:7:49:25 | [DeclStmt] let b = ... | semmle.label | [DeclStmt] let b = ... | -| tst.ts:49:11:49:11 | [VarDecl] b | semmle.label | [VarDecl] b | -| tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | semmle.label | [VariableDeclarator] b : string = e | -| tst.ts:49:15:49:20 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:49:24:49:24 | [VarRef] e | semmle.label | [VarRef] e | -| tst.ts:54:1:56:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | -| tst.ts:54:1:56:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | semmle.order | 51 | -| tst.ts:54:11:54:26 | [Identifier] NonAbstractDummy | semmle.label | [Identifier] NonAbstractDummy | -| tst.ts:55:3:55:9 | [Label] getArea | semmle.label | [Label] getArea | -| tst.ts:55:3:55:20 | [FunctionExpr] getArea(): number; | semmle.label | [FunctionExpr] getArea(): number; | -| tst.ts:55:3:55:20 | [MethodSignature] getArea(): number; | semmle.label | [MethodSignature] getArea(): number; | -| tst.ts:55:14:55:19 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:58:1:60:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | -| tst.ts:58:1:60:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | semmle.order | 52 | -| tst.ts:58:11:58:17 | [Identifier] HasArea | semmle.label | [Identifier] HasArea | -| tst.ts:59:3:59:9 | [Label] getArea | semmle.label | [Label] getArea | -| tst.ts:59:3:59:20 | [FunctionExpr] getArea(): number; | semmle.label | [FunctionExpr] getArea(): number; | -| tst.ts:59:3:59:20 | [MethodSignature] getArea(): number; | semmle.label | [MethodSignature] getArea(): number; | -| tst.ts:59:14:59:19 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:63:1:63:45 | [DeclStmt] let Ctor = ... | semmle.label | [DeclStmt] let Ctor = ... | -| tst.ts:63:1:63:45 | [DeclStmt] let Ctor = ... | semmle.order | 53 | -| tst.ts:63:5:63:8 | [VarDecl] Ctor | semmle.label | [VarDecl] Ctor | -| tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | semmle.label | [VariableDeclarator] Ctor: a ... = Shape | -| tst.ts:63:11:63:36 | [FunctionExpr] abstrac ... HasArea | semmle.label | [FunctionExpr] abstrac ... HasArea | -| tst.ts:63:11:63:36 | [FunctionTypeExpr] abstrac ... HasArea | semmle.label | [FunctionTypeExpr] abstrac ... HasArea | -| tst.ts:63:30:63:36 | [LocalTypeAccess] HasArea | semmle.label | [LocalTypeAccess] HasArea | -| tst.ts:63:40:63:44 | [VarRef] Shape | semmle.label | [VarRef] Shape | -| tst.ts:65:1:65:54 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | -| tst.ts:65:1:65:54 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | semmle.order | 54 | -| tst.ts:65:6:65:12 | [Identifier] MyUnion | semmle.label | [Identifier] MyUnion | -| tst.ts:65:16:65:30 | [InterfaceTypeExpr] {myUnion: true} | semmle.label | [InterfaceTypeExpr] {myUnion: true} | -| tst.ts:65:16:65:53 | [UnionTypeExpr] {myUnio ... : true} | semmle.label | [UnionTypeExpr] {myUnio ... : true} | -| tst.ts:65:17:65:23 | [Label] myUnion | semmle.label | [Label] myUnion | -| tst.ts:65:17:65:29 | [FieldDeclaration] myUnion: true | semmle.label | [FieldDeclaration] myUnion: true | -| tst.ts:65:26:65:29 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| tst.ts:65:34:65:53 | [InterfaceTypeExpr] {stillMyUnion: true} | semmle.label | [InterfaceTypeExpr] {stillMyUnion: true} | -| tst.ts:65:35:65:46 | [Label] stillMyUnion | semmle.label | [Label] stillMyUnion | -| tst.ts:65:35:65:52 | [FieldDeclaration] stillMyUnion: true | semmle.label | [FieldDeclaration] stillMyUnion: true | -| tst.ts:65:49:65:52 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| tst.ts:66:1:66:38 | [DeclStmt] let union1 = ... | semmle.label | [DeclStmt] let union1 = ... | -| tst.ts:66:1:66:38 | [DeclStmt] let union1 = ... | semmle.order | 55 | -| tst.ts:66:5:66:10 | [VarDecl] union1 | semmle.label | [VarDecl] union1 | -| tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | semmle.label | [VariableDeclarator] union1: ... : true} | -| tst.ts:66:13:66:19 | [LocalTypeAccess] MyUnion | semmle.label | [LocalTypeAccess] MyUnion | -| tst.ts:66:23:66:37 | [ObjectExpr] {myUnion: ...} | semmle.label | [ObjectExpr] {myUnion: ...} | -| tst.ts:66:24:66:30 | [Label] myUnion | semmle.label | [Label] myUnion | -| tst.ts:66:24:66:36 | [Property] myUnion: true | semmle.label | [Property] myUnion: true | -| tst.ts:66:33:66:36 | [Literal] true | semmle.label | [Literal] true | -| tst.ts:68:1:68:49 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | -| tst.ts:68:1:68:49 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | semmle.order | 56 | -| tst.ts:68:6:68:13 | [Identifier] MyUnion2 | semmle.label | [Identifier] MyUnion2 | -| tst.ts:68:17:68:23 | [LocalTypeAccess] MyUnion | semmle.label | [LocalTypeAccess] MyUnion | -| tst.ts:68:17:68:48 | [UnionTypeExpr] MyUnion ... : true} | semmle.label | [UnionTypeExpr] MyUnion ... : true} | -| tst.ts:68:27:68:48 | [InterfaceTypeExpr] {yetAno ... : true} | semmle.label | [InterfaceTypeExpr] {yetAno ... : true} | -| tst.ts:68:28:68:41 | [Label] yetAnotherType | semmle.label | [Label] yetAnotherType | -| tst.ts:68:28:68:47 | [FieldDeclaration] yetAnotherType: true | semmle.label | [FieldDeclaration] yetAnotherType: true | -| tst.ts:68:44:68:47 | [LiteralTypeExpr] true | semmle.label | [LiteralTypeExpr] true | -| tst.ts:69:1:69:46 | [DeclStmt] let union2 = ... | semmle.label | [DeclStmt] let union2 = ... | -| tst.ts:69:1:69:46 | [DeclStmt] let union2 = ... | semmle.order | 57 | -| tst.ts:69:5:69:10 | [VarDecl] union2 | semmle.label | [VarDecl] union2 | -| tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | semmle.label | [VariableDeclarator] union2: ... : true} | -| tst.ts:69:13:69:20 | [LocalTypeAccess] MyUnion2 | semmle.label | [LocalTypeAccess] MyUnion2 | -| tst.ts:69:24:69:45 | [ObjectExpr] {yetAnotherType: ...} | semmle.label | [ObjectExpr] {yetAnotherType: ...} | -| tst.ts:69:25:69:38 | [Label] yetAnotherType | semmle.label | [Label] yetAnotherType | -| tst.ts:69:25:69:44 | [Property] yetAnotherType: true | semmle.label | [Property] yetAnotherType: true | -| tst.ts:69:41:69:44 | [Literal] true | semmle.label | [Literal] true | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | semmle.label | [NamespaceDeclaration] module ... } } | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | semmle.order | 58 | -| tst.ts:71:8:71:11 | [VarDecl] TS43 | semmle.label | [VarDecl] TS43 | -| tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | -| tst.ts:73:13:73:18 | [Identifier] ThingI | semmle.label | [Identifier] ThingI | -| tst.ts:74:5:74:22 | [FunctionExpr] get size(): number | semmle.label | [FunctionExpr] get size(): number | -| tst.ts:74:5:74:22 | [GetterMethodSignature] get size(): number | semmle.label | [GetterMethodSignature] get size(): number | -| tst.ts:74:9:74:12 | [Label] size | semmle.label | [Label] size | -| tst.ts:74:17:74:22 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:75:5:75:47 | [FunctionExpr] set siz ... olean); | semmle.label | [FunctionExpr] set siz ... olean); | -| tst.ts:75:5:75:47 | [SetterMethodSignature] set siz ... olean); | semmle.label | [SetterMethodSignature] set siz ... olean); | -| tst.ts:75:9:75:12 | [Label] size | semmle.label | [Label] size | -| tst.ts:75:14:75:18 | [SimpleParameter] value | semmle.label | [SimpleParameter] value | -| tst.ts:75:21:75:26 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | semmle.label | [UnionTypeExpr] number ... boolean | -| tst.ts:75:30:75:35 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:75:39:75:45 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| tst.ts:78:3:88:3 | [ExportDeclaration] export ... } } | semmle.label | [ExportDeclaration] export ... } } | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | semmle.label | [ClassDefinition,TypeDefinition] class T ... } } | -| tst.ts:78:16:78:20 | [VarDecl] Thing | semmle.label | [VarDecl] Thing | -| tst.ts:78:33:78:38 | [LocalTypeAccess] ThingI | semmle.label | [LocalTypeAccess] ThingI | -| tst.ts:78:40:78:39 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:78:40:78:39 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| tst.ts:78:40:78:39 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| tst.ts:78:40:78:39 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:79:5:79:9 | [Label] #size | semmle.label | [Label] #size | -| tst.ts:79:5:79:14 | [FieldDeclaration] #size = 0; | semmle.label | [FieldDeclaration] #size = 0; | -| tst.ts:79:13:79:13 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:81:5:83:5 | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | semmle.label | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | -| tst.ts:81:5:83:5 | [FunctionExpr] get siz ... ; } | semmle.label | [FunctionExpr] get siz ... ; } | -| tst.ts:81:9:81:12 | [Label] size | semmle.label | [Label] size | -| tst.ts:81:17:81:22 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:81:24:83:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:82:7:82:24 | [ReturnStmt] return this.#size; | semmle.label | [ReturnStmt] return this.#size; | -| tst.ts:82:14:82:17 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:82:14:82:23 | [DotExpr] this.#size | semmle.label | [DotExpr] this.#size | -| tst.ts:82:19:82:23 | [Label] #size | semmle.label | [Label] #size | -| tst.ts:85:5:87:5 | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | semmle.label | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | -| tst.ts:85:5:87:5 | [FunctionExpr] set siz ... ; } | semmle.label | [FunctionExpr] set siz ... ; } | -| tst.ts:85:9:85:12 | [Label] size | semmle.label | [Label] size | -| tst.ts:85:14:85:18 | [SimpleParameter] value | semmle.label | [SimpleParameter] value | -| tst.ts:85:21:85:26 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | semmle.label | [UnionTypeExpr] string ... boolean | -| tst.ts:85:30:85:35 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:85:39:85:45 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| tst.ts:85:48:87:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:86:7:86:10 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:86:7:86:16 | [DotExpr] this.#size | semmle.label | [DotExpr] this.#size | -| tst.ts:86:7:86:32 | [AssignExpr] this.#s ... (value) | semmle.label | [AssignExpr] this.#s ... (value) | -| tst.ts:86:7:86:33 | [ExprStmt] this.#s ... value); | semmle.label | [ExprStmt] this.#s ... value); | -| tst.ts:86:12:86:16 | [Label] #size | semmle.label | [Label] #size | -| tst.ts:86:20:86:25 | [VarRef] Number | semmle.label | [VarRef] Number | -| tst.ts:86:20:86:32 | [CallExpr] Number(value) | semmle.label | [CallExpr] Number(value) | -| tst.ts:86:27:86:31 | [VarRef] value | semmle.label | [VarRef] value | -| tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | semmle.label | [ClassDefinition,TypeDefinition] class S ... } } | -| tst.ts:91:9:91:13 | [VarDecl] Super | semmle.label | [VarDecl] Super | -| tst.ts:91:15:91:14 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:91:15:91:14 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| tst.ts:91:15:91:14 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| tst.ts:91:15:91:14 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:92:5:92:10 | [Label] random | semmle.label | [Label] random | -| tst.ts:92:5:94:5 | [ClassInitializedMember,MethodDefinition] random( ... ; } | semmle.label | [ClassInitializedMember,MethodDefinition] random( ... ; } | -| tst.ts:92:5:94:5 | [FunctionExpr] random( ... ; } | semmle.label | [FunctionExpr] random( ... ; } | -| tst.ts:92:15:92:20 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:92:22:94:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:93:7:93:15 | [ReturnStmt] return 4; | semmle.label | [ReturnStmt] return 4; | -| tst.ts:93:14:93:14 | [Literal] 4 | semmle.label | [Literal] 4 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | semmle.label | [ClassDefinition,TypeDefinition] class S ... } } | -| tst.ts:97:9:97:11 | [VarDecl] Sub | semmle.label | [VarDecl] Sub | -| tst.ts:97:21:97:25 | [VarRef] Super | semmle.label | [VarRef] Super | -| tst.ts:97:27:97:26 | [BlockStmt] { super(...args); } | semmle.label | [BlockStmt] { super(...args); } | -| tst.ts:97:27:97:26 | [CallExpr] super(...args) | semmle.label | [CallExpr] super(...args) | -| tst.ts:97:27:97:26 | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | semmle.label | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | -| tst.ts:97:27:97:26 | [ExprStmt] super(...args); | semmle.label | [ExprStmt] super(...args); | -| tst.ts:97:27:97:26 | [FunctionExpr] (...arg ... rgs); } | semmle.label | [FunctionExpr] (...arg ... rgs); } | -| tst.ts:97:27:97:26 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:97:27:97:26 | [SimpleParameter] args | semmle.label | [SimpleParameter] args | -| tst.ts:97:27:97:26 | [SpreadElement] ...args | semmle.label | [SpreadElement] ...args | -| tst.ts:97:27:97:26 | [SuperExpr] super | semmle.label | [SuperExpr] super | -| tst.ts:97:27:97:26 | [VarRef] args | semmle.label | [VarRef] args | -| tst.ts:98:5:100:5 | [ClassInitializedMember,MethodDefinition] overrid ... ; } | semmle.label | [ClassInitializedMember,MethodDefinition] overrid ... ; } | -| tst.ts:98:5:100:5 | [FunctionExpr] overrid ... ; } | semmle.label | [FunctionExpr] overrid ... ; } | -| tst.ts:98:14:98:19 | [Label] random | semmle.label | [Label] random | -| tst.ts:98:24:98:29 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:98:31:100:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:99:7:99:33 | [ReturnStmt] return ... ) * 10; | semmle.label | [ReturnStmt] return ... ) * 10; | -| tst.ts:99:14:99:18 | [SuperExpr] super | semmle.label | [SuperExpr] super | -| tst.ts:99:14:99:25 | [DotExpr] super.random | semmle.label | [DotExpr] super.random | -| tst.ts:99:14:99:27 | [MethodCallExpr] super.random() | semmle.label | [MethodCallExpr] super.random() | -| tst.ts:99:14:99:32 | [BinaryExpr] super.random() * 10 | semmle.label | [BinaryExpr] super.random() * 10 | -| tst.ts:99:20:99:25 | [Label] random | semmle.label | [Label] random | -| tst.ts:99:31:99:32 | [Literal] 10 | semmle.label | [Literal] 10 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | semmle.label | [FunctionDeclStmt] functio ... }`; } | -| tst.ts:104:12:104:14 | [VarDecl] bar | semmle.label | [VarDecl] bar | -| tst.ts:104:16:104:16 | [SimpleParameter] s | semmle.label | [SimpleParameter] s | -| tst.ts:104:19:104:24 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:104:28:104:44 | [TemplateLiteralTypeExpr] `hello ${string}` | semmle.label | [TemplateLiteralTypeExpr] `hello ${string}` | -| tst.ts:104:29:104:34 | [LiteralTypeExpr] hello | semmle.label | [LiteralTypeExpr] hello | -| tst.ts:104:37:104:42 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:104:46:107:3 | [BlockStmt] { / ... }`; } | semmle.label | [BlockStmt] { / ... }`; } | -| tst.ts:106:5:106:24 | [ReturnStmt] return `hello ${s}`; | semmle.label | [ReturnStmt] return `hello ${s}`; | -| tst.ts:106:12:106:23 | [TemplateLiteral] `hello ${s}` | semmle.label | [TemplateLiteral] `hello ${s}` | -| tst.ts:106:13:106:18 | [TemplateElement] hello | semmle.label | [TemplateElement] hello | -| tst.ts:106:21:106:21 | [VarRef] s | semmle.label | [VarRef] s | -| tst.ts:109:3:109:50 | [DeclStmt] let s1 = ... | semmle.label | [DeclStmt] let s1 = ... | -| tst.ts:109:15:109:16 | [VarDecl] s1 | semmle.label | [VarDecl] s1 | -| tst.ts:109:15:109:49 | [VariableDeclarator] s1: `${ ... umber}` | semmle.label | [VariableDeclarator] s1: `${ ... umber}` | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | semmle.label | [TemplateLiteralTypeExpr] `${numb ... umber}` | -| tst.ts:109:22:109:27 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:109:29:109:29 | [LiteralTypeExpr] - | semmle.label | [LiteralTypeExpr] - | -| tst.ts:109:32:109:37 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:109:39:109:39 | [LiteralTypeExpr] - | semmle.label | [LiteralTypeExpr] - | -| tst.ts:109:42:109:47 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:110:3:110:26 | [DeclStmt] let s2 = ... | semmle.label | [DeclStmt] let s2 = ... | -| tst.ts:110:15:110:16 | [VarDecl] s2 | semmle.label | [VarDecl] s2 | -| tst.ts:110:15:110:25 | [VariableDeclarator] s2: `1-2-3` | semmle.label | [VariableDeclarator] s2: `1-2-3` | -| tst.ts:110:19:110:25 | [LiteralTypeExpr] `1-2-3` | semmle.label | [LiteralTypeExpr] `1-2-3` | -| tst.ts:110:19:110:25 | [TemplateLiteralTypeExpr] `1-2-3` | semmle.label | [TemplateLiteralTypeExpr] `1-2-3` | -| tst.ts:111:3:111:34 | [DeclStmt] let s3 = ... | semmle.label | [DeclStmt] let s3 = ... | -| tst.ts:111:15:111:16 | [VarDecl] s3 | semmle.label | [VarDecl] s3 | -| tst.ts:111:15:111:33 | [VariableDeclarator] s3: `${number}-2-3` | semmle.label | [VariableDeclarator] s3: `${number}-2-3` | -| tst.ts:111:19:111:33 | [TemplateLiteralTypeExpr] `${number}-2-3` | semmle.label | [TemplateLiteralTypeExpr] `${number}-2-3` | -| tst.ts:111:22:111:27 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:111:29:111:32 | [LiteralTypeExpr] -2-3 | semmle.label | [LiteralTypeExpr] -2-3 | -| tst.ts:112:3:112:4 | [VarRef] s1 | semmle.label | [VarRef] s1 | -| tst.ts:112:3:112:9 | [AssignExpr] s1 = s2 | semmle.label | [AssignExpr] s1 = s2 | -| tst.ts:112:3:112:10 | [ExprStmt] s1 = s2; | semmle.label | [ExprStmt] s1 = s2; | -| tst.ts:112:8:112:9 | [VarRef] s2 | semmle.label | [VarRef] s2 | -| tst.ts:113:3:113:4 | [VarRef] s1 | semmle.label | [VarRef] s1 | -| tst.ts:113:3:113:9 | [AssignExpr] s1 = s3 | semmle.label | [AssignExpr] s1 = s3 | -| tst.ts:113:3:113:10 | [ExprStmt] s1 = s3; | semmle.label | [ExprStmt] s1 = s3; | -| tst.ts:113:8:113:9 | [VarRef] s3 | semmle.label | [VarRef] s3 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | semmle.label | [ClassDefinition,TypeDefinition] class F ... } } | -| tst.ts:116:9:116:11 | [VarDecl] Foo | semmle.label | [VarDecl] Foo | -| tst.ts:116:13:116:12 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:116:13:116:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| tst.ts:116:13:116:12 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| tst.ts:116:13:116:12 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:117:5:117:15 | [Label] #someMethod | semmle.label | [Label] #someMethod | -| tst.ts:117:5:119:5 | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | semmle.label | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | -| tst.ts:117:5:119:5 | [FunctionExpr] #someMe ... ; } | semmle.label | [FunctionExpr] #someMe ... ; } | -| tst.ts:117:20:117:25 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:117:27:119:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:118:7:118:16 | [ReturnStmt] return 42; | semmle.label | [ReturnStmt] return 42; | -| tst.ts:118:14:118:15 | [Literal] 42 | semmle.label | [Literal] 42 | -| tst.ts:121:5:123:5 | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | semmle.label | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | -| tst.ts:121:5:123:5 | [FunctionExpr] get #so ... ; } | semmle.label | [FunctionExpr] get #so ... ; } | -| tst.ts:121:9:121:18 | [Label] #someValue | semmle.label | [Label] #someValue | -| tst.ts:121:23:121:28 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:121:30:123:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:122:7:122:17 | [ReturnStmt] return 100; | semmle.label | [ReturnStmt] return 100; | -| tst.ts:122:14:122:16 | [Literal] 100 | semmle.label | [Literal] 100 | -| tst.ts:125:5:125:16 | [Label] publicMethod | semmle.label | [Label] publicMethod | -| tst.ts:125:5:128:5 | [ClassInitializedMember,MethodDefinition] publicM ... ; } | semmle.label | [ClassInitializedMember,MethodDefinition] publicM ... ; } | -| tst.ts:125:5:128:5 | [FunctionExpr] publicM ... ; } | semmle.label | [FunctionExpr] publicM ... ; } | -| tst.ts:125:20:128:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:126:7:126:10 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:126:7:126:22 | [DotExpr] this.#someMethod | semmle.label | [DotExpr] this.#someMethod | -| tst.ts:126:7:126:24 | [MethodCallExpr] this.#someMethod() | semmle.label | [MethodCallExpr] this.#someMethod() | -| tst.ts:126:7:126:25 | [ExprStmt] this.#someMethod(); | semmle.label | [ExprStmt] this.#someMethod(); | -| tst.ts:126:12:126:22 | [Label] #someMethod | semmle.label | [Label] #someMethod | -| tst.ts:127:7:127:29 | [ReturnStmt] return ... eValue; | semmle.label | [ReturnStmt] return ... eValue; | -| tst.ts:127:14:127:17 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:127:14:127:28 | [DotExpr] this.#someValue | semmle.label | [DotExpr] this.#someValue | -| tst.ts:127:19:127:28 | [Label] #someValue | semmle.label | [Label] #someValue | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | semmle.label | [NamespaceDeclaration] module ... } } | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | semmle.order | 59 | -| tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.label | [VarDecl] TS44 | -| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.label | [FunctionDeclStmt] functio ... } } | -| tst.ts:133:12:133:14 | [VarDecl] foo | semmle.label | [VarDecl] foo | -| tst.ts:133:16:133:18 | [SimpleParameter] arg | semmle.label | [SimpleParameter] arg | -| tst.ts:133:21:133:27 | [KeywordTypeExpr] unknown | semmle.label | [KeywordTypeExpr] unknown | -| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | semmle.label | [BlockStmt] { c ... } } | -| tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | semmle.label | [DeclStmt] const argIsString = ... | -| tst.ts:134:11:134:21 | [VarDecl] argIsString | semmle.label | [VarDecl] argIsString | -| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | semmle.label | [VariableDeclarator] argIsSt ... string" | -| tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | semmle.label | [UnaryExpr] typeof arg | -| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | semmle.label | [BinaryExpr] typeof ... string" | -| tst.ts:134:32:134:34 | [VarRef] arg | semmle.label | [VarRef] arg | -| tst.ts:134:40:134:47 | [Literal] "string" | semmle.label | [Literal] "string" | -| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | semmle.label | [IfStmt] if (arg ... ; } | -| tst.ts:135:9:135:19 | [VarRef] argIsString | semmle.label | [VarRef] argIsString | -| tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | semmle.label | [DeclStmt] const upper = ... | -| tst.ts:136:15:136:19 | [VarDecl] upper | semmle.label | [VarDecl] upper | -| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | semmle.label | [VariableDeclarator] upper = ... rCase() | -| tst.ts:136:23:136:25 | [VarRef] arg | semmle.label | [VarRef] arg | -| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | semmle.label | [DotExpr] arg.toUpperCase | -| tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | semmle.label | [MethodCallExpr] arg.toUpperCase() | -| tst.ts:136:27:136:37 | [Label] toUpperCase | semmle.label | [Label] toUpperCase | -| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | -| tst.ts:140:8:140:12 | [Identifier] Shape | semmle.label | [Identifier] Shape | -| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | semmle.label | [UnionTypeExpr] \| { kin ... umber } | -| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | [InterfaceTypeExpr] { kind: ... umber } | -| tst.ts:141:11:141:14 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | semmle.label | [FieldDeclaration] kind: "circle", | -| tst.ts:141:17:141:24 | [LiteralTypeExpr] "circle" | semmle.label | [LiteralTypeExpr] "circle" | -| tst.ts:141:27:141:32 | [Label] radius | semmle.label | [Label] radius | -| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | semmle.label | [FieldDeclaration] radius: number | -| tst.ts:141:35:141:40 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | [InterfaceTypeExpr] { kind: ... umber } | -| tst.ts:142:11:142:14 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | semmle.label | [FieldDeclaration] kind: "square", | -| tst.ts:142:17:142:24 | [LiteralTypeExpr] "square" | semmle.label | [LiteralTypeExpr] "square" | -| tst.ts:142:27:142:36 | [Label] sideLength | semmle.label | [Label] sideLength | -| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | semmle.label | [FieldDeclaration] sideLength: number | -| tst.ts:142:39:142:44 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.label | [FunctionDeclStmt] functio ... ; } } | -| tst.ts:144:12:144:15 | [VarDecl] side | semmle.label | [VarDecl] side | -| tst.ts:144:17:144:21 | [SimpleParameter] shape | semmle.label | [SimpleParameter] shape | -| tst.ts:144:24:144:28 | [LocalTypeAccess] Shape | semmle.label | [LocalTypeAccess] Shape | -| tst.ts:144:32:144:37 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | semmle.label | [BlockStmt] { ... ; } } | -| tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | semmle.label | [DeclStmt] const { ... shape; | -| tst.ts:145:13:145:20 | [ObjectPattern] { kind } | semmle.label | [ObjectPattern] { kind } | -| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | semmle.label | [VariableDeclarator] { kind } = shape | -| tst.ts:145:15:145:18 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:145:15:145:18 | [PropertyPattern] kind | semmle.label | [PropertyPattern] kind | -| tst.ts:145:15:145:18 | [VarDecl] kind | semmle.label | [VarDecl] kind | -| tst.ts:145:24:145:28 | [VarRef] shape | semmle.label | [VarRef] shape | -| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | semmle.label | [IfStmt] if (kin ... ngth; } | -| tst.ts:147:11:147:14 | [VarRef] kind | semmle.label | [VarRef] kind | -| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | semmle.label | [BinaryExpr] kind === "circle" | -| tst.ts:147:20:147:27 | [Literal] "circle" | semmle.label | [Literal] "circle" | -| tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | semmle.label | [BlockStmt] { retur ... adius;} | -| tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | semmle.label | [ReturnStmt] return shape.radius; | -| tst.ts:147:39:147:43 | [VarRef] shape | semmle.label | [VarRef] shape | -| tst.ts:147:39:147:50 | [DotExpr] shape.radius | semmle.label | [DotExpr] shape.radius | -| tst.ts:147:45:147:50 | [Label] radius | semmle.label | [Label] radius | -| tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | semmle.label | [BlockStmt] { retur ... ngth; } | -| tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | semmle.label | [ReturnStmt] return ... Length; | -| tst.ts:148:21:148:25 | [VarRef] shape | semmle.label | [VarRef] shape | -| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | semmle.label | [DotExpr] shape.sideLength | -| tst.ts:148:27:148:36 | [Label] sideLength | semmle.label | [Label] sideLength | -| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.label | [FunctionDeclStmt] functio ... 2]; } | -| tst.ts:151:12:151:22 | [VarDecl] symbolIndex | semmle.label | [VarDecl] symbolIndex | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | semmle.label | [BlockStmt] { i ... 2]; } | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | -| tst.ts:152:15:152:20 | [Identifier] Colors | semmle.label | [Identifier] Colors | -| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | semmle.label | [FunctionExpr] [sym: s ... number; | -| tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | semmle.label | [IndexSignature] [sym: s ... number; | -| tst.ts:153:8:153:10 | [SimpleParameter] sym | semmle.label | [SimpleParameter] sym | -| tst.ts:153:13:153:18 | [KeywordTypeExpr] symbol | semmle.label | [KeywordTypeExpr] symbol | -| tst.ts:153:22:153:27 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | semmle.label | [FunctionExpr] [key: s ... string; | -| tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | semmle.label | [IndexSignature] [key: s ... string; | -| tst.ts:154:8:154:10 | [SimpleParameter] key | semmle.label | [SimpleParameter] key | -| tst.ts:154:13:154:18 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:154:22:154:27 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | semmle.label | [FunctionExpr] [num: n ... oolean; | -| tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | semmle.label | [IndexSignature] [num: n ... oolean; | -| tst.ts:155:8:155:10 | [SimpleParameter] num | semmle.label | [SimpleParameter] num | -| tst.ts:155:13:155:18 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:155:22:155:28 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | semmle.label | [DeclStmt] let colors = ... | -| tst.ts:158:9:158:14 | [VarDecl] colors | semmle.label | [VarDecl] colors | -| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | semmle.label | [VariableDeclarator] colors: Colors = {} | -| tst.ts:158:17:158:22 | [LocalTypeAccess] Colors | semmle.label | [LocalTypeAccess] Colors | -| tst.ts:158:26:158:27 | [ObjectExpr] {} | semmle.label | [ObjectExpr] {} | -| tst.ts:159:5:159:38 | [DeclStmt] const red = ... | semmle.label | [DeclStmt] const red = ... | -| tst.ts:159:11:159:13 | [VarDecl] red | semmle.label | [VarDecl] red | -| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | semmle.label | [VariableDeclarator] red = c ... "red")] | -| tst.ts:159:17:159:22 | [VarRef] colors | semmle.label | [VarRef] colors | -| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | semmle.label | [IndexExpr] colors[ ... "red")] | -| tst.ts:159:24:159:29 | [VarRef] Symbol | semmle.label | [VarRef] Symbol | -| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | semmle.label | [CallExpr] Symbol("red") | -| tst.ts:159:31:159:35 | [Literal] "red" | semmle.label | [Literal] "red" | -| tst.ts:160:5:160:34 | [DeclStmt] const green = ... | semmle.label | [DeclStmt] const green = ... | -| tst.ts:160:11:160:15 | [VarDecl] green | semmle.label | [VarDecl] green | -| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | semmle.label | [VariableDeclarator] green = ... green"] | -| tst.ts:160:19:160:24 | [VarRef] colors | semmle.label | [VarRef] colors | -| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | semmle.label | [IndexExpr] colors["green"] | -| tst.ts:160:26:160:32 | [Literal] "green" | semmle.label | [Literal] "green" | -| tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | semmle.label | [DeclStmt] const blue = ... | -| tst.ts:161:11:161:14 | [VarDecl] blue | semmle.label | [VarDecl] blue | -| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | semmle.label | [VariableDeclarator] blue = colors[2] | -| tst.ts:161:18:161:23 | [VarRef] colors | semmle.label | [VarRef] colors | -| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | semmle.label | [IndexExpr] colors[2] | -| tst.ts:161:25:161:25 | [Literal] 2 | semmle.label | [Literal] 2 | -| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.label | [FunctionDeclStmt] functio ... "]; } | -| tst.ts:164:12:164:29 | [VarDecl] stringPatternIndex | semmle.label | [VarDecl] stringPatternIndex | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | semmle.label | [BlockStmt] { i ... "]; } | -| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | -| tst.ts:165:15:165:17 | [Identifier] Foo | semmle.label | [Identifier] Foo | -| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | semmle.label | [FunctionExpr] [key: ` ... number; | -| tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | semmle.label | [IndexSignature] [key: ` ... number; | -| tst.ts:166:8:166:10 | [SimpleParameter] key | semmle.label | [SimpleParameter] key | -| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | semmle.label | [TemplateLiteralTypeExpr] `foo-${number}` | -| tst.ts:166:14:166:17 | [LiteralTypeExpr] foo- | semmle.label | [LiteralTypeExpr] foo- | -| tst.ts:166:20:166:25 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:166:31:166:36 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | semmle.label | [DeclStmt] var bla = ... | -| tst.ts:168:9:168:11 | [VarDecl] bla | semmle.label | [VarDecl] bla | -| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | semmle.label | [VariableDeclarator] bla : Foo = {} | -| tst.ts:168:15:168:17 | [LocalTypeAccess] Foo | semmle.label | [LocalTypeAccess] Foo | -| tst.ts:168:21:168:22 | [ObjectExpr] {} | semmle.label | [ObjectExpr] {} | -| tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | semmle.label | [DeclStmt] const bar = ... | -| tst.ts:169:11:169:13 | [VarDecl] bar | semmle.label | [VarDecl] bar | -| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | semmle.label | [VariableDeclarator] bar = bla[`foo-1`] | -| tst.ts:169:17:169:19 | [VarRef] bla | semmle.label | [VarRef] bla | -| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | semmle.label | [IndexExpr] bla[`foo-1`] | -| tst.ts:169:21:169:27 | [TemplateElement] `foo-1` | semmle.label | [TemplateElement] `foo-1` | -| tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | semmle.label | [TemplateLiteral] `foo-1` | -| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | -| tst.ts:171:15:171:18 | [Identifier] Data | semmle.label | [Identifier] Data | -| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | semmle.label | [FunctionExpr] [optNam ... oolean; | -| tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | semmle.label | [IndexSignature] [optNam ... oolean; | -| tst.ts:172:8:172:14 | [SimpleParameter] optName | semmle.label | [SimpleParameter] optName | -| tst.ts:172:17:172:22 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | semmle.label | [UnionTypeExpr] string \| symbol | -| tst.ts:172:26:172:31 | [KeywordTypeExpr] symbol | semmle.label | [KeywordTypeExpr] symbol | -| tst.ts:172:35:172:41 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| tst.ts:175:5:175:26 | [DeclStmt] const data = ... | semmle.label | [DeclStmt] const data = ... | -| tst.ts:175:11:175:14 | [VarDecl] data | semmle.label | [VarDecl] data | -| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | semmle.label | [VariableDeclarator] data: Data = {} | -| tst.ts:175:17:175:20 | [LocalTypeAccess] Data | semmle.label | [LocalTypeAccess] Data | -| tst.ts:175:24:175:25 | [ObjectExpr] {} | semmle.label | [ObjectExpr] {} | -| tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | semmle.label | [DeclStmt] const baz = ... | -| tst.ts:176:11:176:13 | [VarDecl] baz | semmle.label | [VarDecl] baz | -| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | semmle.label | [VariableDeclarator] baz = data["foo"] | -| tst.ts:176:17:176:20 | [VarRef] data | semmle.label | [VarRef] data | -| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | semmle.label | [IndexExpr] data["foo"] | -| tst.ts:176:22:176:26 | [Literal] "foo" | semmle.label | [Literal] "foo" | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | semmle.label | [ClassDefinition,TypeDefinition] class F ... } | -| tst.ts:179:9:179:11 | [VarDecl] Foo | semmle.label | [VarDecl] Foo | -| tst.ts:179:13:179:12 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| tst.ts:179:13:179:12 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | semmle.label | [ClassInitializedMember,FieldDeclaration] static #count = 0; | -| tst.ts:180:12:180:17 | [Label] #count | semmle.label | [Label] #count | -| tst.ts:180:21:180:21 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.label | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | -| tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | semmle.label | [FunctionExpr] get cou ... ; } | -| tst.ts:182:9:182:13 | [Label] count | semmle.label | [Label] count | -| tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | semmle.label | [ReturnStmt] return Foo.#count; | -| tst.ts:183:16:183:18 | [VarRef] Foo | semmle.label | [VarRef] Foo | -| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | -| tst.ts:183:20:183:25 | [Label] #count | semmle.label | [Label] #count | -| tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.label | [BlockStmt] static ... ; } | -| tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | semmle.label | [ClassInitializedMember] static ... ; } | -| tst.ts:186:7:186:9 | [VarRef] Foo | semmle.label | [VarRef] Foo | -| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | -| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.label | [CompoundAssignExpr] Foo.#count += 3 | -| tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.label | [ExprStmt] Foo.#count += 3; | -| tst.ts:186:11:186:16 | [Label] #count | semmle.label | [Label] #count | -| tst.ts:186:21:186:21 | [Literal] 3 | semmle.label | [Literal] 3 | -| tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.label | [BlockStmt] static ... ; } | -| tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | semmle.label | [ClassInitializedMember] static ... ; } | -| tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.label | [DeclStmt] var count = ... | -| tst.ts:189:11:189:15 | [VarDecl] count | semmle.label | [VarDecl] count | -| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.label | [VariableDeclarator] count = Foo.#count | -| tst.ts:189:19:189:21 | [VarRef] Foo | semmle.label | [VarRef] Foo | -| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | semmle.label | [DotExpr] Foo.#count | -| tst.ts:189:23:189:28 | [Label] #count | semmle.label | [Label] #count | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | semmle.label | [NamespaceDeclaration] module ... } } } | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | semmle.order | 60 | -| tst.ts:195:8:195:11 | [VarDecl] TS45 | semmle.label | [VarDecl] TS45 | -| tst.ts:197:3:197:36 | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | -| tst.ts:197:8:197:8 | [Identifier] A | semmle.label | [Identifier] A | -| tst.ts:197:12:197:18 | [LocalTypeAccess] Awaited | semmle.label | [LocalTypeAccess] Awaited | -| tst.ts:197:12:197:35 | [GenericTypeExpr] Awaited ... tring>> | semmle.label | [GenericTypeExpr] Awaited ... tring>> | -| tst.ts:197:20:197:26 | [LocalTypeAccess] Promise | semmle.label | [LocalTypeAccess] Promise | -| tst.ts:197:20:197:34 | [GenericTypeExpr] Promise | semmle.label | [GenericTypeExpr] Promise | -| tst.ts:197:28:197:33 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:200:3:200:45 | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | -| tst.ts:200:8:200:8 | [Identifier] B | semmle.label | [Identifier] B | -| tst.ts:200:12:200:18 | [LocalTypeAccess] Awaited | semmle.label | [LocalTypeAccess] Awaited | -| tst.ts:200:12:200:44 | [GenericTypeExpr] Awaited ... mber>>> | semmle.label | [GenericTypeExpr] Awaited ... mber>>> | -| tst.ts:200:20:200:26 | [LocalTypeAccess] Promise | semmle.label | [LocalTypeAccess] Promise | -| tst.ts:200:20:200:43 | [GenericTypeExpr] Promise ... umber>> | semmle.label | [GenericTypeExpr] Promise ... umber>> | -| tst.ts:200:28:200:34 | [LocalTypeAccess] Promise | semmle.label | [LocalTypeAccess] Promise | -| tst.ts:200:28:200:42 | [GenericTypeExpr] Promise | semmle.label | [GenericTypeExpr] Promise | -| tst.ts:200:36:200:41 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:203:3:203:46 | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | -| tst.ts:203:8:203:8 | [Identifier] C | semmle.label | [Identifier] C | -| tst.ts:203:12:203:18 | [LocalTypeAccess] Awaited | semmle.label | [LocalTypeAccess] Awaited | -| tst.ts:203:12:203:45 | [GenericTypeExpr] Awaited ... umber>> | semmle.label | [GenericTypeExpr] Awaited ... umber>> | -| tst.ts:203:20:203:26 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| tst.ts:203:20:203:44 | [UnionTypeExpr] boolean ... number> | semmle.label | [UnionTypeExpr] boolean ... number> | -| tst.ts:203:30:203:36 | [LocalTypeAccess] Promise | semmle.label | [LocalTypeAccess] Promise | -| tst.ts:203:30:203:44 | [GenericTypeExpr] Promise | semmle.label | [GenericTypeExpr] Promise | -| tst.ts:203:38:203:43 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:205:3:208:3 | [ExportDeclaration] export ... ng; } | semmle.label | [ExportDeclaration] export ... ng; } | -| tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | -| tst.ts:205:20:205:26 | [Identifier] Success | semmle.label | [Identifier] Success | -| tst.ts:206:5:206:8 | [Label] type | semmle.label | [Label] type | -| tst.ts:206:5:206:29 | [FieldDeclaration] type: ` ... ccess`; | semmle.label | [FieldDeclaration] type: ` ... ccess`; | -| tst.ts:206:11:206:28 | [TemplateLiteralTypeExpr] `${string}Success` | semmle.label | [TemplateLiteralTypeExpr] `${string}Success` | -| tst.ts:206:14:206:19 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:206:21:206:27 | [LiteralTypeExpr] Success | semmle.label | [LiteralTypeExpr] Success | -| tst.ts:207:5:207:8 | [Label] body | semmle.label | [Label] body | -| tst.ts:207:5:207:17 | [FieldDeclaration] body: string; | semmle.label | [FieldDeclaration] body: string; | -| tst.ts:207:11:207:16 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:210:3:213:3 | [ExportDeclaration] export ... ng; } | semmle.label | [ExportDeclaration] export ... ng; } | -| tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | -| tst.ts:210:20:210:24 | [Identifier] Error | semmle.label | [Identifier] Error | -| tst.ts:211:7:211:10 | [Label] type | semmle.label | [Label] type | -| tst.ts:211:7:211:29 | [FieldDeclaration] type: ` ... Error`; | semmle.label | [FieldDeclaration] type: ` ... Error`; | -| tst.ts:211:13:211:28 | [TemplateLiteralTypeExpr] `${string}Error` | semmle.label | [TemplateLiteralTypeExpr] `${string}Error` | -| tst.ts:211:16:211:21 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:211:23:211:27 | [LiteralTypeExpr] Error | semmle.label | [LiteralTypeExpr] Error | -| tst.ts:212:7:212:13 | [Label] message | semmle.label | [Label] message | -| tst.ts:212:7:212:22 | [FieldDeclaration] message: string; | semmle.label | [FieldDeclaration] message: string; | -| tst.ts:212:16:212:21 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:215:3:220:3 | [ExportDeclaration] export ... } } | semmle.label | [ExportDeclaration] export ... } } | -| tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | semmle.label | [FunctionDeclStmt] functio ... } } | -| tst.ts:215:19:215:25 | [VarDecl] handler | semmle.label | [VarDecl] handler | -| tst.ts:215:27:215:27 | [SimpleParameter] r | semmle.label | [SimpleParameter] r | -| tst.ts:215:30:215:36 | [LocalTypeAccess] Success | semmle.label | [LocalTypeAccess] Success | -| tst.ts:215:30:215:44 | [UnionTypeExpr] Success \| Error | semmle.label | [UnionTypeExpr] Success \| Error | -| tst.ts:215:40:215:44 | [LocalTypeAccess] Error | semmle.label | [LocalTypeAccess] Error | -| tst.ts:215:47:220:3 | [BlockStmt] { ... } } | semmle.label | [BlockStmt] { ... } } | -| tst.ts:216:7:219:7 | [IfStmt] if (r.t ... } | semmle.label | [IfStmt] if (r.t ... } | -| tst.ts:216:11:216:11 | [VarRef] r | semmle.label | [VarRef] r | -| tst.ts:216:11:216:16 | [DotExpr] r.type | semmle.label | [DotExpr] r.type | -| tst.ts:216:11:216:34 | [BinaryExpr] r.type ... uccess" | semmle.label | [BinaryExpr] r.type ... uccess" | -| tst.ts:216:13:216:16 | [Label] type | semmle.label | [Label] type | -| tst.ts:216:22:216:34 | [Literal] "HttpSuccess" | semmle.label | [Literal] "HttpSuccess" | -| tst.ts:216:37:219:7 | [BlockStmt] { ... } | semmle.label | [BlockStmt] { ... } | -| tst.ts:218:11:218:29 | [DeclStmt] let token = ... | semmle.label | [DeclStmt] let token = ... | -| tst.ts:218:15:218:19 | [VarDecl] token | semmle.label | [VarDecl] token | -| tst.ts:218:15:218:28 | [VariableDeclarator] token = r.body | semmle.label | [VariableDeclarator] token = r.body | -| tst.ts:218:23:218:23 | [VarRef] r | semmle.label | [VarRef] r | -| tst.ts:218:23:218:28 | [DotExpr] r.body | semmle.label | [DotExpr] r.body | -| tst.ts:218:25:218:28 | [Label] body | semmle.label | [Label] body | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.label | [ClassDefinition,TypeDefinition] class P ... } } | -| tst.ts:222:9:222:14 | [VarDecl] Person | semmle.label | [VarDecl] Person | -| tst.ts:223:5:223:9 | [Label] #name | semmle.label | [Label] #name | -| tst.ts:223:5:223:18 | [FieldDeclaration] #name: string; | semmle.label | [FieldDeclaration] #name: string; | -| tst.ts:223:12:223:17 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:224:5:226:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.label | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | -| tst.ts:224:5:226:5 | [FunctionExpr] constru ... ; } | semmle.label | [FunctionExpr] constru ... ; } | -| tst.ts:224:5:226:5 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:224:17:224:20 | [SimpleParameter] name | semmle.label | [SimpleParameter] name | -| tst.ts:224:23:224:28 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:224:31:226:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:225:9:225:12 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:225:9:225:18 | [DotExpr] this.#name | semmle.label | [DotExpr] this.#name | -| tst.ts:225:9:225:25 | [AssignExpr] this.#name = name | semmle.label | [AssignExpr] this.#name = name | -| tst.ts:225:9:225:26 | [ExprStmt] this.#name = name; | semmle.label | [ExprStmt] this.#name = name; | -| tst.ts:225:14:225:18 | [Label] #name | semmle.label | [Label] #name | -| tst.ts:225:22:225:25 | [VarRef] name | semmle.label | [VarRef] name | -| tst.ts:228:5:228:10 | [Label] equals | semmle.label | [Label] equals | -| tst.ts:228:5:233:5 | [ClassInitializedMember,MethodDefinition] equals( ... . } | semmle.label | [ClassInitializedMember,MethodDefinition] equals( ... . } | -| tst.ts:228:5:233:5 | [FunctionExpr] equals( ... . } | semmle.label | [FunctionExpr] equals( ... . } | -| tst.ts:228:12:228:16 | [SimpleParameter] other | semmle.label | [SimpleParameter] other | -| tst.ts:228:19:228:25 | [KeywordTypeExpr] unknown | semmle.label | [KeywordTypeExpr] unknown | -| tst.ts:228:28:233:5 | [BlockStmt] { ... . } | semmle.label | [BlockStmt] { ... . } | -| tst.ts:229:9:232:39 | [ReturnStmt] return ... .#name; | semmle.label | [ReturnStmt] return ... .#name; | -| tst.ts:229:16:229:20 | [VarRef] other | semmle.label | [VarRef] other | -| tst.ts:229:16:230:37 | [BinaryExpr] other & ... object" | semmle.label | [BinaryExpr] other & ... object" | -| tst.ts:229:16:231:26 | [BinaryExpr] other & ... n other | semmle.label | [BinaryExpr] other & ... n other | -| tst.ts:229:16:232:38 | [BinaryExpr] other & ... r.#name | semmle.label | [BinaryExpr] other & ... r.#name | -| tst.ts:230:13:230:24 | [UnaryExpr] typeof other | semmle.label | [UnaryExpr] typeof other | -| tst.ts:230:13:230:37 | [BinaryExpr] typeof ... object" | semmle.label | [BinaryExpr] typeof ... object" | -| tst.ts:230:20:230:24 | [VarRef] other | semmle.label | [VarRef] other | -| tst.ts:230:30:230:37 | [Literal] "object" | semmle.label | [Literal] "object" | -| tst.ts:231:13:231:17 | [Label] #name | semmle.label | [Label] #name | -| tst.ts:231:13:231:26 | [BinaryExpr] #name in other | semmle.label | [BinaryExpr] #name in other | -| tst.ts:231:22:231:26 | [VarRef] other | semmle.label | [VarRef] other | -| tst.ts:232:13:232:16 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:232:13:232:22 | [DotExpr] this.#name | semmle.label | [DotExpr] this.#name | -| tst.ts:232:13:232:38 | [BinaryExpr] this.#n ... r.#name | semmle.label | [BinaryExpr] this.#n ... r.#name | -| tst.ts:232:18:232:22 | [Label] #name | semmle.label | [Label] #name | -| tst.ts:232:28:232:32 | [VarRef] other | semmle.label | [VarRef] other | -| tst.ts:232:28:232:38 | [DotExpr] other.#name | semmle.label | [DotExpr] other.#name | -| tst.ts:232:34:232:38 | [Label] #name | semmle.label | [Label] #name | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | semmle.label | [ImportDeclaration] import ... son" }; | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | semmle.order | 61 | -| tst.ts:237:8:237:16 | [ImportSpecifier] * as Foo3 | semmle.label | [ImportSpecifier] * as Foo3 | -| tst.ts:237:13:237:16 | [VarDecl] Foo3 | semmle.label | [VarDecl] Foo3 | -| tst.ts:237:23:237:40 | [Literal] "./something.json" | semmle.label | [Literal] "./something.json" | -| tst.ts:237:47:237:62 | [ObjectExpr] { type: "json" } | semmle.label | [ObjectExpr] { type: "json" } | -| tst.ts:237:49:237:60 | [Property] type: "json" | semmle.label | [Property] type: "json" | -| tst.ts:238:1:238:19 | [DeclStmt] var foo = ... | semmle.label | [DeclStmt] var foo = ... | -| tst.ts:238:1:238:19 | [DeclStmt] var foo = ... | semmle.order | 62 | -| tst.ts:238:5:238:7 | [VarDecl] foo | semmle.label | [VarDecl] foo | -| tst.ts:238:5:238:18 | [VariableDeclarator] foo = Foo3.foo | semmle.label | [VariableDeclarator] foo = Foo3.foo | -| tst.ts:238:11:238:14 | [VarRef] Foo3 | semmle.label | [VarRef] Foo3 | -| tst.ts:238:11:238:18 | [DotExpr] Foo3.foo | semmle.label | [DotExpr] Foo3.foo | -| tst.ts:238:16:238:18 | [Label] foo | semmle.label | [Label] foo | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | semmle.label | [NamespaceDeclaration] module ... }; } | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | semmle.order | 63 | -| tst.ts:240:8:240:11 | [VarDecl] TS46 | semmle.label | [VarDecl] TS46 | -| tst.ts:241:3:241:15 | [ClassDefinition,TypeDefinition] class Base {} | semmle.label | [ClassDefinition,TypeDefinition] class Base {} | -| tst.ts:241:9:241:12 | [VarDecl] Base | semmle.label | [VarDecl] Base | -| tst.ts:241:14:241:13 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:241:14:241:13 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| tst.ts:241:14:241:13 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| tst.ts:241:14:241:13 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | semmle.label | [ClassDefinition,TypeDefinition] class D ... } } | -| tst.ts:243:9:243:15 | [VarDecl] Derived | semmle.label | [VarDecl] Derived | -| tst.ts:243:25:243:28 | [VarRef] Base | semmle.label | [VarRef] Base | -| tst.ts:244:5:244:10 | [Label] myProp | semmle.label | [Label] myProp | -| tst.ts:244:5:244:18 | [FieldDeclaration] myProp = true; | semmle.label | [FieldDeclaration] myProp = true; | -| tst.ts:244:14:244:17 | [Literal] true | semmle.label | [Literal] true | -| tst.ts:246:5:249:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.label | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | -| tst.ts:246:5:249:5 | [FunctionExpr] constru ... ; } | semmle.label | [FunctionExpr] constru ... ; } | -| tst.ts:246:5:249:5 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:246:19:249:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:247:7:247:13 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:247:7:247:17 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:247:7:247:51 | [MethodCallExpr] console ... per()") | semmle.label | [MethodCallExpr] console ... per()") | -| tst.ts:247:7:247:52 | [ExprStmt] console ... er()"); | semmle.label | [ExprStmt] console ... er()"); | -| tst.ts:247:15:247:17 | [Label] log | semmle.label | [Label] log | -| tst.ts:247:19:247:50 | [Literal] "Doing something before super()" | semmle.label | [Literal] "Doing something before super()" | -| tst.ts:248:7:248:11 | [SuperExpr] super | semmle.label | [SuperExpr] super | -| tst.ts:248:7:248:13 | [CallExpr] super() | semmle.label | [CallExpr] super() | -| tst.ts:248:7:248:14 | [ExprStmt] super(); | semmle.label | [ExprStmt] super(); | -| tst.ts:252:3:254:50 | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | -| tst.ts:252:8:252:13 | [Identifier] Action | semmle.label | [Identifier] Action | -| tst.ts:253:5:254:49 | [UnionTypeExpr] \| { kin ... tring } | semmle.label | [UnionTypeExpr] \| { kin ... tring } | -| tst.ts:253:7:253:49 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | [InterfaceTypeExpr] { kind: ... umber } | -| tst.ts:253:9:253:12 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:253:9:253:31 | [FieldDeclaration] kind: " ... tents"; | semmle.label | [FieldDeclaration] kind: " ... tents"; | -| tst.ts:253:15:253:30 | [LiteralTypeExpr] "NumberContents" | semmle.label | [LiteralTypeExpr] "NumberContents" | -| tst.ts:253:33:253:39 | [Label] payload | semmle.label | [Label] payload | -| tst.ts:253:33:253:47 | [FieldDeclaration] payload: number | semmle.label | [FieldDeclaration] payload: number | -| tst.ts:253:42:253:47 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:254:7:254:49 | [InterfaceTypeExpr] { kind: ... tring } | semmle.label | [InterfaceTypeExpr] { kind: ... tring } | -| tst.ts:254:9:254:12 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:254:9:254:31 | [FieldDeclaration] kind: " ... tents"; | semmle.label | [FieldDeclaration] kind: " ... tents"; | -| tst.ts:254:15:254:30 | [LiteralTypeExpr] "StringContents" | semmle.label | [LiteralTypeExpr] "StringContents" | -| tst.ts:254:33:254:39 | [Label] payload | semmle.label | [Label] payload | -| tst.ts:254:33:254:47 | [FieldDeclaration] payload: string | semmle.label | [FieldDeclaration] payload: string | -| tst.ts:254:42:254:47 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | semmle.label | [FunctionDeclStmt] functio ... } } | -| tst.ts:256:12:256:24 | [VarDecl] processAction | semmle.label | [VarDecl] processAction | -| tst.ts:256:26:256:31 | [SimpleParameter] action | semmle.label | [SimpleParameter] action | -| tst.ts:256:34:256:39 | [LocalTypeAccess] Action | semmle.label | [LocalTypeAccess] Action | -| tst.ts:256:42:263:3 | [BlockStmt] { c ... } } | semmle.label | [BlockStmt] { c ... } } | -| tst.ts:257:5:257:37 | [DeclStmt] const { ... action; | semmle.label | [DeclStmt] const { ... action; | -| tst.ts:257:11:257:27 | [ObjectPattern] { kind, payload } | semmle.label | [ObjectPattern] { kind, payload } | -| tst.ts:257:11:257:36 | [VariableDeclarator] { kind, ... action | semmle.label | [VariableDeclarator] { kind, ... action | -| tst.ts:257:13:257:16 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:257:13:257:16 | [PropertyPattern] kind | semmle.label | [PropertyPattern] kind | -| tst.ts:257:13:257:16 | [VarDecl] kind | semmle.label | [VarDecl] kind | -| tst.ts:257:19:257:25 | [Label] payload | semmle.label | [Label] payload | -| tst.ts:257:19:257:25 | [PropertyPattern] payload | semmle.label | [PropertyPattern] payload | -| tst.ts:257:19:257:25 | [VarDecl] payload | semmle.label | [VarDecl] payload | -| tst.ts:257:31:257:36 | [VarRef] action | semmle.label | [VarRef] action | -| tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | semmle.label | [IfStmt] if (kin ... g } | -| tst.ts:258:9:258:12 | [VarRef] kind | semmle.label | [VarRef] kind | -| tst.ts:258:9:258:33 | [BinaryExpr] kind == ... ntents" | semmle.label | [BinaryExpr] kind == ... ntents" | -| tst.ts:258:18:258:33 | [Literal] "NumberContents" | semmle.label | [Literal] "NumberContents" | -| tst.ts:258:36:260:5 | [BlockStmt] { ... r } | semmle.label | [BlockStmt] { ... r } | -| tst.ts:259:7:259:13 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:259:7:259:17 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:259:7:259:36 | [MethodCallExpr] console ... ixed()) | semmle.label | [MethodCallExpr] console ... ixed()) | -| tst.ts:259:7:259:37 | [ExprStmt] console ... xed()); | semmle.label | [ExprStmt] console ... xed()); | -| tst.ts:259:15:259:17 | [Label] log | semmle.label | [Label] log | -| tst.ts:259:19:259:25 | [VarRef] payload | semmle.label | [VarRef] payload | -| tst.ts:259:19:259:33 | [DotExpr] payload.toFixed | semmle.label | [DotExpr] payload.toFixed | -| tst.ts:259:19:259:35 | [MethodCallExpr] payload.toFixed() | semmle.label | [MethodCallExpr] payload.toFixed() | -| tst.ts:259:27:259:33 | [Label] toFixed | semmle.label | [Label] toFixed | -| tst.ts:260:12:262:5 | [IfStmt] if (kin ... g } | semmle.label | [IfStmt] if (kin ... g } | -| tst.ts:260:16:260:19 | [VarRef] kind | semmle.label | [VarRef] kind | -| tst.ts:260:16:260:40 | [BinaryExpr] kind == ... ntents" | semmle.label | [BinaryExpr] kind == ... ntents" | -| tst.ts:260:25:260:40 | [Literal] "StringContents" | semmle.label | [Literal] "StringContents" | -| tst.ts:260:43:262:5 | [BlockStmt] { ... g } | semmle.label | [BlockStmt] { ... g } | -| tst.ts:261:7:261:13 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:261:7:261:17 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:261:7:261:40 | [MethodCallExpr] console ... Case()) | semmle.label | [MethodCallExpr] console ... Case()) | -| tst.ts:261:7:261:41 | [ExprStmt] console ... ase()); | semmle.label | [ExprStmt] console ... ase()); | -| tst.ts:261:15:261:17 | [Label] log | semmle.label | [Label] log | -| tst.ts:261:19:261:25 | [VarRef] payload | semmle.label | [VarRef] payload | -| tst.ts:261:19:261:37 | [DotExpr] payload.toLowerCase | semmle.label | [DotExpr] payload.toLowerCase | -| tst.ts:261:19:261:39 | [MethodCallExpr] payload ... rCase() | semmle.label | [MethodCallExpr] payload ... rCase() | -| tst.ts:261:27:261:37 | [Label] toLowerCase | semmle.label | [Label] toLowerCase | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | -| tst.ts:265:13:265:19 | [Identifier] TypeMap | semmle.label | [Identifier] TypeMap | -| tst.ts:266:5:266:10 | [Label] number | semmle.label | [Label] number | -| tst.ts:266:5:266:19 | [FieldDeclaration] number: number; | semmle.label | [FieldDeclaration] number: number; | -| tst.ts:266:13:266:18 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:267:5:267:10 | [Label] string | semmle.label | [Label] string | -| tst.ts:267:5:267:19 | [FieldDeclaration] string: string; | semmle.label | [FieldDeclaration] string: string; | -| tst.ts:267:13:267:18 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:268:5:268:11 | [Label] boolean | semmle.label | [Label] boolean | -| tst.ts:268:5:268:21 | [FieldDeclaration] boolean: boolean; | semmle.label | [FieldDeclaration] boolean: boolean; | -| tst.ts:268:14:268:20 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | -| tst.ts:271:8:271:18 | [Identifier] UnionRecord | semmle.label | [Identifier] UnionRecord | -| tst.ts:271:20:271:20 | [Identifier] P | semmle.label | [Identifier] P | -| tst.ts:271:20:271:42 | [TypeParameter] P exten ... TypeMap | semmle.label | [TypeParameter] P exten ... TypeMap | -| tst.ts:271:30:271:42 | [KeyofTypeExpr] keyof TypeMap | semmle.label | [KeyofTypeExpr] keyof TypeMap | -| tst.ts:271:36:271:42 | [LocalTypeAccess] TypeMap | semmle.label | [LocalTypeAccess] TypeMap | -| tst.ts:271:47:276:3 | [MappedTypeExpr] { [ ... }; } | semmle.label | [MappedTypeExpr] { [ ... }; } | -| tst.ts:271:47:276:6 | [IndexedAccessTypeExpr] { [ ... }[P] | semmle.label | [IndexedAccessTypeExpr] { [ ... }[P] | -| tst.ts:272:6:272:6 | [Identifier] K | semmle.label | [Identifier] K | -| tst.ts:272:6:272:11 | [TypeParameter] K in P | semmle.label | [TypeParameter] K in P | -| tst.ts:272:11:272:11 | [LocalTypeAccess] P | semmle.label | [LocalTypeAccess] P | -| tst.ts:272:15:275:5 | [InterfaceTypeExpr] { ... ; } | semmle.label | [InterfaceTypeExpr] { ... ; } | -| tst.ts:273:7:273:10 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:273:7:273:14 | [FieldDeclaration] kind: K; | semmle.label | [FieldDeclaration] kind: K; | -| tst.ts:273:13:273:13 | [LocalTypeAccess] K | semmle.label | [LocalTypeAccess] K | -| tst.ts:274:7:274:7 | [Label] f | semmle.label | [Label] f | -| tst.ts:274:7:274:33 | [FieldDeclaration] f: (p: ... > void; | semmle.label | [FieldDeclaration] f: (p: ... > void; | -| tst.ts:274:10:274:32 | [FunctionExpr] (p: Typ ... => void | semmle.label | [FunctionExpr] (p: Typ ... => void | -| tst.ts:274:10:274:32 | [FunctionTypeExpr] (p: Typ ... => void | semmle.label | [FunctionTypeExpr] (p: Typ ... => void | -| tst.ts:274:11:274:11 | [SimpleParameter] p | semmle.label | [SimpleParameter] p | -| tst.ts:274:14:274:20 | [LocalTypeAccess] TypeMap | semmle.label | [LocalTypeAccess] TypeMap | -| tst.ts:274:14:274:23 | [IndexedAccessTypeExpr] TypeMap[K] | semmle.label | [IndexedAccessTypeExpr] TypeMap[K] | -| tst.ts:274:22:274:22 | [LocalTypeAccess] K | semmle.label | [LocalTypeAccess] K | -| tst.ts:274:29:274:32 | [KeywordTypeExpr] void | semmle.label | [KeywordTypeExpr] void | -| tst.ts:276:5:276:5 | [LocalTypeAccess] P | semmle.label | [LocalTypeAccess] P | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | semmle.label | [FunctionDeclStmt] functio ... v); } | -| tst.ts:278:12:278:24 | [VarDecl] processRecord | semmle.label | [VarDecl] processRecord | -| tst.ts:278:26:278:26 | [Identifier] K | semmle.label | [Identifier] K | -| tst.ts:278:26:278:48 | [TypeParameter] K exten ... TypeMap | semmle.label | [TypeParameter] K exten ... TypeMap | -| tst.ts:278:36:278:48 | [KeyofTypeExpr] keyof TypeMap | semmle.label | [KeyofTypeExpr] keyof TypeMap | -| tst.ts:278:42:278:48 | [LocalTypeAccess] TypeMap | semmle.label | [LocalTypeAccess] TypeMap | -| tst.ts:278:51:278:56 | [SimpleParameter] record | semmle.label | [SimpleParameter] record | -| tst.ts:278:59:278:69 | [LocalTypeAccess] UnionRecord | semmle.label | [LocalTypeAccess] UnionRecord | -| tst.ts:278:59:278:72 | [GenericTypeExpr] UnionRecord | semmle.label | [GenericTypeExpr] UnionRecord | -| tst.ts:278:71:278:71 | [LocalTypeAccess] K | semmle.label | [LocalTypeAccess] K | -| tst.ts:278:75:280:3 | [BlockStmt] { r ... v); } | semmle.label | [BlockStmt] { r ... v); } | -| tst.ts:279:5:279:10 | [VarRef] record | semmle.label | [VarRef] record | -| tst.ts:279:5:279:12 | [DotExpr] record.f | semmle.label | [DotExpr] record.f | -| tst.ts:279:5:279:22 | [MethodCallExpr] record.f(record.v) | semmle.label | [MethodCallExpr] record.f(record.v) | -| tst.ts:279:5:279:23 | [ExprStmt] record.f(record.v); | semmle.label | [ExprStmt] record.f(record.v); | -| tst.ts:279:12:279:12 | [Label] f | semmle.label | [Label] f | -| tst.ts:279:14:279:19 | [VarRef] record | semmle.label | [VarRef] record | -| tst.ts:279:14:279:21 | [DotExpr] record.v | semmle.label | [DotExpr] record.v | -| tst.ts:279:21:279:21 | [Label] v | semmle.label | [Label] v | -| tst.ts:282:3:282:15 | [VarRef] processRecord | semmle.label | [VarRef] processRecord | -| tst.ts:282:3:287:4 | [CallExpr] process ... }, }) | semmle.label | [CallExpr] process ... }, }) | -| tst.ts:282:3:287:5 | [ExprStmt] process ... , }); | semmle.label | [ExprStmt] process ... , }); | -| tst.ts:282:17:287:3 | [ObjectExpr] {kind: ...} | semmle.label | [ObjectExpr] {kind: ...} | -| tst.ts:283:5:283:8 | [Label] kind | semmle.label | [Label] kind | -| tst.ts:283:5:283:18 | [Property] kind: "string" | semmle.label | [Property] kind: "string" | -| tst.ts:283:11:283:18 | [Literal] "string" | semmle.label | [Literal] "string" | -| tst.ts:284:5:284:5 | [Label] f | semmle.label | [Label] f | -| tst.ts:284:5:286:5 | [Property] f: (val ... g } | semmle.label | [Property] f: (val ... g } | -| tst.ts:284:8:286:5 | [ArrowFunctionExpr] (val) = ... g } | semmle.label | [ArrowFunctionExpr] (val) = ... g } | -| tst.ts:284:9:284:11 | [SimpleParameter] val | semmle.label | [SimpleParameter] val | -| tst.ts:284:17:286:5 | [BlockStmt] { ... g } | semmle.label | [BlockStmt] { ... g } | -| tst.ts:285:7:285:13 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:285:7:285:17 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:285:7:285:36 | [MethodCallExpr] console ... Case()) | semmle.label | [MethodCallExpr] console ... Case()) | -| tst.ts:285:7:285:37 | [ExprStmt] console ... ase()); | semmle.label | [ExprStmt] console ... ase()); | -| tst.ts:285:15:285:17 | [Label] log | semmle.label | [Label] log | -| tst.ts:285:19:285:21 | [VarRef] val | semmle.label | [VarRef] val | -| tst.ts:285:19:285:33 | [DotExpr] val.toUpperCase | semmle.label | [DotExpr] val.toUpperCase | -| tst.ts:285:19:285:35 | [MethodCallExpr] val.toUpperCase() | semmle.label | [MethodCallExpr] val.toUpperCase() | -| tst.ts:285:23:285:33 | [Label] toUpperCase | semmle.label | [Label] toUpperCase | -| tst.ts:289:3:289:63 | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | -| tst.ts:289:8:289:11 | [Identifier] Func | semmle.label | [Identifier] Func | -| tst.ts:289:15:289:62 | [FunctionExpr] (...arg ... => void | semmle.label | [FunctionExpr] (...arg ... => void | -| tst.ts:289:15:289:62 | [FunctionTypeExpr] (...arg ... => void | semmle.label | [FunctionTypeExpr] (...arg ... => void | -| tst.ts:289:19:289:22 | [SimpleParameter] args | semmle.label | [SimpleParameter] args | -| tst.ts:289:25:289:37 | [TupleTypeExpr] ["a", number] | semmle.label | [TupleTypeExpr] ["a", number] | -| tst.ts:289:25:289:53 | [UnionTypeExpr] ["a", n ... string] | semmle.label | [UnionTypeExpr] ["a", n ... string] | -| tst.ts:289:26:289:28 | [LiteralTypeExpr] "a" | semmle.label | [LiteralTypeExpr] "a" | -| tst.ts:289:31:289:36 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:289:41:289:53 | [TupleTypeExpr] ["b", string] | semmle.label | [TupleTypeExpr] ["b", string] | -| tst.ts:289:42:289:44 | [LiteralTypeExpr] "b" | semmle.label | [LiteralTypeExpr] "b" | -| tst.ts:289:47:289:52 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:289:59:289:62 | [KeywordTypeExpr] void | semmle.label | [KeywordTypeExpr] void | -| tst.ts:291:3:295:4 | [DeclStmt] const f1 = ... | semmle.label | [DeclStmt] const f1 = ... | -| tst.ts:291:9:291:10 | [VarDecl] f1 | semmle.label | [VarDecl] f1 | -| tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | semmle.label | [VariableDeclarator] f1: Fun ... } } | -| tst.ts:291:13:291:16 | [LocalTypeAccess] Func | semmle.label | [LocalTypeAccess] Func | -| tst.ts:291:20:295:3 | [ArrowFunctionExpr] (kind, ... } } | semmle.label | [ArrowFunctionExpr] (kind, ... } } | -| tst.ts:291:21:291:24 | [SimpleParameter] kind | semmle.label | [SimpleParameter] kind | -| tst.ts:291:27:291:33 | [SimpleParameter] payload | semmle.label | [SimpleParameter] payload | -| tst.ts:291:39:295:3 | [BlockStmt] { i ... } } | semmle.label | [BlockStmt] { i ... } } | -| tst.ts:292:5:294:5 | [IfStmt] if (kin ... r } | semmle.label | [IfStmt] if (kin ... r } | -| tst.ts:292:9:292:12 | [VarRef] kind | semmle.label | [VarRef] kind | -| tst.ts:292:9:292:20 | [BinaryExpr] kind === "a" | semmle.label | [BinaryExpr] kind === "a" | -| tst.ts:292:18:292:20 | [Literal] "a" | semmle.label | [Literal] "a" | -| tst.ts:292:23:294:5 | [BlockStmt] { ... r } | semmle.label | [BlockStmt] { ... r } | -| tst.ts:293:7:293:13 | [VarRef] payload | semmle.label | [VarRef] payload | -| tst.ts:293:7:293:21 | [DotExpr] payload.toFixed | semmle.label | [DotExpr] payload.toFixed | -| tst.ts:293:7:293:23 | [MethodCallExpr] payload.toFixed() | semmle.label | [MethodCallExpr] payload.toFixed() | -| tst.ts:293:7:293:24 | [ExprStmt] payload.toFixed(); | semmle.label | [ExprStmt] payload.toFixed(); | -| tst.ts:293:15:293:21 | [Label] toFixed | semmle.label | [Label] toFixed | -| tst.ts:298:1:298:21 | [DeclStmt] const key = ... | semmle.label | [DeclStmt] const key = ... | -| tst.ts:298:1:298:21 | [DeclStmt] const key = ... | semmle.order | 64 | -| tst.ts:298:7:298:9 | [VarDecl] key | semmle.label | [VarDecl] key | -| tst.ts:298:7:298:20 | [VariableDeclarator] key = Symbol() | semmle.label | [VariableDeclarator] key = Symbol() | -| tst.ts:298:13:298:18 | [VarRef] Symbol | semmle.label | [VarRef] Symbol | -| tst.ts:298:13:298:20 | [CallExpr] Symbol() | semmle.label | [CallExpr] Symbol() | -| tst.ts:300:1:300:58 | [DeclStmt] const numberOrString = ... | semmle.label | [DeclStmt] const numberOrString = ... | -| tst.ts:300:1:300:58 | [DeclStmt] const numberOrString = ... | semmle.order | 65 | -| tst.ts:300:7:300:20 | [VarDecl] numberOrString | semmle.label | [VarDecl] numberOrString | -| tst.ts:300:7:300:57 | [VariableDeclarator] numberO ... "hello" | semmle.label | [VariableDeclarator] numberO ... "hello" | -| tst.ts:300:24:300:27 | [VarRef] Math | semmle.label | [VarRef] Math | -| tst.ts:300:24:300:34 | [DotExpr] Math.random | semmle.label | [DotExpr] Math.random | -| tst.ts:300:24:300:36 | [MethodCallExpr] Math.random() | semmle.label | [MethodCallExpr] Math.random() | -| tst.ts:300:24:300:42 | [BinaryExpr] Math.random() < 0.5 | semmle.label | [BinaryExpr] Math.random() < 0.5 | -| tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | semmle.label | [ConditionalExpr] Math.ra ... "hello" | -| tst.ts:300:29:300:34 | [Label] random | semmle.label | [Label] random | -| tst.ts:300:40:300:42 | [Literal] 0.5 | semmle.label | [Literal] 0.5 | -| tst.ts:300:46:300:47 | [Literal] 42 | semmle.label | [Literal] 42 | -| tst.ts:300:51:300:57 | [Literal] "hello" | semmle.label | [Literal] "hello" | -| tst.ts:302:1:304:2 | [DeclStmt] let obj = ... | semmle.label | [DeclStmt] let obj = ... | -| tst.ts:302:1:304:2 | [DeclStmt] let obj = ... | semmle.order | 66 | -| tst.ts:302:5:302:7 | [VarDecl] obj | semmle.label | [VarDecl] obj | -| tst.ts:302:5:304:1 | [VariableDeclarator] obj = { ... ring, } | semmle.label | [VariableDeclarator] obj = { ... ring, } | -| tst.ts:302:11:304:1 | [ObjectExpr] { [ke ... ring, } | semmle.label | [ObjectExpr] { [ke ... ring, } | -| tst.ts:303:3:303:23 | [Property] [key]: ... rString | semmle.label | [Property] [key]: ... rString | -| tst.ts:303:4:303:6 | [VarRef] key | semmle.label | [VarRef] key | -| tst.ts:303:10:303:23 | [VarRef] numberOrString | semmle.label | [VarRef] numberOrString | -| tst.ts:306:1:309:1 | [IfStmt] if (typ ... se(); } | semmle.label | [IfStmt] if (typ ... se(); } | -| tst.ts:306:1:309:1 | [IfStmt] if (typ ... se(); } | semmle.order | 67 | -| tst.ts:306:5:306:19 | [UnaryExpr] typeof obj[key] | semmle.label | [UnaryExpr] typeof obj[key] | -| tst.ts:306:5:306:32 | [BinaryExpr] typeof ... string" | semmle.label | [BinaryExpr] typeof ... string" | -| tst.ts:306:12:306:14 | [VarRef] obj | semmle.label | [VarRef] obj | -| tst.ts:306:12:306:19 | [IndexExpr] obj[key] | semmle.label | [IndexExpr] obj[key] | -| tst.ts:306:16:306:18 | [VarRef] key | semmle.label | [VarRef] key | -| tst.ts:306:25:306:32 | [Literal] "string" | semmle.label | [Literal] "string" | -| tst.ts:306:35:309:1 | [BlockStmt] { let ... se(); } | semmle.label | [BlockStmt] { let ... se(); } | -| tst.ts:307:3:307:21 | [DeclStmt] let str = ... | semmle.label | [DeclStmt] let str = ... | -| tst.ts:307:7:307:9 | [VarDecl] str | semmle.label | [VarDecl] str | -| tst.ts:307:7:307:20 | [VariableDeclarator] str = obj[key] | semmle.label | [VariableDeclarator] str = obj[key] | -| tst.ts:307:13:307:15 | [VarRef] obj | semmle.label | [VarRef] obj | -| tst.ts:307:13:307:20 | [IndexExpr] obj[key] | semmle.label | [IndexExpr] obj[key] | -| tst.ts:307:17:307:19 | [VarRef] key | semmle.label | [VarRef] key | -| tst.ts:308:3:308:5 | [VarRef] str | semmle.label | [VarRef] str | -| tst.ts:308:3:308:17 | [DotExpr] str.toUpperCase | semmle.label | [DotExpr] str.toUpperCase | -| tst.ts:308:3:308:19 | [MethodCallExpr] str.toUpperCase() | semmle.label | [MethodCallExpr] str.toUpperCase() | -| tst.ts:308:3:308:20 | [ExprStmt] str.toUpperCase(); | semmle.label | [ExprStmt] str.toUpperCase(); | -| tst.ts:308:7:308:17 | [Label] toUpperCase | semmle.label | [Label] toUpperCase | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | semmle.label | [FunctionDeclStmt] functio ... void {} | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | semmle.order | 68 | -| tst.ts:313:10:313:10 | [VarDecl] f | semmle.label | [VarDecl] f | -| tst.ts:313:12:313:12 | [Identifier] T | semmle.label | [Identifier] T | -| tst.ts:313:12:313:12 | [TypeParameter] T | semmle.label | [TypeParameter] T | -| tst.ts:313:15:313:17 | [SimpleParameter] arg | semmle.label | [SimpleParameter] arg | -| tst.ts:313:20:315:27 | [InterfaceTypeExpr] { pro ... void } | semmle.label | [InterfaceTypeExpr] { pro ... void } | -| tst.ts:314:3:314:9 | [Label] produce | semmle.label | [Label] produce | -| tst.ts:314:3:314:28 | [FieldDeclaration] produce ... ) => T, | semmle.label | [FieldDeclaration] produce ... ) => T, | -| tst.ts:314:12:314:27 | [FunctionExpr] (n: string) => T | semmle.label | [FunctionExpr] (n: string) => T | -| tst.ts:314:12:314:27 | [FunctionTypeExpr] (n: string) => T | semmle.label | [FunctionTypeExpr] (n: string) => T | -| tst.ts:314:13:314:13 | [SimpleParameter] n | semmle.label | [SimpleParameter] n | -| tst.ts:314:16:314:21 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:314:27:314:27 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:315:3:315:9 | [Label] consume | semmle.label | [Label] consume | -| tst.ts:315:3:315:25 | [FieldDeclaration] consume ... => void | semmle.label | [FieldDeclaration] consume ... => void | -| tst.ts:315:12:315:25 | [FunctionExpr] (x: T) => void | semmle.label | [FunctionExpr] (x: T) => void | -| tst.ts:315:12:315:25 | [FunctionTypeExpr] (x: T) => void | semmle.label | [FunctionTypeExpr] (x: T) => void | -| tst.ts:315:13:315:13 | [SimpleParameter] x | semmle.label | [SimpleParameter] x | -| tst.ts:315:16:315:16 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:315:22:315:25 | [KeywordTypeExpr] void | semmle.label | [KeywordTypeExpr] void | -| tst.ts:316:4:316:7 | [KeywordTypeExpr] void | semmle.label | [KeywordTypeExpr] void | -| tst.ts:316:9:316:10 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:316:11:316:11 | [EmptyStmt] ; | semmle.label | [EmptyStmt] ; | -| tst.ts:316:11:316:11 | [EmptyStmt] ; | semmle.order | 69 | -| tst.ts:318:1:318:1 | [VarRef] f | semmle.label | [VarRef] f | -| tst.ts:318:1:321:2 | [CallExpr] f({ p ... se() }) | semmle.label | [CallExpr] f({ p ... se() }) | -| tst.ts:318:1:321:3 | [ExprStmt] f({ p ... e() }); | semmle.label | [ExprStmt] f({ p ... e() }); | -| tst.ts:318:1:321:3 | [ExprStmt] f({ p ... e() }); | semmle.order | 70 | -| tst.ts:318:3:321:1 | [ObjectExpr] {produce: ...} | semmle.label | [ObjectExpr] {produce: ...} | -| tst.ts:319:3:319:9 | [Label] produce | semmle.label | [Label] produce | -| tst.ts:319:3:319:17 | [Property] produce: n => n | semmle.label | [Property] produce: n => n | -| tst.ts:319:12:319:12 | [SimpleParameter] n | semmle.label | [SimpleParameter] n | -| tst.ts:319:12:319:17 | [ArrowFunctionExpr] n => n | semmle.label | [ArrowFunctionExpr] n => n | -| tst.ts:319:17:319:17 | [VarRef] n | semmle.label | [VarRef] n | -| tst.ts:320:3:320:9 | [Label] consume | semmle.label | [Label] consume | -| tst.ts:320:3:320:31 | [Property] consume ... rCase() | semmle.label | [Property] consume ... rCase() | -| tst.ts:320:12:320:12 | [SimpleParameter] x | semmle.label | [SimpleParameter] x | -| tst.ts:320:12:320:31 | [ArrowFunctionExpr] x => x.toLowerCase() | semmle.label | [ArrowFunctionExpr] x => x.toLowerCase() | -| tst.ts:320:17:320:17 | [VarRef] x | semmle.label | [VarRef] x | -| tst.ts:320:17:320:29 | [DotExpr] x.toLowerCase | semmle.label | [DotExpr] x.toLowerCase | -| tst.ts:320:17:320:31 | [MethodCallExpr] x.toLowerCase() | semmle.label | [MethodCallExpr] x.toLowerCase() | -| tst.ts:320:19:320:29 | [Label] toLowerCase | semmle.label | [Label] toLowerCase | -| tst.ts:325:1:325:36 | [DeclStmt] const ErrorMap = ... | semmle.label | [DeclStmt] const ErrorMap = ... | -| tst.ts:325:1:325:36 | [DeclStmt] const ErrorMap = ... | semmle.order | 71 | -| tst.ts:325:7:325:14 | [VarDecl] ErrorMap | semmle.label | [VarDecl] ErrorMap | -| tst.ts:325:7:325:35 | [VariableDeclarator] ErrorMa ... Error> | semmle.label | [VariableDeclarator] ErrorMa ... Error> | -| tst.ts:325:18:325:20 | [VarRef] Map | semmle.label | [VarRef] Map | -| tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | semmle.label | [ExpressionWithTypeArguments] Map | -| tst.ts:325:22:325:27 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:325:30:325:34 | [LocalTypeAccess] Error | semmle.label | [LocalTypeAccess] Error | -| tst.ts:327:1:327:32 | [DeclStmt] const errorMap = ... | semmle.label | [DeclStmt] const errorMap = ... | -| tst.ts:327:1:327:32 | [DeclStmt] const errorMap = ... | semmle.order | 72 | -| tst.ts:327:7:327:14 | [VarDecl] errorMap | semmle.label | [VarDecl] errorMap | -| tst.ts:327:7:327:31 | [VariableDeclarator] errorMa ... orMap() | semmle.label | [VariableDeclarator] errorMa ... orMap() | -| tst.ts:327:18:327:31 | [NewExpr] new ErrorMap() | semmle.label | [NewExpr] new ErrorMap() | -| tst.ts:327:22:327:29 | [VarRef] ErrorMap | semmle.label | [VarRef] ErrorMap | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | semmle.order | 73 | -| tst.ts:331:6:331:16 | [Identifier] FirstString | semmle.label | [Identifier] FirstString | -| tst.ts:331:18:331:18 | [Identifier] T | semmle.label | [Identifier] T | -| tst.ts:331:18:331:18 | [TypeParameter] T | semmle.label | [TypeParameter] T | -| tst.ts:332:3:332:3 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | semmle.label | [ConditionalTypeExpr] T exten ... : never | -| tst.ts:332:13:332:50 | [TupleTypeExpr] [infer ... nown[]] | semmle.label | [TupleTypeExpr] [infer ... nown[]] | -| tst.ts:332:14:332:35 | [InferTypeExpr] infer S ... string | semmle.label | [InferTypeExpr] infer S ... string | -| tst.ts:332:20:332:20 | [Identifier] S | semmle.label | [Identifier] S | -| tst.ts:332:20:332:35 | [TypeParameter] S extends string | semmle.label | [TypeParameter] S extends string | -| tst.ts:332:30:332:35 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:332:38:332:49 | [RestTypeExpr] ...unknown[] | semmle.label | [RestTypeExpr] ...unknown[] | -| tst.ts:332:41:332:47 | [KeywordTypeExpr] unknown | semmle.label | [KeywordTypeExpr] unknown | -| tst.ts:332:41:332:49 | [ArrayTypeExpr] unknown[] | semmle.label | [ArrayTypeExpr] unknown[] | -| tst.ts:333:9:333:9 | [LocalTypeAccess] S | semmle.label | [LocalTypeAccess] S | -| tst.ts:334:9:334:13 | [KeywordTypeExpr] never | semmle.label | [KeywordTypeExpr] never | -| tst.ts:336:1:336:51 | [TypeAliasDeclaration,TypeDefinition] type F ... lean]>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type F ... lean]>; | -| tst.ts:336:1:336:51 | [TypeAliasDeclaration,TypeDefinition] type F ... lean]>; | semmle.order | 74 | -| tst.ts:336:6:336:6 | [Identifier] F | semmle.label | [Identifier] F | -| tst.ts:336:10:336:20 | [LocalTypeAccess] FirstString | semmle.label | [LocalTypeAccess] FirstString | -| tst.ts:336:10:336:50 | [GenericTypeExpr] FirstSt ... olean]> | semmle.label | [GenericTypeExpr] FirstSt ... olean]> | -| tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | semmle.label | [TupleTypeExpr] ['a' \| ... oolean] | -| tst.ts:336:23:336:25 | [LiteralTypeExpr] 'a' | semmle.label | [LiteralTypeExpr] 'a' | -| tst.ts:336:23:336:31 | [UnionTypeExpr] 'a' \| 'b' | semmle.label | [UnionTypeExpr] 'a' \| 'b' | -| tst.ts:336:29:336:31 | [LiteralTypeExpr] 'b' | semmle.label | [LiteralTypeExpr] 'b' | -| tst.ts:336:34:336:39 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:336:42:336:48 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| tst.ts:338:1:338:17 | [DeclStmt] const a = ... | semmle.label | [DeclStmt] const a = ... | -| tst.ts:338:1:338:17 | [DeclStmt] const a = ... | semmle.order | 75 | -| tst.ts:338:7:338:7 | [VarDecl] a | semmle.label | [VarDecl] a | -| tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | semmle.label | [VariableDeclarator] a: F = 'a' | -| tst.ts:338:10:338:10 | [LocalTypeAccess] F | semmle.label | [LocalTypeAccess] F | -| tst.ts:338:14:338:16 | [Literal] 'a' | semmle.label | [Literal] 'a' | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | semmle.order | 76 | -| tst.ts:342:11:342:15 | [Identifier] State | semmle.label | [Identifier] State | -| tst.ts:342:17:342:24 | [TypeParameter] in out T | semmle.label | [TypeParameter] in out T | -| tst.ts:342:24:342:24 | [Identifier] T | semmle.label | [Identifier] T | -| tst.ts:343:3:343:5 | [Label] get | semmle.label | [Label] get | -| tst.ts:343:3:343:15 | [FieldDeclaration] get: () => T; | semmle.label | [FieldDeclaration] get: () => T; | -| tst.ts:343:8:343:14 | [FunctionExpr] () => T | semmle.label | [FunctionExpr] () => T | -| tst.ts:343:8:343:14 | [FunctionTypeExpr] () => T | semmle.label | [FunctionTypeExpr] () => T | -| tst.ts:343:14:343:14 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:344:3:344:5 | [Label] set | semmle.label | [Label] set | -| tst.ts:344:3:344:26 | [FieldDeclaration] set: (v ... > void; | semmle.label | [FieldDeclaration] set: (v ... > void; | -| tst.ts:344:8:344:25 | [FunctionExpr] (value: T) => void | semmle.label | [FunctionExpr] (value: T) => void | -| tst.ts:344:8:344:25 | [FunctionTypeExpr] (value: T) => void | semmle.label | [FunctionTypeExpr] (value: T) => void | -| tst.ts:344:9:344:13 | [SimpleParameter] value | semmle.label | [SimpleParameter] value | -| tst.ts:344:16:344:16 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:344:22:344:25 | [KeywordTypeExpr] void | semmle.label | [KeywordTypeExpr] void | -| tst.ts:347:1:350:1 | [DeclStmt] const state = ... | semmle.label | [DeclStmt] const state = ... | -| tst.ts:347:1:350:1 | [DeclStmt] const state = ... | semmle.order | 77 | -| tst.ts:347:7:347:11 | [VarDecl] state | semmle.label | [VarDecl] state | -| tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | semmle.label | [VariableDeclarator] state: ... > { } } | -| tst.ts:347:14:347:18 | [LocalTypeAccess] State | semmle.label | [LocalTypeAccess] State | -| tst.ts:347:14:347:26 | [GenericTypeExpr] State | semmle.label | [GenericTypeExpr] State | -| tst.ts:347:20:347:25 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:347:30:350:1 | [ObjectExpr] {get: ...} | semmle.label | [ObjectExpr] {get: ...} | -| tst.ts:348:3:348:5 | [Label] get | semmle.label | [Label] get | -| tst.ts:348:3:348:15 | [Property] get: () => 42 | semmle.label | [Property] get: () => 42 | -| tst.ts:348:8:348:15 | [ArrowFunctionExpr] () => 42 | semmle.label | [ArrowFunctionExpr] () => 42 | -| tst.ts:348:14:348:15 | [Literal] 42 | semmle.label | [Literal] 42 | -| tst.ts:349:3:349:5 | [Label] set | semmle.label | [Label] set | -| tst.ts:349:3:349:21 | [Property] set: (value) => { } | semmle.label | [Property] set: (value) => { } | -| tst.ts:349:8:349:21 | [ArrowFunctionExpr] (value) => { } | semmle.label | [ArrowFunctionExpr] (value) => { } | -| tst.ts:349:9:349:13 | [SimpleParameter] value | semmle.label | [SimpleParameter] value | -| tst.ts:349:19:349:21 | [BlockStmt] { } | semmle.label | [BlockStmt] { } | -| tst.ts:352:1:352:29 | [DeclStmt] const fortyTwo = ... | semmle.label | [DeclStmt] const fortyTwo = ... | -| tst.ts:352:1:352:29 | [DeclStmt] const fortyTwo = ... | semmle.order | 78 | -| tst.ts:352:7:352:14 | [VarDecl] fortyTwo | semmle.label | [VarDecl] fortyTwo | -| tst.ts:352:7:352:28 | [VariableDeclarator] fortyTw ... e.get() | semmle.label | [VariableDeclarator] fortyTw ... e.get() | -| tst.ts:352:18:352:22 | [VarRef] state | semmle.label | [VarRef] state | -| tst.ts:352:18:352:26 | [DotExpr] state.get | semmle.label | [DotExpr] state.get | -| tst.ts:352:18:352:28 | [MethodCallExpr] state.get() | semmle.label | [MethodCallExpr] state.get() | -| tst.ts:352:24:352:26 | [Label] get | semmle.label | [Label] get | -| tst.ts:356:1:356:44 | [ImportDeclaration] import ... S.mjs'; | semmle.label | [ImportDeclaration] import ... S.mjs'; | -| tst.ts:356:1:356:44 | [ImportDeclaration] import ... S.mjs'; | semmle.order | 79 | -| tst.ts:356:8:356:18 | [ImportSpecifier] tstModuleES | semmle.label | [ImportSpecifier] tstModuleES | -| tst.ts:356:8:356:18 | [VarDecl] tstModuleES | semmle.label | [VarDecl] tstModuleES | -| tst.ts:356:25:356:43 | [Literal] './tstModuleES.mjs' | semmle.label | [Literal] './tstModuleES.mjs' | -| tst.ts:358:1:358:7 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:358:1:358:11 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:358:1:358:26 | [MethodCallExpr] console ... leES()) | semmle.label | [MethodCallExpr] console ... leES()) | -| tst.ts:358:1:358:27 | [ExprStmt] console ... eES()); | semmle.label | [ExprStmt] console ... eES()); | -| tst.ts:358:1:358:27 | [ExprStmt] console ... eES()); | semmle.order | 80 | -| tst.ts:358:9:358:11 | [Label] log | semmle.label | [Label] log | -| tst.ts:358:13:358:23 | [VarRef] tstModuleES | semmle.label | [VarRef] tstModuleES | -| tst.ts:358:13:358:25 | [CallExpr] tstModuleES() | semmle.label | [CallExpr] tstModuleES() | -| tst.ts:360:1:360:50 | [ImportDeclaration] import ... S.cjs'; | semmle.label | [ImportDeclaration] import ... S.cjs'; | -| tst.ts:360:1:360:50 | [ImportDeclaration] import ... S.cjs'; | semmle.order | 81 | -| tst.ts:360:10:360:21 | [ImportSpecifier] tstModuleCJS | semmle.label | [ImportSpecifier] tstModuleCJS | -| tst.ts:360:10:360:21 | [Label] tstModuleCJS | semmle.label | [Label] tstModuleCJS | -| tst.ts:360:10:360:21 | [VarDecl] tstModuleCJS | semmle.label | [VarDecl] tstModuleCJS | -| tst.ts:360:30:360:49 | [Literal] './tstModuleCJS.cjs' | semmle.label | [Literal] './tstModuleCJS.cjs' | -| tst.ts:362:1:362:7 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:362:1:362:11 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:362:1:362:27 | [MethodCallExpr] console ... eCJS()) | semmle.label | [MethodCallExpr] console ... eCJS()) | -| tst.ts:362:1:362:28 | [ExprStmt] console ... CJS()); | semmle.label | [ExprStmt] console ... CJS()); | -| tst.ts:362:1:362:28 | [ExprStmt] console ... CJS()); | semmle.order | 82 | -| tst.ts:362:9:362:11 | [Label] log | semmle.label | [Label] log | -| tst.ts:362:13:362:24 | [VarRef] tstModuleCJS | semmle.label | [VarRef] tstModuleCJS | -| tst.ts:362:13:362:26 | [CallExpr] tstModuleCJS() | semmle.label | [CallExpr] tstModuleCJS() | -| tst.ts:368:1:368:34 | [ImportDeclaration] import ... ffixA'; | semmle.label | [ImportDeclaration] import ... ffixA'; | -| tst.ts:368:1:368:34 | [ImportDeclaration] import ... ffixA'; | semmle.order | 83 | -| tst.ts:368:8:368:13 | [ImportSpecifier] * as A | semmle.label | [ImportSpecifier] * as A | -| tst.ts:368:13:368:13 | [VarDecl] A | semmle.label | [VarDecl] A | -| tst.ts:368:20:368:33 | [Literal] './tstSuffixA' | semmle.label | [Literal] './tstSuffixA' | -| tst.ts:370:1:370:7 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:370:1:370:11 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:370:1:370:29 | [MethodCallExpr] console ... File()) | semmle.label | [MethodCallExpr] console ... File()) | -| tst.ts:370:1:370:30 | [ExprStmt] console ... ile()); | semmle.label | [ExprStmt] console ... ile()); | -| tst.ts:370:1:370:30 | [ExprStmt] console ... ile()); | semmle.order | 84 | -| tst.ts:370:9:370:11 | [Label] log | semmle.label | [Label] log | -| tst.ts:370:13:370:13 | [VarRef] A | semmle.label | [VarRef] A | -| tst.ts:370:13:370:26 | [DotExpr] A.resolvedFile | semmle.label | [DotExpr] A.resolvedFile | -| tst.ts:370:13:370:28 | [MethodCallExpr] A.resolvedFile() | semmle.label | [MethodCallExpr] A.resolvedFile() | -| tst.ts:370:15:370:26 | [Label] resolvedFile | semmle.label | [Label] resolvedFile | -| tst.ts:372:1:372:34 | [ImportDeclaration] import ... ffixB'; | semmle.label | [ImportDeclaration] import ... ffixB'; | -| tst.ts:372:1:372:34 | [ImportDeclaration] import ... ffixB'; | semmle.order | 85 | -| tst.ts:372:8:372:13 | [ImportSpecifier] * as B | semmle.label | [ImportSpecifier] * as B | -| tst.ts:372:13:372:13 | [VarDecl] B | semmle.label | [VarDecl] B | -| tst.ts:372:20:372:33 | [Literal] './tstSuffixB' | semmle.label | [Literal] './tstSuffixB' | -| tst.ts:374:1:374:7 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:374:1:374:11 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:374:1:374:29 | [MethodCallExpr] console ... File()) | semmle.label | [MethodCallExpr] console ... File()) | -| tst.ts:374:1:374:30 | [ExprStmt] console ... ile()); | semmle.label | [ExprStmt] console ... ile()); | -| tst.ts:374:1:374:30 | [ExprStmt] console ... ile()); | semmle.order | 86 | -| tst.ts:374:9:374:11 | [Label] log | semmle.label | [Label] log | -| tst.ts:374:13:374:13 | [VarRef] B | semmle.label | [VarRef] B | -| tst.ts:374:13:374:26 | [DotExpr] B.resolvedFile | semmle.label | [DotExpr] B.resolvedFile | -| tst.ts:374:13:374:28 | [MethodCallExpr] B.resolvedFile() | semmle.label | [MethodCallExpr] B.resolvedFile() | -| tst.ts:374:15:374:26 | [Label] resolvedFile | semmle.label | [Label] resolvedFile | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | semmle.label | [NamespaceDeclaration] module ... ; } | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | semmle.order | 87 | -| tst.ts:379:8:379:11 | [VarDecl] TS48 | semmle.label | [VarDecl] TS48 | -| tst.ts:381:5:381:73 | [TypeAliasDeclaration,TypeDefinition] type So ... never; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type So ... never; | -| tst.ts:381:10:381:16 | [Identifier] SomeNum | semmle.label | [Identifier] SomeNum | -| tst.ts:381:20:381:24 | [LiteralTypeExpr] "100" | semmle.label | [LiteralTypeExpr] "100" | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | semmle.label | [ConditionalTypeExpr] "100" e ... : never | -| tst.ts:381:34:381:60 | [TemplateLiteralTypeExpr] `${infe ... umber}` | semmle.label | [TemplateLiteralTypeExpr] `${infe ... umber}` | -| tst.ts:381:37:381:58 | [InferTypeExpr] infer U ... number | semmle.label | [InferTypeExpr] infer U ... number | -| tst.ts:381:43:381:43 | [Identifier] U | semmle.label | [Identifier] U | -| tst.ts:381:43:381:58 | [TypeParameter] U extends number | semmle.label | [TypeParameter] U extends number | -| tst.ts:381:53:381:58 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:381:64:381:64 | [LocalTypeAccess] U | semmle.label | [LocalTypeAccess] U | -| tst.ts:381:68:381:72 | [KeywordTypeExpr] never | semmle.label | [KeywordTypeExpr] never | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | semmle.label | [FunctionDeclStmt] declare ... T): T; | -| tst.ts:383:22:383:35 | [VarDecl] chooseRandomly | semmle.label | [VarDecl] chooseRandomly | -| tst.ts:383:37:383:37 | [Identifier] T | semmle.label | [Identifier] T | -| tst.ts:383:37:383:37 | [TypeParameter] T | semmle.label | [TypeParameter] T | -| tst.ts:383:40:383:40 | [SimpleParameter] x | semmle.label | [SimpleParameter] x | -| tst.ts:383:43:383:43 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:383:46:383:46 | [SimpleParameter] y | semmle.label | [SimpleParameter] y | -| tst.ts:383:49:383:49 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:383:53:383:53 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:385:5:385:74 | [DeclStmt] let [a, ... ye!"]); | semmle.label | [DeclStmt] let [a, ... ye!"]); | -| tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | semmle.label | [ArrayPattern] [a, b, c] | -| tst.ts:385:9:385:73 | [VariableDeclarator] [a, b, ... bye!"]) | semmle.label | [VariableDeclarator] [a, b, ... bye!"]) | -| tst.ts:385:10:385:10 | [VarDecl] a | semmle.label | [VarDecl] a | -| tst.ts:385:13:385:13 | [VarDecl] b | semmle.label | [VarDecl] b | -| tst.ts:385:16:385:16 | [VarDecl] c | semmle.label | [VarDecl] c | -| tst.ts:385:21:385:34 | [VarRef] chooseRandomly | semmle.label | [VarRef] chooseRandomly | -| tst.ts:385:21:385:73 | [CallExpr] chooseR ... bye!"]) | semmle.label | [CallExpr] chooseR ... bye!"]) | -| tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | semmle.label | [ArrayExpr] [42, true, "hi!"] | -| tst.ts:385:37:385:38 | [Literal] 42 | semmle.label | [Literal] 42 | -| tst.ts:385:41:385:44 | [Literal] true | semmle.label | [Literal] true | -| tst.ts:385:47:385:51 | [Literal] "hi!" | semmle.label | [Literal] "hi!" | -| tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | semmle.label | [ArrayExpr] [0, false, "bye!"] | -| tst.ts:385:56:385:56 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:385:59:385:63 | [Literal] false | semmle.label | [Literal] false | -| tst.ts:385:66:385:71 | [Literal] "bye!" | semmle.label | [Literal] "bye!" | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | semmle.label | [NamespaceDeclaration] module ... } } } | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | semmle.order | 88 | -| tst.ts:390:8:390:11 | [VarDecl] TS49 | semmle.label | [VarDecl] TS49 | -| tst.ts:391:3:391:41 | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | -| tst.ts:391:8:391:13 | [Identifier] Colors | semmle.label | [Identifier] Colors | -| tst.ts:391:17:391:21 | [LiteralTypeExpr] "red" | semmle.label | [LiteralTypeExpr] "red" | -| tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | semmle.label | [UnionTypeExpr] "red" \| ... "blue" | -| tst.ts:391:25:391:31 | [LiteralTypeExpr] "green" | semmle.label | [LiteralTypeExpr] "green" | -| tst.ts:391:35:391:40 | [LiteralTypeExpr] "blue" | semmle.label | [LiteralTypeExpr] "blue" | -| tst.ts:393:3:393:56 | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | -| tst.ts:393:8:393:10 | [Identifier] RGB | semmle.label | [Identifier] RGB | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | semmle.label | [TupleTypeExpr] [red: n ... number] | -| tst.ts:393:15:393:17 | [Identifier] red | semmle.label | [Identifier] red | -| tst.ts:393:20:393:25 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:393:28:393:32 | [Identifier] green | semmle.label | [Identifier] green | -| tst.ts:393:35:393:40 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:393:43:393:46 | [Identifier] blue | semmle.label | [Identifier] blue | -| tst.ts:393:49:393:54 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:395:3:399:43 | [DeclStmt] const palette = ... | semmle.label | [DeclStmt] const palette = ... | -| tst.ts:395:9:395:15 | [VarDecl] palette | semmle.label | [VarDecl] palette | -| tst.ts:395:9:399:42 | [VariableDeclarator] palette ... \| RGB> | semmle.label | [VariableDeclarator] palette ... \| RGB> | -| tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | semmle.label | [ObjectExpr] {red: ...} | -| tst.ts:395:19:399:42 | [SatisfiesExpr] { r ... \| RGB> | semmle.label | [SatisfiesExpr] { r ... \| RGB> | -| tst.ts:396:5:396:7 | [Label] red | semmle.label | [Label] red | -| tst.ts:396:5:396:20 | [Property] red: [255, 0, 0] | semmle.label | [Property] red: [255, 0, 0] | -| tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | semmle.label | [ArrayExpr] [255, 0, 0] | -| tst.ts:396:11:396:13 | [Literal] 255 | semmle.label | [Literal] 255 | -| tst.ts:396:16:396:16 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:396:19:396:19 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:397:5:397:9 | [Label] green | semmle.label | [Label] green | -| tst.ts:397:5:397:20 | [Property] green: "#00ff00" | semmle.label | [Property] green: "#00ff00" | -| tst.ts:397:12:397:20 | [Literal] "#00ff00" | semmle.label | [Literal] "#00ff00" | -| tst.ts:398:5:398:8 | [Label] bleu | semmle.label | [Label] bleu | -| tst.ts:398:5:398:21 | [Property] bleu: [0, 0, 255] | semmle.label | [Property] bleu: [0, 0, 255] | -| tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | semmle.label | [ArrayExpr] [0, 0, 255] | -| tst.ts:398:12:398:12 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:398:15:398:15 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:398:18:398:20 | [Literal] 255 | semmle.label | [Literal] 255 | -| tst.ts:399:15:399:20 | [LocalTypeAccess] Record | semmle.label | [LocalTypeAccess] Record | -| tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | semmle.label | [GenericTypeExpr] Record< ... \| RGB> | -| tst.ts:399:22:399:27 | [LocalTypeAccess] Colors | semmle.label | [LocalTypeAccess] Colors | -| tst.ts:399:30:399:35 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:399:30:399:41 | [UnionTypeExpr] string \| RGB | semmle.label | [UnionTypeExpr] string \| RGB | -| tst.ts:399:39:399:41 | [LocalTypeAccess] RGB | semmle.label | [LocalTypeAccess] RGB | -| tst.ts:402:3:402:41 | [DeclStmt] const redComponent = ... | semmle.label | [DeclStmt] const redComponent = ... | -| tst.ts:402:9:402:20 | [VarDecl] redComponent | semmle.label | [VarDecl] redComponent | -| tst.ts:402:9:402:40 | [VariableDeclarator] redComp ... d.at(0) | semmle.label | [VariableDeclarator] redComp ... d.at(0) | -| tst.ts:402:24:402:30 | [VarRef] palette | semmle.label | [VarRef] palette | -| tst.ts:402:24:402:34 | [DotExpr] palette.red | semmle.label | [DotExpr] palette.red | -| tst.ts:402:24:402:37 | [DotExpr] palette.red.at | semmle.label | [DotExpr] palette.red.at | -| tst.ts:402:24:402:40 | [MethodCallExpr] palette.red.at(0) | semmle.label | [MethodCallExpr] palette.red.at(0) | -| tst.ts:402:32:402:34 | [Label] red | semmle.label | [Label] red | -| tst.ts:402:36:402:37 | [Label] at | semmle.label | [Label] at | -| tst.ts:402:39:402:39 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:404:3:406:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | -| tst.ts:404:13:404:18 | [Identifier] RGBObj | semmle.label | [Identifier] RGBObj | -| tst.ts:405:5:405:7 | [Label] red | semmle.label | [Label] red | -| tst.ts:405:5:405:16 | [FieldDeclaration] red: number; | semmle.label | [FieldDeclaration] red: number; | -| tst.ts:405:10:405:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:408:3:410:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | -| tst.ts:408:13:408:18 | [Identifier] HSVObj | semmle.label | [Identifier] HSVObj | -| tst.ts:409:5:409:7 | [Label] hue | semmle.label | [Label] hue | -| tst.ts:409:5:409:16 | [FieldDeclaration] hue: number; | semmle.label | [FieldDeclaration] hue: number; | -| tst.ts:409:10:409:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | semmle.label | [FunctionDeclStmt] functio ... } } | -| tst.ts:412:12:412:19 | [VarDecl] setColor | semmle.label | [VarDecl] setColor | -| tst.ts:412:21:412:25 | [SimpleParameter] color | semmle.label | [SimpleParameter] color | -| tst.ts:412:28:412:33 | [LocalTypeAccess] RGBObj | semmle.label | [LocalTypeAccess] RGBObj | -| tst.ts:412:28:412:42 | [UnionTypeExpr] RGBObj \| HSVObj | semmle.label | [UnionTypeExpr] RGBObj \| HSVObj | -| tst.ts:412:37:412:42 | [LocalTypeAccess] HSVObj | semmle.label | [LocalTypeAccess] HSVObj | -| tst.ts:412:45:416:3 | [BlockStmt] { i ... } } | semmle.label | [BlockStmt] { i ... } } | -| tst.ts:413:5:415:5 | [IfStmt] if ("hu ... j } | semmle.label | [IfStmt] if ("hu ... j } | -| tst.ts:413:9:413:13 | [Literal] "hue" | semmle.label | [Literal] "hue" | -| tst.ts:413:9:413:22 | [BinaryExpr] "hue" in color | semmle.label | [BinaryExpr] "hue" in color | -| tst.ts:413:18:413:22 | [VarRef] color | semmle.label | [VarRef] color | -| tst.ts:413:25:415:5 | [BlockStmt] { ... j } | semmle.label | [BlockStmt] { ... j } | -| tst.ts:414:7:414:20 | [DeclStmt] let h = ... | semmle.label | [DeclStmt] let h = ... | -| tst.ts:414:11:414:11 | [VarDecl] h | semmle.label | [VarDecl] h | -| tst.ts:414:11:414:19 | [VariableDeclarator] h = color | semmle.label | [VariableDeclarator] h = color | -| tst.ts:414:15:414:19 | [VarRef] color | semmle.label | [VarRef] color | -| tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.label | [ClassDefinition,TypeDefinition] class P ... } } | -| tst.ts:419:9:419:14 | [VarDecl] Person | semmle.label | [VarDecl] Person | -| tst.ts:420:5:420:26 | [FieldDeclaration] accesso ... string; | semmle.label | [FieldDeclaration] accesso ... string; | -| tst.ts:420:14:420:17 | [Label] name | semmle.label | [Label] name | -| tst.ts:420:20:420:25 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:422:5:424:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.label | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | -| tst.ts:422:5:424:5 | [FunctionExpr] constru ... ; } | semmle.label | [FunctionExpr] constru ... ; } | -| tst.ts:422:5:424:5 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:422:17:422:20 | [SimpleParameter] name | semmle.label | [SimpleParameter] name | -| tst.ts:422:23:422:28 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:422:31:424:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:423:7:423:10 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:423:7:423:15 | [DotExpr] this.name | semmle.label | [DotExpr] this.name | -| tst.ts:423:7:423:22 | [AssignExpr] this.name = name | semmle.label | [AssignExpr] this.name = name | -| tst.ts:423:7:423:23 | [ExprStmt] this.name = name; | semmle.label | [ExprStmt] this.name = name; | -| tst.ts:423:12:423:15 | [Label] name | semmle.label | [Label] name | -| tst.ts:423:19:423:22 | [VarRef] name | semmle.label | [VarRef] name | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | semmle.label | [NamespaceDeclaration] module ... - "b" } | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | semmle.order | 89 | -| tst.ts:430:8:430:11 | [VarDecl] TS50 | semmle.label | [VarDecl] TS50 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | semmle.label | [FunctionDeclStmt] functio ... ; } | -| tst.ts:431:14:431:25 | [VarDecl] loggedMethod | semmle.label | [VarDecl] loggedMethod | -| tst.ts:431:27:431:30 | [Identifier] This | semmle.label | [Identifier] This | -| tst.ts:431:27:431:30 | [TypeParameter] This | semmle.label | [TypeParameter] This | -| tst.ts:431:33:431:36 | [Identifier] Args | semmle.label | [Identifier] Args | -| tst.ts:431:33:431:50 | [TypeParameter] Args extends any[] | semmle.label | [TypeParameter] Args extends any[] | -| tst.ts:431:46:431:48 | [KeywordTypeExpr] any | semmle.label | [KeywordTypeExpr] any | -| tst.ts:431:46:431:50 | [ArrayTypeExpr] any[] | semmle.label | [ArrayTypeExpr] any[] | -| tst.ts:431:53:431:58 | [Identifier] Return | semmle.label | [Identifier] Return | -| tst.ts:431:53:431:58 | [TypeParameter] Return | semmle.label | [TypeParameter] Return | -| tst.ts:432:9:432:14 | [SimpleParameter] target | semmle.label | [SimpleParameter] target | -| tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | semmle.label | [FunctionExpr] (this: ... Return | -| tst.ts:432:17:432:53 | [FunctionTypeExpr] (this: ... Return | semmle.label | [FunctionTypeExpr] (this: ... Return | -| tst.ts:432:24:432:27 | [LocalTypeAccess] This | semmle.label | [LocalTypeAccess] This | -| tst.ts:432:33:432:36 | [SimpleParameter] args | semmle.label | [SimpleParameter] args | -| tst.ts:432:39:432:42 | [LocalTypeAccess] Args | semmle.label | [LocalTypeAccess] Args | -| tst.ts:432:48:432:53 | [LocalTypeAccess] Return | semmle.label | [LocalTypeAccess] Return | -| tst.ts:433:9:433:15 | [SimpleParameter] context | semmle.label | [SimpleParameter] context | -| tst.ts:433:18:433:44 | [LocalTypeAccess] ClassMethodDecoratorContext | semmle.label | [LocalTypeAccess] ClassMethodDecoratorContext | -| tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | semmle.label | [GenericTypeExpr] ClassMe ... Return> | -| tst.ts:433:46:433:49 | [LocalTypeAccess] This | semmle.label | [LocalTypeAccess] This | -| tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | semmle.label | [FunctionExpr] (this: ... Return | -| tst.ts:433:52:433:88 | [FunctionTypeExpr] (this: ... Return | semmle.label | [FunctionTypeExpr] (this: ... Return | -| tst.ts:433:59:433:62 | [LocalTypeAccess] This | semmle.label | [LocalTypeAccess] This | -| tst.ts:433:68:433:71 | [SimpleParameter] args | semmle.label | [SimpleParameter] args | -| tst.ts:433:74:433:77 | [LocalTypeAccess] Args | semmle.label | [LocalTypeAccess] Args | -| tst.ts:433:83:433:88 | [LocalTypeAccess] Return | semmle.label | [LocalTypeAccess] Return | -| tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | semmle.label | [BlockStmt] { ... ; } | -| tst.ts:435:9:435:48 | [DeclStmt] const methodName = ... | semmle.label | [DeclStmt] const methodName = ... | -| tst.ts:435:15:435:24 | [VarDecl] methodName | semmle.label | [VarDecl] methodName | -| tst.ts:435:15:435:47 | [VariableDeclarator] methodN ... t.name) | semmle.label | [VariableDeclarator] methodN ... t.name) | -| tst.ts:435:28:435:33 | [VarRef] String | semmle.label | [VarRef] String | -| tst.ts:435:28:435:47 | [CallExpr] String(context.name) | semmle.label | [CallExpr] String(context.name) | -| tst.ts:435:35:435:41 | [VarRef] context | semmle.label | [VarRef] context | -| tst.ts:435:35:435:46 | [DotExpr] context.name | semmle.label | [DotExpr] context.name | -| tst.ts:435:43:435:46 | [Label] name | semmle.label | [Label] name | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | semmle.label | [FunctionDeclStmt] functio ... } | -| tst.ts:437:18:437:34 | [VarDecl] replacementMethod | semmle.label | [VarDecl] replacementMethod | -| tst.ts:437:42:437:45 | [LocalTypeAccess] This | semmle.label | [LocalTypeAccess] This | -| tst.ts:437:51:437:54 | [SimpleParameter] args | semmle.label | [SimpleParameter] args | -| tst.ts:437:57:437:60 | [LocalTypeAccess] Args | semmle.label | [LocalTypeAccess] Args | -| tst.ts:437:64:437:69 | [LocalTypeAccess] Return | semmle.label | [LocalTypeAccess] Return | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | semmle.label | [BlockStmt] { ... } | -| tst.ts:438:13:438:19 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:438:13:438:23 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:438:13:438:64 | [ExprStmt] console ... me}'.`) | semmle.label | [ExprStmt] console ... me}'.`) | -| tst.ts:438:13:438:64 | [MethodCallExpr] console ... me}'.`) | semmle.label | [MethodCallExpr] console ... me}'.`) | -| tst.ts:438:21:438:23 | [Label] log | semmle.label | [Label] log | -| tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | semmle.label | [TemplateLiteral] `LOG: E ... ame}'.` | -| tst.ts:438:26:438:47 | [TemplateElement] LOG: En ... ethod ' | semmle.label | [TemplateElement] LOG: En ... ethod ' | -| tst.ts:438:50:438:59 | [VarRef] methodName | semmle.label | [VarRef] methodName | -| tst.ts:438:61:438:62 | [TemplateElement] '. | semmle.label | [TemplateElement] '. | -| tst.ts:439:13:439:54 | [DeclStmt] const result = ... | semmle.label | [DeclStmt] const result = ... | -| tst.ts:439:19:439:24 | [VarDecl] result | semmle.label | [VarDecl] result | -| tst.ts:439:19:439:53 | [VariableDeclarator] result ... ..args) | semmle.label | [VariableDeclarator] result ... ..args) | -| tst.ts:439:28:439:33 | [VarRef] target | semmle.label | [VarRef] target | -| tst.ts:439:28:439:38 | [DotExpr] target.call | semmle.label | [DotExpr] target.call | -| tst.ts:439:28:439:53 | [MethodCallExpr] target. ... ..args) | semmle.label | [MethodCallExpr] target. ... ..args) | -| tst.ts:439:35:439:38 | [Label] call | semmle.label | [Label] call | -| tst.ts:439:40:439:43 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:439:46:439:52 | [SpreadElement] ...args | semmle.label | [SpreadElement] ...args | -| tst.ts:439:49:439:52 | [VarRef] args | semmle.label | [VarRef] args | -| tst.ts:440:13:440:19 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:440:13:440:23 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:440:13:440:63 | [ExprStmt] console ... me}'.`) | semmle.label | [ExprStmt] console ... me}'.`) | -| tst.ts:440:13:440:63 | [MethodCallExpr] console ... me}'.`) | semmle.label | [MethodCallExpr] console ... me}'.`) | -| tst.ts:440:21:440:23 | [Label] log | semmle.label | [Label] log | -| tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | semmle.label | [TemplateLiteral] `LOG: E ... ame}'.` | -| tst.ts:440:26:440:46 | [TemplateElement] LOG: Ex ... ethod ' | semmle.label | [TemplateElement] LOG: Ex ... ethod ' | -| tst.ts:440:49:440:58 | [VarRef] methodName | semmle.label | [VarRef] methodName | -| tst.ts:440:60:440:61 | [TemplateElement] '. | semmle.label | [TemplateElement] '. | -| tst.ts:441:13:441:26 | [ReturnStmt] return result; | semmle.label | [ReturnStmt] return result; | -| tst.ts:441:20:441:25 | [VarRef] result | semmle.label | [VarRef] result | -| tst.ts:444:9:444:33 | [ReturnStmt] return ... Method; | semmle.label | [ReturnStmt] return ... Method; | -| tst.ts:444:16:444:32 | [VarRef] replacementMethod | semmle.label | [VarRef] replacementMethod | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.label | [ClassDefinition,TypeDefinition] class P ... } } | -| tst.ts:447:11:447:16 | [VarDecl] Person | semmle.label | [VarDecl] Person | -| tst.ts:448:9:448:12 | [Label] name | semmle.label | [Label] name | -| tst.ts:448:9:448:21 | [FieldDeclaration] name: string; | semmle.label | [FieldDeclaration] name: string; | -| tst.ts:448:15:448:20 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:449:9:451:9 | [ClassInitializedMember,ConstructorDefinition] constru ... } | semmle.label | [ClassInitializedMember,ConstructorDefinition] constru ... } | -| tst.ts:449:9:451:9 | [FunctionExpr] constru ... } | semmle.label | [FunctionExpr] constru ... } | -| tst.ts:449:9:451:9 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:449:21:449:24 | [SimpleParameter] name | semmle.label | [SimpleParameter] name | -| tst.ts:449:27:449:32 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:449:35:451:9 | [BlockStmt] { ... } | semmle.label | [BlockStmt] { ... } | -| tst.ts:450:13:450:16 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:450:13:450:21 | [DotExpr] this.name | semmle.label | [DotExpr] this.name | -| tst.ts:450:13:450:28 | [AssignExpr] this.name = name | semmle.label | [AssignExpr] this.name = name | -| tst.ts:450:13:450:29 | [ExprStmt] this.name = name; | semmle.label | [ExprStmt] this.name = name; | -| tst.ts:450:18:450:21 | [Label] name | semmle.label | [Label] name | -| tst.ts:450:25:450:28 | [VarRef] name | semmle.label | [VarRef] name | -| tst.ts:453:9:453:25 | [Decorator] @loggedMethod("") | semmle.label | [Decorator] @loggedMethod("") | -| tst.ts:453:10:453:21 | [VarRef] loggedMethod | semmle.label | [VarRef] loggedMethod | -| tst.ts:453:10:453:25 | [CallExpr] loggedMethod("") | semmle.label | [CallExpr] loggedMethod("") | -| tst.ts:453:23:453:24 | [Literal] "" | semmle.label | [Literal] "" | -| tst.ts:454:9:454:13 | [Label] greet | semmle.label | [Label] greet | -| tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | semmle.label | [ClassInitializedMember,MethodDefinition] greet() ... } | -| tst.ts:454:9:457:9 | [FunctionExpr] greet() ... } | semmle.label | [FunctionExpr] greet() ... } | -| tst.ts:454:17:457:9 | [BlockStmt] { ... } | semmle.label | [BlockStmt] { ... } | -| tst.ts:455:13:455:19 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:455:13:455:23 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:455:13:455:58 | [MethodCallExpr] console ... ame}.`) | semmle.label | [MethodCallExpr] console ... ame}.`) | -| tst.ts:455:13:455:59 | [ExprStmt] console ... me}.`); | semmle.label | [ExprStmt] console ... me}.`); | -| tst.ts:455:21:455:23 | [Label] log | semmle.label | [Label] log | -| tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | semmle.label | [TemplateLiteral] `Hello, ... name}.` | -| tst.ts:455:26:455:43 | [TemplateElement] Hello, my name is | semmle.label | [TemplateElement] Hello, my name is | -| tst.ts:455:46:455:49 | [ThisExpr] this | semmle.label | [ThisExpr] this | -| tst.ts:455:46:455:54 | [DotExpr] this.name | semmle.label | [DotExpr] this.name | -| tst.ts:455:51:455:54 | [Label] name | semmle.label | [Label] name | -| tst.ts:455:56:455:56 | [TemplateElement] . | semmle.label | [TemplateElement] . | -| tst.ts:456:13:456:21 | [ReturnStmt] return 2; | semmle.label | [ReturnStmt] return 2; | -| tst.ts:456:20:456:20 | [Literal] 2 | semmle.label | [Literal] 2 | -| tst.ts:460:5:460:41 | [DeclStmt] const p = ... | semmle.label | [DeclStmt] const p = ... | -| tst.ts:460:11:460:11 | [VarDecl] p | semmle.label | [VarDecl] p | -| tst.ts:460:11:460:40 | [VariableDeclarator] p = new ... greet() | semmle.label | [VariableDeclarator] p = new ... greet() | -| tst.ts:460:15:460:32 | [NewExpr] new Person("John") | semmle.label | [NewExpr] new Person("John") | -| tst.ts:460:15:460:38 | [DotExpr] new Per ... ).greet | semmle.label | [DotExpr] new Per ... ).greet | -| tst.ts:460:15:460:40 | [MethodCallExpr] new Per ... greet() | semmle.label | [MethodCallExpr] new Per ... greet() | -| tst.ts:460:19:460:24 | [VarRef] Person | semmle.label | [VarRef] Person | -| tst.ts:460:26:460:31 | [Literal] "John" | semmle.label | [Literal] "John" | -| tst.ts:460:34:460:38 | [Label] greet | semmle.label | [Label] greet | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | semmle.label | [FunctionDeclStmt] declare ... T): T; | -| tst.ts:462:22:462:38 | [VarDecl] myConstIdFunction | semmle.label | [VarDecl] myConstIdFunction | -| tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | semmle.label | [TypeParameter] const T ... tring[] | -| tst.ts:462:46:462:46 | [Identifier] T | semmle.label | [Identifier] T | -| tst.ts:462:56:462:72 | [ReadonlyTypeExpr] readonly string[] | semmle.label | [ReadonlyTypeExpr] readonly string[] | -| tst.ts:462:65:462:70 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:462:65:462:72 | [ArrayTypeExpr] string[] | semmle.label | [ArrayTypeExpr] string[] | -| tst.ts:462:75:462:78 | [SimpleParameter] args | semmle.label | [SimpleParameter] args | -| tst.ts:462:81:462:81 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:462:85:462:85 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:465:5:465:51 | [DeclStmt] const foo = ... | semmle.label | [DeclStmt] const foo = ... | -| tst.ts:465:11:465:13 | [VarDecl] foo | semmle.label | [VarDecl] foo | -| tst.ts:465:11:465:50 | [VariableDeclarator] foo = m ... ,"c"]) | semmle.label | [VariableDeclarator] foo = m ... ,"c"]) | -| tst.ts:465:17:465:33 | [VarRef] myConstIdFunction | semmle.label | [VarRef] myConstIdFunction | -| tst.ts:465:17:465:50 | [CallExpr] myConst ... ,"c"]) | semmle.label | [CallExpr] myConst ... ,"c"]) | -| tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | semmle.label | [ArrayExpr] ["a", "b" ,"c"] | -| tst.ts:465:36:465:38 | [Literal] "a" | semmle.label | [Literal] "a" | -| tst.ts:465:41:465:43 | [Literal] "b" | semmle.label | [Literal] "b" | -| tst.ts:465:46:465:48 | [Literal] "c" | semmle.label | [Literal] "c" | -| tst.ts:467:5:467:21 | [DeclStmt] const b = ... | semmle.label | [DeclStmt] const b = ... | -| tst.ts:467:11:467:11 | [VarDecl] b | semmle.label | [VarDecl] b | -| tst.ts:467:11:467:20 | [VariableDeclarator] b = foo[1] | semmle.label | [VariableDeclarator] b = foo[1] | -| tst.ts:467:15:467:17 | [VarRef] foo | semmle.label | [VarRef] foo | -| tst.ts:467:15:467:20 | [IndexExpr] foo[1] | semmle.label | [IndexExpr] foo[1] | -| tst.ts:467:19:467:19 | [Literal] 1 | semmle.label | [Literal] 1 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | semmle.label | [NamespaceDeclaration] module ... ng>); } | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | semmle.order | 90 | -| tst.ts:472:8:472:11 | [VarDecl] TS52 | semmle.label | [VarDecl] TS52 | -| tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | semmle.label | [ClassDefinition,TypeDefinition] class S ... ; } | -| tst.ts:473:11:473:19 | [VarDecl] SomeClass | semmle.label | [VarDecl] SomeClass | -| tst.ts:473:21:473:20 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:473:21:473:20 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| tst.ts:473:21:473:20 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| tst.ts:473:21:473:20 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:474:9:474:36 | [Decorator] @((_tar ... => {}) | semmle.label | [Decorator] @((_tar ... => {}) | -| tst.ts:474:10:474:36 | [ParExpr] ((_targ ... => {}) | semmle.label | [ParExpr] ((_targ ... => {}) | -| tst.ts:474:11:474:35 | [ArrowFunctionExpr] (_targe ... ) => {} | semmle.label | [ArrowFunctionExpr] (_targe ... ) => {} | -| tst.ts:474:12:474:18 | [SimpleParameter] _target | semmle.label | [SimpleParameter] _target | -| tst.ts:474:21:474:28 | [SimpleParameter] _context | semmle.label | [SimpleParameter] _context | -| tst.ts:474:34:474:35 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:475:9:475:11 | [Label] foo | semmle.label | [Label] foo | -| tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | semmle.label | [FieldDeclaration] foo = 123; | -| tst.ts:475:15:475:17 | [Literal] 123 | semmle.label | [Literal] 123 | -| tst.ts:478:5:478:11 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:478:5:478:15 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:478:5:478:43 | [MethodCallExpr] console ... adata]) | semmle.label | [MethodCallExpr] console ... adata]) | -| tst.ts:478:5:478:44 | [ExprStmt] console ... data]); | semmle.label | [ExprStmt] console ... data]); | -| tst.ts:478:13:478:15 | [Label] log | semmle.label | [Label] log | -| tst.ts:478:17:478:25 | [VarRef] SomeClass | semmle.label | [VarRef] SomeClass | -| tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | semmle.label | [IndexExpr] SomeCla ... tadata] | -| tst.ts:478:27:478:32 | [VarRef] Symbol | semmle.label | [VarRef] Symbol | -| tst.ts:478:27:478:41 | [DotExpr] Symbol.metadata | semmle.label | [DotExpr] Symbol.metadata | -| tst.ts:478:34:478:41 | [Label] metadata | semmle.label | [Label] metadata | -| tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | -| tst.ts:481:10:481:14 | [Identifier] Pair3 | semmle.label | [Identifier] Pair3 | -| tst.ts:481:16:481:16 | [Identifier] T | semmle.label | [Identifier] T | -| tst.ts:481:16:481:16 | [TypeParameter] T | semmle.label | [TypeParameter] T | -| tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | semmle.label | [TupleTypeExpr] [first: T, T] | -| tst.ts:481:22:481:26 | [Identifier] first | semmle.label | [Identifier] first | -| tst.ts:481:29:481:29 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:481:32:481:32 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| tst.ts:483:5:483:11 | [VarRef] console | semmle.label | [VarRef] console | -| tst.ts:483:5:483:15 | [DotExpr] console.log | semmle.label | [DotExpr] console.log | -| tst.ts:483:5:483:59 | [MethodCallExpr] console ... tring>) | semmle.label | [MethodCallExpr] console ... tring>) | -| tst.ts:483:5:483:60 | [ExprStmt] console ... ring>); | semmle.label | [ExprStmt] console ... ring>); | -| tst.ts:483:13:483:15 | [Label] log | semmle.label | [Label] log | -| tst.ts:483:17:483:34 | [ArrayExpr] ["hello", "world"] | semmle.label | [ArrayExpr] ["hello", "world"] | -| tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | semmle.label | [SatisfiesExpr] ["hello ... string> | -| tst.ts:483:18:483:24 | [Literal] "hello" | semmle.label | [Literal] "hello" | -| tst.ts:483:27:483:33 | [Literal] "world" | semmle.label | [Literal] "world" | -| tst.ts:483:46:483:50 | [LocalTypeAccess] Pair3 | semmle.label | [LocalTypeAccess] Pair3 | -| tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | semmle.label | [GenericTypeExpr] Pair3 | -| tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | semmle.label | [NamespaceDeclaration] module ... }); } | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | semmle.order | 91 | -| tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.label | [VarDecl] TS54 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.label | [FunctionDeclStmt] functio ... 0]; } | -| tst.ts:487:12:487:28 | [VarDecl] createStreetLight | semmle.label | [VarDecl] createStreetLight | -| tst.ts:487:30:487:30 | [Identifier] C | semmle.label | [Identifier] C | -| tst.ts:487:30:487:45 | [TypeParameter] C extends string | semmle.label | [TypeParameter] C extends string | -| tst.ts:487:40:487:45 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:487:48:487:53 | [SimpleParameter] colors | semmle.label | [SimpleParameter] colors | -| tst.ts:487:56:487:56 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | -| tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | semmle.label | [ArrayTypeExpr] C[] | -| tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | semmle.label | [SimpleParameter] defaultColor | -| tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.label | [LocalTypeAccess] NoInfer | -| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | semmle.label | [GenericTypeExpr] NoInfer | -| tst.ts:487:84:487:84 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | -| tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | semmle.label | [BlockStmt] { r ... 0]; } | -| tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | semmle.label | [ReturnStmt] return colors[0]; | -| tst.ts:488:12:488:17 | [VarRef] colors | semmle.label | [VarRef] colors | -| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | semmle.label | [IndexExpr] colors[0] | -| tst.ts:488:19:488:19 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:491:3:491:19 | [VarRef] createStreetLight | semmle.label | [VarRef] createStreetLight | -| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | semmle.label | [CallExpr] createS ... ellow") | -| tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.label | [ExprStmt] createS ... llow"); | -| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | semmle.label | [ArrayExpr] ["red", ... green"] | -| tst.ts:491:22:491:26 | [Literal] "red" | semmle.label | [Literal] "red" | -| tst.ts:491:29:491:36 | [Literal] "yellow" | semmle.label | [Literal] "yellow" | -| tst.ts:491:39:491:45 | [Literal] "green" | semmle.label | [Literal] "green" | -| tst.ts:491:49:491:56 | [Literal] "yellow" | semmle.label | [Literal] "yellow" | -| tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | semmle.label | [DeclStmt] const myObj = ... | -| tst.ts:493:9:493:13 | [VarDecl] myObj | semmle.label | [VarDecl] myObj | -| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | semmle.label | [VariableDeclarator] myObj = ... "; }) | -| tst.ts:493:17:493:22 | [VarRef] Object | semmle.label | [VarRef] Object | -| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | semmle.label | [DotExpr] Object.groupBy | -| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | semmle.label | [MethodCallExpr] Object. ... "; }) | -| tst.ts:493:24:493:30 | [Label] groupBy | semmle.label | [Label] groupBy | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | semmle.label | [ArrayExpr] [0, 1, 2, 3, 4, 5] | -| tst.ts:493:33:493:33 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:493:36:493:36 | [Literal] 1 | semmle.label | [Literal] 1 | -| tst.ts:493:39:493:39 | [Literal] 2 | semmle.label | [Literal] 2 | -| tst.ts:493:42:493:42 | [Literal] 3 | semmle.label | [Literal] 3 | -| tst.ts:493:45:493:45 | [Literal] 4 | semmle.label | [Literal] 4 | -| tst.ts:493:48:493:48 | [Literal] 5 | semmle.label | [Literal] 5 | -| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | semmle.label | [ArrowFunctionExpr] (num, i ... d"; } | -| tst.ts:493:53:493:55 | [SimpleParameter] num | semmle.label | [SimpleParameter] num | -| tst.ts:493:58:493:62 | [SimpleParameter] index | semmle.label | [SimpleParameter] index | -| tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | semmle.label | [BlockStmt] { r ... d"; } | -| tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | semmle.label | [ReturnStmt] return ... "odd"; | -| tst.ts:494:12:494:14 | [VarRef] num | semmle.label | [VarRef] num | -| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | semmle.label | [BinaryExpr] num % 2 | -| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | semmle.label | [BinaryExpr] num % 2 === 0 | -| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | semmle.label | [ConditionalExpr] num % 2 ... : "odd" | -| tst.ts:494:18:494:18 | [Literal] 2 | semmle.label | [Literal] 2 | -| tst.ts:494:24:494:24 | [Literal] 0 | semmle.label | [Literal] 0 | -| tst.ts:494:28:494:33 | [Literal] "even" | semmle.label | [Literal] "even" | -| tst.ts:494:36:494:40 | [Literal] "odd" | semmle.label | [Literal] "odd" | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | semmle.label | [NamespaceDeclaration] module ... } } } | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | semmle.order | 92 | -| tst.ts:498:8:498:11 | [VarDecl] TS55 | semmle.label | [VarDecl] TS55 | -| tst.ts:499:3:500:40 | [DeclStmt] const strings = ... | semmle.label | [DeclStmt] const strings = ... | -| tst.ts:499:9:499:15 | [VarDecl] strings | semmle.label | [VarDecl] strings | -| tst.ts:499:9:500:39 | [VariableDeclarator] strings ... tring") | semmle.label | [VariableDeclarator] strings ... tring") | -| tst.ts:499:19:499:32 | [ParExpr] (["foo", 123]) | semmle.label | [ParExpr] (["foo", 123]) | -| tst.ts:499:19:500:11 | [DotExpr] (["foo" ... .filter | semmle.label | [DotExpr] (["foo" ... .filter | -| tst.ts:499:19:500:39 | [MethodCallExpr] (["foo" ... tring") | semmle.label | [MethodCallExpr] (["foo" ... tring") | -| tst.ts:499:20:499:31 | [ArrayExpr] ["foo", 123] | semmle.label | [ArrayExpr] ["foo", 123] | -| tst.ts:499:21:499:25 | [Literal] "foo" | semmle.label | [Literal] "foo" | -| tst.ts:499:28:499:30 | [Literal] 123 | semmle.label | [Literal] 123 | -| tst.ts:500:6:500:11 | [Label] filter | semmle.label | [Label] filter | -| tst.ts:500:13:500:13 | [SimpleParameter] s | semmle.label | [SimpleParameter] s | -| tst.ts:500:13:500:38 | [ArrowFunctionExpr] s => ty ... string" | semmle.label | [ArrowFunctionExpr] s => ty ... string" | -| tst.ts:500:18:500:25 | [UnaryExpr] typeof s | semmle.label | [UnaryExpr] typeof s | -| tst.ts:500:18:500:38 | [BinaryExpr] typeof ... string" | semmle.label | [BinaryExpr] typeof ... string" | -| tst.ts:500:25:500:25 | [VarRef] s | semmle.label | [VarRef] s | -| tst.ts:500:31:500:38 | [Literal] "string" | semmle.label | [Literal] "string" | -| tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | semmle.label | [ForOfStmt] for (co ... 5.4 } | -| tst.ts:502:8:502:16 | [DeclStmt] const str = ... | semmle.label | [DeclStmt] const str = ... | -| tst.ts:502:14:502:16 | [VarDecl] str | semmle.label | [VarDecl] str | -| tst.ts:502:14:502:16 | [VariableDeclarator] str | semmle.label | [VariableDeclarator] str | -| tst.ts:502:21:502:27 | [VarRef] strings | semmle.label | [VarRef] strings | -| tst.ts:502:30:504:3 | [BlockStmt] { s ... 5.4 } | semmle.label | [BlockStmt] { s ... 5.4 } | -| tst.ts:503:5:503:7 | [VarRef] str | semmle.label | [VarRef] str | -| tst.ts:503:5:503:19 | [DotExpr] str.toLowerCase | semmle.label | [DotExpr] str.toLowerCase | -| tst.ts:503:5:503:21 | [MethodCallExpr] str.toLowerCase() | semmle.label | [MethodCallExpr] str.toLowerCase() | -| tst.ts:503:5:503:22 | [ExprStmt] str.toLowerCase(); | semmle.label | [ExprStmt] str.toLowerCase(); | -| tst.ts:503:9:503:19 | [Label] toLowerCase | semmle.label | [Label] toLowerCase | -| tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | semmle.label | [FunctionDeclStmt] functio ... } } | -| tst.ts:506:12:506:13 | [VarDecl] f1 | semmle.label | [VarDecl] f1 | -| tst.ts:506:15:506:17 | [SimpleParameter] obj | semmle.label | [SimpleParameter] obj | -| tst.ts:506:20:506:25 | [LocalTypeAccess] Record | semmle.label | [LocalTypeAccess] Record | -| tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | semmle.label | [GenericTypeExpr] Record< ... nknown> | -| tst.ts:506:27:506:32 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:506:35:506:41 | [KeywordTypeExpr] unknown | semmle.label | [KeywordTypeExpr] unknown | -| tst.ts:506:45:506:47 | [SimpleParameter] key | semmle.label | [SimpleParameter] key | -| tst.ts:506:50:506:55 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| tst.ts:506:58:510:3 | [BlockStmt] { i ... } } | semmle.label | [BlockStmt] { i ... } } | -| tst.ts:507:5:509:5 | [IfStmt] if (typ ... r } | semmle.label | [IfStmt] if (typ ... r } | -| tst.ts:507:9:507:23 | [UnaryExpr] typeof obj[key] | semmle.label | [UnaryExpr] typeof obj[key] | -| tst.ts:507:9:507:36 | [BinaryExpr] typeof ... string" | semmle.label | [BinaryExpr] typeof ... string" | -| tst.ts:507:16:507:18 | [VarRef] obj | semmle.label | [VarRef] obj | -| tst.ts:507:16:507:23 | [IndexExpr] obj[key] | semmle.label | [IndexExpr] obj[key] | -| tst.ts:507:20:507:22 | [VarRef] key | semmle.label | [VarRef] key | -| tst.ts:507:29:507:36 | [Literal] "string" | semmle.label | [Literal] "string" | -| tst.ts:507:39:509:5 | [BlockStmt] { ... r } | semmle.label | [BlockStmt] { ... r } | -| tst.ts:508:7:508:39 | [DeclStmt] var str = ... | semmle.label | [DeclStmt] var str = ... | -| tst.ts:508:11:508:13 | [VarDecl] str | semmle.label | [VarDecl] str | -| tst.ts:508:11:508:38 | [VariableDeclarator] str = o ... rCase() | semmle.label | [VariableDeclarator] str = o ... rCase() | -| tst.ts:508:17:508:19 | [VarRef] obj | semmle.label | [VarRef] obj | -| tst.ts:508:17:508:24 | [IndexExpr] obj[key] | semmle.label | [IndexExpr] obj[key] | -| tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | semmle.label | [DotExpr] obj[key].toUpperCase | -| tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | semmle.label | [MethodCallExpr] obj[key ... rCase() | -| tst.ts:508:21:508:23 | [VarRef] key | semmle.label | [VarRef] key | -| tst.ts:508:26:508:36 | [Label] toUpperCase | semmle.label | [Label] toUpperCase | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | semmle.label | [NamespaceDeclaration] namespa ... type. } | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | semmle.order | 93 | -| tst.ts:513:11:513:14 | [VarDecl] TS57 | semmle.label | [VarDecl] TS57 | -| tst.ts:514:3:514:26 | [DeclStmt] const a = ... | semmle.label | [DeclStmt] const a = ... | -| tst.ts:514:17:514:17 | [VarDecl] a | semmle.label | [VarDecl] a | -| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | semmle.label | [VariableDeclarator] a: symbol | -| tst.ts:514:20:514:25 | [KeywordTypeExpr] symbol | semmle.label | [KeywordTypeExpr] symbol | -| tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | semmle.label | [ExportDeclaration] export ... }; } | -| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | semmle.label | [ClassDefinition,TypeDefinition] class A ... }; } | -| tst.ts:515:16:515:16 | [VarDecl] A | semmle.label | [VarDecl] A | -| tst.ts:515:18:515:17 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| tst.ts:515:18:515:17 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| tst.ts:515:18:515:17 | [Label] constructor | semmle.label | [Label] constructor | -| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | semmle.label | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | -| tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | semmle.label | [FunctionExpr] [a]() { return 1 } | -| tst.ts:516:8:516:8 | [VarRef] a | semmle.label | [VarRef] a | -| tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | semmle.label | [BlockStmt] { return 1 } | -| tst.ts:516:15:516:22 | [ReturnStmt] return 1 | semmle.label | [ReturnStmt] return 1 | -| tst.ts:516:22:516:22 | [Literal] 1 | semmle.label | [Literal] 1 | -| tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | semmle.label | [DeclStmt] const e1 = ... | -| tst.ts:519:17:519:18 | [VarDecl] e1 | semmle.label | [VarDecl] e1 | -| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | semmle.label | [VariableDeclarator] e1: A[typeof a] | -| tst.ts:519:21:519:21 | [LocalTypeAccess] A | semmle.label | [LocalTypeAccess] A | -| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | semmle.label | [IndexedAccessTypeExpr] A[typeof a] | -| tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | semmle.label | [TypeofTypeExpr] typeof a | -| tst.ts:519:30:519:30 | [LocalVarTypeAccess] a | semmle.label | [LocalVarTypeAccess] a | -| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.label | [ExportDeclaration] export ... 'b'; } | -| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 94 | -| tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | [FunctionDeclStmt] functio ... 'b'; } | -| tstModuleCJS.cts:1:17:1:28 | [VarDecl] tstModuleCJS | semmle.label | [VarDecl] tstModuleCJS | -| tstModuleCJS.cts:1:33:1:35 | [LiteralTypeExpr] 'a' | semmle.label | [LiteralTypeExpr] 'a' | -| tstModuleCJS.cts:1:33:1:41 | [UnionTypeExpr] 'a' \| 'b' | semmle.label | [UnionTypeExpr] 'a' \| 'b' | -| tstModuleCJS.cts:1:39:1:41 | [LiteralTypeExpr] 'b' | semmle.label | [LiteralTypeExpr] 'b' | -| tstModuleCJS.cts:1:43:3:1 | [BlockStmt] { r ... 'b'; } | semmle.label | [BlockStmt] { r ... 'b'; } | -| tstModuleCJS.cts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | semmle.label | [ReturnStmt] return ... : 'b'; | -| tstModuleCJS.cts:2:12:2:15 | [VarRef] Math | semmle.label | [VarRef] Math | -| tstModuleCJS.cts:2:12:2:22 | [DotExpr] Math.random | semmle.label | [DotExpr] Math.random | -| tstModuleCJS.cts:2:12:2:24 | [MethodCallExpr] Math.random() | semmle.label | [MethodCallExpr] Math.random() | -| tstModuleCJS.cts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | semmle.label | [BinaryExpr] Math.random() > 0.5 | -| tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | semmle.label | [ConditionalExpr] Math.ra ... ' : 'b' | -| tstModuleCJS.cts:2:17:2:22 | [Label] random | semmle.label | [Label] random | -| tstModuleCJS.cts:2:28:2:30 | [Literal] 0.5 | semmle.label | [Literal] 0.5 | -| tstModuleCJS.cts:2:34:2:36 | [Literal] 'a' | semmle.label | [Literal] 'a' | -| tstModuleCJS.cts:2:40:2:42 | [Literal] 'b' | semmle.label | [Literal] 'b' | -| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.label | [ExportDeclaration] export ... 'b'; } | -| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | semmle.order | 95 | -| tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | [FunctionDeclStmt] functio ... 'b'; } | -| tstModuleES.mts:1:25:1:35 | [VarDecl] tstModuleES | semmle.label | [VarDecl] tstModuleES | -| tstModuleES.mts:1:40:1:42 | [LiteralTypeExpr] 'a' | semmle.label | [LiteralTypeExpr] 'a' | -| tstModuleES.mts:1:40:1:48 | [UnionTypeExpr] 'a' \| 'b' | semmle.label | [UnionTypeExpr] 'a' \| 'b' | -| tstModuleES.mts:1:46:1:48 | [LiteralTypeExpr] 'b' | semmle.label | [LiteralTypeExpr] 'b' | -| tstModuleES.mts:1:50:3:1 | [BlockStmt] { r ... 'b'; } | semmle.label | [BlockStmt] { r ... 'b'; } | -| tstModuleES.mts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | semmle.label | [ReturnStmt] return ... : 'b'; | -| tstModuleES.mts:2:12:2:15 | [VarRef] Math | semmle.label | [VarRef] Math | -| tstModuleES.mts:2:12:2:22 | [DotExpr] Math.random | semmle.label | [DotExpr] Math.random | -| tstModuleES.mts:2:12:2:24 | [MethodCallExpr] Math.random() | semmle.label | [MethodCallExpr] Math.random() | -| tstModuleES.mts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | semmle.label | [BinaryExpr] Math.random() > 0.5 | -| tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | semmle.label | [ConditionalExpr] Math.ra ... ' : 'b' | -| tstModuleES.mts:2:17:2:22 | [Label] random | semmle.label | [Label] random | -| tstModuleES.mts:2:28:2:30 | [Literal] 0.5 | semmle.label | [Literal] 0.5 | -| tstModuleES.mts:2:34:2:36 | [Literal] 'a' | semmle.label | [Literal] 'a' | -| tstModuleES.mts:2:40:2:42 | [Literal] 'b' | semmle.label | [Literal] 'b' | -| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 96 | -| tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | -| tstSuffixA.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | -| tstSuffixA.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixA.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixA.ts' | -| tstSuffixA.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | semmle.label | [BlockStmt] { r ... .ts'; } | -| tstSuffixA.ts:2:5:2:27 | [ReturnStmt] return ... xA.ts'; | semmle.label | [ReturnStmt] return ... xA.ts'; | -| tstSuffixA.ts:2:12:2:26 | [Literal] 'tstSuffixA.ts' | semmle.label | [Literal] 'tstSuffixA.ts' | -| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 97 | -| tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | -| tstSuffixB.ios.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | -| tstSuffixB.ios.ts:1:33:1:51 | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | -| tstSuffixB.ios.ts:1:53:3:1 | [BlockStmt] { r ... .ts'; } | semmle.label | [BlockStmt] { r ... .ts'; } | -| tstSuffixB.ios.ts:2:5:2:31 | [ReturnStmt] return ... os.ts'; | semmle.label | [ReturnStmt] return ... os.ts'; | -| tstSuffixB.ios.ts:2:12:2:30 | [Literal] 'tstSuffixB.ios.ts' | semmle.label | [Literal] 'tstSuffixB.ios.ts' | -| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.label | [ExportDeclaration] export ... .ts'; } | -| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | semmle.order | 98 | -| tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | [FunctionDeclStmt] functio ... .ts'; } | -| tstSuffixB.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | [VarDecl] resolvedFile | -| tstSuffixB.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixB.ts' | semmle.label | [LiteralTypeExpr] 'tstSuffixB.ts' | -| tstSuffixB.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | semmle.label | [BlockStmt] { r ... .ts'; } | -| tstSuffixB.ts:2:5:2:27 | [ReturnStmt] return ... xB.ts'; | semmle.label | [ReturnStmt] return ... xB.ts'; | -| tstSuffixB.ts:2:12:2:26 | [Literal] 'tstSuffixB.ts' | semmle.label | [Literal] 'tstSuffixB.ts' | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | semmle.order | 99 | -| type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | [Identifier] B | -| type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.label | [DeclStmt] var b = ... | -| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | semmle.order | 100 | -| type_alias.ts:3:5:3:5 | [VarDecl] b | semmle.label | [VarDecl] b | -| type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | semmle.label | [VariableDeclarator] b: B | -| type_alias.ts:3:8:3:8 | [LocalTypeAccess] B | semmle.label | [LocalTypeAccess] B | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | semmle.order | 101 | -| type_alias.ts:5:6:5:17 | [Identifier] ValueOrArray | semmle.label | [Identifier] ValueOrArray | -| type_alias.ts:5:19:5:19 | [Identifier] T | semmle.label | [Identifier] T | -| type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.label | [TypeParameter] T | -| type_alias.ts:5:24:5:24 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| type_alias.ts:5:24:5:49 | [UnionTypeExpr] T \| Arr ... ray> | semmle.label | [UnionTypeExpr] T \| Arr ... ray> | -| type_alias.ts:5:28:5:32 | [LocalTypeAccess] Array | semmle.label | [LocalTypeAccess] Array | -| type_alias.ts:5:28:5:49 | [GenericTypeExpr] Array> | semmle.label | [GenericTypeExpr] Array> | -| type_alias.ts:5:34:5:45 | [LocalTypeAccess] ValueOrArray | semmle.label | [LocalTypeAccess] ValueOrArray | -| type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | semmle.label | [GenericTypeExpr] ValueOrArray | -| type_alias.ts:5:47:5:47 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.label | [DeclStmt] var c = ... | -| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | semmle.order | 102 | -| type_alias.ts:7:5:7:5 | [VarDecl] c | semmle.label | [VarDecl] c | -| type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | semmle.label | [VariableDeclarator] c: Valu ... number> | -| type_alias.ts:7:8:7:19 | [LocalTypeAccess] ValueOrArray | semmle.label | [LocalTypeAccess] ValueOrArray | -| type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | semmle.label | [GenericTypeExpr] ValueOrArray | -| type_alias.ts:7:21:7:26 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | semmle.order | 103 | -| type_alias.ts:9:6:9:9 | [Identifier] Json | semmle.label | [Identifier] Json | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | semmle.label | [UnionTypeExpr] \| strin ... Json[] | -| type_alias.ts:10:7:10:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| type_alias.ts:11:7:11:12 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| type_alias.ts:12:7:12:13 | [KeywordTypeExpr] boolean | semmle.label | [KeywordTypeExpr] boolean | -| type_alias.ts:13:7:13:10 | [KeywordTypeExpr] null | semmle.label | [KeywordTypeExpr] null | -| type_alias.ts:14:7:14:34 | [InterfaceTypeExpr] { [prop ... Json } | semmle.label | [InterfaceTypeExpr] { [prop ... Json } | -| type_alias.ts:14:9:14:32 | [FunctionExpr] [proper ... ]: Json | semmle.label | [FunctionExpr] [proper ... ]: Json | -| type_alias.ts:14:9:14:32 | [IndexSignature] [proper ... ]: Json | semmle.label | [IndexSignature] [proper ... ]: Json | -| type_alias.ts:14:10:14:17 | [SimpleParameter] property | semmle.label | [SimpleParameter] property | -| type_alias.ts:14:20:14:25 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| type_alias.ts:14:29:14:32 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | -| type_alias.ts:15:7:15:10 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | -| type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | semmle.label | [ArrayTypeExpr] Json[] | -| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.label | [DeclStmt] var json = ... | -| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | semmle.order | 104 | -| type_alias.ts:17:5:17:8 | [VarDecl] json | semmle.label | [VarDecl] json | -| type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | semmle.label | [VariableDeclarator] json: Json | -| type_alias.ts:17:11:17:14 | [LocalTypeAccess] Json | semmle.label | [LocalTypeAccess] Json | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | semmle.order | 105 | -| type_alias.ts:19:6:19:16 | [Identifier] VirtualNode | semmle.label | [Identifier] VirtualNode | -| type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | semmle.label | [UnionTypeExpr] \| strin ... Node[]] | -| type_alias.ts:20:7:20:12 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | semmle.label | [TupleTypeExpr] [string ... Node[]] | -| type_alias.ts:21:8:21:13 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| type_alias.ts:21:16:21:37 | [InterfaceTypeExpr] { [key: ... : any } | semmle.label | [InterfaceTypeExpr] { [key: ... : any } | -| type_alias.ts:21:18:21:35 | [FunctionExpr] [key: string]: any | semmle.label | [FunctionExpr] [key: string]: any | -| type_alias.ts:21:18:21:35 | [IndexSignature] [key: string]: any | semmle.label | [IndexSignature] [key: string]: any | -| type_alias.ts:21:19:21:21 | [SimpleParameter] key | semmle.label | [SimpleParameter] key | -| type_alias.ts:21:24:21:29 | [KeywordTypeExpr] string | semmle.label | [KeywordTypeExpr] string | -| type_alias.ts:21:33:21:35 | [KeywordTypeExpr] any | semmle.label | [KeywordTypeExpr] any | -| type_alias.ts:21:40:21:55 | [RestTypeExpr] ...VirtualNode[] | semmle.label | [RestTypeExpr] ...VirtualNode[] | -| type_alias.ts:21:43:21:53 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | -| type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | semmle.label | [ArrayTypeExpr] VirtualNode[] | -| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.label | [DeclStmt] const myNode = ... | -| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | semmle.order | 106 | -| type_alias.ts:23:7:23:12 | [VarDecl] myNode | semmle.label | [VarDecl] myNode | -| type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | semmle.label | [VariableDeclarator] myNode: ... ] ] | -| type_alias.ts:23:15:23:25 | [LocalTypeAccess] VirtualNode | semmle.label | [LocalTypeAccess] VirtualNode | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | semmle.label | [ArrayExpr] ["div", ... ] ] | -| type_alias.ts:24:6:24:10 | [Literal] "div" | semmle.label | [Literal] "div" | -| type_alias.ts:24:13:24:28 | [ObjectExpr] {id: ...} | semmle.label | [ObjectExpr] {id: ...} | -| type_alias.ts:24:15:24:16 | [Label] id | semmle.label | [Label] id | -| type_alias.ts:24:15:24:26 | [Property] id: "parent" | semmle.label | [Property] id: "parent" | -| type_alias.ts:24:19:24:26 | [Literal] "parent" | semmle.label | [Literal] "parent" | -| type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | semmle.label | [ArrayExpr] ["div", ... child"] | -| type_alias.ts:25:10:25:14 | [Literal] "div" | semmle.label | [Literal] "div" | -| type_alias.ts:25:17:25:37 | [ObjectExpr] {id: ...} | semmle.label | [ObjectExpr] {id: ...} | -| type_alias.ts:25:19:25:20 | [Label] id | semmle.label | [Label] id | -| type_alias.ts:25:19:25:35 | [Property] id: "first-child" | semmle.label | [Property] id: "first-child" | -| type_alias.ts:25:23:25:35 | [Literal] "first-child" | semmle.label | [Literal] "first-child" | -| type_alias.ts:25:40:25:60 | [Literal] "I'm the first child" | semmle.label | [Literal] "I'm the first child" | -| type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | semmle.label | [ArrayExpr] ["div", ... child"] | -| type_alias.ts:26:10:26:14 | [Literal] "div" | semmle.label | [Literal] "div" | -| type_alias.ts:26:17:26:38 | [ObjectExpr] {id: ...} | semmle.label | [ObjectExpr] {id: ...} | -| type_alias.ts:26:19:26:20 | [Label] id | semmle.label | [Label] id | -| type_alias.ts:26:19:26:36 | [Property] id: "second-child" | semmle.label | [Property] id: "second-child" | -| type_alias.ts:26:23:26:36 | [Literal] "second-child" | semmle.label | [Literal] "second-child" | -| type_alias.ts:26:41:26:62 | [Literal] "I'm the second child" | semmle.label | [Literal] "I'm the second child" | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 107 | -| type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | -| type_definition_objects.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | -| type_definition_objects.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | -| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.label | [ExportDeclaration] export class C {} | -| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | semmle.order | 108 | -| type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | semmle.label | [ClassDefinition,TypeDefinition] class C {} | -| type_definition_objects.ts:3:14:3:14 | [VarDecl] C | semmle.label | [VarDecl] C | -| type_definition_objects.ts:3:16:3:15 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| type_definition_objects.ts:3:16:3:15 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| type_definition_objects.ts:3:16:3:15 | [Label] constructor | semmle.label | [Label] constructor | -| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.label | [DeclStmt] let classObj = ... | -| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | semmle.order | 109 | -| type_definition_objects.ts:4:5:4:12 | [VarDecl] classObj | semmle.label | [VarDecl] classObj | -| type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | semmle.label | [VariableDeclarator] classObj = C | -| type_definition_objects.ts:4:16:4:16 | [VarRef] C | semmle.label | [VarRef] C | -| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.label | [ExportDeclaration] export enum E {} | -| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | semmle.order | 110 | -| type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | semmle.label | [EnumDeclaration,TypeDefinition] enum E {} | -| type_definition_objects.ts:6:13:6:13 | [VarDecl] E | semmle.label | [VarDecl] E | -| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.label | [DeclStmt] let enumObj = ... | -| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | semmle.order | 111 | -| type_definition_objects.ts:7:5:7:11 | [VarDecl] enumObj | semmle.label | [VarDecl] enumObj | -| type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | semmle.label | [VariableDeclarator] enumObj = E | -| type_definition_objects.ts:7:15:7:15 | [VarRef] E | semmle.label | [VarRef] E | -| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.label | [ExportDeclaration] export ... e N {;} | -| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | semmle.order | 112 | -| type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | semmle.label | [NamespaceDeclaration] namespace N {;} | -| type_definition_objects.ts:9:18:9:18 | [VarDecl] N | semmle.label | [VarDecl] N | -| type_definition_objects.ts:9:21:9:21 | [EmptyStmt] ; | semmle.label | [EmptyStmt] ; | -| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.label | [DeclStmt] let namespaceObj = ... | -| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | semmle.order | 113 | -| type_definition_objects.ts:10:5:10:16 | [VarDecl] namespaceObj | semmle.label | [VarDecl] namespaceObj | -| type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | semmle.label | [VariableDeclarator] namespaceObj = N | -| type_definition_objects.ts:10:20:10:20 | [VarRef] N | semmle.label | [VarRef] N | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.label | [ImportDeclaration] import ... dummy"; | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | semmle.order | 114 | -| type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | [ImportSpecifier] * as dummy | -| type_definitions.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | [VarDecl] dummy | -| type_definitions.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | [Literal] "./dummy" | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.label | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | semmle.order | 115 | -| type_definitions.ts:3:11:3:11 | [Identifier] I | semmle.label | [Identifier] I | -| type_definitions.ts:3:13:3:13 | [Identifier] S | semmle.label | [Identifier] S | -| type_definitions.ts:3:13:3:13 | [TypeParameter] S | semmle.label | [TypeParameter] S | -| type_definitions.ts:4:3:4:3 | [Label] x | semmle.label | [Label] x | -| type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | semmle.label | [FieldDeclaration] x: S; | -| type_definitions.ts:4:6:4:6 | [LocalTypeAccess] S | semmle.label | [LocalTypeAccess] S | -| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.label | [DeclStmt] let i = ... | -| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | semmle.order | 116 | -| type_definitions.ts:6:5:6:5 | [VarDecl] i | semmle.label | [VarDecl] i | -| type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | semmle.label | [VariableDeclarator] i: I | -| type_definitions.ts:6:8:6:8 | [LocalTypeAccess] I | semmle.label | [LocalTypeAccess] I | -| type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | semmle.label | [GenericTypeExpr] I | -| type_definitions.ts:6:10:6:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.label | [ClassDefinition,TypeDefinition] class C ... x: T } | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | semmle.order | 117 | -| type_definitions.ts:8:7:8:7 | [VarDecl] C | semmle.label | [VarDecl] C | -| type_definitions.ts:8:8:8:7 | [BlockStmt] {} | semmle.label | [BlockStmt] {} | -| type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | [ClassInitializedMember,ConstructorDefinition] constructor() {} | -| type_definitions.ts:8:8:8:7 | [FunctionExpr] () {} | semmle.label | [FunctionExpr] () {} | -| type_definitions.ts:8:8:8:7 | [Label] constructor | semmle.label | [Label] constructor | -| type_definitions.ts:8:9:8:9 | [Identifier] T | semmle.label | [Identifier] T | -| type_definitions.ts:8:9:8:9 | [TypeParameter] T | semmle.label | [TypeParameter] T | -| type_definitions.ts:9:3:9:3 | [Label] x | semmle.label | [Label] x | -| type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | semmle.label | [FieldDeclaration] x: T | -| type_definitions.ts:9:6:9:6 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.label | [DeclStmt] let c = ... | -| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | semmle.order | 118 | -| type_definitions.ts:11:5:11:5 | [VarDecl] c | semmle.label | [VarDecl] c | -| type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | semmle.label | [VariableDeclarator] c: C | -| type_definitions.ts:11:8:11:8 | [LocalTypeAccess] C | semmle.label | [LocalTypeAccess] C | -| type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | semmle.label | [GenericTypeExpr] C | -| type_definitions.ts:11:10:11:15 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.label | [EnumDeclaration,TypeDefinition] enum Co ... blue } | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | semmle.order | 119 | -| type_definitions.ts:13:6:13:10 | [VarDecl] Color | semmle.label | [VarDecl] Color | -| type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | semmle.label | [EnumMember,TypeDefinition] red | -| type_definitions.ts:14:3:14:5 | [VarDecl] red | semmle.label | [VarDecl] red | -| type_definitions.ts:14:8:14:12 | [EnumMember,TypeDefinition] green | semmle.label | [EnumMember,TypeDefinition] green | -| type_definitions.ts:14:8:14:12 | [VarDecl] green | semmle.label | [VarDecl] green | -| type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | semmle.label | [EnumMember,TypeDefinition] blue | -| type_definitions.ts:14:15:14:18 | [VarDecl] blue | semmle.label | [VarDecl] blue | -| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.label | [DeclStmt] let color = ... | -| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | semmle.order | 120 | -| type_definitions.ts:16:5:16:9 | [VarDecl] color | semmle.label | [VarDecl] color | -| type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | semmle.label | [VariableDeclarator] color: Color | -| type_definitions.ts:16:12:16:16 | [LocalTypeAccess] Color | semmle.label | [LocalTypeAccess] Color | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.label | [EnumDeclaration,TypeDefinition] enum En ... ember } | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | semmle.order | 121 | -| type_definitions.ts:18:6:18:22 | [VarDecl] EnumWithOneMember | semmle.label | [VarDecl] EnumWithOneMember | -| type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | semmle.label | [EnumMember,TypeDefinition] member | -| type_definitions.ts:18:26:18:31 | [VarDecl] member | semmle.label | [VarDecl] member | -| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.label | [DeclStmt] let e = ... | -| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | semmle.order | 122 | -| type_definitions.ts:19:5:19:5 | [VarDecl] e | semmle.label | [VarDecl] e | -| type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | semmle.label | [VariableDeclarator] e: EnumWithOneMember | -| type_definitions.ts:19:8:19:24 | [LocalTypeAccess] EnumWithOneMember | semmle.label | [LocalTypeAccess] EnumWithOneMember | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.label | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | semmle.order | 123 | -| type_definitions.ts:21:6:21:10 | [Identifier] Alias | semmle.label | [Identifier] Alias | -| type_definitions.ts:21:12:21:12 | [Identifier] T | semmle.label | [Identifier] T | -| type_definitions.ts:21:12:21:12 | [TypeParameter] T | semmle.label | [TypeParameter] T | -| type_definitions.ts:21:17:21:17 | [LocalTypeAccess] T | semmle.label | [LocalTypeAccess] T | -| type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | semmle.label | [ArrayTypeExpr] T[] | -| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.label | [DeclStmt] let aliasForNumberArray = ... | -| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | semmle.order | 124 | -| type_definitions.ts:22:5:22:23 | [VarDecl] aliasForNumberArray | semmle.label | [VarDecl] aliasForNumberArray | -| type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | semmle.label | [VariableDeclarator] aliasFo ... number> | -| type_definitions.ts:22:26:22:30 | [LocalTypeAccess] Alias | semmle.label | [LocalTypeAccess] Alias | -| type_definitions.ts:22:26:22:38 | [GenericTypeExpr] Alias | semmle.label | [GenericTypeExpr] Alias | -| type_definitions.ts:22:32:22:37 | [KeywordTypeExpr] number | semmle.label | [KeywordTypeExpr] number | -edges -| badTypes.ts:5:1:5:29 | [InterfaceDeclaration,TypeDefinition] interfa ... is.B {} | badTypes.ts:5:11:5:11 | [Identifier] A | semmle.label | 1 | -| badTypes.ts:5:1:5:29 | [InterfaceDeclaration,TypeDefinition] interfa ... is.B {} | badTypes.ts:5:11:5:11 | [Identifier] A | semmle.order | 1 | -| badTypes.ts:6:1:6:24 | [TypeAliasDeclaration,TypeDefinition] type T ... ar.bar; | badTypes.ts:6:6:6:6 | [Identifier] T | semmle.label | 1 | -| badTypes.ts:6:1:6:24 | [TypeAliasDeclaration,TypeDefinition] type T ... ar.bar; | badTypes.ts:6:6:6:6 | [Identifier] T | semmle.order | 1 | -| badTypes.ts:6:1:6:24 | [TypeAliasDeclaration,TypeDefinition] type T ... ar.bar; | badTypes.ts:6:10:6:23 | [TypeofTypeExpr] typeof var.bar | semmle.label | 2 | -| badTypes.ts:6:1:6:24 | [TypeAliasDeclaration,TypeDefinition] type T ... ar.bar; | badTypes.ts:6:10:6:23 | [TypeofTypeExpr] typeof var.bar | semmle.order | 2 | -| badTypes.ts:6:10:6:23 | [TypeofTypeExpr] typeof var.bar | badTypes.ts:6:17:6:23 | [VarTypeAccess] var.bar | semmle.label | 1 | -| badTypes.ts:6:10:6:23 | [TypeofTypeExpr] typeof var.bar | badTypes.ts:6:17:6:23 | [VarTypeAccess] var.bar | semmle.order | 1 | -| badTypes.ts:6:17:6:23 | [VarTypeAccess] var.bar | badTypes.ts:6:17:6:19 | [LocalVarTypeAccess] var | semmle.label | 1 | -| badTypes.ts:6:17:6:23 | [VarTypeAccess] var.bar | badTypes.ts:6:17:6:19 | [LocalVarTypeAccess] var | semmle.order | 1 | -| badTypes.ts:6:17:6:23 | [VarTypeAccess] var.bar | badTypes.ts:6:21:6:23 | [Identifier] bar | semmle.label | 2 | -| badTypes.ts:6:17:6:23 | [VarTypeAccess] var.bar | badTypes.ts:6:21:6:23 | [Identifier] bar | semmle.order | 2 | -| boolean-type.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | boolean-type.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | 1 | -| boolean-type.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | boolean-type.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.order | 1 | -| boolean-type.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | boolean-type.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | 2 | -| boolean-type.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | boolean-type.ts:1:24:1:32 | [Literal] "./dummy" | semmle.order | 2 | -| boolean-type.ts:1:8:1:17 | [ImportSpecifier] * as dummy | boolean-type.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | 1 | -| boolean-type.ts:1:8:1:17 | [ImportSpecifier] * as dummy | boolean-type.ts:1:13:1:17 | [VarDecl] dummy | semmle.order | 1 | -| boolean-type.ts:3:1:3:16 | [DeclStmt] var true1 = ... | boolean-type.ts:3:5:3:15 | [VariableDeclarator] true1: true | semmle.label | 1 | -| boolean-type.ts:3:1:3:16 | [DeclStmt] var true1 = ... | boolean-type.ts:3:5:3:15 | [VariableDeclarator] true1: true | semmle.order | 1 | -| boolean-type.ts:3:5:3:15 | [VariableDeclarator] true1: true | boolean-type.ts:3:5:3:9 | [VarDecl] true1 | semmle.label | 1 | -| boolean-type.ts:3:5:3:15 | [VariableDeclarator] true1: true | boolean-type.ts:3:5:3:9 | [VarDecl] true1 | semmle.order | 1 | -| boolean-type.ts:3:5:3:15 | [VariableDeclarator] true1: true | boolean-type.ts:3:12:3:15 | [LiteralTypeExpr] true | semmle.label | 2 | -| boolean-type.ts:3:5:3:15 | [VariableDeclarator] true1: true | boolean-type.ts:3:12:3:15 | [LiteralTypeExpr] true | semmle.order | 2 | -| boolean-type.ts:4:1:4:23 | [DeclStmt] var true2 = ... | boolean-type.ts:4:5:4:22 | [VariableDeclarator] true2: true \| true | semmle.label | 1 | -| boolean-type.ts:4:1:4:23 | [DeclStmt] var true2 = ... | boolean-type.ts:4:5:4:22 | [VariableDeclarator] true2: true \| true | semmle.order | 1 | -| boolean-type.ts:4:5:4:22 | [VariableDeclarator] true2: true \| true | boolean-type.ts:4:5:4:9 | [VarDecl] true2 | semmle.label | 1 | -| boolean-type.ts:4:5:4:22 | [VariableDeclarator] true2: true \| true | boolean-type.ts:4:5:4:9 | [VarDecl] true2 | semmle.order | 1 | -| boolean-type.ts:4:5:4:22 | [VariableDeclarator] true2: true \| true | boolean-type.ts:4:12:4:22 | [UnionTypeExpr] true \| true | semmle.label | 2 | -| boolean-type.ts:4:5:4:22 | [VariableDeclarator] true2: true \| true | boolean-type.ts:4:12:4:22 | [UnionTypeExpr] true \| true | semmle.order | 2 | -| boolean-type.ts:4:12:4:22 | [UnionTypeExpr] true \| true | boolean-type.ts:4:12:4:15 | [LiteralTypeExpr] true | semmle.label | 1 | -| boolean-type.ts:4:12:4:22 | [UnionTypeExpr] true \| true | boolean-type.ts:4:12:4:15 | [LiteralTypeExpr] true | semmle.order | 1 | -| boolean-type.ts:4:12:4:22 | [UnionTypeExpr] true \| true | boolean-type.ts:4:19:4:22 | [LiteralTypeExpr] true | semmle.label | 2 | -| boolean-type.ts:4:12:4:22 | [UnionTypeExpr] true \| true | boolean-type.ts:4:19:4:22 | [LiteralTypeExpr] true | semmle.order | 2 | -| boolean-type.ts:6:1:6:18 | [DeclStmt] var false1 = ... | boolean-type.ts:6:5:6:17 | [VariableDeclarator] false1: false | semmle.label | 1 | -| boolean-type.ts:6:1:6:18 | [DeclStmt] var false1 = ... | boolean-type.ts:6:5:6:17 | [VariableDeclarator] false1: false | semmle.order | 1 | -| boolean-type.ts:6:5:6:17 | [VariableDeclarator] false1: false | boolean-type.ts:6:5:6:10 | [VarDecl] false1 | semmle.label | 1 | -| boolean-type.ts:6:5:6:17 | [VariableDeclarator] false1: false | boolean-type.ts:6:5:6:10 | [VarDecl] false1 | semmle.order | 1 | -| boolean-type.ts:6:5:6:17 | [VariableDeclarator] false1: false | boolean-type.ts:6:13:6:17 | [LiteralTypeExpr] false | semmle.label | 2 | -| boolean-type.ts:6:5:6:17 | [VariableDeclarator] false1: false | boolean-type.ts:6:13:6:17 | [LiteralTypeExpr] false | semmle.order | 2 | -| boolean-type.ts:7:1:7:26 | [DeclStmt] var false2 = ... | boolean-type.ts:7:5:7:25 | [VariableDeclarator] false2: ... \| false | semmle.label | 1 | -| boolean-type.ts:7:1:7:26 | [DeclStmt] var false2 = ... | boolean-type.ts:7:5:7:25 | [VariableDeclarator] false2: ... \| false | semmle.order | 1 | -| boolean-type.ts:7:5:7:25 | [VariableDeclarator] false2: ... \| false | boolean-type.ts:7:5:7:10 | [VarDecl] false2 | semmle.label | 1 | -| boolean-type.ts:7:5:7:25 | [VariableDeclarator] false2: ... \| false | boolean-type.ts:7:5:7:10 | [VarDecl] false2 | semmle.order | 1 | -| boolean-type.ts:7:5:7:25 | [VariableDeclarator] false2: ... \| false | boolean-type.ts:7:13:7:25 | [UnionTypeExpr] false \| false | semmle.label | 2 | -| boolean-type.ts:7:5:7:25 | [VariableDeclarator] false2: ... \| false | boolean-type.ts:7:13:7:25 | [UnionTypeExpr] false \| false | semmle.order | 2 | -| boolean-type.ts:7:13:7:25 | [UnionTypeExpr] false \| false | boolean-type.ts:7:13:7:17 | [LiteralTypeExpr] false | semmle.label | 1 | -| boolean-type.ts:7:13:7:25 | [UnionTypeExpr] false \| false | boolean-type.ts:7:13:7:17 | [LiteralTypeExpr] false | semmle.order | 1 | -| boolean-type.ts:7:13:7:25 | [UnionTypeExpr] false \| false | boolean-type.ts:7:21:7:25 | [LiteralTypeExpr] false | semmle.label | 2 | -| boolean-type.ts:7:13:7:25 | [UnionTypeExpr] false \| false | boolean-type.ts:7:21:7:25 | [LiteralTypeExpr] false | semmle.order | 2 | -| boolean-type.ts:9:1:9:22 | [DeclStmt] var boolean1 = ... | boolean-type.ts:9:5:9:21 | [VariableDeclarator] boolean1: boolean | semmle.label | 1 | -| boolean-type.ts:9:1:9:22 | [DeclStmt] var boolean1 = ... | boolean-type.ts:9:5:9:21 | [VariableDeclarator] boolean1: boolean | semmle.order | 1 | -| boolean-type.ts:9:5:9:21 | [VariableDeclarator] boolean1: boolean | boolean-type.ts:9:5:9:12 | [VarDecl] boolean1 | semmle.label | 1 | -| boolean-type.ts:9:5:9:21 | [VariableDeclarator] boolean1: boolean | boolean-type.ts:9:5:9:12 | [VarDecl] boolean1 | semmle.order | 1 | -| boolean-type.ts:9:5:9:21 | [VariableDeclarator] boolean1: boolean | boolean-type.ts:9:15:9:21 | [KeywordTypeExpr] boolean | semmle.label | 2 | -| boolean-type.ts:9:5:9:21 | [VariableDeclarator] boolean1: boolean | boolean-type.ts:9:15:9:21 | [KeywordTypeExpr] boolean | semmle.order | 2 | -| boolean-type.ts:10:1:10:27 | [DeclStmt] var boolean2 = ... | boolean-type.ts:10:5:10:26 | [VariableDeclarator] boolean ... \| false | semmle.label | 1 | -| boolean-type.ts:10:1:10:27 | [DeclStmt] var boolean2 = ... | boolean-type.ts:10:5:10:26 | [VariableDeclarator] boolean ... \| false | semmle.order | 1 | -| boolean-type.ts:10:5:10:26 | [VariableDeclarator] boolean ... \| false | boolean-type.ts:10:5:10:12 | [VarDecl] boolean2 | semmle.label | 1 | -| boolean-type.ts:10:5:10:26 | [VariableDeclarator] boolean ... \| false | boolean-type.ts:10:5:10:12 | [VarDecl] boolean2 | semmle.order | 1 | -| boolean-type.ts:10:5:10:26 | [VariableDeclarator] boolean ... \| false | boolean-type.ts:10:15:10:26 | [UnionTypeExpr] true \| false | semmle.label | 2 | -| boolean-type.ts:10:5:10:26 | [VariableDeclarator] boolean ... \| false | boolean-type.ts:10:15:10:26 | [UnionTypeExpr] true \| false | semmle.order | 2 | -| boolean-type.ts:10:15:10:26 | [UnionTypeExpr] true \| false | boolean-type.ts:10:15:10:18 | [LiteralTypeExpr] true | semmle.label | 1 | -| boolean-type.ts:10:15:10:26 | [UnionTypeExpr] true \| false | boolean-type.ts:10:15:10:18 | [LiteralTypeExpr] true | semmle.order | 1 | -| boolean-type.ts:10:15:10:26 | [UnionTypeExpr] true \| false | boolean-type.ts:10:22:10:26 | [LiteralTypeExpr] false | semmle.label | 2 | -| boolean-type.ts:10:15:10:26 | [UnionTypeExpr] true \| false | boolean-type.ts:10:22:10:26 | [LiteralTypeExpr] false | semmle.order | 2 | -| boolean-type.ts:11:1:11:27 | [DeclStmt] var boolean3 = ... | boolean-type.ts:11:5:11:26 | [VariableDeclarator] boolean ... \| true | semmle.label | 1 | -| boolean-type.ts:11:1:11:27 | [DeclStmt] var boolean3 = ... | boolean-type.ts:11:5:11:26 | [VariableDeclarator] boolean ... \| true | semmle.order | 1 | -| boolean-type.ts:11:5:11:26 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:11:5:11:12 | [VarDecl] boolean3 | semmle.label | 1 | -| boolean-type.ts:11:5:11:26 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:11:5:11:12 | [VarDecl] boolean3 | semmle.order | 1 | -| boolean-type.ts:11:5:11:26 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:11:15:11:26 | [UnionTypeExpr] false \| true | semmle.label | 2 | -| boolean-type.ts:11:5:11:26 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:11:15:11:26 | [UnionTypeExpr] false \| true | semmle.order | 2 | -| boolean-type.ts:11:15:11:26 | [UnionTypeExpr] false \| true | boolean-type.ts:11:15:11:19 | [LiteralTypeExpr] false | semmle.label | 1 | -| boolean-type.ts:11:15:11:26 | [UnionTypeExpr] false \| true | boolean-type.ts:11:15:11:19 | [LiteralTypeExpr] false | semmle.order | 1 | -| boolean-type.ts:11:15:11:26 | [UnionTypeExpr] false \| true | boolean-type.ts:11:23:11:26 | [LiteralTypeExpr] true | semmle.label | 2 | -| boolean-type.ts:11:15:11:26 | [UnionTypeExpr] false \| true | boolean-type.ts:11:23:11:26 | [LiteralTypeExpr] true | semmle.order | 2 | -| boolean-type.ts:13:1:13:32 | [DeclStmt] var boolean4 = ... | boolean-type.ts:13:5:13:31 | [VariableDeclarator] boolean ... boolean | semmle.label | 1 | -| boolean-type.ts:13:1:13:32 | [DeclStmt] var boolean4 = ... | boolean-type.ts:13:5:13:31 | [VariableDeclarator] boolean ... boolean | semmle.order | 1 | -| boolean-type.ts:13:5:13:31 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:13:5:13:12 | [VarDecl] boolean4 | semmle.label | 1 | -| boolean-type.ts:13:5:13:31 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:13:5:13:12 | [VarDecl] boolean4 | semmle.order | 1 | -| boolean-type.ts:13:5:13:31 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:13:15:13:31 | [UnionTypeExpr] boolean \| boolean | semmle.label | 2 | -| boolean-type.ts:13:5:13:31 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:13:15:13:31 | [UnionTypeExpr] boolean \| boolean | semmle.order | 2 | -| boolean-type.ts:13:15:13:31 | [UnionTypeExpr] boolean \| boolean | boolean-type.ts:13:15:13:21 | [KeywordTypeExpr] boolean | semmle.label | 1 | -| boolean-type.ts:13:15:13:31 | [UnionTypeExpr] boolean \| boolean | boolean-type.ts:13:15:13:21 | [KeywordTypeExpr] boolean | semmle.order | 1 | -| boolean-type.ts:13:15:13:31 | [UnionTypeExpr] boolean \| boolean | boolean-type.ts:13:25:13:31 | [KeywordTypeExpr] boolean | semmle.label | 2 | -| boolean-type.ts:13:15:13:31 | [UnionTypeExpr] boolean \| boolean | boolean-type.ts:13:25:13:31 | [KeywordTypeExpr] boolean | semmle.order | 2 | -| boolean-type.ts:14:1:14:29 | [DeclStmt] var boolean5 = ... | boolean-type.ts:14:5:14:28 | [VariableDeclarator] boolean ... \| true | semmle.label | 1 | -| boolean-type.ts:14:1:14:29 | [DeclStmt] var boolean5 = ... | boolean-type.ts:14:5:14:28 | [VariableDeclarator] boolean ... \| true | semmle.order | 1 | -| boolean-type.ts:14:5:14:28 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:14:5:14:12 | [VarDecl] boolean5 | semmle.label | 1 | -| boolean-type.ts:14:5:14:28 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:14:5:14:12 | [VarDecl] boolean5 | semmle.order | 1 | -| boolean-type.ts:14:5:14:28 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:14:15:14:28 | [UnionTypeExpr] boolean \| true | semmle.label | 2 | -| boolean-type.ts:14:5:14:28 | [VariableDeclarator] boolean ... \| true | boolean-type.ts:14:15:14:28 | [UnionTypeExpr] boolean \| true | semmle.order | 2 | -| boolean-type.ts:14:15:14:28 | [UnionTypeExpr] boolean \| true | boolean-type.ts:14:15:14:21 | [KeywordTypeExpr] boolean | semmle.label | 1 | -| boolean-type.ts:14:15:14:28 | [UnionTypeExpr] boolean \| true | boolean-type.ts:14:15:14:21 | [KeywordTypeExpr] boolean | semmle.order | 1 | -| boolean-type.ts:14:15:14:28 | [UnionTypeExpr] boolean \| true | boolean-type.ts:14:25:14:28 | [LiteralTypeExpr] true | semmle.label | 2 | -| boolean-type.ts:14:15:14:28 | [UnionTypeExpr] boolean \| true | boolean-type.ts:14:25:14:28 | [LiteralTypeExpr] true | semmle.order | 2 | -| boolean-type.ts:15:1:15:30 | [DeclStmt] var boolean6 = ... | boolean-type.ts:15:5:15:29 | [VariableDeclarator] boolean ... boolean | semmle.label | 1 | -| boolean-type.ts:15:1:15:30 | [DeclStmt] var boolean6 = ... | boolean-type.ts:15:5:15:29 | [VariableDeclarator] boolean ... boolean | semmle.order | 1 | -| boolean-type.ts:15:5:15:29 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:15:5:15:12 | [VarDecl] boolean6 | semmle.label | 1 | -| boolean-type.ts:15:5:15:29 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:15:5:15:12 | [VarDecl] boolean6 | semmle.order | 1 | -| boolean-type.ts:15:5:15:29 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:15:15:15:29 | [UnionTypeExpr] false \| boolean | semmle.label | 2 | -| boolean-type.ts:15:5:15:29 | [VariableDeclarator] boolean ... boolean | boolean-type.ts:15:15:15:29 | [UnionTypeExpr] false \| boolean | semmle.order | 2 | -| boolean-type.ts:15:15:15:29 | [UnionTypeExpr] false \| boolean | boolean-type.ts:15:15:15:19 | [LiteralTypeExpr] false | semmle.label | 1 | -| boolean-type.ts:15:15:15:29 | [UnionTypeExpr] false \| boolean | boolean-type.ts:15:15:15:19 | [LiteralTypeExpr] false | semmle.order | 1 | -| boolean-type.ts:15:15:15:29 | [UnionTypeExpr] false \| boolean | boolean-type.ts:15:23:15:29 | [KeywordTypeExpr] boolean | semmle.label | 2 | -| boolean-type.ts:15:15:15:29 | [UnionTypeExpr] false \| boolean | boolean-type.ts:15:23:15:29 | [KeywordTypeExpr] boolean | semmle.order | 2 | -| dummy.ts:2:1:2:17 | [ExportDeclaration] export let x = 5; | dummy.ts:2:8:2:17 | [DeclStmt] let x = ... | semmle.label | 1 | -| dummy.ts:2:1:2:17 | [ExportDeclaration] export let x = 5; | dummy.ts:2:8:2:17 | [DeclStmt] let x = ... | semmle.order | 1 | -| dummy.ts:2:8:2:17 | [DeclStmt] let x = ... | dummy.ts:2:12:2:16 | [VariableDeclarator] x = 5 | semmle.label | 1 | -| dummy.ts:2:8:2:17 | [DeclStmt] let x = ... | dummy.ts:2:12:2:16 | [VariableDeclarator] x = 5 | semmle.order | 1 | -| dummy.ts:2:12:2:16 | [VariableDeclarator] x = 5 | dummy.ts:2:12:2:12 | [VarDecl] x | semmle.label | 1 | -| dummy.ts:2:12:2:16 | [VariableDeclarator] x = 5 | dummy.ts:2:12:2:12 | [VarDecl] x | semmle.order | 1 | -| dummy.ts:2:12:2:16 | [VariableDeclarator] x = 5 | dummy.ts:2:16:2:16 | [Literal] 5 | semmle.label | 2 | -| dummy.ts:2:12:2:16 | [VariableDeclarator] x = 5 | dummy.ts:2:16:2:16 | [Literal] 5 | semmle.order | 2 | -| dummy.ts:4:1:4:24 | [ExportDeclaration] export ... /ab+c/; | dummy.ts:4:8:4:24 | [DeclStmt] let reg = ... | semmle.label | 1 | -| dummy.ts:4:1:4:24 | [ExportDeclaration] export ... /ab+c/; | dummy.ts:4:8:4:24 | [DeclStmt] let reg = ... | semmle.order | 1 | -| dummy.ts:4:8:4:24 | [DeclStmt] let reg = ... | dummy.ts:4:12:4:23 | [VariableDeclarator] reg = /ab+c/ | semmle.label | 1 | -| dummy.ts:4:8:4:24 | [DeclStmt] let reg = ... | dummy.ts:4:12:4:23 | [VariableDeclarator] reg = /ab+c/ | semmle.order | 1 | -| dummy.ts:4:12:4:23 | [VariableDeclarator] reg = /ab+c/ | dummy.ts:4:12:4:14 | [VarDecl] reg | semmle.label | 1 | -| dummy.ts:4:12:4:23 | [VariableDeclarator] reg = /ab+c/ | dummy.ts:4:12:4:14 | [VarDecl] reg | semmle.order | 1 | -| dummy.ts:4:12:4:23 | [VariableDeclarator] reg = /ab+c/ | dummy.ts:4:18:4:23 | [RegExpLiteral] /ab+c/ | semmle.label | 2 | -| dummy.ts:4:12:4:23 | [VariableDeclarator] reg = /ab+c/ | dummy.ts:4:18:4:23 | [RegExpLiteral] /ab+c/ | semmle.order | 2 | -| dummy.ts:4:18:4:23 | [RegExpLiteral] /ab+c/ | dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | semmle.label | 0 | -| dummy.ts:4:18:4:23 | [RegExpLiteral] /ab+c/ | dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | semmle.order | 0 | -| dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | dummy.ts:4:19:4:19 | [RegExpNormalConstant] a | semmle.label | 0 | -| dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | dummy.ts:4:19:4:19 | [RegExpNormalConstant] a | semmle.order | 0 | -| dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | dummy.ts:4:20:4:21 | [RegExpPlus] b+ | semmle.label | 1 | -| dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | dummy.ts:4:20:4:21 | [RegExpPlus] b+ | semmle.order | 1 | -| dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | dummy.ts:4:22:4:22 | [RegExpNormalConstant] c | semmle.label | 2 | -| dummy.ts:4:19:4:22 | [RegExpSequence] ab+c | dummy.ts:4:22:4:22 | [RegExpNormalConstant] c | semmle.order | 2 | -| dummy.ts:4:20:4:21 | [RegExpPlus] b+ | dummy.ts:4:20:4:20 | [RegExpNormalConstant] b | semmle.label | 0 | -| dummy.ts:4:20:4:21 | [RegExpPlus] b+ | dummy.ts:4:20:4:20 | [RegExpNormalConstant] b | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:86:27:86:31 | [VarRef] value | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:86:27:86:31 | [VarRef] value | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:97:27:97:26 | [SpreadElement] ...args | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:97:27:97:26 | [SpreadElement] ...args | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:159:31:159:35 | [Literal] "red" | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:159:31:159:35 | [Literal] "red" | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:247:19:247:50 | [Literal] "Doing something before super()" | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:247:19:247:50 | [Literal] "Doing something before super()" | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:259:19:259:35 | [MethodCallExpr] payload.toFixed() | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:259:19:259:35 | [MethodCallExpr] payload.toFixed() | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:261:19:261:39 | [MethodCallExpr] payload ... rCase() | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:261:19:261:39 | [MethodCallExpr] payload ... rCase() | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:279:14:279:21 | [DotExpr] record.v | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:279:14:279:21 | [DotExpr] record.v | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:282:17:287:3 | [ObjectExpr] {kind: ...} | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:282:17:287:3 | [ObjectExpr] {kind: ...} | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:285:19:285:35 | [MethodCallExpr] val.toUpperCase() | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:285:19:285:35 | [MethodCallExpr] val.toUpperCase() | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:318:3:321:1 | [ObjectExpr] {produce: ...} | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:318:3:321:1 | [ObjectExpr] {produce: ...} | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:358:13:358:25 | [CallExpr] tstModuleES() | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:358:13:358:25 | [CallExpr] tstModuleES() | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:362:13:362:26 | [CallExpr] tstModuleCJS() | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:362:13:362:26 | [CallExpr] tstModuleCJS() | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:370:13:370:28 | [MethodCallExpr] A.resolvedFile() | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:370:13:370:28 | [MethodCallExpr] A.resolvedFile() | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:374:13:374:28 | [MethodCallExpr] B.resolvedFile() | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:374:13:374:28 | [MethodCallExpr] B.resolvedFile() | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | semmle.label | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | semmle.order | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:402:39:402:39 | [Literal] 0 | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:402:39:402:39 | [Literal] 0 | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:435:35:435:46 | [DotExpr] context.name | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:435:35:435:46 | [DotExpr] context.name | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:439:40:439:43 | [ThisExpr] this | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:439:40:439:43 | [ThisExpr] this | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:439:46:439:52 | [SpreadElement] ...args | semmle.label | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:439:46:439:52 | [SpreadElement] ...args | semmle.order | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:453:23:453:24 | [Literal] "" | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:453:23:453:24 | [Literal] "" | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:460:26:460:31 | [Literal] "John" | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:460:26:460:31 | [Literal] "John" | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:491:49:491:56 | [Literal] "yellow" | semmle.label | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:491:49:491:56 | [Literal] "yellow" | semmle.order | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | semmle.order | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | semmle.label | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | semmle.order | 1 | -| file://:0:0:0:0 | (Arguments) | tst.ts:500:13:500:38 | [ArrowFunctionExpr] s => ty ... string" | semmle.label | 0 | -| file://:0:0:0:0 | (Arguments) | tst.ts:500:13:500:38 | [ArrowFunctionExpr] s => ty ... string" | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:14:17:14:17 | [SimpleParameter] x | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:14:17:14:17 | [SimpleParameter] x | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:14:28:14:28 | [SimpleParameter] y | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:14:28:14:28 | [SimpleParameter] y | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:16:14:16:14 | [SimpleParameter] x | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:16:14:16:14 | [SimpleParameter] x | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:16:25:16:25 | [SimpleParameter] y | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:16:25:16:25 | [SimpleParameter] y | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:18:18:18:18 | [SimpleParameter] x | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:18:18:18:18 | [SimpleParameter] x | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:18:21:18:21 | [SimpleParameter] y | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:18:21:18:21 | [SimpleParameter] y | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:20:23:20:23 | [SimpleParameter] x | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:20:23:20:23 | [SimpleParameter] x | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:20:26:20:26 | [SimpleParameter] y | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:20:26:20:26 | [SimpleParameter] y | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:75:14:75:18 | [SimpleParameter] value | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:75:14:75:18 | [SimpleParameter] value | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:85:14:85:18 | [SimpleParameter] value | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:85:14:85:18 | [SimpleParameter] value | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:97:27:97:26 | [SimpleParameter] args | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:97:27:97:26 | [SimpleParameter] args | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:104:16:104:16 | [SimpleParameter] s | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:104:16:104:16 | [SimpleParameter] s | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:133:16:133:18 | [SimpleParameter] arg | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:133:16:133:18 | [SimpleParameter] arg | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:144:17:144:21 | [SimpleParameter] shape | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:144:17:144:21 | [SimpleParameter] shape | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:153:8:153:10 | [SimpleParameter] sym | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:153:8:153:10 | [SimpleParameter] sym | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:154:8:154:10 | [SimpleParameter] key | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:154:8:154:10 | [SimpleParameter] key | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:155:8:155:10 | [SimpleParameter] num | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:155:8:155:10 | [SimpleParameter] num | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:166:8:166:10 | [SimpleParameter] key | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:166:8:166:10 | [SimpleParameter] key | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:172:8:172:14 | [SimpleParameter] optName | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:172:8:172:14 | [SimpleParameter] optName | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:215:27:215:27 | [SimpleParameter] r | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:215:27:215:27 | [SimpleParameter] r | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:224:17:224:20 | [SimpleParameter] name | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:224:17:224:20 | [SimpleParameter] name | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:228:12:228:16 | [SimpleParameter] other | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:228:12:228:16 | [SimpleParameter] other | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:256:26:256:31 | [SimpleParameter] action | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:256:26:256:31 | [SimpleParameter] action | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:274:11:274:11 | [SimpleParameter] p | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:274:11:274:11 | [SimpleParameter] p | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:278:51:278:56 | [SimpleParameter] record | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:278:51:278:56 | [SimpleParameter] record | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:284:9:284:11 | [SimpleParameter] val | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:284:9:284:11 | [SimpleParameter] val | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:289:19:289:22 | [SimpleParameter] args | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:289:19:289:22 | [SimpleParameter] args | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:291:21:291:24 | [SimpleParameter] kind | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:291:21:291:24 | [SimpleParameter] kind | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:291:27:291:33 | [SimpleParameter] payload | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:291:27:291:33 | [SimpleParameter] payload | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:313:15:313:17 | [SimpleParameter] arg | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:313:15:313:17 | [SimpleParameter] arg | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:314:13:314:13 | [SimpleParameter] n | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:314:13:314:13 | [SimpleParameter] n | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:315:13:315:13 | [SimpleParameter] x | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:315:13:315:13 | [SimpleParameter] x | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:319:12:319:12 | [SimpleParameter] n | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:319:12:319:12 | [SimpleParameter] n | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:320:12:320:12 | [SimpleParameter] x | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:320:12:320:12 | [SimpleParameter] x | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:344:9:344:13 | [SimpleParameter] value | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:344:9:344:13 | [SimpleParameter] value | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:349:9:349:13 | [SimpleParameter] value | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:349:9:349:13 | [SimpleParameter] value | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:383:40:383:40 | [SimpleParameter] x | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:383:40:383:40 | [SimpleParameter] x | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:383:46:383:46 | [SimpleParameter] y | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:383:46:383:46 | [SimpleParameter] y | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:412:21:412:25 | [SimpleParameter] color | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:412:21:412:25 | [SimpleParameter] color | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:422:17:422:20 | [SimpleParameter] name | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:422:17:422:20 | [SimpleParameter] name | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:432:9:432:14 | [SimpleParameter] target | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:432:9:432:14 | [SimpleParameter] target | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:432:33:432:36 | [SimpleParameter] args | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:432:33:432:36 | [SimpleParameter] args | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:433:9:433:15 | [SimpleParameter] context | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:433:9:433:15 | [SimpleParameter] context | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:433:68:433:71 | [SimpleParameter] args | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:433:68:433:71 | [SimpleParameter] args | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:437:51:437:54 | [SimpleParameter] args | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:437:51:437:54 | [SimpleParameter] args | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:449:21:449:24 | [SimpleParameter] name | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:449:21:449:24 | [SimpleParameter] name | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:462:75:462:78 | [SimpleParameter] args | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:462:75:462:78 | [SimpleParameter] args | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:474:12:474:18 | [SimpleParameter] _target | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:474:12:474:18 | [SimpleParameter] _target | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:474:21:474:28 | [SimpleParameter] _context | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:474:21:474:28 | [SimpleParameter] _context | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:487:48:487:53 | [SimpleParameter] colors | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:487:48:487:53 | [SimpleParameter] colors | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:493:53:493:55 | [SimpleParameter] num | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:493:53:493:55 | [SimpleParameter] num | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:493:58:493:62 | [SimpleParameter] index | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:493:58:493:62 | [SimpleParameter] index | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:500:13:500:13 | [SimpleParameter] s | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:500:13:500:13 | [SimpleParameter] s | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:506:15:506:17 | [SimpleParameter] obj | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:506:15:506:17 | [SimpleParameter] obj | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | tst.ts:506:45:506:47 | [SimpleParameter] key | semmle.label | 1 | -| file://:0:0:0:0 | (Parameters) | tst.ts:506:45:506:47 | [SimpleParameter] key | semmle.order | 1 | -| file://:0:0:0:0 | (Parameters) | type_alias.ts:14:10:14:17 | [SimpleParameter] property | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | type_alias.ts:14:10:14:17 | [SimpleParameter] property | semmle.order | 0 | -| file://:0:0:0:0 | (Parameters) | type_alias.ts:21:19:21:21 | [SimpleParameter] key | semmle.label | 0 | -| file://:0:0:0:0 | (Parameters) | type_alias.ts:21:19:21:21 | [SimpleParameter] key | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:271:20:271:42 | [TypeParameter] P exten ... TypeMap | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:271:20:271:42 | [TypeParameter] P exten ... TypeMap | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:272:6:272:11 | [TypeParameter] K in P | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:272:6:272:11 | [TypeParameter] K in P | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:278:26:278:48 | [TypeParameter] K exten ... TypeMap | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:278:26:278:48 | [TypeParameter] K exten ... TypeMap | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:313:12:313:12 | [TypeParameter] T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:313:12:313:12 | [TypeParameter] T | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:331:18:331:18 | [TypeParameter] T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:331:18:331:18 | [TypeParameter] T | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:332:20:332:35 | [TypeParameter] S extends string | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:332:20:332:35 | [TypeParameter] S extends string | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:342:17:342:24 | [TypeParameter] in out T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:342:17:342:24 | [TypeParameter] in out T | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:381:43:381:58 | [TypeParameter] U extends number | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:381:43:381:58 | [TypeParameter] U extends number | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:383:37:383:37 | [TypeParameter] T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:383:37:383:37 | [TypeParameter] T | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:431:27:431:30 | [TypeParameter] This | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:431:27:431:30 | [TypeParameter] This | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:431:33:431:50 | [TypeParameter] Args extends any[] | semmle.label | 1 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:431:33:431:50 | [TypeParameter] Args extends any[] | semmle.order | 1 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:431:53:431:58 | [TypeParameter] Return | semmle.label | 2 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:431:53:431:58 | [TypeParameter] Return | semmle.order | 2 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:481:16:481:16 | [TypeParameter] T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:481:16:481:16 | [TypeParameter] T | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:487:30:487:45 | [TypeParameter] C extends string | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | tst.ts:487:30:487:45 | [TypeParameter] C extends string | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_alias.ts:5:19:5:19 | [TypeParameter] T | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_definitions.ts:3:13:3:13 | [TypeParameter] S | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_definitions.ts:3:13:3:13 | [TypeParameter] S | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_definitions.ts:8:9:8:9 | [TypeParameter] T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_definitions.ts:8:9:8:9 | [TypeParameter] T | semmle.order | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_definitions.ts:21:12:21:12 | [TypeParameter] T | semmle.label | 0 | -| file://:0:0:0:0 | (TypeParameters) | type_definitions.ts:21:12:21:12 | [TypeParameter] T | semmle.order | 0 | -| middle-rest.ts:1:1:1:40 | [DeclStmt] let foo = ... | middle-rest.ts:1:5:1:39 | [VariableDeclarator] foo: [b ... number] | semmle.label | 1 | -| middle-rest.ts:1:1:1:40 | [DeclStmt] let foo = ... | middle-rest.ts:1:5:1:39 | [VariableDeclarator] foo: [b ... number] | semmle.order | 1 | -| middle-rest.ts:1:5:1:39 | [VariableDeclarator] foo: [b ... number] | middle-rest.ts:1:5:1:7 | [VarDecl] foo | semmle.label | 1 | -| middle-rest.ts:1:5:1:39 | [VariableDeclarator] foo: [b ... number] | middle-rest.ts:1:5:1:7 | [VarDecl] foo | semmle.order | 1 | -| middle-rest.ts:1:5:1:39 | [VariableDeclarator] foo: [b ... number] | middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | semmle.label | 2 | -| middle-rest.ts:1:5:1:39 | [VariableDeclarator] foo: [b ... number] | middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | semmle.order | 2 | -| middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | middle-rest.ts:1:11:1:17 | [KeywordTypeExpr] boolean | semmle.label | 1 | -| middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | middle-rest.ts:1:11:1:17 | [KeywordTypeExpr] boolean | semmle.order | 1 | -| middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | middle-rest.ts:1:20:1:30 | [RestTypeExpr] ...string[] | semmle.label | 2 | -| middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | middle-rest.ts:1:20:1:30 | [RestTypeExpr] ...string[] | semmle.order | 2 | -| middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | middle-rest.ts:1:33:1:38 | [KeywordTypeExpr] number | semmle.label | 3 | -| middle-rest.ts:1:10:1:39 | [TupleTypeExpr] [boolea ... number] | middle-rest.ts:1:33:1:38 | [KeywordTypeExpr] number | semmle.order | 3 | -| middle-rest.ts:1:20:1:30 | [RestTypeExpr] ...string[] | middle-rest.ts:1:23:1:30 | [ArrayTypeExpr] string[] | semmle.label | 1 | -| middle-rest.ts:1:20:1:30 | [RestTypeExpr] ...string[] | middle-rest.ts:1:23:1:30 | [ArrayTypeExpr] string[] | semmle.order | 1 | -| middle-rest.ts:1:23:1:30 | [ArrayTypeExpr] string[] | middle-rest.ts:1:23:1:28 | [KeywordTypeExpr] string | semmle.label | 1 | -| middle-rest.ts:1:23:1:30 | [ArrayTypeExpr] string[] | middle-rest.ts:1:23:1:28 | [KeywordTypeExpr] string | semmle.order | 1 | -| middle-rest.ts:3:1:3:26 | [AssignExpr] foo = [ ... ", 123] | middle-rest.ts:3:1:3:3 | [VarRef] foo | semmle.label | 1 | -| middle-rest.ts:3:1:3:26 | [AssignExpr] foo = [ ... ", 123] | middle-rest.ts:3:1:3:3 | [VarRef] foo | semmle.order | 1 | -| middle-rest.ts:3:1:3:26 | [AssignExpr] foo = [ ... ", 123] | middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | semmle.label | 2 | -| middle-rest.ts:3:1:3:26 | [AssignExpr] foo = [ ... ", 123] | middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | semmle.order | 2 | -| middle-rest.ts:3:1:3:27 | [ExprStmt] foo = [ ... , 123]; | middle-rest.ts:3:1:3:26 | [AssignExpr] foo = [ ... ", 123] | semmle.label | 1 | -| middle-rest.ts:3:1:3:27 | [ExprStmt] foo = [ ... , 123]; | middle-rest.ts:3:1:3:26 | [AssignExpr] foo = [ ... ", 123] | semmle.order | 1 | -| middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | middle-rest.ts:3:8:3:11 | [Literal] true | semmle.label | 1 | -| middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | middle-rest.ts:3:8:3:11 | [Literal] true | semmle.order | 1 | -| middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | middle-rest.ts:3:14:3:20 | [Literal] "hello" | semmle.label | 2 | -| middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | middle-rest.ts:3:14:3:20 | [Literal] "hello" | semmle.order | 2 | -| middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | middle-rest.ts:3:23:3:25 | [Literal] 123 | semmle.label | 3 | -| middle-rest.ts:3:7:3:26 | [ArrayExpr] [true, "hello", 123] | middle-rest.ts:3:23:3:25 | [Literal] 123 | semmle.order | 3 | -| tsconfig.json:1:1:9:1 | [JsonObject] {compilerOptions: ...} | tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | semmle.label | 0 | -| tsconfig.json:1:1:9:1 | [JsonObject] {compilerOptions: ...} | tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | semmle.order | 0 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:3:15:3:22 | [JsonString] "esnext" | semmle.label | 0 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:3:15:3:22 | [JsonString] "esnext" | semmle.order | 0 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:4:15:4:22 | [JsonString] "esnext" | semmle.label | 1 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:4:15:4:22 | [JsonString] "esnext" | semmle.order | 1 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:5:12:5:28 | [JsonArray] ["dom", ...] | semmle.label | 2 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:5:12:5:28 | [JsonArray] ["dom", ...] | semmle.order | 2 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:6:26:6:29 | [JsonBoolean] true | semmle.label | 3 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:6:26:6:29 | [JsonBoolean] true | semmle.order | 3 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:7:23:7:34 | [JsonArray] [".ios", ...] | semmle.label | 4 | -| tsconfig.json:2:22:8:3 | [JsonObject] {module: ...} | tsconfig.json:7:23:7:34 | [JsonArray] [".ios", ...] | semmle.order | 4 | -| tsconfig.json:5:12:5:28 | [JsonArray] ["dom", ...] | tsconfig.json:5:13:5:17 | [JsonString] "dom" | semmle.label | 0 | -| tsconfig.json:5:12:5:28 | [JsonArray] ["dom", ...] | tsconfig.json:5:13:5:17 | [JsonString] "dom" | semmle.order | 0 | -| tsconfig.json:5:12:5:28 | [JsonArray] ["dom", ...] | tsconfig.json:5:20:5:27 | [JsonString] "esnext" | semmle.label | 1 | -| tsconfig.json:5:12:5:28 | [JsonArray] ["dom", ...] | tsconfig.json:5:20:5:27 | [JsonString] "esnext" | semmle.order | 1 | -| tsconfig.json:7:23:7:34 | [JsonArray] [".ios", ...] | tsconfig.json:7:24:7:29 | [JsonString] ".ios" | semmle.label | 0 | -| tsconfig.json:7:23:7:34 | [JsonArray] [".ios", ...] | tsconfig.json:7:24:7:29 | [JsonString] ".ios" | semmle.order | 0 | -| tsconfig.json:7:23:7:34 | [JsonArray] [".ios", ...] | tsconfig.json:7:32:7:33 | [JsonString] "" | semmle.label | 1 | -| tsconfig.json:7:23:7:34 | [JsonArray] [".ios", ...] | tsconfig.json:7:32:7:33 | [JsonString] "" | semmle.order | 1 | -| tst.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | tst.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | 1 | -| tst.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | tst.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.order | 1 | -| tst.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | tst.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | 2 | -| tst.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | tst.ts:1:24:1:32 | [Literal] "./dummy" | semmle.order | 2 | -| tst.ts:1:8:1:17 | [ImportSpecifier] * as dummy | tst.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | 1 | -| tst.ts:1:8:1:17 | [ImportSpecifier] * as dummy | tst.ts:1:13:1:17 | [VarDecl] dummy | semmle.order | 1 | -| tst.ts:3:1:3:19 | [DeclStmt] var numVar = ... | tst.ts:3:5:3:18 | [VariableDeclarator] numVar: number | semmle.label | 1 | -| tst.ts:3:1:3:19 | [DeclStmt] var numVar = ... | tst.ts:3:5:3:18 | [VariableDeclarator] numVar: number | semmle.order | 1 | -| tst.ts:3:5:3:18 | [VariableDeclarator] numVar: number | tst.ts:3:5:3:10 | [VarDecl] numVar | semmle.label | 1 | -| tst.ts:3:5:3:18 | [VariableDeclarator] numVar: number | tst.ts:3:5:3:10 | [VarDecl] numVar | semmle.order | 1 | -| tst.ts:3:5:3:18 | [VariableDeclarator] numVar: number | tst.ts:3:13:3:18 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:3:5:3:18 | [VariableDeclarator] numVar: number | tst.ts:3:13:3:18 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:5:1:5:18 | [DeclStmt] var num1 = ... | tst.ts:5:5:5:17 | [VariableDeclarator] num1 = numVar | semmle.label | 1 | -| tst.ts:5:1:5:18 | [DeclStmt] var num1 = ... | tst.ts:5:5:5:17 | [VariableDeclarator] num1 = numVar | semmle.order | 1 | -| tst.ts:5:5:5:17 | [VariableDeclarator] num1 = numVar | tst.ts:5:5:5:8 | [VarDecl] num1 | semmle.label | 1 | -| tst.ts:5:5:5:17 | [VariableDeclarator] num1 = numVar | tst.ts:5:5:5:8 | [VarDecl] num1 | semmle.order | 1 | -| tst.ts:5:5:5:17 | [VariableDeclarator] num1 = numVar | tst.ts:5:12:5:17 | [VarRef] numVar | semmle.label | 2 | -| tst.ts:5:5:5:17 | [VariableDeclarator] num1 = numVar | tst.ts:5:12:5:17 | [VarRef] numVar | semmle.order | 2 | -| tst.ts:6:1:6:13 | [DeclStmt] var num2 = ... | tst.ts:6:5:6:12 | [VariableDeclarator] num2 = 5 | semmle.label | 1 | -| tst.ts:6:1:6:13 | [DeclStmt] var num2 = ... | tst.ts:6:5:6:12 | [VariableDeclarator] num2 = 5 | semmle.order | 1 | -| tst.ts:6:5:6:12 | [VariableDeclarator] num2 = 5 | tst.ts:6:5:6:8 | [VarDecl] num2 | semmle.label | 1 | -| tst.ts:6:5:6:12 | [VariableDeclarator] num2 = 5 | tst.ts:6:5:6:8 | [VarDecl] num2 | semmle.order | 1 | -| tst.ts:6:5:6:12 | [VariableDeclarator] num2 = 5 | tst.ts:6:12:6:12 | [Literal] 5 | semmle.label | 2 | -| tst.ts:6:5:6:12 | [VariableDeclarator] num2 = 5 | tst.ts:6:12:6:12 | [Literal] 5 | semmle.order | 2 | -| tst.ts:7:1:7:23 | [DeclStmt] var num3 = ... | tst.ts:7:5:7:22 | [VariableDeclarator] num3 = num1 + num2 | semmle.label | 1 | -| tst.ts:7:1:7:23 | [DeclStmt] var num3 = ... | tst.ts:7:5:7:22 | [VariableDeclarator] num3 = num1 + num2 | semmle.order | 1 | -| tst.ts:7:5:7:22 | [VariableDeclarator] num3 = num1 + num2 | tst.ts:7:5:7:8 | [VarDecl] num3 | semmle.label | 1 | -| tst.ts:7:5:7:22 | [VariableDeclarator] num3 = num1 + num2 | tst.ts:7:5:7:8 | [VarDecl] num3 | semmle.order | 1 | -| tst.ts:7:5:7:22 | [VariableDeclarator] num3 = num1 + num2 | tst.ts:7:12:7:22 | [BinaryExpr] num1 + num2 | semmle.label | 2 | -| tst.ts:7:5:7:22 | [VariableDeclarator] num3 = num1 + num2 | tst.ts:7:12:7:22 | [BinaryExpr] num1 + num2 | semmle.order | 2 | -| tst.ts:7:12:7:22 | [BinaryExpr] num1 + num2 | tst.ts:7:12:7:15 | [VarRef] num1 | semmle.label | 1 | -| tst.ts:7:12:7:22 | [BinaryExpr] num1 + num2 | tst.ts:7:12:7:15 | [VarRef] num1 | semmle.order | 1 | -| tst.ts:7:12:7:22 | [BinaryExpr] num1 + num2 | tst.ts:7:19:7:22 | [VarRef] num2 | semmle.label | 2 | -| tst.ts:7:12:7:22 | [BinaryExpr] num1 + num2 | tst.ts:7:19:7:22 | [VarRef] num2 | semmle.order | 2 | -| tst.ts:9:1:9:19 | [DeclStmt] var strVar = ... | tst.ts:9:5:9:18 | [VariableDeclarator] strVar: string | semmle.label | 1 | -| tst.ts:9:1:9:19 | [DeclStmt] var strVar = ... | tst.ts:9:5:9:18 | [VariableDeclarator] strVar: string | semmle.order | 1 | -| tst.ts:9:5:9:18 | [VariableDeclarator] strVar: string | tst.ts:9:5:9:10 | [VarDecl] strVar | semmle.label | 1 | -| tst.ts:9:5:9:18 | [VariableDeclarator] strVar: string | tst.ts:9:5:9:10 | [VarDecl] strVar | semmle.order | 1 | -| tst.ts:9:5:9:18 | [VariableDeclarator] strVar: string | tst.ts:9:13:9:18 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:9:5:9:18 | [VariableDeclarator] strVar: string | tst.ts:9:13:9:18 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:10:1:10:20 | [DeclStmt] var hello = ... | tst.ts:10:5:10:19 | [VariableDeclarator] hello = "hello" | semmle.label | 1 | -| tst.ts:10:1:10:20 | [DeclStmt] var hello = ... | tst.ts:10:5:10:19 | [VariableDeclarator] hello = "hello" | semmle.order | 1 | -| tst.ts:10:5:10:19 | [VariableDeclarator] hello = "hello" | tst.ts:10:5:10:9 | [VarDecl] hello | semmle.label | 1 | -| tst.ts:10:5:10:19 | [VariableDeclarator] hello = "hello" | tst.ts:10:5:10:9 | [VarDecl] hello | semmle.order | 1 | -| tst.ts:10:5:10:19 | [VariableDeclarator] hello = "hello" | tst.ts:10:13:10:19 | [Literal] "hello" | semmle.label | 2 | -| tst.ts:10:5:10:19 | [VariableDeclarator] hello = "hello" | tst.ts:10:13:10:19 | [Literal] "hello" | semmle.order | 2 | -| tst.ts:11:1:11:20 | [DeclStmt] var world = ... | tst.ts:11:5:11:19 | [VariableDeclarator] world = "world" | semmle.label | 1 | -| tst.ts:11:1:11:20 | [DeclStmt] var world = ... | tst.ts:11:5:11:19 | [VariableDeclarator] world = "world" | semmle.order | 1 | -| tst.ts:11:5:11:19 | [VariableDeclarator] world = "world" | tst.ts:11:5:11:9 | [VarDecl] world | semmle.label | 1 | -| tst.ts:11:5:11:19 | [VariableDeclarator] world = "world" | tst.ts:11:5:11:9 | [VarDecl] world | semmle.order | 1 | -| tst.ts:11:5:11:19 | [VariableDeclarator] world = "world" | tst.ts:11:13:11:19 | [Literal] "world" | semmle.label | 2 | -| tst.ts:11:5:11:19 | [VariableDeclarator] world = "world" | tst.ts:11:13:11:19 | [Literal] "world" | semmle.order | 2 | -| tst.ts:12:1:12:30 | [DeclStmt] var msg = ... | tst.ts:12:5:12:29 | [VariableDeclarator] msg = h ... + world | semmle.label | 1 | -| tst.ts:12:1:12:30 | [DeclStmt] var msg = ... | tst.ts:12:5:12:29 | [VariableDeclarator] msg = h ... + world | semmle.order | 1 | -| tst.ts:12:5:12:29 | [VariableDeclarator] msg = h ... + world | tst.ts:12:5:12:7 | [VarDecl] msg | semmle.label | 1 | -| tst.ts:12:5:12:29 | [VariableDeclarator] msg = h ... + world | tst.ts:12:5:12:7 | [VarDecl] msg | semmle.order | 1 | -| tst.ts:12:5:12:29 | [VariableDeclarator] msg = h ... + world | tst.ts:12:11:12:29 | [BinaryExpr] hello + " " + world | semmle.label | 2 | -| tst.ts:12:5:12:29 | [VariableDeclarator] msg = h ... + world | tst.ts:12:11:12:29 | [BinaryExpr] hello + " " + world | semmle.order | 2 | -| tst.ts:12:11:12:21 | [BinaryExpr] hello + " " | tst.ts:12:11:12:15 | [VarRef] hello | semmle.label | 1 | -| tst.ts:12:11:12:21 | [BinaryExpr] hello + " " | tst.ts:12:11:12:15 | [VarRef] hello | semmle.order | 1 | -| tst.ts:12:11:12:21 | [BinaryExpr] hello + " " | tst.ts:12:19:12:21 | [Literal] " " | semmle.label | 2 | -| tst.ts:12:11:12:21 | [BinaryExpr] hello + " " | tst.ts:12:19:12:21 | [Literal] " " | semmle.order | 2 | -| tst.ts:12:11:12:29 | [BinaryExpr] hello + " " + world | tst.ts:12:11:12:21 | [BinaryExpr] hello + " " | semmle.label | 1 | -| tst.ts:12:11:12:29 | [BinaryExpr] hello + " " + world | tst.ts:12:11:12:21 | [BinaryExpr] hello + " " | semmle.order | 1 | -| tst.ts:12:11:12:29 | [BinaryExpr] hello + " " + world | tst.ts:12:25:12:29 | [VarRef] world | semmle.label | 2 | -| tst.ts:12:11:12:29 | [BinaryExpr] hello + " " + world | tst.ts:12:25:12:29 | [VarRef] world | semmle.order | 2 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | tst.ts:14:10:14:15 | [VarDecl] concat | semmle.label | 0 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | tst.ts:14:10:14:15 | [VarDecl] concat | semmle.order | 0 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | tst.ts:14:40:14:45 | [KeywordTypeExpr] string | semmle.label | 4 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | tst.ts:14:40:14:45 | [KeywordTypeExpr] string | semmle.order | 4 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | tst.ts:14:47:14:63 | [BlockStmt] { return x + y; } | semmle.label | 5 | -| tst.ts:14:1:14:63 | [FunctionDeclStmt] functio ... + y; } | tst.ts:14:47:14:63 | [BlockStmt] { return x + y; } | semmle.order | 5 | -| tst.ts:14:17:14:17 | [SimpleParameter] x | tst.ts:14:20:14:25 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:14:17:14:17 | [SimpleParameter] x | tst.ts:14:20:14:25 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:14:28:14:28 | [SimpleParameter] y | tst.ts:14:31:14:36 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:14:28:14:28 | [SimpleParameter] y | tst.ts:14:31:14:36 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:14:47:14:63 | [BlockStmt] { return x + y; } | tst.ts:14:49:14:61 | [ReturnStmt] return x + y; | semmle.label | 1 | -| tst.ts:14:47:14:63 | [BlockStmt] { return x + y; } | tst.ts:14:49:14:61 | [ReturnStmt] return x + y; | semmle.order | 1 | -| tst.ts:14:49:14:61 | [ReturnStmt] return x + y; | tst.ts:14:56:14:60 | [BinaryExpr] x + y | semmle.label | 1 | -| tst.ts:14:49:14:61 | [ReturnStmt] return x + y; | tst.ts:14:56:14:60 | [BinaryExpr] x + y | semmle.order | 1 | -| tst.ts:14:56:14:60 | [BinaryExpr] x + y | tst.ts:14:56:14:56 | [VarRef] x | semmle.label | 1 | -| tst.ts:14:56:14:60 | [BinaryExpr] x + y | tst.ts:14:56:14:56 | [VarRef] x | semmle.order | 1 | -| tst.ts:14:56:14:60 | [BinaryExpr] x + y | tst.ts:14:60:14:60 | [VarRef] y | semmle.label | 2 | -| tst.ts:14:56:14:60 | [BinaryExpr] x + y | tst.ts:14:60:14:60 | [VarRef] y | semmle.order | 2 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | tst.ts:16:10:16:12 | [VarDecl] add | semmle.label | 0 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | tst.ts:16:10:16:12 | [VarDecl] add | semmle.order | 0 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | tst.ts:16:37:16:42 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | tst.ts:16:37:16:42 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | tst.ts:16:44:16:60 | [BlockStmt] { return x + y; } | semmle.label | 5 | -| tst.ts:16:1:16:60 | [FunctionDeclStmt] functio ... + y; } | tst.ts:16:44:16:60 | [BlockStmt] { return x + y; } | semmle.order | 5 | -| tst.ts:16:14:16:14 | [SimpleParameter] x | tst.ts:16:17:16:22 | [KeywordTypeExpr] number | semmle.label | -2 | -| tst.ts:16:14:16:14 | [SimpleParameter] x | tst.ts:16:17:16:22 | [KeywordTypeExpr] number | semmle.order | -2 | -| tst.ts:16:25:16:25 | [SimpleParameter] y | tst.ts:16:28:16:33 | [KeywordTypeExpr] number | semmle.label | -2 | -| tst.ts:16:25:16:25 | [SimpleParameter] y | tst.ts:16:28:16:33 | [KeywordTypeExpr] number | semmle.order | -2 | -| tst.ts:16:44:16:60 | [BlockStmt] { return x + y; } | tst.ts:16:46:16:58 | [ReturnStmt] return x + y; | semmle.label | 1 | -| tst.ts:16:44:16:60 | [BlockStmt] { return x + y; } | tst.ts:16:46:16:58 | [ReturnStmt] return x + y; | semmle.order | 1 | -| tst.ts:16:46:16:58 | [ReturnStmt] return x + y; | tst.ts:16:53:16:57 | [BinaryExpr] x + y | semmle.label | 1 | -| tst.ts:16:46:16:58 | [ReturnStmt] return x + y; | tst.ts:16:53:16:57 | [BinaryExpr] x + y | semmle.order | 1 | -| tst.ts:16:53:16:57 | [BinaryExpr] x + y | tst.ts:16:53:16:53 | [VarRef] x | semmle.label | 1 | -| tst.ts:16:53:16:57 | [BinaryExpr] x + y | tst.ts:16:53:16:53 | [VarRef] x | semmle.order | 1 | -| tst.ts:16:53:16:57 | [BinaryExpr] x + y | tst.ts:16:57:16:57 | [VarRef] y | semmle.label | 2 | -| tst.ts:16:53:16:57 | [BinaryExpr] x + y | tst.ts:16:57:16:57 | [VarRef] y | semmle.order | 2 | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | tst.ts:18:10:18:16 | [VarDecl] untyped | semmle.label | 0 | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | tst.ts:18:10:18:16 | [VarDecl] untyped | semmle.order | 0 | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | tst.ts:18:24:18:40 | [BlockStmt] { return x + y; } | semmle.label | 5 | -| tst.ts:18:1:18:40 | [FunctionDeclStmt] functio ... + y; } | tst.ts:18:24:18:40 | [BlockStmt] { return x + y; } | semmle.order | 5 | -| tst.ts:18:24:18:40 | [BlockStmt] { return x + y; } | tst.ts:18:26:18:38 | [ReturnStmt] return x + y; | semmle.label | 1 | -| tst.ts:18:24:18:40 | [BlockStmt] { return x + y; } | tst.ts:18:26:18:38 | [ReturnStmt] return x + y; | semmle.order | 1 | -| tst.ts:18:26:18:38 | [ReturnStmt] return x + y; | tst.ts:18:33:18:37 | [BinaryExpr] x + y | semmle.label | 1 | -| tst.ts:18:26:18:38 | [ReturnStmt] return x + y; | tst.ts:18:33:18:37 | [BinaryExpr] x + y | semmle.order | 1 | -| tst.ts:18:33:18:37 | [BinaryExpr] x + y | tst.ts:18:33:18:33 | [VarRef] x | semmle.label | 1 | -| tst.ts:18:33:18:37 | [BinaryExpr] x + y | tst.ts:18:33:18:33 | [VarRef] x | semmle.order | 1 | -| tst.ts:18:33:18:37 | [BinaryExpr] x + y | tst.ts:18:37:18:37 | [VarRef] y | semmle.label | 2 | -| tst.ts:18:33:18:37 | [BinaryExpr] x + y | tst.ts:18:37:18:37 | [VarRef] y | semmle.order | 2 | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | tst.ts:20:10:20:21 | [VarDecl] partialTyped | semmle.label | 0 | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | tst.ts:20:10:20:21 | [VarDecl] partialTyped | semmle.order | 0 | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | tst.ts:20:37:20:53 | [BlockStmt] { return x + y; } | semmle.label | 5 | -| tst.ts:20:1:20:53 | [FunctionDeclStmt] functio ... + y; } | tst.ts:20:37:20:53 | [BlockStmt] { return x + y; } | semmle.order | 5 | -| tst.ts:20:26:20:26 | [SimpleParameter] y | tst.ts:20:29:20:34 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:20:26:20:26 | [SimpleParameter] y | tst.ts:20:29:20:34 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:20:37:20:53 | [BlockStmt] { return x + y; } | tst.ts:20:39:20:51 | [ReturnStmt] return x + y; | semmle.label | 1 | -| tst.ts:20:37:20:53 | [BlockStmt] { return x + y; } | tst.ts:20:39:20:51 | [ReturnStmt] return x + y; | semmle.order | 1 | -| tst.ts:20:39:20:51 | [ReturnStmt] return x + y; | tst.ts:20:46:20:50 | [BinaryExpr] x + y | semmle.label | 1 | -| tst.ts:20:39:20:51 | [ReturnStmt] return x + y; | tst.ts:20:46:20:50 | [BinaryExpr] x + y | semmle.order | 1 | -| tst.ts:20:46:20:50 | [BinaryExpr] x + y | tst.ts:20:46:20:46 | [VarRef] x | semmle.label | 1 | -| tst.ts:20:46:20:50 | [BinaryExpr] x + y | tst.ts:20:46:20:46 | [VarRef] x | semmle.order | 1 | -| tst.ts:20:46:20:50 | [BinaryExpr] x + y | tst.ts:20:50:20:50 | [VarRef] y | semmle.label | 2 | -| tst.ts:20:46:20:50 | [BinaryExpr] x + y | tst.ts:20:50:20:50 | [VarRef] y | semmle.order | 2 | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | tst.ts:22:6:22:20 | [DeclStmt] let numFromLoop = ... | semmle.label | 1 | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | tst.ts:22:6:22:20 | [DeclStmt] let numFromLoop = ... | semmle.order | 1 | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | tst.ts:22:25:22:30 | [ArrayExpr] [1, 2] | semmle.label | 2 | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | tst.ts:22:25:22:30 | [ArrayExpr] [1, 2] | semmle.order | 2 | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | tst.ts:22:33:22:34 | [BlockStmt] {} | semmle.label | 3 | -| tst.ts:22:1:22:34 | [ForOfStmt] for (le ... 2]) {} | tst.ts:22:33:22:34 | [BlockStmt] {} | semmle.order | 3 | -| tst.ts:22:6:22:20 | [DeclStmt] let numFromLoop = ... | tst.ts:22:10:22:20 | [VariableDeclarator] numFromLoop | semmle.label | 1 | -| tst.ts:22:6:22:20 | [DeclStmt] let numFromLoop = ... | tst.ts:22:10:22:20 | [VariableDeclarator] numFromLoop | semmle.order | 1 | -| tst.ts:22:10:22:20 | [VariableDeclarator] numFromLoop | tst.ts:22:10:22:20 | [VarDecl] numFromLoop | semmle.label | 1 | -| tst.ts:22:10:22:20 | [VariableDeclarator] numFromLoop | tst.ts:22:10:22:20 | [VarDecl] numFromLoop | semmle.order | 1 | -| tst.ts:22:25:22:30 | [ArrayExpr] [1, 2] | tst.ts:22:26:22:26 | [Literal] 1 | semmle.label | 1 | -| tst.ts:22:25:22:30 | [ArrayExpr] [1, 2] | tst.ts:22:26:22:26 | [Literal] 1 | semmle.order | 1 | -| tst.ts:22:25:22:30 | [ArrayExpr] [1, 2] | tst.ts:22:29:22:29 | [Literal] 2 | semmle.label | 2 | -| tst.ts:22:25:22:30 | [ArrayExpr] [1, 2] | tst.ts:22:29:22:29 | [Literal] 2 | semmle.order | 2 | -| tst.ts:24:1:24:20 | [DeclStmt] let array = ... | tst.ts:24:5:24:19 | [VariableDeclarator] array: number[] | semmle.label | 1 | -| tst.ts:24:1:24:20 | [DeclStmt] let array = ... | tst.ts:24:5:24:19 | [VariableDeclarator] array: number[] | semmle.order | 1 | -| tst.ts:24:5:24:19 | [VariableDeclarator] array: number[] | tst.ts:24:5:24:9 | [VarDecl] array | semmle.label | 1 | -| tst.ts:24:5:24:19 | [VariableDeclarator] array: number[] | tst.ts:24:5:24:9 | [VarDecl] array | semmle.order | 1 | -| tst.ts:24:5:24:19 | [VariableDeclarator] array: number[] | tst.ts:24:12:24:19 | [ArrayTypeExpr] number[] | semmle.label | 2 | -| tst.ts:24:5:24:19 | [VariableDeclarator] array: number[] | tst.ts:24:12:24:19 | [ArrayTypeExpr] number[] | semmle.order | 2 | -| tst.ts:24:12:24:19 | [ArrayTypeExpr] number[] | tst.ts:24:12:24:17 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:24:12:24:19 | [ArrayTypeExpr] number[] | tst.ts:24:12:24:17 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:26:1:26:25 | [DeclStmt] let voidType = ... | tst.ts:26:5:26:24 | [VariableDeclarator] voidType: () => void | semmle.label | 1 | -| tst.ts:26:1:26:25 | [DeclStmt] let voidType = ... | tst.ts:26:5:26:24 | [VariableDeclarator] voidType: () => void | semmle.order | 1 | -| tst.ts:26:5:26:24 | [VariableDeclarator] voidType: () => void | tst.ts:26:5:26:12 | [VarDecl] voidType | semmle.label | 1 | -| tst.ts:26:5:26:24 | [VariableDeclarator] voidType: () => void | tst.ts:26:5:26:12 | [VarDecl] voidType | semmle.order | 1 | -| tst.ts:26:5:26:24 | [VariableDeclarator] voidType: () => void | tst.ts:26:15:26:24 | [FunctionTypeExpr] () => void | semmle.label | 2 | -| tst.ts:26:5:26:24 | [VariableDeclarator] voidType: () => void | tst.ts:26:15:26:24 | [FunctionTypeExpr] () => void | semmle.order | 2 | -| tst.ts:26:15:26:24 | [FunctionExpr] () => void | tst.ts:26:21:26:24 | [KeywordTypeExpr] void | semmle.label | 4 | -| tst.ts:26:15:26:24 | [FunctionExpr] () => void | tst.ts:26:21:26:24 | [KeywordTypeExpr] void | semmle.order | 4 | -| tst.ts:26:15:26:24 | [FunctionTypeExpr] () => void | tst.ts:26:15:26:24 | [FunctionExpr] () => void | semmle.label | 1 | -| tst.ts:26:15:26:24 | [FunctionTypeExpr] () => void | tst.ts:26:15:26:24 | [FunctionExpr] () => void | semmle.order | 1 | -| tst.ts:27:1:27:29 | [DeclStmt] let undefinedType = ... | tst.ts:27:5:27:28 | [VariableDeclarator] undefin ... defined | semmle.label | 1 | -| tst.ts:27:1:27:29 | [DeclStmt] let undefinedType = ... | tst.ts:27:5:27:28 | [VariableDeclarator] undefin ... defined | semmle.order | 1 | -| tst.ts:27:5:27:28 | [VariableDeclarator] undefin ... defined | tst.ts:27:5:27:17 | [VarDecl] undefinedType | semmle.label | 1 | -| tst.ts:27:5:27:28 | [VariableDeclarator] undefin ... defined | tst.ts:27:5:27:17 | [VarDecl] undefinedType | semmle.order | 1 | -| tst.ts:27:5:27:28 | [VariableDeclarator] undefin ... defined | tst.ts:27:20:27:28 | [KeywordTypeExpr] undefined | semmle.label | 2 | -| tst.ts:27:5:27:28 | [VariableDeclarator] undefin ... defined | tst.ts:27:20:27:28 | [KeywordTypeExpr] undefined | semmle.order | 2 | -| tst.ts:28:1:28:26 | [DeclStmt] let nullType = ... | tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | semmle.label | 1 | -| tst.ts:28:1:28:26 | [DeclStmt] let nullType = ... | tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | semmle.order | 1 | -| tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | tst.ts:28:5:28:12 | [VarDecl] nullType | semmle.label | 1 | -| tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | tst.ts:28:5:28:12 | [VarDecl] nullType | semmle.order | 1 | -| tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | tst.ts:28:15:28:18 | [KeywordTypeExpr] null | semmle.label | 2 | -| tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | tst.ts:28:15:28:18 | [KeywordTypeExpr] null | semmle.order | 2 | -| tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | tst.ts:28:22:28:25 | [Literal] null | semmle.label | 3 | -| tst.ts:28:5:28:25 | [VariableDeclarator] nullTyp ... = null | tst.ts:28:22:28:25 | [Literal] null | semmle.order | 3 | -| tst.ts:29:1:29:27 | [DeclStmt] let neverType = ... | tst.ts:29:5:29:26 | [VariableDeclarator] neverTy ... > never | semmle.label | 1 | -| tst.ts:29:1:29:27 | [DeclStmt] let neverType = ... | tst.ts:29:5:29:26 | [VariableDeclarator] neverTy ... > never | semmle.order | 1 | -| tst.ts:29:5:29:26 | [VariableDeclarator] neverTy ... > never | tst.ts:29:5:29:13 | [VarDecl] neverType | semmle.label | 1 | -| tst.ts:29:5:29:26 | [VariableDeclarator] neverTy ... > never | tst.ts:29:5:29:13 | [VarDecl] neverType | semmle.order | 1 | -| tst.ts:29:5:29:26 | [VariableDeclarator] neverTy ... > never | tst.ts:29:16:29:26 | [FunctionTypeExpr] () => never | semmle.label | 2 | -| tst.ts:29:5:29:26 | [VariableDeclarator] neverTy ... > never | tst.ts:29:16:29:26 | [FunctionTypeExpr] () => never | semmle.order | 2 | -| tst.ts:29:16:29:26 | [FunctionExpr] () => never | tst.ts:29:22:29:26 | [KeywordTypeExpr] never | semmle.label | 4 | -| tst.ts:29:16:29:26 | [FunctionExpr] () => never | tst.ts:29:22:29:26 | [KeywordTypeExpr] never | semmle.order | 4 | -| tst.ts:29:16:29:26 | [FunctionTypeExpr] () => never | tst.ts:29:16:29:26 | [FunctionExpr] () => never | semmle.label | 1 | -| tst.ts:29:16:29:26 | [FunctionTypeExpr] () => never | tst.ts:29:16:29:26 | [FunctionExpr] () => never | semmle.order | 1 | -| tst.ts:30:1:30:23 | [DeclStmt] let symbolType = ... | tst.ts:30:5:30:22 | [VariableDeclarator] symbolType: symbol | semmle.label | 1 | -| tst.ts:30:1:30:23 | [DeclStmt] let symbolType = ... | tst.ts:30:5:30:22 | [VariableDeclarator] symbolType: symbol | semmle.order | 1 | -| tst.ts:30:5:30:22 | [VariableDeclarator] symbolType: symbol | tst.ts:30:5:30:14 | [VarDecl] symbolType | semmle.label | 1 | -| tst.ts:30:5:30:22 | [VariableDeclarator] symbolType: symbol | tst.ts:30:5:30:14 | [VarDecl] symbolType | semmle.order | 1 | -| tst.ts:30:5:30:22 | [VariableDeclarator] symbolType: symbol | tst.ts:30:17:30:22 | [KeywordTypeExpr] symbol | semmle.label | 2 | -| tst.ts:30:5:30:22 | [VariableDeclarator] symbolType: symbol | tst.ts:30:17:30:22 | [KeywordTypeExpr] symbol | semmle.order | 2 | -| tst.ts:31:1:31:45 | [DeclStmt] const uniqueSymbolType = ... | tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | semmle.label | 1 | -| tst.ts:31:1:31:45 | [DeclStmt] const uniqueSymbolType = ... | tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | semmle.order | 1 | -| tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | tst.ts:31:7:31:22 | [VarDecl] uniqueSymbolType | semmle.label | 1 | -| tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | tst.ts:31:7:31:22 | [VarDecl] uniqueSymbolType | semmle.order | 1 | -| tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | tst.ts:31:25:31:37 | [KeywordTypeExpr] unique symbol | semmle.label | 2 | -| tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | tst.ts:31:25:31:37 | [KeywordTypeExpr] unique symbol | semmle.order | 2 | -| tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | tst.ts:31:41:31:44 | [Literal] null | semmle.label | 3 | -| tst.ts:31:7:31:44 | [VariableDeclarator] uniqueS ... = null | tst.ts:31:41:31:44 | [Literal] null | semmle.order | 3 | -| tst.ts:32:1:32:23 | [DeclStmt] let objectType = ... | tst.ts:32:5:32:22 | [VariableDeclarator] objectType: object | semmle.label | 1 | -| tst.ts:32:1:32:23 | [DeclStmt] let objectType = ... | tst.ts:32:5:32:22 | [VariableDeclarator] objectType: object | semmle.order | 1 | -| tst.ts:32:5:32:22 | [VariableDeclarator] objectType: object | tst.ts:32:5:32:14 | [VarDecl] objectType | semmle.label | 1 | -| tst.ts:32:5:32:22 | [VariableDeclarator] objectType: object | tst.ts:32:5:32:14 | [VarDecl] objectType | semmle.order | 1 | -| tst.ts:32:5:32:22 | [VariableDeclarator] objectType: object | tst.ts:32:17:32:22 | [KeywordTypeExpr] object | semmle.label | 2 | -| tst.ts:32:5:32:22 | [VariableDeclarator] objectType: object | tst.ts:32:17:32:22 | [KeywordTypeExpr] object | semmle.order | 2 | -| tst.ts:33:1:33:39 | [DeclStmt] let intersection = ... | tst.ts:33:5:33:38 | [VariableDeclarator] interse ... string} | semmle.label | 1 | -| tst.ts:33:1:33:39 | [DeclStmt] let intersection = ... | tst.ts:33:5:33:38 | [VariableDeclarator] interse ... string} | semmle.order | 1 | -| tst.ts:33:5:33:38 | [VariableDeclarator] interse ... string} | tst.ts:33:5:33:16 | [VarDecl] intersection | semmle.label | 1 | -| tst.ts:33:5:33:38 | [VariableDeclarator] interse ... string} | tst.ts:33:5:33:16 | [VarDecl] intersection | semmle.order | 1 | -| tst.ts:33:5:33:38 | [VariableDeclarator] interse ... string} | tst.ts:33:19:33:38 | [IntersectionTypeExpr] string & {x: string} | semmle.label | 2 | -| tst.ts:33:5:33:38 | [VariableDeclarator] interse ... string} | tst.ts:33:19:33:38 | [IntersectionTypeExpr] string & {x: string} | semmle.order | 2 | -| tst.ts:33:19:33:38 | [IntersectionTypeExpr] string & {x: string} | tst.ts:33:19:33:24 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:33:19:33:38 | [IntersectionTypeExpr] string & {x: string} | tst.ts:33:19:33:24 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:33:19:33:38 | [IntersectionTypeExpr] string & {x: string} | tst.ts:33:28:33:38 | [InterfaceTypeExpr] {x: string} | semmle.label | 2 | -| tst.ts:33:19:33:38 | [IntersectionTypeExpr] string & {x: string} | tst.ts:33:28:33:38 | [InterfaceTypeExpr] {x: string} | semmle.order | 2 | -| tst.ts:33:28:33:38 | [InterfaceTypeExpr] {x: string} | tst.ts:33:29:33:37 | [FieldDeclaration] x: string | semmle.label | 1 | -| tst.ts:33:28:33:38 | [InterfaceTypeExpr] {x: string} | tst.ts:33:29:33:37 | [FieldDeclaration] x: string | semmle.order | 1 | -| tst.ts:33:29:33:37 | [FieldDeclaration] x: string | tst.ts:33:29:33:29 | [Label] x | semmle.label | 1 | -| tst.ts:33:29:33:37 | [FieldDeclaration] x: string | tst.ts:33:29:33:29 | [Label] x | semmle.order | 1 | -| tst.ts:33:29:33:37 | [FieldDeclaration] x: string | tst.ts:33:32:33:37 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:33:29:33:37 | [FieldDeclaration] x: string | tst.ts:33:32:33:37 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:34:1:34:28 | [DeclStmt] let tuple = ... | tst.ts:34:5:34:27 | [VariableDeclarator] tuple: ... string] | semmle.label | 1 | -| tst.ts:34:1:34:28 | [DeclStmt] let tuple = ... | tst.ts:34:5:34:27 | [VariableDeclarator] tuple: ... string] | semmle.order | 1 | -| tst.ts:34:5:34:27 | [VariableDeclarator] tuple: ... string] | tst.ts:34:5:34:9 | [VarDecl] tuple | semmle.label | 1 | -| tst.ts:34:5:34:27 | [VariableDeclarator] tuple: ... string] | tst.ts:34:5:34:9 | [VarDecl] tuple | semmle.order | 1 | -| tst.ts:34:5:34:27 | [VariableDeclarator] tuple: ... string] | tst.ts:34:12:34:27 | [TupleTypeExpr] [number, string] | semmle.label | 2 | -| tst.ts:34:5:34:27 | [VariableDeclarator] tuple: ... string] | tst.ts:34:12:34:27 | [TupleTypeExpr] [number, string] | semmle.order | 2 | -| tst.ts:34:12:34:27 | [TupleTypeExpr] [number, string] | tst.ts:34:13:34:18 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:34:12:34:27 | [TupleTypeExpr] [number, string] | tst.ts:34:13:34:18 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:34:12:34:27 | [TupleTypeExpr] [number, string] | tst.ts:34:21:34:26 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:34:12:34:27 | [TupleTypeExpr] [number, string] | tst.ts:34:21:34:26 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:36:1:36:56 | [DeclStmt] let tupleWithOptionalElement = ... | tst.ts:36:5:36:55 | [VariableDeclarator] tupleWi ... umber?] | semmle.label | 1 | -| tst.ts:36:1:36:56 | [DeclStmt] let tupleWithOptionalElement = ... | tst.ts:36:5:36:55 | [VariableDeclarator] tupleWi ... umber?] | semmle.order | 1 | -| tst.ts:36:5:36:55 | [VariableDeclarator] tupleWi ... umber?] | tst.ts:36:5:36:28 | [VarDecl] tupleWithOptionalElement | semmle.label | 1 | -| tst.ts:36:5:36:55 | [VariableDeclarator] tupleWi ... umber?] | tst.ts:36:5:36:28 | [VarDecl] tupleWithOptionalElement | semmle.order | 1 | -| tst.ts:36:5:36:55 | [VariableDeclarator] tupleWi ... umber?] | tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | semmle.label | 2 | -| tst.ts:36:5:36:55 | [VariableDeclarator] tupleWi ... umber?] | tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | semmle.order | 2 | -| tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | tst.ts:36:32:36:37 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | tst.ts:36:32:36:37 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | tst.ts:36:40:36:45 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | tst.ts:36:40:36:45 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | tst.ts:36:48:36:54 | [OptionalTypeExpr] number? | semmle.label | 3 | -| tst.ts:36:31:36:55 | [TupleTypeExpr] [number ... umber?] | tst.ts:36:48:36:54 | [OptionalTypeExpr] number? | semmle.order | 3 | -| tst.ts:36:48:36:54 | [OptionalTypeExpr] number? | tst.ts:36:48:36:53 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:36:48:36:54 | [OptionalTypeExpr] number? | tst.ts:36:48:36:53 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:37:1:37:19 | [DeclStmt] let emptyTuple = ... | tst.ts:37:5:37:18 | [VariableDeclarator] emptyTuple: [] | semmle.label | 1 | -| tst.ts:37:1:37:19 | [DeclStmt] let emptyTuple = ... | tst.ts:37:5:37:18 | [VariableDeclarator] emptyTuple: [] | semmle.order | 1 | -| tst.ts:37:5:37:18 | [VariableDeclarator] emptyTuple: [] | tst.ts:37:5:37:14 | [VarDecl] emptyTuple | semmle.label | 1 | -| tst.ts:37:5:37:18 | [VariableDeclarator] emptyTuple: [] | tst.ts:37:5:37:14 | [VarDecl] emptyTuple | semmle.order | 1 | -| tst.ts:37:5:37:18 | [VariableDeclarator] emptyTuple: [] | tst.ts:37:17:37:18 | [TupleTypeExpr] [] | semmle.label | 2 | -| tst.ts:37:5:37:18 | [VariableDeclarator] emptyTuple: [] | tst.ts:37:17:37:18 | [TupleTypeExpr] [] | semmle.order | 2 | -| tst.ts:38:1:38:48 | [DeclStmt] let tupleWithRestElement = ... | tst.ts:38:5:38:47 | [VariableDeclarator] tupleWi ... ring[]] | semmle.label | 1 | -| tst.ts:38:1:38:48 | [DeclStmt] let tupleWithRestElement = ... | tst.ts:38:5:38:47 | [VariableDeclarator] tupleWi ... ring[]] | semmle.order | 1 | -| tst.ts:38:5:38:47 | [VariableDeclarator] tupleWi ... ring[]] | tst.ts:38:5:38:24 | [VarDecl] tupleWithRestElement | semmle.label | 1 | -| tst.ts:38:5:38:47 | [VariableDeclarator] tupleWi ... ring[]] | tst.ts:38:5:38:24 | [VarDecl] tupleWithRestElement | semmle.order | 1 | -| tst.ts:38:5:38:47 | [VariableDeclarator] tupleWi ... ring[]] | tst.ts:38:27:38:47 | [TupleTypeExpr] [number ... ring[]] | semmle.label | 2 | -| tst.ts:38:5:38:47 | [VariableDeclarator] tupleWi ... ring[]] | tst.ts:38:27:38:47 | [TupleTypeExpr] [number ... ring[]] | semmle.order | 2 | -| tst.ts:38:27:38:47 | [TupleTypeExpr] [number ... ring[]] | tst.ts:38:28:38:33 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:38:27:38:47 | [TupleTypeExpr] [number ... ring[]] | tst.ts:38:28:38:33 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:38:27:38:47 | [TupleTypeExpr] [number ... ring[]] | tst.ts:38:36:38:46 | [RestTypeExpr] ...string[] | semmle.label | 2 | -| tst.ts:38:27:38:47 | [TupleTypeExpr] [number ... ring[]] | tst.ts:38:36:38:46 | [RestTypeExpr] ...string[] | semmle.order | 2 | -| tst.ts:38:36:38:46 | [RestTypeExpr] ...string[] | tst.ts:38:39:38:46 | [ArrayTypeExpr] string[] | semmle.label | 1 | -| tst.ts:38:36:38:46 | [RestTypeExpr] ...string[] | tst.ts:38:39:38:46 | [ArrayTypeExpr] string[] | semmle.order | 1 | -| tst.ts:38:39:38:46 | [ArrayTypeExpr] string[] | tst.ts:38:39:38:44 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:38:39:38:46 | [ArrayTypeExpr] string[] | tst.ts:38:39:38:44 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:39:1:39:69 | [DeclStmt] let tupleWithOptionalAndRestElements = ... | tst.ts:39:5:39:68 | [VariableDeclarator] tupleWi ... mber[]] | semmle.label | 1 | -| tst.ts:39:1:39:69 | [DeclStmt] let tupleWithOptionalAndRestElements = ... | tst.ts:39:5:39:68 | [VariableDeclarator] tupleWi ... mber[]] | semmle.order | 1 | -| tst.ts:39:5:39:68 | [VariableDeclarator] tupleWi ... mber[]] | tst.ts:39:5:39:36 | [VarDecl] tupleWithOptionalAndRestElements | semmle.label | 1 | -| tst.ts:39:5:39:68 | [VariableDeclarator] tupleWi ... mber[]] | tst.ts:39:5:39:36 | [VarDecl] tupleWithOptionalAndRestElements | semmle.order | 1 | -| tst.ts:39:5:39:68 | [VariableDeclarator] tupleWi ... mber[]] | tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | semmle.label | 2 | -| tst.ts:39:5:39:68 | [VariableDeclarator] tupleWi ... mber[]] | tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | semmle.order | 2 | -| tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | tst.ts:39:40:39:45 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | tst.ts:39:40:39:45 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | tst.ts:39:48:39:54 | [OptionalTypeExpr] string? | semmle.label | 2 | -| tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | tst.ts:39:48:39:54 | [OptionalTypeExpr] string? | semmle.order | 2 | -| tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | tst.ts:39:57:39:67 | [RestTypeExpr] ...number[] | semmle.label | 3 | -| tst.ts:39:39:39:68 | [TupleTypeExpr] [number ... mber[]] | tst.ts:39:57:39:67 | [RestTypeExpr] ...number[] | semmle.order | 3 | -| tst.ts:39:48:39:54 | [OptionalTypeExpr] string? | tst.ts:39:48:39:53 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:39:48:39:54 | [OptionalTypeExpr] string? | tst.ts:39:48:39:53 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:39:57:39:67 | [RestTypeExpr] ...number[] | tst.ts:39:60:39:67 | [ArrayTypeExpr] number[] | semmle.label | 1 | -| tst.ts:39:57:39:67 | [RestTypeExpr] ...number[] | tst.ts:39:60:39:67 | [ArrayTypeExpr] number[] | semmle.order | 1 | -| tst.ts:39:60:39:67 | [ArrayTypeExpr] number[] | tst.ts:39:60:39:65 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:39:60:39:67 | [ArrayTypeExpr] number[] | tst.ts:39:60:39:65 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:40:1:40:25 | [DeclStmt] let unknownType = ... | tst.ts:40:5:40:24 | [VariableDeclarator] unknownType: unknown | semmle.label | 1 | -| tst.ts:40:1:40:25 | [DeclStmt] let unknownType = ... | tst.ts:40:5:40:24 | [VariableDeclarator] unknownType: unknown | semmle.order | 1 | -| tst.ts:40:5:40:24 | [VariableDeclarator] unknownType: unknown | tst.ts:40:5:40:15 | [VarDecl] unknownType | semmle.label | 1 | -| tst.ts:40:5:40:24 | [VariableDeclarator] unknownType: unknown | tst.ts:40:5:40:15 | [VarDecl] unknownType | semmle.order | 1 | -| tst.ts:40:5:40:24 | [VariableDeclarator] unknownType: unknown | tst.ts:40:18:40:24 | [KeywordTypeExpr] unknown | semmle.label | 2 | -| tst.ts:40:5:40:24 | [VariableDeclarator] unknownType: unknown | tst.ts:40:18:40:24 | [KeywordTypeExpr] unknown | semmle.order | 2 | -| tst.ts:42:1:42:40 | [DeclStmt] let constArrayLiteral = ... | tst.ts:42:5:42:39 | [VariableDeclarator] constAr ... s const | semmle.label | 1 | -| tst.ts:42:1:42:40 | [DeclStmt] let constArrayLiteral = ... | tst.ts:42:5:42:39 | [VariableDeclarator] constAr ... s const | semmle.order | 1 | -| tst.ts:42:5:42:39 | [VariableDeclarator] constAr ... s const | tst.ts:42:5:42:21 | [VarDecl] constArrayLiteral | semmle.label | 1 | -| tst.ts:42:5:42:39 | [VariableDeclarator] constAr ... s const | tst.ts:42:5:42:21 | [VarDecl] constArrayLiteral | semmle.order | 1 | -| tst.ts:42:5:42:39 | [VariableDeclarator] constAr ... s const | tst.ts:42:25:42:39 | [TypeAssertion] [1, 2] as const | semmle.label | 2 | -| tst.ts:42:5:42:39 | [VariableDeclarator] constAr ... s const | tst.ts:42:25:42:39 | [TypeAssertion] [1, 2] as const | semmle.order | 2 | -| tst.ts:42:25:42:30 | [ArrayExpr] [1, 2] | tst.ts:42:26:42:26 | [Literal] 1 | semmle.label | 1 | -| tst.ts:42:25:42:30 | [ArrayExpr] [1, 2] | tst.ts:42:26:42:26 | [Literal] 1 | semmle.order | 1 | -| tst.ts:42:25:42:30 | [ArrayExpr] [1, 2] | tst.ts:42:29:42:29 | [Literal] 2 | semmle.label | 2 | -| tst.ts:42:25:42:30 | [ArrayExpr] [1, 2] | tst.ts:42:29:42:29 | [Literal] 2 | semmle.order | 2 | -| tst.ts:42:25:42:39 | [TypeAssertion] [1, 2] as const | tst.ts:42:25:42:30 | [ArrayExpr] [1, 2] | semmle.label | 1 | -| tst.ts:42:25:42:39 | [TypeAssertion] [1, 2] as const | tst.ts:42:25:42:30 | [ArrayExpr] [1, 2] | semmle.order | 1 | -| tst.ts:42:25:42:39 | [TypeAssertion] [1, 2] as const | tst.ts:42:35:42:39 | [KeywordTypeExpr] const | semmle.label | 2 | -| tst.ts:42:25:42:39 | [TypeAssertion] [1, 2] as const | tst.ts:42:35:42:39 | [KeywordTypeExpr] const | semmle.order | 2 | -| tst.ts:43:1:43:49 | [DeclStmt] let constObjectLiteral = ... | tst.ts:43:5:43:48 | [VariableDeclarator] constOb ... s const | semmle.label | 1 | -| tst.ts:43:1:43:49 | [DeclStmt] let constObjectLiteral = ... | tst.ts:43:5:43:48 | [VariableDeclarator] constOb ... s const | semmle.order | 1 | -| tst.ts:43:5:43:48 | [VariableDeclarator] constOb ... s const | tst.ts:43:5:43:22 | [VarDecl] constObjectLiteral | semmle.label | 1 | -| tst.ts:43:5:43:48 | [VariableDeclarator] constOb ... s const | tst.ts:43:5:43:22 | [VarDecl] constObjectLiteral | semmle.order | 1 | -| tst.ts:43:5:43:48 | [VariableDeclarator] constOb ... s const | tst.ts:43:26:43:48 | [TypeAssertion] { foo: ... s const | semmle.label | 2 | -| tst.ts:43:5:43:48 | [VariableDeclarator] constOb ... s const | tst.ts:43:26:43:48 | [TypeAssertion] { foo: ... s const | semmle.order | 2 | -| tst.ts:43:26:43:39 | [ObjectExpr] {foo: ...} | tst.ts:43:28:43:37 | [Property] foo: "foo" | semmle.label | 1 | -| tst.ts:43:26:43:39 | [ObjectExpr] {foo: ...} | tst.ts:43:28:43:37 | [Property] foo: "foo" | semmle.order | 1 | -| tst.ts:43:26:43:48 | [TypeAssertion] { foo: ... s const | tst.ts:43:26:43:39 | [ObjectExpr] {foo: ...} | semmle.label | 1 | -| tst.ts:43:26:43:48 | [TypeAssertion] { foo: ... s const | tst.ts:43:26:43:39 | [ObjectExpr] {foo: ...} | semmle.order | 1 | -| tst.ts:43:26:43:48 | [TypeAssertion] { foo: ... s const | tst.ts:43:44:43:48 | [KeywordTypeExpr] const | semmle.label | 2 | -| tst.ts:43:26:43:48 | [TypeAssertion] { foo: ... s const | tst.ts:43:44:43:48 | [KeywordTypeExpr] const | semmle.order | 2 | -| tst.ts:43:28:43:37 | [Property] foo: "foo" | tst.ts:43:28:43:30 | [Label] foo | semmle.label | 1 | -| tst.ts:43:28:43:37 | [Property] foo: "foo" | tst.ts:43:28:43:30 | [Label] foo | semmle.order | 1 | -| tst.ts:43:28:43:37 | [Property] foo: "foo" | tst.ts:43:33:43:37 | [Literal] "foo" | semmle.label | 2 | -| tst.ts:43:28:43:37 | [Property] foo: "foo" | tst.ts:43:33:43:37 | [Literal] "foo" | semmle.order | 2 | -| tst.ts:46:1:51:1 | [TryStmt] try { } ... ; } } | tst.ts:46:5:46:7 | [BlockStmt] { } | semmle.label | 1 | -| tst.ts:46:1:51:1 | [TryStmt] try { } ... ; } } | tst.ts:46:5:46:7 | [BlockStmt] { } | semmle.order | 1 | -| tst.ts:46:1:51:1 | [TryStmt] try { } ... ; } } | tst.ts:47:1:51:1 | [CatchClause] catch ( ... ; } } | semmle.label | 2 | -| tst.ts:46:1:51:1 | [TryStmt] try { } ... ; } } | tst.ts:47:1:51:1 | [CatchClause] catch ( ... ; } } | semmle.order | 2 | -| tst.ts:47:1:51:1 | [CatchClause] catch ( ... ; } } | tst.ts:47:8:47:8 | [SimpleParameter] e | semmle.label | 1 | -| tst.ts:47:1:51:1 | [CatchClause] catch ( ... ; } } | tst.ts:47:8:47:8 | [SimpleParameter] e | semmle.order | 1 | -| tst.ts:47:1:51:1 | [CatchClause] catch ( ... ; } } | tst.ts:47:20:51:1 | [BlockStmt] { if ... ; } } | semmle.label | 2 | -| tst.ts:47:1:51:1 | [CatchClause] catch ( ... ; } } | tst.ts:47:20:51:1 | [BlockStmt] { if ... ; } } | semmle.order | 2 | -| tst.ts:47:20:51:1 | [BlockStmt] { if ... ; } } | tst.ts:48:3:50:3 | [IfStmt] if (typ ... e; } | semmle.label | 1 | -| tst.ts:47:20:51:1 | [BlockStmt] { if ... ; } } | tst.ts:48:3:50:3 | [IfStmt] if (typ ... e; } | semmle.order | 1 | -| tst.ts:48:3:50:3 | [IfStmt] if (typ ... e; } | tst.ts:48:7:48:27 | [BinaryExpr] typeof ... string" | semmle.label | 1 | -| tst.ts:48:3:50:3 | [IfStmt] if (typ ... e; } | tst.ts:48:7:48:27 | [BinaryExpr] typeof ... string" | semmle.order | 1 | -| tst.ts:48:3:50:3 | [IfStmt] if (typ ... e; } | tst.ts:48:30:50:3 | [BlockStmt] { ... e; } | semmle.label | 2 | -| tst.ts:48:3:50:3 | [IfStmt] if (typ ... e; } | tst.ts:48:30:50:3 | [BlockStmt] { ... e; } | semmle.order | 2 | -| tst.ts:48:7:48:14 | [UnaryExpr] typeof e | tst.ts:48:14:48:14 | [VarRef] e | semmle.label | 1 | -| tst.ts:48:7:48:14 | [UnaryExpr] typeof e | tst.ts:48:14:48:14 | [VarRef] e | semmle.order | 1 | -| tst.ts:48:7:48:27 | [BinaryExpr] typeof ... string" | tst.ts:48:7:48:14 | [UnaryExpr] typeof e | semmle.label | 1 | -| tst.ts:48:7:48:27 | [BinaryExpr] typeof ... string" | tst.ts:48:7:48:14 | [UnaryExpr] typeof e | semmle.order | 1 | -| tst.ts:48:7:48:27 | [BinaryExpr] typeof ... string" | tst.ts:48:20:48:27 | [Literal] "string" | semmle.label | 2 | -| tst.ts:48:7:48:27 | [BinaryExpr] typeof ... string" | tst.ts:48:20:48:27 | [Literal] "string" | semmle.order | 2 | -| tst.ts:48:30:50:3 | [BlockStmt] { ... e; } | tst.ts:49:7:49:25 | [DeclStmt] let b = ... | semmle.label | 1 | -| tst.ts:48:30:50:3 | [BlockStmt] { ... e; } | tst.ts:49:7:49:25 | [DeclStmt] let b = ... | semmle.order | 1 | -| tst.ts:49:7:49:25 | [DeclStmt] let b = ... | tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | semmle.label | 1 | -| tst.ts:49:7:49:25 | [DeclStmt] let b = ... | tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | semmle.order | 1 | -| tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | tst.ts:49:11:49:11 | [VarDecl] b | semmle.label | 1 | -| tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | tst.ts:49:11:49:11 | [VarDecl] b | semmle.order | 1 | -| tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | tst.ts:49:15:49:20 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | tst.ts:49:15:49:20 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | tst.ts:49:24:49:24 | [VarRef] e | semmle.label | 3 | -| tst.ts:49:11:49:24 | [VariableDeclarator] b : string = e | tst.ts:49:24:49:24 | [VarRef] e | semmle.order | 3 | -| tst.ts:54:1:56:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:54:11:54:26 | [Identifier] NonAbstractDummy | semmle.label | 1 | -| tst.ts:54:1:56:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:54:11:54:26 | [Identifier] NonAbstractDummy | semmle.order | 1 | -| tst.ts:54:1:56:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:55:3:55:20 | [MethodSignature] getArea(): number; | semmle.label | 2 | -| tst.ts:54:1:56:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:55:3:55:20 | [MethodSignature] getArea(): number; | semmle.order | 2 | -| tst.ts:55:3:55:20 | [FunctionExpr] getArea(): number; | tst.ts:55:14:55:19 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:55:3:55:20 | [FunctionExpr] getArea(): number; | tst.ts:55:14:55:19 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:55:3:55:20 | [MethodSignature] getArea(): number; | tst.ts:55:3:55:9 | [Label] getArea | semmle.label | 1 | -| tst.ts:55:3:55:20 | [MethodSignature] getArea(): number; | tst.ts:55:3:55:9 | [Label] getArea | semmle.order | 1 | -| tst.ts:55:3:55:20 | [MethodSignature] getArea(): number; | tst.ts:55:3:55:20 | [FunctionExpr] getArea(): number; | semmle.label | 2 | -| tst.ts:55:3:55:20 | [MethodSignature] getArea(): number; | tst.ts:55:3:55:20 | [FunctionExpr] getArea(): number; | semmle.order | 2 | -| tst.ts:58:1:60:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:58:11:58:17 | [Identifier] HasArea | semmle.label | 1 | -| tst.ts:58:1:60:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:58:11:58:17 | [Identifier] HasArea | semmle.order | 1 | -| tst.ts:58:1:60:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:59:3:59:20 | [MethodSignature] getArea(): number; | semmle.label | 2 | -| tst.ts:58:1:60:1 | [InterfaceDeclaration,TypeDefinition] interfa ... mber; } | tst.ts:59:3:59:20 | [MethodSignature] getArea(): number; | semmle.order | 2 | -| tst.ts:59:3:59:20 | [FunctionExpr] getArea(): number; | tst.ts:59:14:59:19 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:59:3:59:20 | [FunctionExpr] getArea(): number; | tst.ts:59:14:59:19 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:59:3:59:20 | [MethodSignature] getArea(): number; | tst.ts:59:3:59:9 | [Label] getArea | semmle.label | 1 | -| tst.ts:59:3:59:20 | [MethodSignature] getArea(): number; | tst.ts:59:3:59:9 | [Label] getArea | semmle.order | 1 | -| tst.ts:59:3:59:20 | [MethodSignature] getArea(): number; | tst.ts:59:3:59:20 | [FunctionExpr] getArea(): number; | semmle.label | 2 | -| tst.ts:59:3:59:20 | [MethodSignature] getArea(): number; | tst.ts:59:3:59:20 | [FunctionExpr] getArea(): number; | semmle.order | 2 | -| tst.ts:63:1:63:45 | [DeclStmt] let Ctor = ... | tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | semmle.label | 1 | -| tst.ts:63:1:63:45 | [DeclStmt] let Ctor = ... | tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | semmle.order | 1 | -| tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | tst.ts:63:5:63:8 | [VarDecl] Ctor | semmle.label | 1 | -| tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | tst.ts:63:5:63:8 | [VarDecl] Ctor | semmle.order | 1 | -| tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | tst.ts:63:11:63:36 | [FunctionTypeExpr] abstrac ... HasArea | semmle.label | 2 | -| tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | tst.ts:63:11:63:36 | [FunctionTypeExpr] abstrac ... HasArea | semmle.order | 2 | -| tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | tst.ts:63:40:63:44 | [VarRef] Shape | semmle.label | 3 | -| tst.ts:63:5:63:44 | [VariableDeclarator] Ctor: a ... = Shape | tst.ts:63:40:63:44 | [VarRef] Shape | semmle.order | 3 | -| tst.ts:63:11:63:36 | [FunctionExpr] abstrac ... HasArea | tst.ts:63:30:63:36 | [LocalTypeAccess] HasArea | semmle.label | 4 | -| tst.ts:63:11:63:36 | [FunctionExpr] abstrac ... HasArea | tst.ts:63:30:63:36 | [LocalTypeAccess] HasArea | semmle.order | 4 | -| tst.ts:63:11:63:36 | [FunctionTypeExpr] abstrac ... HasArea | tst.ts:63:11:63:36 | [FunctionExpr] abstrac ... HasArea | semmle.label | 1 | -| tst.ts:63:11:63:36 | [FunctionTypeExpr] abstrac ... HasArea | tst.ts:63:11:63:36 | [FunctionExpr] abstrac ... HasArea | semmle.order | 1 | -| tst.ts:65:1:65:54 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:65:6:65:12 | [Identifier] MyUnion | semmle.label | 1 | -| tst.ts:65:1:65:54 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:65:6:65:12 | [Identifier] MyUnion | semmle.order | 1 | -| tst.ts:65:1:65:54 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:65:16:65:53 | [UnionTypeExpr] {myUnio ... : true} | semmle.label | 2 | -| tst.ts:65:1:65:54 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:65:16:65:53 | [UnionTypeExpr] {myUnio ... : true} | semmle.order | 2 | -| tst.ts:65:16:65:30 | [InterfaceTypeExpr] {myUnion: true} | tst.ts:65:17:65:29 | [FieldDeclaration] myUnion: true | semmle.label | 1 | -| tst.ts:65:16:65:30 | [InterfaceTypeExpr] {myUnion: true} | tst.ts:65:17:65:29 | [FieldDeclaration] myUnion: true | semmle.order | 1 | -| tst.ts:65:16:65:53 | [UnionTypeExpr] {myUnio ... : true} | tst.ts:65:16:65:30 | [InterfaceTypeExpr] {myUnion: true} | semmle.label | 1 | -| tst.ts:65:16:65:53 | [UnionTypeExpr] {myUnio ... : true} | tst.ts:65:16:65:30 | [InterfaceTypeExpr] {myUnion: true} | semmle.order | 1 | -| tst.ts:65:16:65:53 | [UnionTypeExpr] {myUnio ... : true} | tst.ts:65:34:65:53 | [InterfaceTypeExpr] {stillMyUnion: true} | semmle.label | 2 | -| tst.ts:65:16:65:53 | [UnionTypeExpr] {myUnio ... : true} | tst.ts:65:34:65:53 | [InterfaceTypeExpr] {stillMyUnion: true} | semmle.order | 2 | -| tst.ts:65:17:65:29 | [FieldDeclaration] myUnion: true | tst.ts:65:17:65:23 | [Label] myUnion | semmle.label | 1 | -| tst.ts:65:17:65:29 | [FieldDeclaration] myUnion: true | tst.ts:65:17:65:23 | [Label] myUnion | semmle.order | 1 | -| tst.ts:65:17:65:29 | [FieldDeclaration] myUnion: true | tst.ts:65:26:65:29 | [LiteralTypeExpr] true | semmle.label | 2 | -| tst.ts:65:17:65:29 | [FieldDeclaration] myUnion: true | tst.ts:65:26:65:29 | [LiteralTypeExpr] true | semmle.order | 2 | -| tst.ts:65:34:65:53 | [InterfaceTypeExpr] {stillMyUnion: true} | tst.ts:65:35:65:52 | [FieldDeclaration] stillMyUnion: true | semmle.label | 1 | -| tst.ts:65:34:65:53 | [InterfaceTypeExpr] {stillMyUnion: true} | tst.ts:65:35:65:52 | [FieldDeclaration] stillMyUnion: true | semmle.order | 1 | -| tst.ts:65:35:65:52 | [FieldDeclaration] stillMyUnion: true | tst.ts:65:35:65:46 | [Label] stillMyUnion | semmle.label | 1 | -| tst.ts:65:35:65:52 | [FieldDeclaration] stillMyUnion: true | tst.ts:65:35:65:46 | [Label] stillMyUnion | semmle.order | 1 | -| tst.ts:65:35:65:52 | [FieldDeclaration] stillMyUnion: true | tst.ts:65:49:65:52 | [LiteralTypeExpr] true | semmle.label | 2 | -| tst.ts:65:35:65:52 | [FieldDeclaration] stillMyUnion: true | tst.ts:65:49:65:52 | [LiteralTypeExpr] true | semmle.order | 2 | -| tst.ts:66:1:66:38 | [DeclStmt] let union1 = ... | tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | semmle.label | 1 | -| tst.ts:66:1:66:38 | [DeclStmt] let union1 = ... | tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | semmle.order | 1 | -| tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | tst.ts:66:5:66:10 | [VarDecl] union1 | semmle.label | 1 | -| tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | tst.ts:66:5:66:10 | [VarDecl] union1 | semmle.order | 1 | -| tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | tst.ts:66:13:66:19 | [LocalTypeAccess] MyUnion | semmle.label | 2 | -| tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | tst.ts:66:13:66:19 | [LocalTypeAccess] MyUnion | semmle.order | 2 | -| tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | tst.ts:66:23:66:37 | [ObjectExpr] {myUnion: ...} | semmle.label | 3 | -| tst.ts:66:5:66:37 | [VariableDeclarator] union1: ... : true} | tst.ts:66:23:66:37 | [ObjectExpr] {myUnion: ...} | semmle.order | 3 | -| tst.ts:66:23:66:37 | [ObjectExpr] {myUnion: ...} | tst.ts:66:24:66:36 | [Property] myUnion: true | semmle.label | 1 | -| tst.ts:66:23:66:37 | [ObjectExpr] {myUnion: ...} | tst.ts:66:24:66:36 | [Property] myUnion: true | semmle.order | 1 | -| tst.ts:66:24:66:36 | [Property] myUnion: true | tst.ts:66:24:66:30 | [Label] myUnion | semmle.label | 1 | -| tst.ts:66:24:66:36 | [Property] myUnion: true | tst.ts:66:24:66:30 | [Label] myUnion | semmle.order | 1 | -| tst.ts:66:24:66:36 | [Property] myUnion: true | tst.ts:66:33:66:36 | [Literal] true | semmle.label | 2 | -| tst.ts:66:24:66:36 | [Property] myUnion: true | tst.ts:66:33:66:36 | [Literal] true | semmle.order | 2 | -| tst.ts:68:1:68:49 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:68:6:68:13 | [Identifier] MyUnion2 | semmle.label | 1 | -| tst.ts:68:1:68:49 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:68:6:68:13 | [Identifier] MyUnion2 | semmle.order | 1 | -| tst.ts:68:1:68:49 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:68:17:68:48 | [UnionTypeExpr] MyUnion ... : true} | semmle.label | 2 | -| tst.ts:68:1:68:49 | [TypeAliasDeclaration,TypeDefinition] type My ... true}; | tst.ts:68:17:68:48 | [UnionTypeExpr] MyUnion ... : true} | semmle.order | 2 | -| tst.ts:68:17:68:48 | [UnionTypeExpr] MyUnion ... : true} | tst.ts:68:17:68:23 | [LocalTypeAccess] MyUnion | semmle.label | 1 | -| tst.ts:68:17:68:48 | [UnionTypeExpr] MyUnion ... : true} | tst.ts:68:17:68:23 | [LocalTypeAccess] MyUnion | semmle.order | 1 | -| tst.ts:68:17:68:48 | [UnionTypeExpr] MyUnion ... : true} | tst.ts:68:27:68:48 | [InterfaceTypeExpr] {yetAno ... : true} | semmle.label | 2 | -| tst.ts:68:17:68:48 | [UnionTypeExpr] MyUnion ... : true} | tst.ts:68:27:68:48 | [InterfaceTypeExpr] {yetAno ... : true} | semmle.order | 2 | -| tst.ts:68:27:68:48 | [InterfaceTypeExpr] {yetAno ... : true} | tst.ts:68:28:68:47 | [FieldDeclaration] yetAnotherType: true | semmle.label | 1 | -| tst.ts:68:27:68:48 | [InterfaceTypeExpr] {yetAno ... : true} | tst.ts:68:28:68:47 | [FieldDeclaration] yetAnotherType: true | semmle.order | 1 | -| tst.ts:68:28:68:47 | [FieldDeclaration] yetAnotherType: true | tst.ts:68:28:68:41 | [Label] yetAnotherType | semmle.label | 1 | -| tst.ts:68:28:68:47 | [FieldDeclaration] yetAnotherType: true | tst.ts:68:28:68:41 | [Label] yetAnotherType | semmle.order | 1 | -| tst.ts:68:28:68:47 | [FieldDeclaration] yetAnotherType: true | tst.ts:68:44:68:47 | [LiteralTypeExpr] true | semmle.label | 2 | -| tst.ts:68:28:68:47 | [FieldDeclaration] yetAnotherType: true | tst.ts:68:44:68:47 | [LiteralTypeExpr] true | semmle.order | 2 | -| tst.ts:69:1:69:46 | [DeclStmt] let union2 = ... | tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | semmle.label | 1 | -| tst.ts:69:1:69:46 | [DeclStmt] let union2 = ... | tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | semmle.order | 1 | -| tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | tst.ts:69:5:69:10 | [VarDecl] union2 | semmle.label | 1 | -| tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | tst.ts:69:5:69:10 | [VarDecl] union2 | semmle.order | 1 | -| tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | tst.ts:69:13:69:20 | [LocalTypeAccess] MyUnion2 | semmle.label | 2 | -| tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | tst.ts:69:13:69:20 | [LocalTypeAccess] MyUnion2 | semmle.order | 2 | -| tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | tst.ts:69:24:69:45 | [ObjectExpr] {yetAnotherType: ...} | semmle.label | 3 | -| tst.ts:69:5:69:45 | [VariableDeclarator] union2: ... : true} | tst.ts:69:24:69:45 | [ObjectExpr] {yetAnotherType: ...} | semmle.order | 3 | -| tst.ts:69:24:69:45 | [ObjectExpr] {yetAnotherType: ...} | tst.ts:69:25:69:44 | [Property] yetAnotherType: true | semmle.label | 1 | -| tst.ts:69:24:69:45 | [ObjectExpr] {yetAnotherType: ...} | tst.ts:69:25:69:44 | [Property] yetAnotherType: true | semmle.order | 1 | -| tst.ts:69:25:69:44 | [Property] yetAnotherType: true | tst.ts:69:25:69:38 | [Label] yetAnotherType | semmle.label | 1 | -| tst.ts:69:25:69:44 | [Property] yetAnotherType: true | tst.ts:69:25:69:38 | [Label] yetAnotherType | semmle.order | 1 | -| tst.ts:69:25:69:44 | [Property] yetAnotherType: true | tst.ts:69:41:69:44 | [Literal] true | semmle.label | 2 | -| tst.ts:69:25:69:44 | [Property] yetAnotherType: true | tst.ts:69:41:69:44 | [Literal] true | semmle.order | 2 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:71:8:71:11 | [VarDecl] TS43 | semmle.label | 1 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:71:8:71:11 | [VarDecl] TS43 | semmle.order | 1 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | semmle.label | 2 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | semmle.order | 2 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:78:3:88:3 | [ExportDeclaration] export ... } } | semmle.label | 3 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:78:3:88:3 | [ExportDeclaration] export ... } } | semmle.order | 3 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | semmle.label | 4 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | semmle.order | 4 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | semmle.label | 5 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | semmle.order | 5 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | semmle.label | 6 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | semmle.order | 6 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:109:3:109:50 | [DeclStmt] let s1 = ... | semmle.label | 7 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:109:3:109:50 | [DeclStmt] let s1 = ... | semmle.order | 7 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:110:3:110:26 | [DeclStmt] let s2 = ... | semmle.label | 8 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:110:3:110:26 | [DeclStmt] let s2 = ... | semmle.order | 8 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:111:3:111:34 | [DeclStmt] let s3 = ... | semmle.label | 9 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:111:3:111:34 | [DeclStmt] let s3 = ... | semmle.order | 9 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:112:3:112:10 | [ExprStmt] s1 = s2; | semmle.label | 10 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:112:3:112:10 | [ExprStmt] s1 = s2; | semmle.order | 10 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:113:3:113:10 | [ExprStmt] s1 = s3; | semmle.label | 11 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:113:3:113:10 | [ExprStmt] s1 = s3; | semmle.order | 11 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | semmle.label | 12 | -| tst.ts:71:1:130:1 | [NamespaceDeclaration] module ... } } | tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | semmle.order | 12 | -| tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | tst.ts:73:13:73:18 | [Identifier] ThingI | semmle.label | 1 | -| tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | tst.ts:73:13:73:18 | [Identifier] ThingI | semmle.order | 1 | -| tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | tst.ts:74:5:74:22 | [GetterMethodSignature] get size(): number | semmle.label | 2 | -| tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | tst.ts:74:5:74:22 | [GetterMethodSignature] get size(): number | semmle.order | 2 | -| tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | tst.ts:75:5:75:47 | [SetterMethodSignature] set siz ... olean); | semmle.label | 3 | -| tst.ts:73:3:76:3 | [InterfaceDeclaration,TypeDefinition] interfa ... n); } | tst.ts:75:5:75:47 | [SetterMethodSignature] set siz ... olean); | semmle.order | 3 | -| tst.ts:74:5:74:22 | [FunctionExpr] get size(): number | tst.ts:74:17:74:22 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:74:5:74:22 | [FunctionExpr] get size(): number | tst.ts:74:17:74:22 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:74:5:74:22 | [GetterMethodSignature] get size(): number | tst.ts:74:5:74:22 | [FunctionExpr] get size(): number | semmle.label | 1 | -| tst.ts:74:5:74:22 | [GetterMethodSignature] get size(): number | tst.ts:74:5:74:22 | [FunctionExpr] get size(): number | semmle.order | 1 | -| tst.ts:74:5:74:22 | [GetterMethodSignature] get size(): number | tst.ts:74:9:74:12 | [Label] size | semmle.label | 2 | -| tst.ts:74:5:74:22 | [GetterMethodSignature] get size(): number | tst.ts:74:9:74:12 | [Label] size | semmle.order | 2 | -| tst.ts:75:5:75:47 | [FunctionExpr] set siz ... olean); | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:75:5:75:47 | [FunctionExpr] set siz ... olean); | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:75:5:75:47 | [SetterMethodSignature] set siz ... olean); | tst.ts:75:5:75:47 | [FunctionExpr] set siz ... olean); | semmle.label | 1 | -| tst.ts:75:5:75:47 | [SetterMethodSignature] set siz ... olean); | tst.ts:75:5:75:47 | [FunctionExpr] set siz ... olean); | semmle.order | 1 | -| tst.ts:75:5:75:47 | [SetterMethodSignature] set siz ... olean); | tst.ts:75:9:75:12 | [Label] size | semmle.label | 2 | -| tst.ts:75:5:75:47 | [SetterMethodSignature] set siz ... olean); | tst.ts:75:9:75:12 | [Label] size | semmle.order | 2 | -| tst.ts:75:14:75:18 | [SimpleParameter] value | tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | semmle.label | -2 | -| tst.ts:75:14:75:18 | [SimpleParameter] value | tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | semmle.order | -2 | -| tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | tst.ts:75:21:75:26 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | tst.ts:75:21:75:26 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | tst.ts:75:30:75:35 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | tst.ts:75:30:75:35 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | tst.ts:75:39:75:45 | [KeywordTypeExpr] boolean | semmle.label | 3 | -| tst.ts:75:21:75:45 | [UnionTypeExpr] number ... boolean | tst.ts:75:39:75:45 | [KeywordTypeExpr] boolean | semmle.order | 3 | -| tst.ts:78:3:88:3 | [ExportDeclaration] export ... } } | tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | semmle.label | 1 | -| tst.ts:78:3:88:3 | [ExportDeclaration] export ... } } | tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | semmle.order | 1 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:78:16:78:20 | [VarDecl] Thing | semmle.label | 1 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:78:16:78:20 | [VarDecl] Thing | semmle.order | 1 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:78:33:78:38 | [LocalTypeAccess] ThingI | semmle.label | 2 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:78:33:78:38 | [LocalTypeAccess] ThingI | semmle.order | 2 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:78:40:78:39 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 3 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:78:40:78:39 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 3 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:79:5:79:14 | [FieldDeclaration] #size = 0; | semmle.label | 4 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:79:5:79:14 | [FieldDeclaration] #size = 0; | semmle.order | 4 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:81:5:83:5 | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | semmle.label | 5 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:81:5:83:5 | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | semmle.order | 5 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:85:5:87:5 | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | semmle.label | 6 | -| tst.ts:78:10:88:3 | [ClassDefinition,TypeDefinition] class T ... } } | tst.ts:85:5:87:5 | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | semmle.order | 6 | -| tst.ts:78:40:78:39 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:78:40:78:39 | [FunctionExpr] () {} | semmle.label | 2 | -| tst.ts:78:40:78:39 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:78:40:78:39 | [FunctionExpr] () {} | semmle.order | 2 | -| tst.ts:78:40:78:39 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:78:40:78:39 | [Label] constructor | semmle.label | 1 | -| tst.ts:78:40:78:39 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:78:40:78:39 | [Label] constructor | semmle.order | 1 | -| tst.ts:78:40:78:39 | [FunctionExpr] () {} | tst.ts:78:40:78:39 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:78:40:78:39 | [FunctionExpr] () {} | tst.ts:78:40:78:39 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:79:5:79:14 | [FieldDeclaration] #size = 0; | tst.ts:79:5:79:9 | [Label] #size | semmle.label | 1 | -| tst.ts:79:5:79:14 | [FieldDeclaration] #size = 0; | tst.ts:79:5:79:9 | [Label] #size | semmle.order | 1 | -| tst.ts:79:5:79:14 | [FieldDeclaration] #size = 0; | tst.ts:79:13:79:13 | [Literal] 0 | semmle.label | 2 | -| tst.ts:79:5:79:14 | [FieldDeclaration] #size = 0; | tst.ts:79:13:79:13 | [Literal] 0 | semmle.order | 2 | -| tst.ts:81:5:83:5 | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | tst.ts:81:5:83:5 | [FunctionExpr] get siz ... ; } | semmle.label | 1 | -| tst.ts:81:5:83:5 | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | tst.ts:81:5:83:5 | [FunctionExpr] get siz ... ; } | semmle.order | 1 | -| tst.ts:81:5:83:5 | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | tst.ts:81:9:81:12 | [Label] size | semmle.label | 2 | -| tst.ts:81:5:83:5 | [ClassInitializedMember,GetterMethodDefinition] get siz ... ; } | tst.ts:81:9:81:12 | [Label] size | semmle.order | 2 | -| tst.ts:81:5:83:5 | [FunctionExpr] get siz ... ; } | tst.ts:81:17:81:22 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:81:5:83:5 | [FunctionExpr] get siz ... ; } | tst.ts:81:17:81:22 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:81:5:83:5 | [FunctionExpr] get siz ... ; } | tst.ts:81:24:83:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:81:5:83:5 | [FunctionExpr] get siz ... ; } | tst.ts:81:24:83:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:81:24:83:5 | [BlockStmt] { ... ; } | tst.ts:82:7:82:24 | [ReturnStmt] return this.#size; | semmle.label | 1 | -| tst.ts:81:24:83:5 | [BlockStmt] { ... ; } | tst.ts:82:7:82:24 | [ReturnStmt] return this.#size; | semmle.order | 1 | -| tst.ts:82:7:82:24 | [ReturnStmt] return this.#size; | tst.ts:82:14:82:23 | [DotExpr] this.#size | semmle.label | 1 | -| tst.ts:82:7:82:24 | [ReturnStmt] return this.#size; | tst.ts:82:14:82:23 | [DotExpr] this.#size | semmle.order | 1 | -| tst.ts:82:14:82:23 | [DotExpr] this.#size | tst.ts:82:14:82:17 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:82:14:82:23 | [DotExpr] this.#size | tst.ts:82:14:82:17 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:82:14:82:23 | [DotExpr] this.#size | tst.ts:82:19:82:23 | [Label] #size | semmle.label | 2 | -| tst.ts:82:14:82:23 | [DotExpr] this.#size | tst.ts:82:19:82:23 | [Label] #size | semmle.order | 2 | -| tst.ts:85:5:87:5 | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | tst.ts:85:5:87:5 | [FunctionExpr] set siz ... ; } | semmle.label | 1 | -| tst.ts:85:5:87:5 | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | tst.ts:85:5:87:5 | [FunctionExpr] set siz ... ; } | semmle.order | 1 | -| tst.ts:85:5:87:5 | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | tst.ts:85:9:85:12 | [Label] size | semmle.label | 2 | -| tst.ts:85:5:87:5 | [ClassInitializedMember,SetterMethodDefinition] set siz ... ; } | tst.ts:85:9:85:12 | [Label] size | semmle.order | 2 | -| tst.ts:85:5:87:5 | [FunctionExpr] set siz ... ; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:85:5:87:5 | [FunctionExpr] set siz ... ; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:85:5:87:5 | [FunctionExpr] set siz ... ; } | tst.ts:85:48:87:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:85:5:87:5 | [FunctionExpr] set siz ... ; } | tst.ts:85:48:87:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:85:14:85:18 | [SimpleParameter] value | tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | semmle.label | -2 | -| tst.ts:85:14:85:18 | [SimpleParameter] value | tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | semmle.order | -2 | -| tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | tst.ts:85:21:85:26 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | tst.ts:85:21:85:26 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | tst.ts:85:30:85:35 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | tst.ts:85:30:85:35 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | tst.ts:85:39:85:45 | [KeywordTypeExpr] boolean | semmle.label | 3 | -| tst.ts:85:21:85:45 | [UnionTypeExpr] string ... boolean | tst.ts:85:39:85:45 | [KeywordTypeExpr] boolean | semmle.order | 3 | -| tst.ts:85:48:87:5 | [BlockStmt] { ... ; } | tst.ts:86:7:86:33 | [ExprStmt] this.#s ... value); | semmle.label | 1 | -| tst.ts:85:48:87:5 | [BlockStmt] { ... ; } | tst.ts:86:7:86:33 | [ExprStmt] this.#s ... value); | semmle.order | 1 | -| tst.ts:86:7:86:16 | [DotExpr] this.#size | tst.ts:86:7:86:10 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:86:7:86:16 | [DotExpr] this.#size | tst.ts:86:7:86:10 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:86:7:86:16 | [DotExpr] this.#size | tst.ts:86:12:86:16 | [Label] #size | semmle.label | 2 | -| tst.ts:86:7:86:16 | [DotExpr] this.#size | tst.ts:86:12:86:16 | [Label] #size | semmle.order | 2 | -| tst.ts:86:7:86:32 | [AssignExpr] this.#s ... (value) | tst.ts:86:7:86:16 | [DotExpr] this.#size | semmle.label | 1 | -| tst.ts:86:7:86:32 | [AssignExpr] this.#s ... (value) | tst.ts:86:7:86:16 | [DotExpr] this.#size | semmle.order | 1 | -| tst.ts:86:7:86:32 | [AssignExpr] this.#s ... (value) | tst.ts:86:20:86:32 | [CallExpr] Number(value) | semmle.label | 2 | -| tst.ts:86:7:86:32 | [AssignExpr] this.#s ... (value) | tst.ts:86:20:86:32 | [CallExpr] Number(value) | semmle.order | 2 | -| tst.ts:86:7:86:33 | [ExprStmt] this.#s ... value); | tst.ts:86:7:86:32 | [AssignExpr] this.#s ... (value) | semmle.label | 1 | -| tst.ts:86:7:86:33 | [ExprStmt] this.#s ... value); | tst.ts:86:7:86:32 | [AssignExpr] this.#s ... (value) | semmle.order | 1 | -| tst.ts:86:20:86:32 | [CallExpr] Number(value) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:86:20:86:32 | [CallExpr] Number(value) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:86:20:86:32 | [CallExpr] Number(value) | tst.ts:86:20:86:25 | [VarRef] Number | semmle.label | 0 | -| tst.ts:86:20:86:32 | [CallExpr] Number(value) | tst.ts:86:20:86:25 | [VarRef] Number | semmle.order | 0 | -| tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:91:9:91:13 | [VarDecl] Super | semmle.label | 1 | -| tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:91:9:91:13 | [VarDecl] Super | semmle.order | 1 | -| tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:91:15:91:14 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:91:15:91:14 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:92:5:94:5 | [ClassInitializedMember,MethodDefinition] random( ... ; } | semmle.label | 3 | -| tst.ts:91:3:95:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:92:5:94:5 | [ClassInitializedMember,MethodDefinition] random( ... ; } | semmle.order | 3 | -| tst.ts:91:15:91:14 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:91:15:91:14 | [FunctionExpr] () {} | semmle.label | 2 | -| tst.ts:91:15:91:14 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:91:15:91:14 | [FunctionExpr] () {} | semmle.order | 2 | -| tst.ts:91:15:91:14 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:91:15:91:14 | [Label] constructor | semmle.label | 1 | -| tst.ts:91:15:91:14 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:91:15:91:14 | [Label] constructor | semmle.order | 1 | -| tst.ts:91:15:91:14 | [FunctionExpr] () {} | tst.ts:91:15:91:14 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:91:15:91:14 | [FunctionExpr] () {} | tst.ts:91:15:91:14 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:92:5:94:5 | [ClassInitializedMember,MethodDefinition] random( ... ; } | tst.ts:92:5:92:10 | [Label] random | semmle.label | 1 | -| tst.ts:92:5:94:5 | [ClassInitializedMember,MethodDefinition] random( ... ; } | tst.ts:92:5:92:10 | [Label] random | semmle.order | 1 | -| tst.ts:92:5:94:5 | [ClassInitializedMember,MethodDefinition] random( ... ; } | tst.ts:92:5:94:5 | [FunctionExpr] random( ... ; } | semmle.label | 2 | -| tst.ts:92:5:94:5 | [ClassInitializedMember,MethodDefinition] random( ... ; } | tst.ts:92:5:94:5 | [FunctionExpr] random( ... ; } | semmle.order | 2 | -| tst.ts:92:5:94:5 | [FunctionExpr] random( ... ; } | tst.ts:92:15:92:20 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:92:5:94:5 | [FunctionExpr] random( ... ; } | tst.ts:92:15:92:20 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:92:5:94:5 | [FunctionExpr] random( ... ; } | tst.ts:92:22:94:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:92:5:94:5 | [FunctionExpr] random( ... ; } | tst.ts:92:22:94:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:92:22:94:5 | [BlockStmt] { ... ; } | tst.ts:93:7:93:15 | [ReturnStmt] return 4; | semmle.label | 1 | -| tst.ts:92:22:94:5 | [BlockStmt] { ... ; } | tst.ts:93:7:93:15 | [ReturnStmt] return 4; | semmle.order | 1 | -| tst.ts:93:7:93:15 | [ReturnStmt] return 4; | tst.ts:93:14:93:14 | [Literal] 4 | semmle.label | 1 | -| tst.ts:93:7:93:15 | [ReturnStmt] return 4; | tst.ts:93:14:93:14 | [Literal] 4 | semmle.order | 1 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:97:9:97:11 | [VarDecl] Sub | semmle.label | 1 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:97:9:97:11 | [VarDecl] Sub | semmle.order | 1 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:97:21:97:25 | [VarRef] Super | semmle.label | 2 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:97:21:97:25 | [VarRef] Super | semmle.order | 2 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:97:27:97:26 | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | semmle.label | 3 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:97:27:97:26 | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | semmle.order | 3 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:98:5:100:5 | [ClassInitializedMember,MethodDefinition] overrid ... ; } | semmle.label | 4 | -| tst.ts:97:3:101:3 | [ClassDefinition,TypeDefinition] class S ... } } | tst.ts:98:5:100:5 | [ClassInitializedMember,MethodDefinition] overrid ... ; } | semmle.order | 4 | -| tst.ts:97:27:97:26 | [BlockStmt] { super(...args); } | tst.ts:97:27:97:26 | [ExprStmt] super(...args); | semmle.label | 1 | -| tst.ts:97:27:97:26 | [BlockStmt] { super(...args); } | tst.ts:97:27:97:26 | [ExprStmt] super(...args); | semmle.order | 1 | -| tst.ts:97:27:97:26 | [CallExpr] super(...args) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:97:27:97:26 | [CallExpr] super(...args) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:97:27:97:26 | [CallExpr] super(...args) | tst.ts:97:27:97:26 | [SuperExpr] super | semmle.label | 0 | -| tst.ts:97:27:97:26 | [CallExpr] super(...args) | tst.ts:97:27:97:26 | [SuperExpr] super | semmle.order | 0 | -| tst.ts:97:27:97:26 | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | tst.ts:97:27:97:26 | [FunctionExpr] (...arg ... rgs); } | semmle.label | 2 | -| tst.ts:97:27:97:26 | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | tst.ts:97:27:97:26 | [FunctionExpr] (...arg ... rgs); } | semmle.order | 2 | -| tst.ts:97:27:97:26 | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | tst.ts:97:27:97:26 | [Label] constructor | semmle.label | 1 | -| tst.ts:97:27:97:26 | [ClassInitializedMember,ConstructorDefinition] constru ... rgs); } | tst.ts:97:27:97:26 | [Label] constructor | semmle.order | 1 | -| tst.ts:97:27:97:26 | [ExprStmt] super(...args); | tst.ts:97:27:97:26 | [CallExpr] super(...args) | semmle.label | 1 | -| tst.ts:97:27:97:26 | [ExprStmt] super(...args); | tst.ts:97:27:97:26 | [CallExpr] super(...args) | semmle.order | 1 | -| tst.ts:97:27:97:26 | [FunctionExpr] (...arg ... rgs); } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:97:27:97:26 | [FunctionExpr] (...arg ... rgs); } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:97:27:97:26 | [FunctionExpr] (...arg ... rgs); } | tst.ts:97:27:97:26 | [BlockStmt] { super(...args); } | semmle.label | 5 | -| tst.ts:97:27:97:26 | [FunctionExpr] (...arg ... rgs); } | tst.ts:97:27:97:26 | [BlockStmt] { super(...args); } | semmle.order | 5 | -| tst.ts:97:27:97:26 | [SpreadElement] ...args | tst.ts:97:27:97:26 | [VarRef] args | semmle.label | 1 | -| tst.ts:97:27:97:26 | [SpreadElement] ...args | tst.ts:97:27:97:26 | [VarRef] args | semmle.order | 1 | -| tst.ts:98:5:100:5 | [ClassInitializedMember,MethodDefinition] overrid ... ; } | tst.ts:98:5:100:5 | [FunctionExpr] overrid ... ; } | semmle.label | 1 | -| tst.ts:98:5:100:5 | [ClassInitializedMember,MethodDefinition] overrid ... ; } | tst.ts:98:5:100:5 | [FunctionExpr] overrid ... ; } | semmle.order | 1 | -| tst.ts:98:5:100:5 | [ClassInitializedMember,MethodDefinition] overrid ... ; } | tst.ts:98:14:98:19 | [Label] random | semmle.label | 2 | -| tst.ts:98:5:100:5 | [ClassInitializedMember,MethodDefinition] overrid ... ; } | tst.ts:98:14:98:19 | [Label] random | semmle.order | 2 | -| tst.ts:98:5:100:5 | [FunctionExpr] overrid ... ; } | tst.ts:98:24:98:29 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:98:5:100:5 | [FunctionExpr] overrid ... ; } | tst.ts:98:24:98:29 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:98:5:100:5 | [FunctionExpr] overrid ... ; } | tst.ts:98:31:100:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:98:5:100:5 | [FunctionExpr] overrid ... ; } | tst.ts:98:31:100:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:98:31:100:5 | [BlockStmt] { ... ; } | tst.ts:99:7:99:33 | [ReturnStmt] return ... ) * 10; | semmle.label | 1 | -| tst.ts:98:31:100:5 | [BlockStmt] { ... ; } | tst.ts:99:7:99:33 | [ReturnStmt] return ... ) * 10; | semmle.order | 1 | -| tst.ts:99:7:99:33 | [ReturnStmt] return ... ) * 10; | tst.ts:99:14:99:32 | [BinaryExpr] super.random() * 10 | semmle.label | 1 | -| tst.ts:99:7:99:33 | [ReturnStmt] return ... ) * 10; | tst.ts:99:14:99:32 | [BinaryExpr] super.random() * 10 | semmle.order | 1 | -| tst.ts:99:14:99:25 | [DotExpr] super.random | tst.ts:99:14:99:18 | [SuperExpr] super | semmle.label | 1 | -| tst.ts:99:14:99:25 | [DotExpr] super.random | tst.ts:99:14:99:18 | [SuperExpr] super | semmle.order | 1 | -| tst.ts:99:14:99:25 | [DotExpr] super.random | tst.ts:99:20:99:25 | [Label] random | semmle.label | 2 | -| tst.ts:99:14:99:25 | [DotExpr] super.random | tst.ts:99:20:99:25 | [Label] random | semmle.order | 2 | -| tst.ts:99:14:99:27 | [MethodCallExpr] super.random() | tst.ts:99:14:99:25 | [DotExpr] super.random | semmle.label | 0 | -| tst.ts:99:14:99:27 | [MethodCallExpr] super.random() | tst.ts:99:14:99:25 | [DotExpr] super.random | semmle.order | 0 | -| tst.ts:99:14:99:32 | [BinaryExpr] super.random() * 10 | tst.ts:99:14:99:27 | [MethodCallExpr] super.random() | semmle.label | 1 | -| tst.ts:99:14:99:32 | [BinaryExpr] super.random() * 10 | tst.ts:99:14:99:27 | [MethodCallExpr] super.random() | semmle.order | 1 | -| tst.ts:99:14:99:32 | [BinaryExpr] super.random() * 10 | tst.ts:99:31:99:32 | [Literal] 10 | semmle.label | 2 | -| tst.ts:99:14:99:32 | [BinaryExpr] super.random() * 10 | tst.ts:99:31:99:32 | [Literal] 10 | semmle.order | 2 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | tst.ts:104:12:104:14 | [VarDecl] bar | semmle.label | 0 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | tst.ts:104:12:104:14 | [VarDecl] bar | semmle.order | 0 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | tst.ts:104:28:104:44 | [TemplateLiteralTypeExpr] `hello ${string}` | semmle.label | 4 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | tst.ts:104:28:104:44 | [TemplateLiteralTypeExpr] `hello ${string}` | semmle.order | 4 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | tst.ts:104:46:107:3 | [BlockStmt] { / ... }`; } | semmle.label | 5 | -| tst.ts:104:3:107:3 | [FunctionDeclStmt] functio ... }`; } | tst.ts:104:46:107:3 | [BlockStmt] { / ... }`; } | semmle.order | 5 | -| tst.ts:104:16:104:16 | [SimpleParameter] s | tst.ts:104:19:104:24 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:104:16:104:16 | [SimpleParameter] s | tst.ts:104:19:104:24 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:104:28:104:44 | [TemplateLiteralTypeExpr] `hello ${string}` | tst.ts:104:29:104:34 | [LiteralTypeExpr] hello | semmle.label | 1 | -| tst.ts:104:28:104:44 | [TemplateLiteralTypeExpr] `hello ${string}` | tst.ts:104:29:104:34 | [LiteralTypeExpr] hello | semmle.order | 1 | -| tst.ts:104:28:104:44 | [TemplateLiteralTypeExpr] `hello ${string}` | tst.ts:104:37:104:42 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:104:28:104:44 | [TemplateLiteralTypeExpr] `hello ${string}` | tst.ts:104:37:104:42 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:104:46:107:3 | [BlockStmt] { / ... }`; } | tst.ts:106:5:106:24 | [ReturnStmt] return `hello ${s}`; | semmle.label | 1 | -| tst.ts:104:46:107:3 | [BlockStmt] { / ... }`; } | tst.ts:106:5:106:24 | [ReturnStmt] return `hello ${s}`; | semmle.order | 1 | -| tst.ts:106:5:106:24 | [ReturnStmt] return `hello ${s}`; | tst.ts:106:12:106:23 | [TemplateLiteral] `hello ${s}` | semmle.label | 1 | -| tst.ts:106:5:106:24 | [ReturnStmt] return `hello ${s}`; | tst.ts:106:12:106:23 | [TemplateLiteral] `hello ${s}` | semmle.order | 1 | -| tst.ts:106:12:106:23 | [TemplateLiteral] `hello ${s}` | tst.ts:106:13:106:18 | [TemplateElement] hello | semmle.label | 1 | -| tst.ts:106:12:106:23 | [TemplateLiteral] `hello ${s}` | tst.ts:106:13:106:18 | [TemplateElement] hello | semmle.order | 1 | -| tst.ts:106:12:106:23 | [TemplateLiteral] `hello ${s}` | tst.ts:106:21:106:21 | [VarRef] s | semmle.label | 2 | -| tst.ts:106:12:106:23 | [TemplateLiteral] `hello ${s}` | tst.ts:106:21:106:21 | [VarRef] s | semmle.order | 2 | -| tst.ts:109:3:109:50 | [DeclStmt] let s1 = ... | tst.ts:109:15:109:49 | [VariableDeclarator] s1: `${ ... umber}` | semmle.label | 1 | -| tst.ts:109:3:109:50 | [DeclStmt] let s1 = ... | tst.ts:109:15:109:49 | [VariableDeclarator] s1: `${ ... umber}` | semmle.order | 1 | -| tst.ts:109:15:109:49 | [VariableDeclarator] s1: `${ ... umber}` | tst.ts:109:15:109:16 | [VarDecl] s1 | semmle.label | 1 | -| tst.ts:109:15:109:49 | [VariableDeclarator] s1: `${ ... umber}` | tst.ts:109:15:109:16 | [VarDecl] s1 | semmle.order | 1 | -| tst.ts:109:15:109:49 | [VariableDeclarator] s1: `${ ... umber}` | tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | semmle.label | 2 | -| tst.ts:109:15:109:49 | [VariableDeclarator] s1: `${ ... umber}` | tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | semmle.order | 2 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:22:109:27 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:22:109:27 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:29:109:29 | [LiteralTypeExpr] - | semmle.label | 2 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:29:109:29 | [LiteralTypeExpr] - | semmle.order | 2 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:32:109:37 | [KeywordTypeExpr] number | semmle.label | 3 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:32:109:37 | [KeywordTypeExpr] number | semmle.order | 3 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:39:109:39 | [LiteralTypeExpr] - | semmle.label | 4 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:39:109:39 | [LiteralTypeExpr] - | semmle.order | 4 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:42:109:47 | [KeywordTypeExpr] number | semmle.label | 5 | -| tst.ts:109:19:109:49 | [TemplateLiteralTypeExpr] `${numb ... umber}` | tst.ts:109:42:109:47 | [KeywordTypeExpr] number | semmle.order | 5 | -| tst.ts:110:3:110:26 | [DeclStmt] let s2 = ... | tst.ts:110:15:110:25 | [VariableDeclarator] s2: `1-2-3` | semmle.label | 1 | -| tst.ts:110:3:110:26 | [DeclStmt] let s2 = ... | tst.ts:110:15:110:25 | [VariableDeclarator] s2: `1-2-3` | semmle.order | 1 | -| tst.ts:110:15:110:25 | [VariableDeclarator] s2: `1-2-3` | tst.ts:110:15:110:16 | [VarDecl] s2 | semmle.label | 1 | -| tst.ts:110:15:110:25 | [VariableDeclarator] s2: `1-2-3` | tst.ts:110:15:110:16 | [VarDecl] s2 | semmle.order | 1 | -| tst.ts:110:15:110:25 | [VariableDeclarator] s2: `1-2-3` | tst.ts:110:19:110:25 | [TemplateLiteralTypeExpr] `1-2-3` | semmle.label | 2 | -| tst.ts:110:15:110:25 | [VariableDeclarator] s2: `1-2-3` | tst.ts:110:19:110:25 | [TemplateLiteralTypeExpr] `1-2-3` | semmle.order | 2 | -| tst.ts:110:19:110:25 | [TemplateLiteralTypeExpr] `1-2-3` | tst.ts:110:19:110:25 | [LiteralTypeExpr] `1-2-3` | semmle.label | 1 | -| tst.ts:110:19:110:25 | [TemplateLiteralTypeExpr] `1-2-3` | tst.ts:110:19:110:25 | [LiteralTypeExpr] `1-2-3` | semmle.order | 1 | -| tst.ts:111:3:111:34 | [DeclStmt] let s3 = ... | tst.ts:111:15:111:33 | [VariableDeclarator] s3: `${number}-2-3` | semmle.label | 1 | -| tst.ts:111:3:111:34 | [DeclStmt] let s3 = ... | tst.ts:111:15:111:33 | [VariableDeclarator] s3: `${number}-2-3` | semmle.order | 1 | -| tst.ts:111:15:111:33 | [VariableDeclarator] s3: `${number}-2-3` | tst.ts:111:15:111:16 | [VarDecl] s3 | semmle.label | 1 | -| tst.ts:111:15:111:33 | [VariableDeclarator] s3: `${number}-2-3` | tst.ts:111:15:111:16 | [VarDecl] s3 | semmle.order | 1 | -| tst.ts:111:15:111:33 | [VariableDeclarator] s3: `${number}-2-3` | tst.ts:111:19:111:33 | [TemplateLiteralTypeExpr] `${number}-2-3` | semmle.label | 2 | -| tst.ts:111:15:111:33 | [VariableDeclarator] s3: `${number}-2-3` | tst.ts:111:19:111:33 | [TemplateLiteralTypeExpr] `${number}-2-3` | semmle.order | 2 | -| tst.ts:111:19:111:33 | [TemplateLiteralTypeExpr] `${number}-2-3` | tst.ts:111:22:111:27 | [KeywordTypeExpr] number | semmle.label | 1 | -| tst.ts:111:19:111:33 | [TemplateLiteralTypeExpr] `${number}-2-3` | tst.ts:111:22:111:27 | [KeywordTypeExpr] number | semmle.order | 1 | -| tst.ts:111:19:111:33 | [TemplateLiteralTypeExpr] `${number}-2-3` | tst.ts:111:29:111:32 | [LiteralTypeExpr] -2-3 | semmle.label | 2 | -| tst.ts:111:19:111:33 | [TemplateLiteralTypeExpr] `${number}-2-3` | tst.ts:111:29:111:32 | [LiteralTypeExpr] -2-3 | semmle.order | 2 | -| tst.ts:112:3:112:9 | [AssignExpr] s1 = s2 | tst.ts:112:3:112:4 | [VarRef] s1 | semmle.label | 1 | -| tst.ts:112:3:112:9 | [AssignExpr] s1 = s2 | tst.ts:112:3:112:4 | [VarRef] s1 | semmle.order | 1 | -| tst.ts:112:3:112:9 | [AssignExpr] s1 = s2 | tst.ts:112:8:112:9 | [VarRef] s2 | semmle.label | 2 | -| tst.ts:112:3:112:9 | [AssignExpr] s1 = s2 | tst.ts:112:8:112:9 | [VarRef] s2 | semmle.order | 2 | -| tst.ts:112:3:112:10 | [ExprStmt] s1 = s2; | tst.ts:112:3:112:9 | [AssignExpr] s1 = s2 | semmle.label | 1 | -| tst.ts:112:3:112:10 | [ExprStmt] s1 = s2; | tst.ts:112:3:112:9 | [AssignExpr] s1 = s2 | semmle.order | 1 | -| tst.ts:113:3:113:9 | [AssignExpr] s1 = s3 | tst.ts:113:3:113:4 | [VarRef] s1 | semmle.label | 1 | -| tst.ts:113:3:113:9 | [AssignExpr] s1 = s3 | tst.ts:113:3:113:4 | [VarRef] s1 | semmle.order | 1 | -| tst.ts:113:3:113:9 | [AssignExpr] s1 = s3 | tst.ts:113:8:113:9 | [VarRef] s3 | semmle.label | 2 | -| tst.ts:113:3:113:9 | [AssignExpr] s1 = s3 | tst.ts:113:8:113:9 | [VarRef] s3 | semmle.order | 2 | -| tst.ts:113:3:113:10 | [ExprStmt] s1 = s3; | tst.ts:113:3:113:9 | [AssignExpr] s1 = s3 | semmle.label | 1 | -| tst.ts:113:3:113:10 | [ExprStmt] s1 = s3; | tst.ts:113:3:113:9 | [AssignExpr] s1 = s3 | semmle.order | 1 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:116:9:116:11 | [VarDecl] Foo | semmle.label | 1 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:116:9:116:11 | [VarDecl] Foo | semmle.order | 1 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:116:13:116:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:116:13:116:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:117:5:119:5 | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | semmle.label | 3 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:117:5:119:5 | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | semmle.order | 3 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:121:5:123:5 | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | semmle.label | 4 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:121:5:123:5 | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | semmle.order | 4 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:125:5:128:5 | [ClassInitializedMember,MethodDefinition] publicM ... ; } | semmle.label | 5 | -| tst.ts:116:3:129:3 | [ClassDefinition,TypeDefinition] class F ... } } | tst.ts:125:5:128:5 | [ClassInitializedMember,MethodDefinition] publicM ... ; } | semmle.order | 5 | -| tst.ts:116:13:116:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:116:13:116:12 | [FunctionExpr] () {} | semmle.label | 2 | -| tst.ts:116:13:116:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:116:13:116:12 | [FunctionExpr] () {} | semmle.order | 2 | -| tst.ts:116:13:116:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:116:13:116:12 | [Label] constructor | semmle.label | 1 | -| tst.ts:116:13:116:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:116:13:116:12 | [Label] constructor | semmle.order | 1 | -| tst.ts:116:13:116:12 | [FunctionExpr] () {} | tst.ts:116:13:116:12 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:116:13:116:12 | [FunctionExpr] () {} | tst.ts:116:13:116:12 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:117:5:119:5 | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | tst.ts:117:5:117:15 | [Label] #someMethod | semmle.label | 1 | -| tst.ts:117:5:119:5 | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | tst.ts:117:5:117:15 | [Label] #someMethod | semmle.order | 1 | -| tst.ts:117:5:119:5 | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | tst.ts:117:5:119:5 | [FunctionExpr] #someMe ... ; } | semmle.label | 2 | -| tst.ts:117:5:119:5 | [ClassInitializedMember,MethodDefinition] #someMe ... ; } | tst.ts:117:5:119:5 | [FunctionExpr] #someMe ... ; } | semmle.order | 2 | -| tst.ts:117:5:119:5 | [FunctionExpr] #someMe ... ; } | tst.ts:117:20:117:25 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:117:5:119:5 | [FunctionExpr] #someMe ... ; } | tst.ts:117:20:117:25 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:117:5:119:5 | [FunctionExpr] #someMe ... ; } | tst.ts:117:27:119:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:117:5:119:5 | [FunctionExpr] #someMe ... ; } | tst.ts:117:27:119:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:117:27:119:5 | [BlockStmt] { ... ; } | tst.ts:118:7:118:16 | [ReturnStmt] return 42; | semmle.label | 1 | -| tst.ts:117:27:119:5 | [BlockStmt] { ... ; } | tst.ts:118:7:118:16 | [ReturnStmt] return 42; | semmle.order | 1 | -| tst.ts:118:7:118:16 | [ReturnStmt] return 42; | tst.ts:118:14:118:15 | [Literal] 42 | semmle.label | 1 | -| tst.ts:118:7:118:16 | [ReturnStmt] return 42; | tst.ts:118:14:118:15 | [Literal] 42 | semmle.order | 1 | -| tst.ts:121:5:123:5 | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | tst.ts:121:5:123:5 | [FunctionExpr] get #so ... ; } | semmle.label | 1 | -| tst.ts:121:5:123:5 | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | tst.ts:121:5:123:5 | [FunctionExpr] get #so ... ; } | semmle.order | 1 | -| tst.ts:121:5:123:5 | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | tst.ts:121:9:121:18 | [Label] #someValue | semmle.label | 2 | -| tst.ts:121:5:123:5 | [ClassInitializedMember,GetterMethodDefinition] get #so ... ; } | tst.ts:121:9:121:18 | [Label] #someValue | semmle.order | 2 | -| tst.ts:121:5:123:5 | [FunctionExpr] get #so ... ; } | tst.ts:121:23:121:28 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:121:5:123:5 | [FunctionExpr] get #so ... ; } | tst.ts:121:23:121:28 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:121:5:123:5 | [FunctionExpr] get #so ... ; } | tst.ts:121:30:123:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:121:5:123:5 | [FunctionExpr] get #so ... ; } | tst.ts:121:30:123:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:121:30:123:5 | [BlockStmt] { ... ; } | tst.ts:122:7:122:17 | [ReturnStmt] return 100; | semmle.label | 1 | -| tst.ts:121:30:123:5 | [BlockStmt] { ... ; } | tst.ts:122:7:122:17 | [ReturnStmt] return 100; | semmle.order | 1 | -| tst.ts:122:7:122:17 | [ReturnStmt] return 100; | tst.ts:122:14:122:16 | [Literal] 100 | semmle.label | 1 | -| tst.ts:122:7:122:17 | [ReturnStmt] return 100; | tst.ts:122:14:122:16 | [Literal] 100 | semmle.order | 1 | -| tst.ts:125:5:128:5 | [ClassInitializedMember,MethodDefinition] publicM ... ; } | tst.ts:125:5:125:16 | [Label] publicMethod | semmle.label | 1 | -| tst.ts:125:5:128:5 | [ClassInitializedMember,MethodDefinition] publicM ... ; } | tst.ts:125:5:125:16 | [Label] publicMethod | semmle.order | 1 | -| tst.ts:125:5:128:5 | [ClassInitializedMember,MethodDefinition] publicM ... ; } | tst.ts:125:5:128:5 | [FunctionExpr] publicM ... ; } | semmle.label | 2 | -| tst.ts:125:5:128:5 | [ClassInitializedMember,MethodDefinition] publicM ... ; } | tst.ts:125:5:128:5 | [FunctionExpr] publicM ... ; } | semmle.order | 2 | -| tst.ts:125:5:128:5 | [FunctionExpr] publicM ... ; } | tst.ts:125:20:128:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:125:5:128:5 | [FunctionExpr] publicM ... ; } | tst.ts:125:20:128:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:125:20:128:5 | [BlockStmt] { ... ; } | tst.ts:126:7:126:25 | [ExprStmt] this.#someMethod(); | semmle.label | 1 | -| tst.ts:125:20:128:5 | [BlockStmt] { ... ; } | tst.ts:126:7:126:25 | [ExprStmt] this.#someMethod(); | semmle.order | 1 | -| tst.ts:125:20:128:5 | [BlockStmt] { ... ; } | tst.ts:127:7:127:29 | [ReturnStmt] return ... eValue; | semmle.label | 2 | -| tst.ts:125:20:128:5 | [BlockStmt] { ... ; } | tst.ts:127:7:127:29 | [ReturnStmt] return ... eValue; | semmle.order | 2 | -| tst.ts:126:7:126:22 | [DotExpr] this.#someMethod | tst.ts:126:7:126:10 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:126:7:126:22 | [DotExpr] this.#someMethod | tst.ts:126:7:126:10 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:126:7:126:22 | [DotExpr] this.#someMethod | tst.ts:126:12:126:22 | [Label] #someMethod | semmle.label | 2 | -| tst.ts:126:7:126:22 | [DotExpr] this.#someMethod | tst.ts:126:12:126:22 | [Label] #someMethod | semmle.order | 2 | -| tst.ts:126:7:126:24 | [MethodCallExpr] this.#someMethod() | tst.ts:126:7:126:22 | [DotExpr] this.#someMethod | semmle.label | 0 | -| tst.ts:126:7:126:24 | [MethodCallExpr] this.#someMethod() | tst.ts:126:7:126:22 | [DotExpr] this.#someMethod | semmle.order | 0 | -| tst.ts:126:7:126:25 | [ExprStmt] this.#someMethod(); | tst.ts:126:7:126:24 | [MethodCallExpr] this.#someMethod() | semmle.label | 1 | -| tst.ts:126:7:126:25 | [ExprStmt] this.#someMethod(); | tst.ts:126:7:126:24 | [MethodCallExpr] this.#someMethod() | semmle.order | 1 | -| tst.ts:127:7:127:29 | [ReturnStmt] return ... eValue; | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | semmle.label | 1 | -| tst.ts:127:7:127:29 | [ReturnStmt] return ... eValue; | tst.ts:127:14:127:28 | [DotExpr] this.#someValue | semmle.order | 1 | -| tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:14:127:17 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:14:127:17 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:19:127:28 | [Label] #someValue | semmle.label | 2 | -| tst.ts:127:14:127:28 | [DotExpr] this.#someValue | tst.ts:127:19:127:28 | [Label] #someValue | semmle.order | 2 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.label | 1 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:132:8:132:11 | [VarDecl] TS44 | semmle.order | 1 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 2 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 2 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.label | 3 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | semmle.order | 3 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.label | 4 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | semmle.order | 4 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.label | 5 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | semmle.order | 5 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.label | 6 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | semmle.order | 6 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | semmle.label | 7 | -| tst.ts:132:1:193:1 | [NamespaceDeclaration] module ... } } | tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | semmle.order | 7 | -| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:12:133:14 | [VarDecl] foo | semmle.label | 0 | -| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:12:133:14 | [VarDecl] foo | semmle.order | 0 | -| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | semmle.label | 5 | -| tst.ts:133:3:138:3 | [FunctionDeclStmt] functio ... } } | tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | semmle.order | 5 | -| tst.ts:133:16:133:18 | [SimpleParameter] arg | tst.ts:133:21:133:27 | [KeywordTypeExpr] unknown | semmle.label | -2 | -| tst.ts:133:16:133:18 | [SimpleParameter] arg | tst.ts:133:21:133:27 | [KeywordTypeExpr] unknown | semmle.order | -2 | -| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | semmle.label | 1 | -| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | semmle.order | 1 | -| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | semmle.label | 2 | -| tst.ts:133:30:138:3 | [BlockStmt] { c ... } } | tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | semmle.order | 2 | -| tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | semmle.label | 1 | -| tst.ts:134:5:134:48 | [DeclStmt] const argIsString = ... | tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | semmle.order | 1 | -| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:11:134:21 | [VarDecl] argIsString | semmle.label | 1 | -| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:11:134:21 | [VarDecl] argIsString | semmle.order | 1 | -| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | semmle.label | 2 | -| tst.ts:134:11:134:47 | [VariableDeclarator] argIsSt ... string" | tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | semmle.order | 2 | -| tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | tst.ts:134:32:134:34 | [VarRef] arg | semmle.label | 1 | -| tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | tst.ts:134:32:134:34 | [VarRef] arg | semmle.order | 1 | -| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | semmle.label | 1 | -| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:25:134:34 | [UnaryExpr] typeof arg | semmle.order | 1 | -| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:40:134:47 | [Literal] "string" | semmle.label | 2 | -| tst.ts:134:25:134:47 | [BinaryExpr] typeof ... string" | tst.ts:134:40:134:47 | [Literal] "string" | semmle.order | 2 | -| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:9:135:19 | [VarRef] argIsString | semmle.label | 1 | -| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:9:135:19 | [VarRef] argIsString | semmle.order | 1 | -| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | semmle.label | 2 | -| tst.ts:135:5:137:5 | [IfStmt] if (arg ... ; } | tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | semmle.order | 2 | -| tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | semmle.label | 1 | -| tst.ts:135:22:137:5 | [BlockStmt] { ... ; } | tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | semmle.order | 1 | -| tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | semmle.label | 1 | -| tst.ts:136:9:136:40 | [DeclStmt] const upper = ... | tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | semmle.order | 1 | -| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:15:136:19 | [VarDecl] upper | semmle.label | 1 | -| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:15:136:19 | [VarDecl] upper | semmle.order | 1 | -| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | semmle.label | 2 | -| tst.ts:136:15:136:39 | [VariableDeclarator] upper = ... rCase() | tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | semmle.order | 2 | -| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:23:136:25 | [VarRef] arg | semmle.label | 1 | -| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:23:136:25 | [VarRef] arg | semmle.order | 1 | -| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:27:136:37 | [Label] toUpperCase | semmle.label | 2 | -| tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | tst.ts:136:27:136:37 | [Label] toUpperCase | semmle.order | 2 | -| tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | semmle.label | 0 | -| tst.ts:136:23:136:39 | [MethodCallExpr] arg.toUpperCase() | tst.ts:136:23:136:37 | [DotExpr] arg.toUpperCase | semmle.order | 0 | -| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:140:8:140:12 | [Identifier] Shape | semmle.label | 1 | -| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:140:8:140:12 | [Identifier] Shape | semmle.order | 1 | -| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | semmle.label | 2 | -| tst.ts:140:3:142:47 | [TypeAliasDeclaration,TypeDefinition] type Sh ... mber }; | tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | semmle.order | 2 | -| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | 1 | -| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | semmle.order | 1 | -| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | 2 | -| tst.ts:141:7:142:46 | [UnionTypeExpr] \| { kin ... umber } | tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | semmle.order | 2 | -| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | semmle.label | 1 | -| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | semmle.order | 1 | -| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | semmle.label | 2 | -| tst.ts:141:9:141:42 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | semmle.order | 2 | -| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:11:141:14 | [Label] kind | semmle.label | 1 | -| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:11:141:14 | [Label] kind | semmle.order | 1 | -| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:17:141:24 | [LiteralTypeExpr] "circle" | semmle.label | 2 | -| tst.ts:141:11:141:25 | [FieldDeclaration] kind: "circle", | tst.ts:141:17:141:24 | [LiteralTypeExpr] "circle" | semmle.order | 2 | -| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:27:141:32 | [Label] radius | semmle.label | 1 | -| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:27:141:32 | [Label] radius | semmle.order | 1 | -| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:35:141:40 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:141:27:141:40 | [FieldDeclaration] radius: number | tst.ts:141:35:141:40 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | semmle.label | 1 | -| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | semmle.order | 1 | -| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | semmle.label | 2 | -| tst.ts:142:9:142:46 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | semmle.order | 2 | -| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:11:142:14 | [Label] kind | semmle.label | 1 | -| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:11:142:14 | [Label] kind | semmle.order | 1 | -| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:17:142:24 | [LiteralTypeExpr] "square" | semmle.label | 2 | -| tst.ts:142:11:142:25 | [FieldDeclaration] kind: "square", | tst.ts:142:17:142:24 | [LiteralTypeExpr] "square" | semmle.order | 2 | -| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:27:142:36 | [Label] sideLength | semmle.label | 1 | -| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:27:142:36 | [Label] sideLength | semmle.order | 1 | -| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:39:142:44 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:142:27:142:44 | [FieldDeclaration] sideLength: number | tst.ts:142:39:142:44 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:12:144:15 | [VarDecl] side | semmle.label | 0 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:12:144:15 | [VarDecl] side | semmle.order | 0 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:32:144:37 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:32:144:37 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | semmle.label | 5 | -| tst.ts:144:3:149:3 | [FunctionDeclStmt] functio ... ; } } | tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | semmle.order | 5 | -| tst.ts:144:17:144:21 | [SimpleParameter] shape | tst.ts:144:24:144:28 | [LocalTypeAccess] Shape | semmle.label | -2 | -| tst.ts:144:17:144:21 | [SimpleParameter] shape | tst.ts:144:24:144:28 | [LocalTypeAccess] Shape | semmle.order | -2 | -| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | semmle.label | 1 | -| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | semmle.order | 1 | -| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | semmle.label | 2 | -| tst.ts:144:39:149:3 | [BlockStmt] { ... ; } } | tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | semmle.order | 2 | -| tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | semmle.label | 1 | -| tst.ts:145:7:145:29 | [DeclStmt] const { ... shape; | tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | semmle.order | 1 | -| tst.ts:145:13:145:20 | [ObjectPattern] { kind } | tst.ts:145:15:145:18 | [PropertyPattern] kind | semmle.label | 1 | -| tst.ts:145:13:145:20 | [ObjectPattern] { kind } | tst.ts:145:15:145:18 | [PropertyPattern] kind | semmle.order | 1 | -| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:13:145:20 | [ObjectPattern] { kind } | semmle.label | 1 | -| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:13:145:20 | [ObjectPattern] { kind } | semmle.order | 1 | -| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:24:145:28 | [VarRef] shape | semmle.label | 2 | -| tst.ts:145:13:145:28 | [VariableDeclarator] { kind } = shape | tst.ts:145:24:145:28 | [VarRef] shape | semmle.order | 2 | -| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [Label] kind | semmle.label | 1 | -| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [Label] kind | semmle.order | 1 | -| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [VarDecl] kind | semmle.label | 2 | -| tst.ts:145:15:145:18 | [PropertyPattern] kind | tst.ts:145:15:145:18 | [VarDecl] kind | semmle.order | 2 | -| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | semmle.label | 1 | -| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | semmle.order | 1 | -| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | semmle.label | 2 | -| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | semmle.order | 2 | -| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | semmle.label | 3 | -| tst.ts:147:7:148:39 | [IfStmt] if (kin ... ngth; } | tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | semmle.order | 3 | -| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:11:147:14 | [VarRef] kind | semmle.label | 1 | -| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:11:147:14 | [VarRef] kind | semmle.order | 1 | -| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:20:147:27 | [Literal] "circle" | semmle.label | 2 | -| tst.ts:147:11:147:27 | [BinaryExpr] kind === "circle" | tst.ts:147:20:147:27 | [Literal] "circle" | semmle.order | 2 | -| tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | semmle.label | 1 | -| tst.ts:147:30:147:52 | [BlockStmt] { retur ... adius;} | tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | semmle.order | 1 | -| tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | tst.ts:147:39:147:50 | [DotExpr] shape.radius | semmle.label | 1 | -| tst.ts:147:32:147:51 | [ReturnStmt] return shape.radius; | tst.ts:147:39:147:50 | [DotExpr] shape.radius | semmle.order | 1 | -| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:39:147:43 | [VarRef] shape | semmle.label | 1 | -| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:39:147:43 | [VarRef] shape | semmle.order | 1 | -| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:45:147:50 | [Label] radius | semmle.label | 2 | -| tst.ts:147:39:147:50 | [DotExpr] shape.radius | tst.ts:147:45:147:50 | [Label] radius | semmle.order | 2 | -| tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | semmle.label | 1 | -| tst.ts:148:12:148:39 | [BlockStmt] { retur ... ngth; } | tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | semmle.order | 1 | -| tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | semmle.label | 1 | -| tst.ts:148:14:148:37 | [ReturnStmt] return ... Length; | tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | semmle.order | 1 | -| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:21:148:25 | [VarRef] shape | semmle.label | 1 | -| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:21:148:25 | [VarRef] shape | semmle.order | 1 | -| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:27:148:36 | [Label] sideLength | semmle.label | 2 | -| tst.ts:148:21:148:36 | [DotExpr] shape.sideLength | tst.ts:148:27:148:36 | [Label] sideLength | semmle.order | 2 | -| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:12:151:22 | [VarDecl] symbolIndex | semmle.label | 0 | -| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:12:151:22 | [VarDecl] symbolIndex | semmle.order | 0 | -| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | semmle.label | 5 | -| tst.ts:151:3:162:3 | [FunctionDeclStmt] functio ... 2]; } | tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | semmle.order | 5 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | 1 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.order | 1 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | semmle.label | 2 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | semmle.order | 2 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:159:5:159:38 | [DeclStmt] const red = ... | semmle.label | 3 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:159:5:159:38 | [DeclStmt] const red = ... | semmle.order | 3 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:160:5:160:34 | [DeclStmt] const green = ... | semmle.label | 4 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:160:5:160:34 | [DeclStmt] const green = ... | semmle.order | 4 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | semmle.label | 5 | -| tst.ts:151:26:162:3 | [BlockStmt] { i ... 2]; } | tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | semmle.order | 5 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:152:15:152:20 | [Identifier] Colors | semmle.label | 1 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:152:15:152:20 | [Identifier] Colors | semmle.order | 1 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | semmle.label | 2 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | semmle.order | 2 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | semmle.label | 3 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | semmle.order | 3 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | semmle.label | 4 | -| tst.ts:152:5:156:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | semmle.order | 4 | -| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | tst.ts:153:22:153:27 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | tst.ts:153:22:153:27 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | semmle.label | 1 | -| tst.ts:153:7:153:28 | [IndexSignature] [sym: s ... number; | tst.ts:153:7:153:28 | [FunctionExpr] [sym: s ... number; | semmle.order | 1 | -| tst.ts:153:8:153:10 | [SimpleParameter] sym | tst.ts:153:13:153:18 | [KeywordTypeExpr] symbol | semmle.label | -2 | -| tst.ts:153:8:153:10 | [SimpleParameter] sym | tst.ts:153:13:153:18 | [KeywordTypeExpr] symbol | semmle.order | -2 | -| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | tst.ts:154:22:154:27 | [KeywordTypeExpr] string | semmle.label | 4 | -| tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | tst.ts:154:22:154:27 | [KeywordTypeExpr] string | semmle.order | 4 | -| tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | semmle.label | 1 | -| tst.ts:154:7:154:28 | [IndexSignature] [key: s ... string; | tst.ts:154:7:154:28 | [FunctionExpr] [key: s ... string; | semmle.order | 1 | -| tst.ts:154:8:154:10 | [SimpleParameter] key | tst.ts:154:13:154:18 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:154:8:154:10 | [SimpleParameter] key | tst.ts:154:13:154:18 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | tst.ts:155:22:155:28 | [KeywordTypeExpr] boolean | semmle.label | 4 | -| tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | tst.ts:155:22:155:28 | [KeywordTypeExpr] boolean | semmle.order | 4 | -| tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | semmle.label | 1 | -| tst.ts:155:7:155:29 | [IndexSignature] [num: n ... oolean; | tst.ts:155:7:155:29 | [FunctionExpr] [num: n ... oolean; | semmle.order | 1 | -| tst.ts:155:8:155:10 | [SimpleParameter] num | tst.ts:155:13:155:18 | [KeywordTypeExpr] number | semmle.label | -2 | -| tst.ts:155:8:155:10 | [SimpleParameter] num | tst.ts:155:13:155:18 | [KeywordTypeExpr] number | semmle.order | -2 | -| tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | semmle.label | 1 | -| tst.ts:158:5:158:28 | [DeclStmt] let colors = ... | tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | semmle.order | 1 | -| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:9:158:14 | [VarDecl] colors | semmle.label | 1 | -| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:9:158:14 | [VarDecl] colors | semmle.order | 1 | -| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:17:158:22 | [LocalTypeAccess] Colors | semmle.label | 2 | -| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:17:158:22 | [LocalTypeAccess] Colors | semmle.order | 2 | -| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:26:158:27 | [ObjectExpr] {} | semmle.label | 3 | -| tst.ts:158:9:158:27 | [VariableDeclarator] colors: Colors = {} | tst.ts:158:26:158:27 | [ObjectExpr] {} | semmle.order | 3 | -| tst.ts:159:5:159:38 | [DeclStmt] const red = ... | tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | semmle.label | 1 | -| tst.ts:159:5:159:38 | [DeclStmt] const red = ... | tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | semmle.order | 1 | -| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:11:159:13 | [VarDecl] red | semmle.label | 1 | -| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:11:159:13 | [VarDecl] red | semmle.order | 1 | -| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | semmle.label | 2 | -| tst.ts:159:11:159:37 | [VariableDeclarator] red = c ... "red")] | tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | semmle.order | 2 | -| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:17:159:22 | [VarRef] colors | semmle.label | 1 | -| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:17:159:22 | [VarRef] colors | semmle.order | 1 | -| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | semmle.label | 2 | -| tst.ts:159:17:159:37 | [IndexExpr] colors[ ... "red")] | tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | semmle.order | 2 | -| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | tst.ts:159:24:159:29 | [VarRef] Symbol | semmle.label | 0 | -| tst.ts:159:24:159:36 | [CallExpr] Symbol("red") | tst.ts:159:24:159:29 | [VarRef] Symbol | semmle.order | 0 | -| tst.ts:160:5:160:34 | [DeclStmt] const green = ... | tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | semmle.label | 1 | -| tst.ts:160:5:160:34 | [DeclStmt] const green = ... | tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | semmle.order | 1 | -| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:11:160:15 | [VarDecl] green | semmle.label | 1 | -| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:11:160:15 | [VarDecl] green | semmle.order | 1 | -| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | semmle.label | 2 | -| tst.ts:160:11:160:33 | [VariableDeclarator] green = ... green"] | tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | semmle.order | 2 | -| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:19:160:24 | [VarRef] colors | semmle.label | 1 | -| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:19:160:24 | [VarRef] colors | semmle.order | 1 | -| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:26:160:32 | [Literal] "green" | semmle.label | 2 | -| tst.ts:160:19:160:33 | [IndexExpr] colors["green"] | tst.ts:160:26:160:32 | [Literal] "green" | semmle.order | 2 | -| tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | semmle.label | 1 | -| tst.ts:161:5:161:27 | [DeclStmt] const blue = ... | tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | semmle.order | 1 | -| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:11:161:14 | [VarDecl] blue | semmle.label | 1 | -| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:11:161:14 | [VarDecl] blue | semmle.order | 1 | -| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:18:161:26 | [IndexExpr] colors[2] | semmle.label | 2 | -| tst.ts:161:11:161:26 | [VariableDeclarator] blue = colors[2] | tst.ts:161:18:161:26 | [IndexExpr] colors[2] | semmle.order | 2 | -| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:18:161:23 | [VarRef] colors | semmle.label | 1 | -| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:18:161:23 | [VarRef] colors | semmle.order | 1 | -| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:25:161:25 | [Literal] 2 | semmle.label | 2 | -| tst.ts:161:18:161:26 | [IndexExpr] colors[2] | tst.ts:161:25:161:25 | [Literal] 2 | semmle.order | 2 | -| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:12:164:29 | [VarDecl] stringPatternIndex | semmle.label | 0 | -| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:12:164:29 | [VarDecl] stringPatternIndex | semmle.order | 0 | -| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | semmle.label | 5 | -| tst.ts:164:3:177:3 | [FunctionDeclStmt] functio ... "]; } | tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | semmle.order | 5 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | 1 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.order | 1 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | semmle.label | 2 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | semmle.order | 2 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | semmle.label | 3 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | semmle.order | 3 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.label | 4 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | semmle.order | 4 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:175:5:175:26 | [DeclStmt] const data = ... | semmle.label | 5 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:175:5:175:26 | [DeclStmt] const data = ... | semmle.order | 5 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | semmle.label | 6 | -| tst.ts:164:33:177:3 | [BlockStmt] { i ... "]; } | tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | semmle.order | 6 | -| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:165:15:165:17 | [Identifier] Foo | semmle.label | 1 | -| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:165:15:165:17 | [Identifier] Foo | semmle.order | 1 | -| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | semmle.label | 2 | -| tst.ts:165:5:167:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | semmle.order | 2 | -| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | tst.ts:166:31:166:36 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | tst.ts:166:31:166:36 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | semmle.label | 1 | -| tst.ts:166:7:166:37 | [IndexSignature] [key: ` ... number; | tst.ts:166:7:166:37 | [FunctionExpr] [key: ` ... number; | semmle.order | 1 | -| tst.ts:166:8:166:10 | [SimpleParameter] key | tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | semmle.label | -2 | -| tst.ts:166:8:166:10 | [SimpleParameter] key | tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | semmle.order | -2 | -| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:14:166:17 | [LiteralTypeExpr] foo- | semmle.label | 1 | -| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:14:166:17 | [LiteralTypeExpr] foo- | semmle.order | 1 | -| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:20:166:25 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:166:13:166:27 | [TemplateLiteralTypeExpr] `foo-${number}` | tst.ts:166:20:166:25 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | semmle.label | 1 | -| tst.ts:168:5:168:23 | [DeclStmt] var bla = ... | tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | semmle.order | 1 | -| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:9:168:11 | [VarDecl] bla | semmle.label | 1 | -| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:9:168:11 | [VarDecl] bla | semmle.order | 1 | -| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:15:168:17 | [LocalTypeAccess] Foo | semmle.label | 2 | -| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:15:168:17 | [LocalTypeAccess] Foo | semmle.order | 2 | -| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:21:168:22 | [ObjectExpr] {} | semmle.label | 3 | -| tst.ts:168:9:168:22 | [VariableDeclarator] bla : Foo = {} | tst.ts:168:21:168:22 | [ObjectExpr] {} | semmle.order | 3 | -| tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | semmle.label | 1 | -| tst.ts:169:5:169:29 | [DeclStmt] const bar = ... | tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | semmle.order | 1 | -| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:11:169:13 | [VarDecl] bar | semmle.label | 1 | -| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:11:169:13 | [VarDecl] bar | semmle.order | 1 | -| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | semmle.label | 2 | -| tst.ts:169:11:169:28 | [VariableDeclarator] bar = bla[`foo-1`] | tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | semmle.order | 2 | -| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:17:169:19 | [VarRef] bla | semmle.label | 1 | -| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:17:169:19 | [VarRef] bla | semmle.order | 1 | -| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | semmle.label | 2 | -| tst.ts:169:17:169:28 | [IndexExpr] bla[`foo-1`] | tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | semmle.order | 2 | -| tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | tst.ts:169:21:169:27 | [TemplateElement] `foo-1` | semmle.label | 1 | -| tst.ts:169:21:169:27 | [TemplateLiteral] `foo-1` | tst.ts:169:21:169:27 | [TemplateElement] `foo-1` | semmle.order | 1 | -| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:171:15:171:18 | [Identifier] Data | semmle.label | 1 | -| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:171:15:171:18 | [Identifier] Data | semmle.order | 1 | -| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | semmle.label | 2 | -| tst.ts:171:5:173:5 | [InterfaceDeclaration,TypeDefinition] interfa ... ; } | tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | semmle.order | 2 | -| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | tst.ts:172:35:172:41 | [KeywordTypeExpr] boolean | semmle.label | 4 | -| tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | tst.ts:172:35:172:41 | [KeywordTypeExpr] boolean | semmle.order | 4 | -| tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | semmle.label | 1 | -| tst.ts:172:7:172:42 | [IndexSignature] [optNam ... oolean; | tst.ts:172:7:172:42 | [FunctionExpr] [optNam ... oolean; | semmle.order | 1 | -| tst.ts:172:8:172:14 | [SimpleParameter] optName | tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | semmle.label | -2 | -| tst.ts:172:8:172:14 | [SimpleParameter] optName | tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | semmle.order | -2 | -| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:17:172:22 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:17:172:22 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:26:172:31 | [KeywordTypeExpr] symbol | semmle.label | 2 | -| tst.ts:172:17:172:31 | [UnionTypeExpr] string \| symbol | tst.ts:172:26:172:31 | [KeywordTypeExpr] symbol | semmle.order | 2 | -| tst.ts:175:5:175:26 | [DeclStmt] const data = ... | tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | semmle.label | 1 | -| tst.ts:175:5:175:26 | [DeclStmt] const data = ... | tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | semmle.order | 1 | -| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:11:175:14 | [VarDecl] data | semmle.label | 1 | -| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:11:175:14 | [VarDecl] data | semmle.order | 1 | -| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:17:175:20 | [LocalTypeAccess] Data | semmle.label | 2 | -| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:17:175:20 | [LocalTypeAccess] Data | semmle.order | 2 | -| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:24:175:25 | [ObjectExpr] {} | semmle.label | 3 | -| tst.ts:175:11:175:25 | [VariableDeclarator] data: Data = {} | tst.ts:175:24:175:25 | [ObjectExpr] {} | semmle.order | 3 | -| tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | semmle.label | 1 | -| tst.ts:176:5:176:28 | [DeclStmt] const baz = ... | tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | semmle.order | 1 | -| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:11:176:13 | [VarDecl] baz | semmle.label | 1 | -| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:11:176:13 | [VarDecl] baz | semmle.order | 1 | -| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | semmle.label | 2 | -| tst.ts:176:11:176:27 | [VariableDeclarator] baz = data["foo"] | tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | semmle.order | 2 | -| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:17:176:20 | [VarRef] data | semmle.label | 1 | -| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:17:176:20 | [VarRef] data | semmle.order | 1 | -| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:22:176:26 | [Literal] "foo" | semmle.label | 2 | -| tst.ts:176:17:176:27 | [IndexExpr] data["foo"] | tst.ts:176:22:176:26 | [Literal] "foo" | semmle.order | 2 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:9:179:11 | [VarDecl] Foo | semmle.label | 1 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:9:179:11 | [VarDecl] Foo | semmle.order | 1 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | semmle.label | 3 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | semmle.order | 3 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.label | 4 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | semmle.order | 4 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | semmle.label | 5 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | semmle.order | 5 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | semmle.label | 6 | -| tst.ts:179:3:192:3 | [ClassDefinition,TypeDefinition] class F ... } | tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | semmle.order | 6 | -| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.label | 2 | -| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [FunctionExpr] () {} | semmle.order | 2 | -| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [Label] constructor | semmle.label | 1 | -| tst.ts:179:13:179:12 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:179:13:179:12 | [Label] constructor | semmle.order | 1 | -| tst.ts:179:13:179:12 | [FunctionExpr] () {} | tst.ts:179:13:179:12 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:179:13:179:12 | [FunctionExpr] () {} | tst.ts:179:13:179:12 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:12:180:17 | [Label] #count | semmle.label | 1 | -| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:12:180:17 | [Label] #count | semmle.order | 1 | -| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:21:180:21 | [Literal] 0 | semmle.label | 2 | -| tst.ts:180:5:180:22 | [ClassInitializedMember,FieldDeclaration] static #count = 0; | tst.ts:180:21:180:21 | [Literal] 0 | semmle.order | 2 | -| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | semmle.label | 1 | -| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | semmle.order | 1 | -| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:9:182:13 | [Label] count | semmle.label | 2 | -| tst.ts:182:5:184:5 | [ClassInitializedMember,GetterMethodDefinition] get cou ... ; } | tst.ts:182:9:182:13 | [Label] count | semmle.order | 2 | -| tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:182:5:184:5 | [FunctionExpr] get cou ... ; } | tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | semmle.label | 1 | -| tst.ts:182:17:184:5 | [BlockStmt] { ... ; } | tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | semmle.order | 1 | -| tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | tst.ts:183:16:183:25 | [DotExpr] Foo.#count | semmle.label | 1 | -| tst.ts:183:9:183:26 | [ReturnStmt] return Foo.#count; | tst.ts:183:16:183:25 | [DotExpr] Foo.#count | semmle.order | 1 | -| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:16:183:18 | [VarRef] Foo | semmle.label | 1 | -| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:16:183:18 | [VarRef] Foo | semmle.order | 1 | -| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:20:183:25 | [Label] #count | semmle.label | 2 | -| tst.ts:183:16:183:25 | [DotExpr] Foo.#count | tst.ts:183:20:183:25 | [Label] #count | semmle.order | 2 | -| tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.label | 1 | -| tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | semmle.order | 1 | -| tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.label | 1 | -| tst.ts:185:5:187:5 | [ClassInitializedMember] static ... ; } | tst.ts:185:5:187:5 | [BlockStmt] static ... ; } | semmle.order | 1 | -| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:7:186:9 | [VarRef] Foo | semmle.label | 1 | -| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:7:186:9 | [VarRef] Foo | semmle.order | 1 | -| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:11:186:16 | [Label] #count | semmle.label | 2 | -| tst.ts:186:7:186:16 | [DotExpr] Foo.#count | tst.ts:186:11:186:16 | [Label] #count | semmle.order | 2 | -| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | semmle.label | 1 | -| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:7:186:16 | [DotExpr] Foo.#count | semmle.order | 1 | -| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:21:186:21 | [Literal] 3 | semmle.label | 2 | -| tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | tst.ts:186:21:186:21 | [Literal] 3 | semmle.order | 2 | -| tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.label | 1 | -| tst.ts:186:7:186:22 | [ExprStmt] Foo.#count += 3; | tst.ts:186:7:186:21 | [CompoundAssignExpr] Foo.#count += 3 | semmle.order | 1 | -| tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.label | 1 | -| tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | tst.ts:189:7:189:29 | [DeclStmt] var count = ... | semmle.order | 1 | -| tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.label | 1 | -| tst.ts:188:5:190:5 | [ClassInitializedMember] static ... ; } | tst.ts:188:5:190:5 | [BlockStmt] static ... ; } | semmle.order | 1 | -| tst.ts:189:7:189:29 | [DeclStmt] var count = ... | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.label | 1 | -| tst.ts:189:7:189:29 | [DeclStmt] var count = ... | tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | semmle.order | 1 | -| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:11:189:15 | [VarDecl] count | semmle.label | 1 | -| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:11:189:15 | [VarDecl] count | semmle.order | 1 | -| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:19:189:28 | [DotExpr] Foo.#count | semmle.label | 2 | -| tst.ts:189:11:189:28 | [VariableDeclarator] count = Foo.#count | tst.ts:189:19:189:28 | [DotExpr] Foo.#count | semmle.order | 2 | -| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:19:189:21 | [VarRef] Foo | semmle.label | 1 | -| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:19:189:21 | [VarRef] Foo | semmle.order | 1 | -| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:23:189:28 | [Label] #count | semmle.label | 2 | -| tst.ts:189:19:189:28 | [DotExpr] Foo.#count | tst.ts:189:23:189:28 | [Label] #count | semmle.order | 2 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:195:8:195:11 | [VarDecl] TS45 | semmle.label | 1 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:195:8:195:11 | [VarDecl] TS45 | semmle.order | 1 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:197:3:197:36 | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | semmle.label | 2 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:197:3:197:36 | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | semmle.order | 2 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:200:3:200:45 | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | semmle.label | 3 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:200:3:200:45 | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | semmle.order | 3 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:203:3:203:46 | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | semmle.label | 4 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:203:3:203:46 | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | semmle.order | 4 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:205:3:208:3 | [ExportDeclaration] export ... ng; } | semmle.label | 5 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:205:3:208:3 | [ExportDeclaration] export ... ng; } | semmle.order | 5 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:210:3:213:3 | [ExportDeclaration] export ... ng; } | semmle.label | 6 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:210:3:213:3 | [ExportDeclaration] export ... ng; } | semmle.order | 6 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:215:3:220:3 | [ExportDeclaration] export ... } } | semmle.label | 7 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:215:3:220:3 | [ExportDeclaration] export ... } } | semmle.order | 7 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.label | 8 | -| tst.ts:195:1:235:1 | [NamespaceDeclaration] module ... } } } | tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.order | 8 | -| tst.ts:197:3:197:36 | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | tst.ts:197:8:197:8 | [Identifier] A | semmle.label | 1 | -| tst.ts:197:3:197:36 | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | tst.ts:197:8:197:8 | [Identifier] A | semmle.order | 1 | -| tst.ts:197:3:197:36 | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | tst.ts:197:12:197:35 | [GenericTypeExpr] Awaited ... tring>> | semmle.label | 2 | -| tst.ts:197:3:197:36 | [TypeAliasDeclaration,TypeDefinition] type A ... ring>>; | tst.ts:197:12:197:35 | [GenericTypeExpr] Awaited ... tring>> | semmle.order | 2 | -| tst.ts:197:12:197:35 | [GenericTypeExpr] Awaited ... tring>> | tst.ts:197:12:197:18 | [LocalTypeAccess] Awaited | semmle.label | 1 | -| tst.ts:197:12:197:35 | [GenericTypeExpr] Awaited ... tring>> | tst.ts:197:12:197:18 | [LocalTypeAccess] Awaited | semmle.order | 1 | -| tst.ts:197:12:197:35 | [GenericTypeExpr] Awaited ... tring>> | tst.ts:197:20:197:34 | [GenericTypeExpr] Promise | semmle.label | 2 | -| tst.ts:197:12:197:35 | [GenericTypeExpr] Awaited ... tring>> | tst.ts:197:20:197:34 | [GenericTypeExpr] Promise | semmle.order | 2 | -| tst.ts:197:20:197:34 | [GenericTypeExpr] Promise | tst.ts:197:20:197:26 | [LocalTypeAccess] Promise | semmle.label | 1 | -| tst.ts:197:20:197:34 | [GenericTypeExpr] Promise | tst.ts:197:20:197:26 | [LocalTypeAccess] Promise | semmle.order | 1 | -| tst.ts:197:20:197:34 | [GenericTypeExpr] Promise | tst.ts:197:28:197:33 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:197:20:197:34 | [GenericTypeExpr] Promise | tst.ts:197:28:197:33 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:200:3:200:45 | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | tst.ts:200:8:200:8 | [Identifier] B | semmle.label | 1 | -| tst.ts:200:3:200:45 | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | tst.ts:200:8:200:8 | [Identifier] B | semmle.order | 1 | -| tst.ts:200:3:200:45 | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | tst.ts:200:12:200:44 | [GenericTypeExpr] Awaited ... mber>>> | semmle.label | 2 | -| tst.ts:200:3:200:45 | [TypeAliasDeclaration,TypeDefinition] type B ... ber>>>; | tst.ts:200:12:200:44 | [GenericTypeExpr] Awaited ... mber>>> | semmle.order | 2 | -| tst.ts:200:12:200:44 | [GenericTypeExpr] Awaited ... mber>>> | tst.ts:200:12:200:18 | [LocalTypeAccess] Awaited | semmle.label | 1 | -| tst.ts:200:12:200:44 | [GenericTypeExpr] Awaited ... mber>>> | tst.ts:200:12:200:18 | [LocalTypeAccess] Awaited | semmle.order | 1 | -| tst.ts:200:12:200:44 | [GenericTypeExpr] Awaited ... mber>>> | tst.ts:200:20:200:43 | [GenericTypeExpr] Promise ... umber>> | semmle.label | 2 | -| tst.ts:200:12:200:44 | [GenericTypeExpr] Awaited ... mber>>> | tst.ts:200:20:200:43 | [GenericTypeExpr] Promise ... umber>> | semmle.order | 2 | -| tst.ts:200:20:200:43 | [GenericTypeExpr] Promise ... umber>> | tst.ts:200:20:200:26 | [LocalTypeAccess] Promise | semmle.label | 1 | -| tst.ts:200:20:200:43 | [GenericTypeExpr] Promise ... umber>> | tst.ts:200:20:200:26 | [LocalTypeAccess] Promise | semmle.order | 1 | -| tst.ts:200:20:200:43 | [GenericTypeExpr] Promise ... umber>> | tst.ts:200:28:200:42 | [GenericTypeExpr] Promise | semmle.label | 2 | -| tst.ts:200:20:200:43 | [GenericTypeExpr] Promise ... umber>> | tst.ts:200:28:200:42 | [GenericTypeExpr] Promise | semmle.order | 2 | -| tst.ts:200:28:200:42 | [GenericTypeExpr] Promise | tst.ts:200:28:200:34 | [LocalTypeAccess] Promise | semmle.label | 1 | -| tst.ts:200:28:200:42 | [GenericTypeExpr] Promise | tst.ts:200:28:200:34 | [LocalTypeAccess] Promise | semmle.order | 1 | -| tst.ts:200:28:200:42 | [GenericTypeExpr] Promise | tst.ts:200:36:200:41 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:200:28:200:42 | [GenericTypeExpr] Promise | tst.ts:200:36:200:41 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:203:3:203:46 | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | tst.ts:203:8:203:8 | [Identifier] C | semmle.label | 1 | -| tst.ts:203:3:203:46 | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | tst.ts:203:8:203:8 | [Identifier] C | semmle.order | 1 | -| tst.ts:203:3:203:46 | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | tst.ts:203:12:203:45 | [GenericTypeExpr] Awaited ... umber>> | semmle.label | 2 | -| tst.ts:203:3:203:46 | [TypeAliasDeclaration,TypeDefinition] type C ... mber>>; | tst.ts:203:12:203:45 | [GenericTypeExpr] Awaited ... umber>> | semmle.order | 2 | -| tst.ts:203:12:203:45 | [GenericTypeExpr] Awaited ... umber>> | tst.ts:203:12:203:18 | [LocalTypeAccess] Awaited | semmle.label | 1 | -| tst.ts:203:12:203:45 | [GenericTypeExpr] Awaited ... umber>> | tst.ts:203:12:203:18 | [LocalTypeAccess] Awaited | semmle.order | 1 | -| tst.ts:203:12:203:45 | [GenericTypeExpr] Awaited ... umber>> | tst.ts:203:20:203:44 | [UnionTypeExpr] boolean ... number> | semmle.label | 2 | -| tst.ts:203:12:203:45 | [GenericTypeExpr] Awaited ... umber>> | tst.ts:203:20:203:44 | [UnionTypeExpr] boolean ... number> | semmle.order | 2 | -| tst.ts:203:20:203:44 | [UnionTypeExpr] boolean ... number> | tst.ts:203:20:203:26 | [KeywordTypeExpr] boolean | semmle.label | 1 | -| tst.ts:203:20:203:44 | [UnionTypeExpr] boolean ... number> | tst.ts:203:20:203:26 | [KeywordTypeExpr] boolean | semmle.order | 1 | -| tst.ts:203:20:203:44 | [UnionTypeExpr] boolean ... number> | tst.ts:203:30:203:44 | [GenericTypeExpr] Promise | semmle.label | 2 | -| tst.ts:203:20:203:44 | [UnionTypeExpr] boolean ... number> | tst.ts:203:30:203:44 | [GenericTypeExpr] Promise | semmle.order | 2 | -| tst.ts:203:30:203:44 | [GenericTypeExpr] Promise | tst.ts:203:30:203:36 | [LocalTypeAccess] Promise | semmle.label | 1 | -| tst.ts:203:30:203:44 | [GenericTypeExpr] Promise | tst.ts:203:30:203:36 | [LocalTypeAccess] Promise | semmle.order | 1 | -| tst.ts:203:30:203:44 | [GenericTypeExpr] Promise | tst.ts:203:38:203:43 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:203:30:203:44 | [GenericTypeExpr] Promise | tst.ts:203:38:203:43 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:205:3:208:3 | [ExportDeclaration] export ... ng; } | tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | semmle.label | 1 | -| tst.ts:205:3:208:3 | [ExportDeclaration] export ... ng; } | tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | semmle.order | 1 | -| tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:205:20:205:26 | [Identifier] Success | semmle.label | 1 | -| tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:205:20:205:26 | [Identifier] Success | semmle.order | 1 | -| tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:206:5:206:29 | [FieldDeclaration] type: ` ... ccess`; | semmle.label | 2 | -| tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:206:5:206:29 | [FieldDeclaration] type: ` ... ccess`; | semmle.order | 2 | -| tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:207:5:207:17 | [FieldDeclaration] body: string; | semmle.label | 3 | -| tst.ts:205:10:208:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:207:5:207:17 | [FieldDeclaration] body: string; | semmle.order | 3 | -| tst.ts:206:5:206:29 | [FieldDeclaration] type: ` ... ccess`; | tst.ts:206:5:206:8 | [Label] type | semmle.label | 1 | -| tst.ts:206:5:206:29 | [FieldDeclaration] type: ` ... ccess`; | tst.ts:206:5:206:8 | [Label] type | semmle.order | 1 | -| tst.ts:206:5:206:29 | [FieldDeclaration] type: ` ... ccess`; | tst.ts:206:11:206:28 | [TemplateLiteralTypeExpr] `${string}Success` | semmle.label | 2 | -| tst.ts:206:5:206:29 | [FieldDeclaration] type: ` ... ccess`; | tst.ts:206:11:206:28 | [TemplateLiteralTypeExpr] `${string}Success` | semmle.order | 2 | -| tst.ts:206:11:206:28 | [TemplateLiteralTypeExpr] `${string}Success` | tst.ts:206:14:206:19 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:206:11:206:28 | [TemplateLiteralTypeExpr] `${string}Success` | tst.ts:206:14:206:19 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:206:11:206:28 | [TemplateLiteralTypeExpr] `${string}Success` | tst.ts:206:21:206:27 | [LiteralTypeExpr] Success | semmle.label | 2 | -| tst.ts:206:11:206:28 | [TemplateLiteralTypeExpr] `${string}Success` | tst.ts:206:21:206:27 | [LiteralTypeExpr] Success | semmle.order | 2 | -| tst.ts:207:5:207:17 | [FieldDeclaration] body: string; | tst.ts:207:5:207:8 | [Label] body | semmle.label | 1 | -| tst.ts:207:5:207:17 | [FieldDeclaration] body: string; | tst.ts:207:5:207:8 | [Label] body | semmle.order | 1 | -| tst.ts:207:5:207:17 | [FieldDeclaration] body: string; | tst.ts:207:11:207:16 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:207:5:207:17 | [FieldDeclaration] body: string; | tst.ts:207:11:207:16 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:210:3:213:3 | [ExportDeclaration] export ... ng; } | tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | semmle.label | 1 | -| tst.ts:210:3:213:3 | [ExportDeclaration] export ... ng; } | tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | semmle.order | 1 | -| tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:210:20:210:24 | [Identifier] Error | semmle.label | 1 | -| tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:210:20:210:24 | [Identifier] Error | semmle.order | 1 | -| tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:211:7:211:29 | [FieldDeclaration] type: ` ... Error`; | semmle.label | 2 | -| tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:211:7:211:29 | [FieldDeclaration] type: ` ... Error`; | semmle.order | 2 | -| tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:212:7:212:22 | [FieldDeclaration] message: string; | semmle.label | 3 | -| tst.ts:210:10:213:3 | [InterfaceDeclaration,TypeDefinition] interfa ... ng; } | tst.ts:212:7:212:22 | [FieldDeclaration] message: string; | semmle.order | 3 | -| tst.ts:211:7:211:29 | [FieldDeclaration] type: ` ... Error`; | tst.ts:211:7:211:10 | [Label] type | semmle.label | 1 | -| tst.ts:211:7:211:29 | [FieldDeclaration] type: ` ... Error`; | tst.ts:211:7:211:10 | [Label] type | semmle.order | 1 | -| tst.ts:211:7:211:29 | [FieldDeclaration] type: ` ... Error`; | tst.ts:211:13:211:28 | [TemplateLiteralTypeExpr] `${string}Error` | semmle.label | 2 | -| tst.ts:211:7:211:29 | [FieldDeclaration] type: ` ... Error`; | tst.ts:211:13:211:28 | [TemplateLiteralTypeExpr] `${string}Error` | semmle.order | 2 | -| tst.ts:211:13:211:28 | [TemplateLiteralTypeExpr] `${string}Error` | tst.ts:211:16:211:21 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:211:13:211:28 | [TemplateLiteralTypeExpr] `${string}Error` | tst.ts:211:16:211:21 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:211:13:211:28 | [TemplateLiteralTypeExpr] `${string}Error` | tst.ts:211:23:211:27 | [LiteralTypeExpr] Error | semmle.label | 2 | -| tst.ts:211:13:211:28 | [TemplateLiteralTypeExpr] `${string}Error` | tst.ts:211:23:211:27 | [LiteralTypeExpr] Error | semmle.order | 2 | -| tst.ts:212:7:212:22 | [FieldDeclaration] message: string; | tst.ts:212:7:212:13 | [Label] message | semmle.label | 1 | -| tst.ts:212:7:212:22 | [FieldDeclaration] message: string; | tst.ts:212:7:212:13 | [Label] message | semmle.order | 1 | -| tst.ts:212:7:212:22 | [FieldDeclaration] message: string; | tst.ts:212:16:212:21 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:212:7:212:22 | [FieldDeclaration] message: string; | tst.ts:212:16:212:21 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:215:3:220:3 | [ExportDeclaration] export ... } } | tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 1 | -| tst.ts:215:3:220:3 | [ExportDeclaration] export ... } } | tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 1 | -| tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | tst.ts:215:19:215:25 | [VarDecl] handler | semmle.label | 0 | -| tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | tst.ts:215:19:215:25 | [VarDecl] handler | semmle.order | 0 | -| tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | tst.ts:215:47:220:3 | [BlockStmt] { ... } } | semmle.label | 5 | -| tst.ts:215:10:220:3 | [FunctionDeclStmt] functio ... } } | tst.ts:215:47:220:3 | [BlockStmt] { ... } } | semmle.order | 5 | -| tst.ts:215:27:215:27 | [SimpleParameter] r | tst.ts:215:30:215:44 | [UnionTypeExpr] Success \| Error | semmle.label | -2 | -| tst.ts:215:27:215:27 | [SimpleParameter] r | tst.ts:215:30:215:44 | [UnionTypeExpr] Success \| Error | semmle.order | -2 | -| tst.ts:215:30:215:44 | [UnionTypeExpr] Success \| Error | tst.ts:215:30:215:36 | [LocalTypeAccess] Success | semmle.label | 1 | -| tst.ts:215:30:215:44 | [UnionTypeExpr] Success \| Error | tst.ts:215:30:215:36 | [LocalTypeAccess] Success | semmle.order | 1 | -| tst.ts:215:30:215:44 | [UnionTypeExpr] Success \| Error | tst.ts:215:40:215:44 | [LocalTypeAccess] Error | semmle.label | 2 | -| tst.ts:215:30:215:44 | [UnionTypeExpr] Success \| Error | tst.ts:215:40:215:44 | [LocalTypeAccess] Error | semmle.order | 2 | -| tst.ts:215:47:220:3 | [BlockStmt] { ... } } | tst.ts:216:7:219:7 | [IfStmt] if (r.t ... } | semmle.label | 1 | -| tst.ts:215:47:220:3 | [BlockStmt] { ... } } | tst.ts:216:7:219:7 | [IfStmt] if (r.t ... } | semmle.order | 1 | -| tst.ts:216:7:219:7 | [IfStmt] if (r.t ... } | tst.ts:216:11:216:34 | [BinaryExpr] r.type ... uccess" | semmle.label | 1 | -| tst.ts:216:7:219:7 | [IfStmt] if (r.t ... } | tst.ts:216:11:216:34 | [BinaryExpr] r.type ... uccess" | semmle.order | 1 | -| tst.ts:216:7:219:7 | [IfStmt] if (r.t ... } | tst.ts:216:37:219:7 | [BlockStmt] { ... } | semmle.label | 2 | -| tst.ts:216:7:219:7 | [IfStmt] if (r.t ... } | tst.ts:216:37:219:7 | [BlockStmt] { ... } | semmle.order | 2 | -| tst.ts:216:11:216:16 | [DotExpr] r.type | tst.ts:216:11:216:11 | [VarRef] r | semmle.label | 1 | -| tst.ts:216:11:216:16 | [DotExpr] r.type | tst.ts:216:11:216:11 | [VarRef] r | semmle.order | 1 | -| tst.ts:216:11:216:16 | [DotExpr] r.type | tst.ts:216:13:216:16 | [Label] type | semmle.label | 2 | -| tst.ts:216:11:216:16 | [DotExpr] r.type | tst.ts:216:13:216:16 | [Label] type | semmle.order | 2 | -| tst.ts:216:11:216:34 | [BinaryExpr] r.type ... uccess" | tst.ts:216:11:216:16 | [DotExpr] r.type | semmle.label | 1 | -| tst.ts:216:11:216:34 | [BinaryExpr] r.type ... uccess" | tst.ts:216:11:216:16 | [DotExpr] r.type | semmle.order | 1 | -| tst.ts:216:11:216:34 | [BinaryExpr] r.type ... uccess" | tst.ts:216:22:216:34 | [Literal] "HttpSuccess" | semmle.label | 2 | -| tst.ts:216:11:216:34 | [BinaryExpr] r.type ... uccess" | tst.ts:216:22:216:34 | [Literal] "HttpSuccess" | semmle.order | 2 | -| tst.ts:216:37:219:7 | [BlockStmt] { ... } | tst.ts:218:11:218:29 | [DeclStmt] let token = ... | semmle.label | 1 | -| tst.ts:216:37:219:7 | [BlockStmt] { ... } | tst.ts:218:11:218:29 | [DeclStmt] let token = ... | semmle.order | 1 | -| tst.ts:218:11:218:29 | [DeclStmt] let token = ... | tst.ts:218:15:218:28 | [VariableDeclarator] token = r.body | semmle.label | 1 | -| tst.ts:218:11:218:29 | [DeclStmt] let token = ... | tst.ts:218:15:218:28 | [VariableDeclarator] token = r.body | semmle.order | 1 | -| tst.ts:218:15:218:28 | [VariableDeclarator] token = r.body | tst.ts:218:15:218:19 | [VarDecl] token | semmle.label | 1 | -| tst.ts:218:15:218:28 | [VariableDeclarator] token = r.body | tst.ts:218:15:218:19 | [VarDecl] token | semmle.order | 1 | -| tst.ts:218:15:218:28 | [VariableDeclarator] token = r.body | tst.ts:218:23:218:28 | [DotExpr] r.body | semmle.label | 2 | -| tst.ts:218:15:218:28 | [VariableDeclarator] token = r.body | tst.ts:218:23:218:28 | [DotExpr] r.body | semmle.order | 2 | -| tst.ts:218:23:218:28 | [DotExpr] r.body | tst.ts:218:23:218:23 | [VarRef] r | semmle.label | 1 | -| tst.ts:218:23:218:28 | [DotExpr] r.body | tst.ts:218:23:218:23 | [VarRef] r | semmle.order | 1 | -| tst.ts:218:23:218:28 | [DotExpr] r.body | tst.ts:218:25:218:28 | [Label] body | semmle.label | 2 | -| tst.ts:218:23:218:28 | [DotExpr] r.body | tst.ts:218:25:218:28 | [Label] body | semmle.order | 2 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:222:9:222:14 | [VarDecl] Person | semmle.label | 1 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:222:9:222:14 | [VarDecl] Person | semmle.order | 1 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:223:5:223:18 | [FieldDeclaration] #name: string; | semmle.label | 2 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:223:5:223:18 | [FieldDeclaration] #name: string; | semmle.order | 2 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:224:5:226:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.label | 3 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:224:5:226:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.order | 3 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:228:5:233:5 | [ClassInitializedMember,MethodDefinition] equals( ... . } | semmle.label | 4 | -| tst.ts:222:3:234:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:228:5:233:5 | [ClassInitializedMember,MethodDefinition] equals( ... . } | semmle.order | 4 | -| tst.ts:223:5:223:18 | [FieldDeclaration] #name: string; | tst.ts:223:5:223:9 | [Label] #name | semmle.label | 1 | -| tst.ts:223:5:223:18 | [FieldDeclaration] #name: string; | tst.ts:223:5:223:9 | [Label] #name | semmle.order | 1 | -| tst.ts:223:5:223:18 | [FieldDeclaration] #name: string; | tst.ts:223:12:223:17 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:223:5:223:18 | [FieldDeclaration] #name: string; | tst.ts:223:12:223:17 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:224:5:226:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:224:5:226:5 | [FunctionExpr] constru ... ; } | semmle.label | 2 | -| tst.ts:224:5:226:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:224:5:226:5 | [FunctionExpr] constru ... ; } | semmle.order | 2 | -| tst.ts:224:5:226:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:224:5:226:5 | [Label] constructor | semmle.label | 1 | -| tst.ts:224:5:226:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:224:5:226:5 | [Label] constructor | semmle.order | 1 | -| tst.ts:224:5:226:5 | [FunctionExpr] constru ... ; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:224:5:226:5 | [FunctionExpr] constru ... ; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:224:5:226:5 | [FunctionExpr] constru ... ; } | tst.ts:224:31:226:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:224:5:226:5 | [FunctionExpr] constru ... ; } | tst.ts:224:31:226:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:224:17:224:20 | [SimpleParameter] name | tst.ts:224:23:224:28 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:224:17:224:20 | [SimpleParameter] name | tst.ts:224:23:224:28 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:224:31:226:5 | [BlockStmt] { ... ; } | tst.ts:225:9:225:26 | [ExprStmt] this.#name = name; | semmle.label | 1 | -| tst.ts:224:31:226:5 | [BlockStmt] { ... ; } | tst.ts:225:9:225:26 | [ExprStmt] this.#name = name; | semmle.order | 1 | -| tst.ts:225:9:225:18 | [DotExpr] this.#name | tst.ts:225:9:225:12 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:225:9:225:18 | [DotExpr] this.#name | tst.ts:225:9:225:12 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:225:9:225:18 | [DotExpr] this.#name | tst.ts:225:14:225:18 | [Label] #name | semmle.label | 2 | -| tst.ts:225:9:225:18 | [DotExpr] this.#name | tst.ts:225:14:225:18 | [Label] #name | semmle.order | 2 | -| tst.ts:225:9:225:25 | [AssignExpr] this.#name = name | tst.ts:225:9:225:18 | [DotExpr] this.#name | semmle.label | 1 | -| tst.ts:225:9:225:25 | [AssignExpr] this.#name = name | tst.ts:225:9:225:18 | [DotExpr] this.#name | semmle.order | 1 | -| tst.ts:225:9:225:25 | [AssignExpr] this.#name = name | tst.ts:225:22:225:25 | [VarRef] name | semmle.label | 2 | -| tst.ts:225:9:225:25 | [AssignExpr] this.#name = name | tst.ts:225:22:225:25 | [VarRef] name | semmle.order | 2 | -| tst.ts:225:9:225:26 | [ExprStmt] this.#name = name; | tst.ts:225:9:225:25 | [AssignExpr] this.#name = name | semmle.label | 1 | -| tst.ts:225:9:225:26 | [ExprStmt] this.#name = name; | tst.ts:225:9:225:25 | [AssignExpr] this.#name = name | semmle.order | 1 | -| tst.ts:228:5:233:5 | [ClassInitializedMember,MethodDefinition] equals( ... . } | tst.ts:228:5:228:10 | [Label] equals | semmle.label | 1 | -| tst.ts:228:5:233:5 | [ClassInitializedMember,MethodDefinition] equals( ... . } | tst.ts:228:5:228:10 | [Label] equals | semmle.order | 1 | -| tst.ts:228:5:233:5 | [ClassInitializedMember,MethodDefinition] equals( ... . } | tst.ts:228:5:233:5 | [FunctionExpr] equals( ... . } | semmle.label | 2 | -| tst.ts:228:5:233:5 | [ClassInitializedMember,MethodDefinition] equals( ... . } | tst.ts:228:5:233:5 | [FunctionExpr] equals( ... . } | semmle.order | 2 | -| tst.ts:228:5:233:5 | [FunctionExpr] equals( ... . } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:228:5:233:5 | [FunctionExpr] equals( ... . } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:228:5:233:5 | [FunctionExpr] equals( ... . } | tst.ts:228:28:233:5 | [BlockStmt] { ... . } | semmle.label | 5 | -| tst.ts:228:5:233:5 | [FunctionExpr] equals( ... . } | tst.ts:228:28:233:5 | [BlockStmt] { ... . } | semmle.order | 5 | -| tst.ts:228:12:228:16 | [SimpleParameter] other | tst.ts:228:19:228:25 | [KeywordTypeExpr] unknown | semmle.label | -2 | -| tst.ts:228:12:228:16 | [SimpleParameter] other | tst.ts:228:19:228:25 | [KeywordTypeExpr] unknown | semmle.order | -2 | -| tst.ts:228:28:233:5 | [BlockStmt] { ... . } | tst.ts:229:9:232:39 | [ReturnStmt] return ... .#name; | semmle.label | 1 | -| tst.ts:228:28:233:5 | [BlockStmt] { ... . } | tst.ts:229:9:232:39 | [ReturnStmt] return ... .#name; | semmle.order | 1 | -| tst.ts:229:9:232:39 | [ReturnStmt] return ... .#name; | tst.ts:229:16:232:38 | [BinaryExpr] other & ... r.#name | semmle.label | 1 | -| tst.ts:229:9:232:39 | [ReturnStmt] return ... .#name; | tst.ts:229:16:232:38 | [BinaryExpr] other & ... r.#name | semmle.order | 1 | -| tst.ts:229:16:230:37 | [BinaryExpr] other & ... object" | tst.ts:229:16:229:20 | [VarRef] other | semmle.label | 1 | -| tst.ts:229:16:230:37 | [BinaryExpr] other & ... object" | tst.ts:229:16:229:20 | [VarRef] other | semmle.order | 1 | -| tst.ts:229:16:230:37 | [BinaryExpr] other & ... object" | tst.ts:230:13:230:37 | [BinaryExpr] typeof ... object" | semmle.label | 2 | -| tst.ts:229:16:230:37 | [BinaryExpr] other & ... object" | tst.ts:230:13:230:37 | [BinaryExpr] typeof ... object" | semmle.order | 2 | -| tst.ts:229:16:231:26 | [BinaryExpr] other & ... n other | tst.ts:229:16:230:37 | [BinaryExpr] other & ... object" | semmle.label | 1 | -| tst.ts:229:16:231:26 | [BinaryExpr] other & ... n other | tst.ts:229:16:230:37 | [BinaryExpr] other & ... object" | semmle.order | 1 | -| tst.ts:229:16:231:26 | [BinaryExpr] other & ... n other | tst.ts:231:13:231:26 | [BinaryExpr] #name in other | semmle.label | 2 | -| tst.ts:229:16:231:26 | [BinaryExpr] other & ... n other | tst.ts:231:13:231:26 | [BinaryExpr] #name in other | semmle.order | 2 | -| tst.ts:229:16:232:38 | [BinaryExpr] other & ... r.#name | tst.ts:229:16:231:26 | [BinaryExpr] other & ... n other | semmle.label | 1 | -| tst.ts:229:16:232:38 | [BinaryExpr] other & ... r.#name | tst.ts:229:16:231:26 | [BinaryExpr] other & ... n other | semmle.order | 1 | -| tst.ts:229:16:232:38 | [BinaryExpr] other & ... r.#name | tst.ts:232:13:232:38 | [BinaryExpr] this.#n ... r.#name | semmle.label | 2 | -| tst.ts:229:16:232:38 | [BinaryExpr] other & ... r.#name | tst.ts:232:13:232:38 | [BinaryExpr] this.#n ... r.#name | semmle.order | 2 | -| tst.ts:230:13:230:24 | [UnaryExpr] typeof other | tst.ts:230:20:230:24 | [VarRef] other | semmle.label | 1 | -| tst.ts:230:13:230:24 | [UnaryExpr] typeof other | tst.ts:230:20:230:24 | [VarRef] other | semmle.order | 1 | -| tst.ts:230:13:230:37 | [BinaryExpr] typeof ... object" | tst.ts:230:13:230:24 | [UnaryExpr] typeof other | semmle.label | 1 | -| tst.ts:230:13:230:37 | [BinaryExpr] typeof ... object" | tst.ts:230:13:230:24 | [UnaryExpr] typeof other | semmle.order | 1 | -| tst.ts:230:13:230:37 | [BinaryExpr] typeof ... object" | tst.ts:230:30:230:37 | [Literal] "object" | semmle.label | 2 | -| tst.ts:230:13:230:37 | [BinaryExpr] typeof ... object" | tst.ts:230:30:230:37 | [Literal] "object" | semmle.order | 2 | -| tst.ts:231:13:231:26 | [BinaryExpr] #name in other | tst.ts:231:13:231:17 | [Label] #name | semmle.label | 1 | -| tst.ts:231:13:231:26 | [BinaryExpr] #name in other | tst.ts:231:13:231:17 | [Label] #name | semmle.order | 1 | -| tst.ts:231:13:231:26 | [BinaryExpr] #name in other | tst.ts:231:22:231:26 | [VarRef] other | semmle.label | 2 | -| tst.ts:231:13:231:26 | [BinaryExpr] #name in other | tst.ts:231:22:231:26 | [VarRef] other | semmle.order | 2 | -| tst.ts:232:13:232:22 | [DotExpr] this.#name | tst.ts:232:13:232:16 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:232:13:232:22 | [DotExpr] this.#name | tst.ts:232:13:232:16 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:232:13:232:22 | [DotExpr] this.#name | tst.ts:232:18:232:22 | [Label] #name | semmle.label | 2 | -| tst.ts:232:13:232:22 | [DotExpr] this.#name | tst.ts:232:18:232:22 | [Label] #name | semmle.order | 2 | -| tst.ts:232:13:232:38 | [BinaryExpr] this.#n ... r.#name | tst.ts:232:13:232:22 | [DotExpr] this.#name | semmle.label | 1 | -| tst.ts:232:13:232:38 | [BinaryExpr] this.#n ... r.#name | tst.ts:232:13:232:22 | [DotExpr] this.#name | semmle.order | 1 | -| tst.ts:232:13:232:38 | [BinaryExpr] this.#n ... r.#name | tst.ts:232:28:232:38 | [DotExpr] other.#name | semmle.label | 2 | -| tst.ts:232:13:232:38 | [BinaryExpr] this.#n ... r.#name | tst.ts:232:28:232:38 | [DotExpr] other.#name | semmle.order | 2 | -| tst.ts:232:28:232:38 | [DotExpr] other.#name | tst.ts:232:28:232:32 | [VarRef] other | semmle.label | 1 | -| tst.ts:232:28:232:38 | [DotExpr] other.#name | tst.ts:232:28:232:32 | [VarRef] other | semmle.order | 1 | -| tst.ts:232:28:232:38 | [DotExpr] other.#name | tst.ts:232:34:232:38 | [Label] #name | semmle.label | 2 | -| tst.ts:232:28:232:38 | [DotExpr] other.#name | tst.ts:232:34:232:38 | [Label] #name | semmle.order | 2 | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | tst.ts:237:8:237:16 | [ImportSpecifier] * as Foo3 | semmle.label | 1 | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | tst.ts:237:8:237:16 | [ImportSpecifier] * as Foo3 | semmle.order | 1 | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | tst.ts:237:23:237:40 | [Literal] "./something.json" | semmle.label | 2 | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | tst.ts:237:23:237:40 | [Literal] "./something.json" | semmle.order | 2 | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | tst.ts:237:47:237:62 | [ObjectExpr] { type: "json" } | semmle.label | 3 | -| tst.ts:237:1:237:63 | [ImportDeclaration] import ... son" }; | tst.ts:237:47:237:62 | [ObjectExpr] { type: "json" } | semmle.order | 3 | -| tst.ts:237:8:237:16 | [ImportSpecifier] * as Foo3 | tst.ts:237:13:237:16 | [VarDecl] Foo3 | semmle.label | 1 | -| tst.ts:237:8:237:16 | [ImportSpecifier] * as Foo3 | tst.ts:237:13:237:16 | [VarDecl] Foo3 | semmle.order | 1 | -| tst.ts:237:47:237:62 | [ObjectExpr] { type: "json" } | tst.ts:237:49:237:60 | [Property] type: "json" | semmle.label | 1 | -| tst.ts:237:47:237:62 | [ObjectExpr] { type: "json" } | tst.ts:237:49:237:60 | [Property] type: "json" | semmle.order | 1 | -| tst.ts:238:1:238:19 | [DeclStmt] var foo = ... | tst.ts:238:5:238:18 | [VariableDeclarator] foo = Foo3.foo | semmle.label | 1 | -| tst.ts:238:1:238:19 | [DeclStmt] var foo = ... | tst.ts:238:5:238:18 | [VariableDeclarator] foo = Foo3.foo | semmle.order | 1 | -| tst.ts:238:5:238:18 | [VariableDeclarator] foo = Foo3.foo | tst.ts:238:5:238:7 | [VarDecl] foo | semmle.label | 1 | -| tst.ts:238:5:238:18 | [VariableDeclarator] foo = Foo3.foo | tst.ts:238:5:238:7 | [VarDecl] foo | semmle.order | 1 | -| tst.ts:238:5:238:18 | [VariableDeclarator] foo = Foo3.foo | tst.ts:238:11:238:18 | [DotExpr] Foo3.foo | semmle.label | 2 | -| tst.ts:238:5:238:18 | [VariableDeclarator] foo = Foo3.foo | tst.ts:238:11:238:18 | [DotExpr] Foo3.foo | semmle.order | 2 | -| tst.ts:238:11:238:18 | [DotExpr] Foo3.foo | tst.ts:238:11:238:14 | [VarRef] Foo3 | semmle.label | 1 | -| tst.ts:238:11:238:18 | [DotExpr] Foo3.foo | tst.ts:238:11:238:14 | [VarRef] Foo3 | semmle.order | 1 | -| tst.ts:238:11:238:18 | [DotExpr] Foo3.foo | tst.ts:238:16:238:18 | [Label] foo | semmle.label | 2 | -| tst.ts:238:11:238:18 | [DotExpr] Foo3.foo | tst.ts:238:16:238:18 | [Label] foo | semmle.order | 2 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:240:8:240:11 | [VarDecl] TS46 | semmle.label | 1 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:240:8:240:11 | [VarDecl] TS46 | semmle.order | 1 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:241:3:241:15 | [ClassDefinition,TypeDefinition] class Base {} | semmle.label | 2 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:241:3:241:15 | [ClassDefinition,TypeDefinition] class Base {} | semmle.order | 2 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | semmle.label | 3 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | semmle.order | 3 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:252:3:254:50 | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | semmle.label | 4 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:252:3:254:50 | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | semmle.order | 4 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 5 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 5 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | semmle.label | 6 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | semmle.order | 6 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | semmle.label | 7 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | semmle.order | 7 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | semmle.label | 8 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | semmle.order | 8 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:282:3:287:5 | [ExprStmt] process ... , }); | semmle.label | 9 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:282:3:287:5 | [ExprStmt] process ... , }); | semmle.order | 9 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:289:3:289:63 | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | semmle.label | 10 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:289:3:289:63 | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | semmle.order | 10 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:291:3:295:4 | [DeclStmt] const f1 = ... | semmle.label | 11 | -| tst.ts:240:1:296:1 | [NamespaceDeclaration] module ... }; } | tst.ts:291:3:295:4 | [DeclStmt] const f1 = ... | semmle.order | 11 | -| tst.ts:241:3:241:15 | [ClassDefinition,TypeDefinition] class Base {} | tst.ts:241:9:241:12 | [VarDecl] Base | semmle.label | 1 | -| tst.ts:241:3:241:15 | [ClassDefinition,TypeDefinition] class Base {} | tst.ts:241:9:241:12 | [VarDecl] Base | semmle.order | 1 | -| tst.ts:241:3:241:15 | [ClassDefinition,TypeDefinition] class Base {} | tst.ts:241:14:241:13 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| tst.ts:241:3:241:15 | [ClassDefinition,TypeDefinition] class Base {} | tst.ts:241:14:241:13 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| tst.ts:241:14:241:13 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:241:14:241:13 | [FunctionExpr] () {} | semmle.label | 2 | -| tst.ts:241:14:241:13 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:241:14:241:13 | [FunctionExpr] () {} | semmle.order | 2 | -| tst.ts:241:14:241:13 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:241:14:241:13 | [Label] constructor | semmle.label | 1 | -| tst.ts:241:14:241:13 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:241:14:241:13 | [Label] constructor | semmle.order | 1 | -| tst.ts:241:14:241:13 | [FunctionExpr] () {} | tst.ts:241:14:241:13 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:241:14:241:13 | [FunctionExpr] () {} | tst.ts:241:14:241:13 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:243:9:243:15 | [VarDecl] Derived | semmle.label | 1 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:243:9:243:15 | [VarDecl] Derived | semmle.order | 1 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:243:25:243:28 | [VarRef] Base | semmle.label | 2 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:243:25:243:28 | [VarRef] Base | semmle.order | 2 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:244:5:244:18 | [FieldDeclaration] myProp = true; | semmle.label | 3 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:244:5:244:18 | [FieldDeclaration] myProp = true; | semmle.order | 3 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:246:5:249:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.label | 4 | -| tst.ts:243:3:250:3 | [ClassDefinition,TypeDefinition] class D ... } } | tst.ts:246:5:249:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.order | 4 | -| tst.ts:244:5:244:18 | [FieldDeclaration] myProp = true; | tst.ts:244:5:244:10 | [Label] myProp | semmle.label | 1 | -| tst.ts:244:5:244:18 | [FieldDeclaration] myProp = true; | tst.ts:244:5:244:10 | [Label] myProp | semmle.order | 1 | -| tst.ts:244:5:244:18 | [FieldDeclaration] myProp = true; | tst.ts:244:14:244:17 | [Literal] true | semmle.label | 2 | -| tst.ts:244:5:244:18 | [FieldDeclaration] myProp = true; | tst.ts:244:14:244:17 | [Literal] true | semmle.order | 2 | -| tst.ts:246:5:249:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:246:5:249:5 | [FunctionExpr] constru ... ; } | semmle.label | 2 | -| tst.ts:246:5:249:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:246:5:249:5 | [FunctionExpr] constru ... ; } | semmle.order | 2 | -| tst.ts:246:5:249:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:246:5:249:5 | [Label] constructor | semmle.label | 1 | -| tst.ts:246:5:249:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:246:5:249:5 | [Label] constructor | semmle.order | 1 | -| tst.ts:246:5:249:5 | [FunctionExpr] constru ... ; } | tst.ts:246:19:249:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:246:5:249:5 | [FunctionExpr] constru ... ; } | tst.ts:246:19:249:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:246:19:249:5 | [BlockStmt] { ... ; } | tst.ts:247:7:247:52 | [ExprStmt] console ... er()"); | semmle.label | 1 | -| tst.ts:246:19:249:5 | [BlockStmt] { ... ; } | tst.ts:247:7:247:52 | [ExprStmt] console ... er()"); | semmle.order | 1 | -| tst.ts:246:19:249:5 | [BlockStmt] { ... ; } | tst.ts:248:7:248:14 | [ExprStmt] super(); | semmle.label | 2 | -| tst.ts:246:19:249:5 | [BlockStmt] { ... ; } | tst.ts:248:7:248:14 | [ExprStmt] super(); | semmle.order | 2 | -| tst.ts:247:7:247:17 | [DotExpr] console.log | tst.ts:247:7:247:13 | [VarRef] console | semmle.label | 1 | -| tst.ts:247:7:247:17 | [DotExpr] console.log | tst.ts:247:7:247:13 | [VarRef] console | semmle.order | 1 | -| tst.ts:247:7:247:17 | [DotExpr] console.log | tst.ts:247:15:247:17 | [Label] log | semmle.label | 2 | -| tst.ts:247:7:247:17 | [DotExpr] console.log | tst.ts:247:15:247:17 | [Label] log | semmle.order | 2 | -| tst.ts:247:7:247:51 | [MethodCallExpr] console ... per()") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:247:7:247:51 | [MethodCallExpr] console ... per()") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:247:7:247:51 | [MethodCallExpr] console ... per()") | tst.ts:247:7:247:17 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:247:7:247:51 | [MethodCallExpr] console ... per()") | tst.ts:247:7:247:17 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:247:7:247:52 | [ExprStmt] console ... er()"); | tst.ts:247:7:247:51 | [MethodCallExpr] console ... per()") | semmle.label | 1 | -| tst.ts:247:7:247:52 | [ExprStmt] console ... er()"); | tst.ts:247:7:247:51 | [MethodCallExpr] console ... per()") | semmle.order | 1 | -| tst.ts:248:7:248:13 | [CallExpr] super() | tst.ts:248:7:248:11 | [SuperExpr] super | semmle.label | 0 | -| tst.ts:248:7:248:13 | [CallExpr] super() | tst.ts:248:7:248:11 | [SuperExpr] super | semmle.order | 0 | -| tst.ts:248:7:248:14 | [ExprStmt] super(); | tst.ts:248:7:248:13 | [CallExpr] super() | semmle.label | 1 | -| tst.ts:248:7:248:14 | [ExprStmt] super(); | tst.ts:248:7:248:13 | [CallExpr] super() | semmle.order | 1 | -| tst.ts:252:3:254:50 | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | tst.ts:252:8:252:13 | [Identifier] Action | semmle.label | 1 | -| tst.ts:252:3:254:50 | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | tst.ts:252:8:252:13 | [Identifier] Action | semmle.order | 1 | -| tst.ts:252:3:254:50 | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | tst.ts:253:5:254:49 | [UnionTypeExpr] \| { kin ... tring } | semmle.label | 2 | -| tst.ts:252:3:254:50 | [TypeAliasDeclaration,TypeDefinition] type Ac ... ring }; | tst.ts:253:5:254:49 | [UnionTypeExpr] \| { kin ... tring } | semmle.order | 2 | -| tst.ts:253:5:254:49 | [UnionTypeExpr] \| { kin ... tring } | tst.ts:253:7:253:49 | [InterfaceTypeExpr] { kind: ... umber } | semmle.label | 1 | -| tst.ts:253:5:254:49 | [UnionTypeExpr] \| { kin ... tring } | tst.ts:253:7:253:49 | [InterfaceTypeExpr] { kind: ... umber } | semmle.order | 1 | -| tst.ts:253:5:254:49 | [UnionTypeExpr] \| { kin ... tring } | tst.ts:254:7:254:49 | [InterfaceTypeExpr] { kind: ... tring } | semmle.label | 2 | -| tst.ts:253:5:254:49 | [UnionTypeExpr] \| { kin ... tring } | tst.ts:254:7:254:49 | [InterfaceTypeExpr] { kind: ... tring } | semmle.order | 2 | -| tst.ts:253:7:253:49 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:253:9:253:31 | [FieldDeclaration] kind: " ... tents"; | semmle.label | 1 | -| tst.ts:253:7:253:49 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:253:9:253:31 | [FieldDeclaration] kind: " ... tents"; | semmle.order | 1 | -| tst.ts:253:7:253:49 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:253:33:253:47 | [FieldDeclaration] payload: number | semmle.label | 2 | -| tst.ts:253:7:253:49 | [InterfaceTypeExpr] { kind: ... umber } | tst.ts:253:33:253:47 | [FieldDeclaration] payload: number | semmle.order | 2 | -| tst.ts:253:9:253:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:253:9:253:12 | [Label] kind | semmle.label | 1 | -| tst.ts:253:9:253:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:253:9:253:12 | [Label] kind | semmle.order | 1 | -| tst.ts:253:9:253:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:253:15:253:30 | [LiteralTypeExpr] "NumberContents" | semmle.label | 2 | -| tst.ts:253:9:253:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:253:15:253:30 | [LiteralTypeExpr] "NumberContents" | semmle.order | 2 | -| tst.ts:253:33:253:47 | [FieldDeclaration] payload: number | tst.ts:253:33:253:39 | [Label] payload | semmle.label | 1 | -| tst.ts:253:33:253:47 | [FieldDeclaration] payload: number | tst.ts:253:33:253:39 | [Label] payload | semmle.order | 1 | -| tst.ts:253:33:253:47 | [FieldDeclaration] payload: number | tst.ts:253:42:253:47 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:253:33:253:47 | [FieldDeclaration] payload: number | tst.ts:253:42:253:47 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:254:7:254:49 | [InterfaceTypeExpr] { kind: ... tring } | tst.ts:254:9:254:31 | [FieldDeclaration] kind: " ... tents"; | semmle.label | 1 | -| tst.ts:254:7:254:49 | [InterfaceTypeExpr] { kind: ... tring } | tst.ts:254:9:254:31 | [FieldDeclaration] kind: " ... tents"; | semmle.order | 1 | -| tst.ts:254:7:254:49 | [InterfaceTypeExpr] { kind: ... tring } | tst.ts:254:33:254:47 | [FieldDeclaration] payload: string | semmle.label | 2 | -| tst.ts:254:7:254:49 | [InterfaceTypeExpr] { kind: ... tring } | tst.ts:254:33:254:47 | [FieldDeclaration] payload: string | semmle.order | 2 | -| tst.ts:254:9:254:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:254:9:254:12 | [Label] kind | semmle.label | 1 | -| tst.ts:254:9:254:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:254:9:254:12 | [Label] kind | semmle.order | 1 | -| tst.ts:254:9:254:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:254:15:254:30 | [LiteralTypeExpr] "StringContents" | semmle.label | 2 | -| tst.ts:254:9:254:31 | [FieldDeclaration] kind: " ... tents"; | tst.ts:254:15:254:30 | [LiteralTypeExpr] "StringContents" | semmle.order | 2 | -| tst.ts:254:33:254:47 | [FieldDeclaration] payload: string | tst.ts:254:33:254:39 | [Label] payload | semmle.label | 1 | -| tst.ts:254:33:254:47 | [FieldDeclaration] payload: string | tst.ts:254:33:254:39 | [Label] payload | semmle.order | 1 | -| tst.ts:254:33:254:47 | [FieldDeclaration] payload: string | tst.ts:254:42:254:47 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:254:33:254:47 | [FieldDeclaration] payload: string | tst.ts:254:42:254:47 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | tst.ts:256:12:256:24 | [VarDecl] processAction | semmle.label | 0 | -| tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | tst.ts:256:12:256:24 | [VarDecl] processAction | semmle.order | 0 | -| tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | tst.ts:256:42:263:3 | [BlockStmt] { c ... } } | semmle.label | 5 | -| tst.ts:256:3:263:3 | [FunctionDeclStmt] functio ... } } | tst.ts:256:42:263:3 | [BlockStmt] { c ... } } | semmle.order | 5 | -| tst.ts:256:26:256:31 | [SimpleParameter] action | tst.ts:256:34:256:39 | [LocalTypeAccess] Action | semmle.label | -2 | -| tst.ts:256:26:256:31 | [SimpleParameter] action | tst.ts:256:34:256:39 | [LocalTypeAccess] Action | semmle.order | -2 | -| tst.ts:256:42:263:3 | [BlockStmt] { c ... } } | tst.ts:257:5:257:37 | [DeclStmt] const { ... action; | semmle.label | 1 | -| tst.ts:256:42:263:3 | [BlockStmt] { c ... } } | tst.ts:257:5:257:37 | [DeclStmt] const { ... action; | semmle.order | 1 | -| tst.ts:256:42:263:3 | [BlockStmt] { c ... } } | tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | semmle.label | 2 | -| tst.ts:256:42:263:3 | [BlockStmt] { c ... } } | tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | semmle.order | 2 | -| tst.ts:257:5:257:37 | [DeclStmt] const { ... action; | tst.ts:257:11:257:36 | [VariableDeclarator] { kind, ... action | semmle.label | 1 | -| tst.ts:257:5:257:37 | [DeclStmt] const { ... action; | tst.ts:257:11:257:36 | [VariableDeclarator] { kind, ... action | semmle.order | 1 | -| tst.ts:257:11:257:27 | [ObjectPattern] { kind, payload } | tst.ts:257:13:257:16 | [PropertyPattern] kind | semmle.label | 1 | -| tst.ts:257:11:257:27 | [ObjectPattern] { kind, payload } | tst.ts:257:13:257:16 | [PropertyPattern] kind | semmle.order | 1 | -| tst.ts:257:11:257:27 | [ObjectPattern] { kind, payload } | tst.ts:257:19:257:25 | [PropertyPattern] payload | semmle.label | 2 | -| tst.ts:257:11:257:27 | [ObjectPattern] { kind, payload } | tst.ts:257:19:257:25 | [PropertyPattern] payload | semmle.order | 2 | -| tst.ts:257:11:257:36 | [VariableDeclarator] { kind, ... action | tst.ts:257:11:257:27 | [ObjectPattern] { kind, payload } | semmle.label | 1 | -| tst.ts:257:11:257:36 | [VariableDeclarator] { kind, ... action | tst.ts:257:11:257:27 | [ObjectPattern] { kind, payload } | semmle.order | 1 | -| tst.ts:257:11:257:36 | [VariableDeclarator] { kind, ... action | tst.ts:257:31:257:36 | [VarRef] action | semmle.label | 2 | -| tst.ts:257:11:257:36 | [VariableDeclarator] { kind, ... action | tst.ts:257:31:257:36 | [VarRef] action | semmle.order | 2 | -| tst.ts:257:13:257:16 | [PropertyPattern] kind | tst.ts:257:13:257:16 | [Label] kind | semmle.label | 1 | -| tst.ts:257:13:257:16 | [PropertyPattern] kind | tst.ts:257:13:257:16 | [Label] kind | semmle.order | 1 | -| tst.ts:257:13:257:16 | [PropertyPattern] kind | tst.ts:257:13:257:16 | [VarDecl] kind | semmle.label | 2 | -| tst.ts:257:13:257:16 | [PropertyPattern] kind | tst.ts:257:13:257:16 | [VarDecl] kind | semmle.order | 2 | -| tst.ts:257:19:257:25 | [PropertyPattern] payload | tst.ts:257:19:257:25 | [Label] payload | semmle.label | 1 | -| tst.ts:257:19:257:25 | [PropertyPattern] payload | tst.ts:257:19:257:25 | [Label] payload | semmle.order | 1 | -| tst.ts:257:19:257:25 | [PropertyPattern] payload | tst.ts:257:19:257:25 | [VarDecl] payload | semmle.label | 2 | -| tst.ts:257:19:257:25 | [PropertyPattern] payload | tst.ts:257:19:257:25 | [VarDecl] payload | semmle.order | 2 | -| tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | tst.ts:258:9:258:33 | [BinaryExpr] kind == ... ntents" | semmle.label | 1 | -| tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | tst.ts:258:9:258:33 | [BinaryExpr] kind == ... ntents" | semmle.order | 1 | -| tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | tst.ts:258:36:260:5 | [BlockStmt] { ... r } | semmle.label | 2 | -| tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | tst.ts:258:36:260:5 | [BlockStmt] { ... r } | semmle.order | 2 | -| tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | tst.ts:260:12:262:5 | [IfStmt] if (kin ... g } | semmle.label | 3 | -| tst.ts:258:5:262:5 | [IfStmt] if (kin ... g } | tst.ts:260:12:262:5 | [IfStmt] if (kin ... g } | semmle.order | 3 | -| tst.ts:258:9:258:33 | [BinaryExpr] kind == ... ntents" | tst.ts:258:9:258:12 | [VarRef] kind | semmle.label | 1 | -| tst.ts:258:9:258:33 | [BinaryExpr] kind == ... ntents" | tst.ts:258:9:258:12 | [VarRef] kind | semmle.order | 1 | -| tst.ts:258:9:258:33 | [BinaryExpr] kind == ... ntents" | tst.ts:258:18:258:33 | [Literal] "NumberContents" | semmle.label | 2 | -| tst.ts:258:9:258:33 | [BinaryExpr] kind == ... ntents" | tst.ts:258:18:258:33 | [Literal] "NumberContents" | semmle.order | 2 | -| tst.ts:258:36:260:5 | [BlockStmt] { ... r } | tst.ts:259:7:259:37 | [ExprStmt] console ... xed()); | semmle.label | 1 | -| tst.ts:258:36:260:5 | [BlockStmt] { ... r } | tst.ts:259:7:259:37 | [ExprStmt] console ... xed()); | semmle.order | 1 | -| tst.ts:259:7:259:17 | [DotExpr] console.log | tst.ts:259:7:259:13 | [VarRef] console | semmle.label | 1 | -| tst.ts:259:7:259:17 | [DotExpr] console.log | tst.ts:259:7:259:13 | [VarRef] console | semmle.order | 1 | -| tst.ts:259:7:259:17 | [DotExpr] console.log | tst.ts:259:15:259:17 | [Label] log | semmle.label | 2 | -| tst.ts:259:7:259:17 | [DotExpr] console.log | tst.ts:259:15:259:17 | [Label] log | semmle.order | 2 | -| tst.ts:259:7:259:36 | [MethodCallExpr] console ... ixed()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:259:7:259:36 | [MethodCallExpr] console ... ixed()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:259:7:259:36 | [MethodCallExpr] console ... ixed()) | tst.ts:259:7:259:17 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:259:7:259:36 | [MethodCallExpr] console ... ixed()) | tst.ts:259:7:259:17 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:259:7:259:37 | [ExprStmt] console ... xed()); | tst.ts:259:7:259:36 | [MethodCallExpr] console ... ixed()) | semmle.label | 1 | -| tst.ts:259:7:259:37 | [ExprStmt] console ... xed()); | tst.ts:259:7:259:36 | [MethodCallExpr] console ... ixed()) | semmle.order | 1 | -| tst.ts:259:19:259:33 | [DotExpr] payload.toFixed | tst.ts:259:19:259:25 | [VarRef] payload | semmle.label | 1 | -| tst.ts:259:19:259:33 | [DotExpr] payload.toFixed | tst.ts:259:19:259:25 | [VarRef] payload | semmle.order | 1 | -| tst.ts:259:19:259:33 | [DotExpr] payload.toFixed | tst.ts:259:27:259:33 | [Label] toFixed | semmle.label | 2 | -| tst.ts:259:19:259:33 | [DotExpr] payload.toFixed | tst.ts:259:27:259:33 | [Label] toFixed | semmle.order | 2 | -| tst.ts:259:19:259:35 | [MethodCallExpr] payload.toFixed() | tst.ts:259:19:259:33 | [DotExpr] payload.toFixed | semmle.label | 0 | -| tst.ts:259:19:259:35 | [MethodCallExpr] payload.toFixed() | tst.ts:259:19:259:33 | [DotExpr] payload.toFixed | semmle.order | 0 | -| tst.ts:260:12:262:5 | [IfStmt] if (kin ... g } | tst.ts:260:16:260:40 | [BinaryExpr] kind == ... ntents" | semmle.label | 1 | -| tst.ts:260:12:262:5 | [IfStmt] if (kin ... g } | tst.ts:260:16:260:40 | [BinaryExpr] kind == ... ntents" | semmle.order | 1 | -| tst.ts:260:12:262:5 | [IfStmt] if (kin ... g } | tst.ts:260:43:262:5 | [BlockStmt] { ... g } | semmle.label | 2 | -| tst.ts:260:12:262:5 | [IfStmt] if (kin ... g } | tst.ts:260:43:262:5 | [BlockStmt] { ... g } | semmle.order | 2 | -| tst.ts:260:16:260:40 | [BinaryExpr] kind == ... ntents" | tst.ts:260:16:260:19 | [VarRef] kind | semmle.label | 1 | -| tst.ts:260:16:260:40 | [BinaryExpr] kind == ... ntents" | tst.ts:260:16:260:19 | [VarRef] kind | semmle.order | 1 | -| tst.ts:260:16:260:40 | [BinaryExpr] kind == ... ntents" | tst.ts:260:25:260:40 | [Literal] "StringContents" | semmle.label | 2 | -| tst.ts:260:16:260:40 | [BinaryExpr] kind == ... ntents" | tst.ts:260:25:260:40 | [Literal] "StringContents" | semmle.order | 2 | -| tst.ts:260:43:262:5 | [BlockStmt] { ... g } | tst.ts:261:7:261:41 | [ExprStmt] console ... ase()); | semmle.label | 1 | -| tst.ts:260:43:262:5 | [BlockStmt] { ... g } | tst.ts:261:7:261:41 | [ExprStmt] console ... ase()); | semmle.order | 1 | -| tst.ts:261:7:261:17 | [DotExpr] console.log | tst.ts:261:7:261:13 | [VarRef] console | semmle.label | 1 | -| tst.ts:261:7:261:17 | [DotExpr] console.log | tst.ts:261:7:261:13 | [VarRef] console | semmle.order | 1 | -| tst.ts:261:7:261:17 | [DotExpr] console.log | tst.ts:261:15:261:17 | [Label] log | semmle.label | 2 | -| tst.ts:261:7:261:17 | [DotExpr] console.log | tst.ts:261:15:261:17 | [Label] log | semmle.order | 2 | -| tst.ts:261:7:261:40 | [MethodCallExpr] console ... Case()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:261:7:261:40 | [MethodCallExpr] console ... Case()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:261:7:261:40 | [MethodCallExpr] console ... Case()) | tst.ts:261:7:261:17 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:261:7:261:40 | [MethodCallExpr] console ... Case()) | tst.ts:261:7:261:17 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:261:7:261:41 | [ExprStmt] console ... ase()); | tst.ts:261:7:261:40 | [MethodCallExpr] console ... Case()) | semmle.label | 1 | -| tst.ts:261:7:261:41 | [ExprStmt] console ... ase()); | tst.ts:261:7:261:40 | [MethodCallExpr] console ... Case()) | semmle.order | 1 | -| tst.ts:261:19:261:37 | [DotExpr] payload.toLowerCase | tst.ts:261:19:261:25 | [VarRef] payload | semmle.label | 1 | -| tst.ts:261:19:261:37 | [DotExpr] payload.toLowerCase | tst.ts:261:19:261:25 | [VarRef] payload | semmle.order | 1 | -| tst.ts:261:19:261:37 | [DotExpr] payload.toLowerCase | tst.ts:261:27:261:37 | [Label] toLowerCase | semmle.label | 2 | -| tst.ts:261:19:261:37 | [DotExpr] payload.toLowerCase | tst.ts:261:27:261:37 | [Label] toLowerCase | semmle.order | 2 | -| tst.ts:261:19:261:39 | [MethodCallExpr] payload ... rCase() | tst.ts:261:19:261:37 | [DotExpr] payload.toLowerCase | semmle.label | 0 | -| tst.ts:261:19:261:39 | [MethodCallExpr] payload ... rCase() | tst.ts:261:19:261:37 | [DotExpr] payload.toLowerCase | semmle.order | 0 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:265:13:265:19 | [Identifier] TypeMap | semmle.label | 1 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:265:13:265:19 | [Identifier] TypeMap | semmle.order | 1 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:266:5:266:19 | [FieldDeclaration] number: number; | semmle.label | 2 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:266:5:266:19 | [FieldDeclaration] number: number; | semmle.order | 2 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:267:5:267:19 | [FieldDeclaration] string: string; | semmle.label | 3 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:267:5:267:19 | [FieldDeclaration] string: string; | semmle.order | 3 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:268:5:268:21 | [FieldDeclaration] boolean: boolean; | semmle.label | 4 | -| tst.ts:265:3:269:3 | [InterfaceDeclaration,TypeDefinition] interfa ... an; } | tst.ts:268:5:268:21 | [FieldDeclaration] boolean: boolean; | semmle.order | 4 | -| tst.ts:266:5:266:19 | [FieldDeclaration] number: number; | tst.ts:266:5:266:10 | [Label] number | semmle.label | 1 | -| tst.ts:266:5:266:19 | [FieldDeclaration] number: number; | tst.ts:266:5:266:10 | [Label] number | semmle.order | 1 | -| tst.ts:266:5:266:19 | [FieldDeclaration] number: number; | tst.ts:266:13:266:18 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:266:5:266:19 | [FieldDeclaration] number: number; | tst.ts:266:13:266:18 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:267:5:267:19 | [FieldDeclaration] string: string; | tst.ts:267:5:267:10 | [Label] string | semmle.label | 1 | -| tst.ts:267:5:267:19 | [FieldDeclaration] string: string; | tst.ts:267:5:267:10 | [Label] string | semmle.order | 1 | -| tst.ts:267:5:267:19 | [FieldDeclaration] string: string; | tst.ts:267:13:267:18 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:267:5:267:19 | [FieldDeclaration] string: string; | tst.ts:267:13:267:18 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:268:5:268:21 | [FieldDeclaration] boolean: boolean; | tst.ts:268:5:268:11 | [Label] boolean | semmle.label | 1 | -| tst.ts:268:5:268:21 | [FieldDeclaration] boolean: boolean; | tst.ts:268:5:268:11 | [Label] boolean | semmle.order | 1 | -| tst.ts:268:5:268:21 | [FieldDeclaration] boolean: boolean; | tst.ts:268:14:268:20 | [KeywordTypeExpr] boolean | semmle.label | 2 | -| tst.ts:268:5:268:21 | [FieldDeclaration] boolean: boolean; | tst.ts:268:14:268:20 | [KeywordTypeExpr] boolean | semmle.order | 2 | -| tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | tst.ts:271:8:271:18 | [Identifier] UnionRecord | semmle.label | 1 | -| tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | tst.ts:271:8:271:18 | [Identifier] UnionRecord | semmle.order | 1 | -| tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | tst.ts:271:47:276:6 | [IndexedAccessTypeExpr] { [ ... }[P] | semmle.label | 3 | -| tst.ts:271:3:276:7 | [TypeAliasDeclaration,TypeDefinition] type Un ... }[P]; | tst.ts:271:47:276:6 | [IndexedAccessTypeExpr] { [ ... }[P] | semmle.order | 3 | -| tst.ts:271:20:271:42 | [TypeParameter] P exten ... TypeMap | tst.ts:271:20:271:20 | [Identifier] P | semmle.label | 1 | -| tst.ts:271:20:271:42 | [TypeParameter] P exten ... TypeMap | tst.ts:271:20:271:20 | [Identifier] P | semmle.order | 1 | -| tst.ts:271:20:271:42 | [TypeParameter] P exten ... TypeMap | tst.ts:271:30:271:42 | [KeyofTypeExpr] keyof TypeMap | semmle.label | 2 | -| tst.ts:271:20:271:42 | [TypeParameter] P exten ... TypeMap | tst.ts:271:30:271:42 | [KeyofTypeExpr] keyof TypeMap | semmle.order | 2 | -| tst.ts:271:30:271:42 | [KeyofTypeExpr] keyof TypeMap | tst.ts:271:36:271:42 | [LocalTypeAccess] TypeMap | semmle.label | 1 | -| tst.ts:271:30:271:42 | [KeyofTypeExpr] keyof TypeMap | tst.ts:271:36:271:42 | [LocalTypeAccess] TypeMap | semmle.order | 1 | -| tst.ts:271:47:276:3 | [MappedTypeExpr] { [ ... }; } | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| tst.ts:271:47:276:3 | [MappedTypeExpr] { [ ... }; } | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| tst.ts:271:47:276:3 | [MappedTypeExpr] { [ ... }; } | tst.ts:272:15:275:5 | [InterfaceTypeExpr] { ... ; } | semmle.label | 2 | -| tst.ts:271:47:276:3 | [MappedTypeExpr] { [ ... }; } | tst.ts:272:15:275:5 | [InterfaceTypeExpr] { ... ; } | semmle.order | 2 | -| tst.ts:271:47:276:6 | [IndexedAccessTypeExpr] { [ ... }[P] | tst.ts:271:47:276:3 | [MappedTypeExpr] { [ ... }; } | semmle.label | 1 | -| tst.ts:271:47:276:6 | [IndexedAccessTypeExpr] { [ ... }[P] | tst.ts:271:47:276:3 | [MappedTypeExpr] { [ ... }; } | semmle.order | 1 | -| tst.ts:271:47:276:6 | [IndexedAccessTypeExpr] { [ ... }[P] | tst.ts:276:5:276:5 | [LocalTypeAccess] P | semmle.label | 2 | -| tst.ts:271:47:276:6 | [IndexedAccessTypeExpr] { [ ... }[P] | tst.ts:276:5:276:5 | [LocalTypeAccess] P | semmle.order | 2 | -| tst.ts:272:6:272:11 | [TypeParameter] K in P | tst.ts:272:6:272:6 | [Identifier] K | semmle.label | 1 | -| tst.ts:272:6:272:11 | [TypeParameter] K in P | tst.ts:272:6:272:6 | [Identifier] K | semmle.order | 1 | -| tst.ts:272:6:272:11 | [TypeParameter] K in P | tst.ts:272:11:272:11 | [LocalTypeAccess] P | semmle.label | 2 | -| tst.ts:272:6:272:11 | [TypeParameter] K in P | tst.ts:272:11:272:11 | [LocalTypeAccess] P | semmle.order | 2 | -| tst.ts:272:15:275:5 | [InterfaceTypeExpr] { ... ; } | tst.ts:273:7:273:14 | [FieldDeclaration] kind: K; | semmle.label | 1 | -| tst.ts:272:15:275:5 | [InterfaceTypeExpr] { ... ; } | tst.ts:273:7:273:14 | [FieldDeclaration] kind: K; | semmle.order | 1 | -| tst.ts:272:15:275:5 | [InterfaceTypeExpr] { ... ; } | tst.ts:274:7:274:33 | [FieldDeclaration] f: (p: ... > void; | semmle.label | 2 | -| tst.ts:272:15:275:5 | [InterfaceTypeExpr] { ... ; } | tst.ts:274:7:274:33 | [FieldDeclaration] f: (p: ... > void; | semmle.order | 2 | -| tst.ts:273:7:273:14 | [FieldDeclaration] kind: K; | tst.ts:273:7:273:10 | [Label] kind | semmle.label | 1 | -| tst.ts:273:7:273:14 | [FieldDeclaration] kind: K; | tst.ts:273:7:273:10 | [Label] kind | semmle.order | 1 | -| tst.ts:273:7:273:14 | [FieldDeclaration] kind: K; | tst.ts:273:13:273:13 | [LocalTypeAccess] K | semmle.label | 2 | -| tst.ts:273:7:273:14 | [FieldDeclaration] kind: K; | tst.ts:273:13:273:13 | [LocalTypeAccess] K | semmle.order | 2 | -| tst.ts:274:7:274:33 | [FieldDeclaration] f: (p: ... > void; | tst.ts:274:7:274:7 | [Label] f | semmle.label | 1 | -| tst.ts:274:7:274:33 | [FieldDeclaration] f: (p: ... > void; | tst.ts:274:7:274:7 | [Label] f | semmle.order | 1 | -| tst.ts:274:7:274:33 | [FieldDeclaration] f: (p: ... > void; | tst.ts:274:10:274:32 | [FunctionTypeExpr] (p: Typ ... => void | semmle.label | 2 | -| tst.ts:274:7:274:33 | [FieldDeclaration] f: (p: ... > void; | tst.ts:274:10:274:32 | [FunctionTypeExpr] (p: Typ ... => void | semmle.order | 2 | -| tst.ts:274:10:274:32 | [FunctionExpr] (p: Typ ... => void | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:274:10:274:32 | [FunctionExpr] (p: Typ ... => void | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:274:10:274:32 | [FunctionExpr] (p: Typ ... => void | tst.ts:274:29:274:32 | [KeywordTypeExpr] void | semmle.label | 4 | -| tst.ts:274:10:274:32 | [FunctionExpr] (p: Typ ... => void | tst.ts:274:29:274:32 | [KeywordTypeExpr] void | semmle.order | 4 | -| tst.ts:274:10:274:32 | [FunctionTypeExpr] (p: Typ ... => void | tst.ts:274:10:274:32 | [FunctionExpr] (p: Typ ... => void | semmle.label | 1 | -| tst.ts:274:10:274:32 | [FunctionTypeExpr] (p: Typ ... => void | tst.ts:274:10:274:32 | [FunctionExpr] (p: Typ ... => void | semmle.order | 1 | -| tst.ts:274:11:274:11 | [SimpleParameter] p | tst.ts:274:14:274:23 | [IndexedAccessTypeExpr] TypeMap[K] | semmle.label | -2 | -| tst.ts:274:11:274:11 | [SimpleParameter] p | tst.ts:274:14:274:23 | [IndexedAccessTypeExpr] TypeMap[K] | semmle.order | -2 | -| tst.ts:274:14:274:23 | [IndexedAccessTypeExpr] TypeMap[K] | tst.ts:274:14:274:20 | [LocalTypeAccess] TypeMap | semmle.label | 1 | -| tst.ts:274:14:274:23 | [IndexedAccessTypeExpr] TypeMap[K] | tst.ts:274:14:274:20 | [LocalTypeAccess] TypeMap | semmle.order | 1 | -| tst.ts:274:14:274:23 | [IndexedAccessTypeExpr] TypeMap[K] | tst.ts:274:22:274:22 | [LocalTypeAccess] K | semmle.label | 2 | -| tst.ts:274:14:274:23 | [IndexedAccessTypeExpr] TypeMap[K] | tst.ts:274:22:274:22 | [LocalTypeAccess] K | semmle.order | 2 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | file://:0:0:0:0 | (TypeParameters) | semmle.label | 2 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | file://:0:0:0:0 | (TypeParameters) | semmle.order | 2 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | tst.ts:278:12:278:24 | [VarDecl] processRecord | semmle.label | 0 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | tst.ts:278:12:278:24 | [VarDecl] processRecord | semmle.order | 0 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | tst.ts:278:75:280:3 | [BlockStmt] { r ... v); } | semmle.label | 5 | -| tst.ts:278:3:280:3 | [FunctionDeclStmt] functio ... v); } | tst.ts:278:75:280:3 | [BlockStmt] { r ... v); } | semmle.order | 5 | -| tst.ts:278:26:278:48 | [TypeParameter] K exten ... TypeMap | tst.ts:278:26:278:26 | [Identifier] K | semmle.label | 1 | -| tst.ts:278:26:278:48 | [TypeParameter] K exten ... TypeMap | tst.ts:278:26:278:26 | [Identifier] K | semmle.order | 1 | -| tst.ts:278:26:278:48 | [TypeParameter] K exten ... TypeMap | tst.ts:278:36:278:48 | [KeyofTypeExpr] keyof TypeMap | semmle.label | 2 | -| tst.ts:278:26:278:48 | [TypeParameter] K exten ... TypeMap | tst.ts:278:36:278:48 | [KeyofTypeExpr] keyof TypeMap | semmle.order | 2 | -| tst.ts:278:36:278:48 | [KeyofTypeExpr] keyof TypeMap | tst.ts:278:42:278:48 | [LocalTypeAccess] TypeMap | semmle.label | 1 | -| tst.ts:278:36:278:48 | [KeyofTypeExpr] keyof TypeMap | tst.ts:278:42:278:48 | [LocalTypeAccess] TypeMap | semmle.order | 1 | -| tst.ts:278:51:278:56 | [SimpleParameter] record | tst.ts:278:59:278:72 | [GenericTypeExpr] UnionRecord | semmle.label | -2 | -| tst.ts:278:51:278:56 | [SimpleParameter] record | tst.ts:278:59:278:72 | [GenericTypeExpr] UnionRecord | semmle.order | -2 | -| tst.ts:278:59:278:72 | [GenericTypeExpr] UnionRecord | tst.ts:278:59:278:69 | [LocalTypeAccess] UnionRecord | semmle.label | 1 | -| tst.ts:278:59:278:72 | [GenericTypeExpr] UnionRecord | tst.ts:278:59:278:69 | [LocalTypeAccess] UnionRecord | semmle.order | 1 | -| tst.ts:278:59:278:72 | [GenericTypeExpr] UnionRecord | tst.ts:278:71:278:71 | [LocalTypeAccess] K | semmle.label | 2 | -| tst.ts:278:59:278:72 | [GenericTypeExpr] UnionRecord | tst.ts:278:71:278:71 | [LocalTypeAccess] K | semmle.order | 2 | -| tst.ts:278:75:280:3 | [BlockStmt] { r ... v); } | tst.ts:279:5:279:23 | [ExprStmt] record.f(record.v); | semmle.label | 1 | -| tst.ts:278:75:280:3 | [BlockStmt] { r ... v); } | tst.ts:279:5:279:23 | [ExprStmt] record.f(record.v); | semmle.order | 1 | -| tst.ts:279:5:279:12 | [DotExpr] record.f | tst.ts:279:5:279:10 | [VarRef] record | semmle.label | 1 | -| tst.ts:279:5:279:12 | [DotExpr] record.f | tst.ts:279:5:279:10 | [VarRef] record | semmle.order | 1 | -| tst.ts:279:5:279:12 | [DotExpr] record.f | tst.ts:279:12:279:12 | [Label] f | semmle.label | 2 | -| tst.ts:279:5:279:12 | [DotExpr] record.f | tst.ts:279:12:279:12 | [Label] f | semmle.order | 2 | -| tst.ts:279:5:279:22 | [MethodCallExpr] record.f(record.v) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:279:5:279:22 | [MethodCallExpr] record.f(record.v) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:279:5:279:22 | [MethodCallExpr] record.f(record.v) | tst.ts:279:5:279:12 | [DotExpr] record.f | semmle.label | 0 | -| tst.ts:279:5:279:22 | [MethodCallExpr] record.f(record.v) | tst.ts:279:5:279:12 | [DotExpr] record.f | semmle.order | 0 | -| tst.ts:279:5:279:23 | [ExprStmt] record.f(record.v); | tst.ts:279:5:279:22 | [MethodCallExpr] record.f(record.v) | semmle.label | 1 | -| tst.ts:279:5:279:23 | [ExprStmt] record.f(record.v); | tst.ts:279:5:279:22 | [MethodCallExpr] record.f(record.v) | semmle.order | 1 | -| tst.ts:279:14:279:21 | [DotExpr] record.v | tst.ts:279:14:279:19 | [VarRef] record | semmle.label | 1 | -| tst.ts:279:14:279:21 | [DotExpr] record.v | tst.ts:279:14:279:19 | [VarRef] record | semmle.order | 1 | -| tst.ts:279:14:279:21 | [DotExpr] record.v | tst.ts:279:21:279:21 | [Label] v | semmle.label | 2 | -| tst.ts:279:14:279:21 | [DotExpr] record.v | tst.ts:279:21:279:21 | [Label] v | semmle.order | 2 | -| tst.ts:282:3:287:4 | [CallExpr] process ... }, }) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:282:3:287:4 | [CallExpr] process ... }, }) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:282:3:287:4 | [CallExpr] process ... }, }) | tst.ts:282:3:282:15 | [VarRef] processRecord | semmle.label | 0 | -| tst.ts:282:3:287:4 | [CallExpr] process ... }, }) | tst.ts:282:3:282:15 | [VarRef] processRecord | semmle.order | 0 | -| tst.ts:282:3:287:5 | [ExprStmt] process ... , }); | tst.ts:282:3:287:4 | [CallExpr] process ... }, }) | semmle.label | 1 | -| tst.ts:282:3:287:5 | [ExprStmt] process ... , }); | tst.ts:282:3:287:4 | [CallExpr] process ... }, }) | semmle.order | 1 | -| tst.ts:282:17:287:3 | [ObjectExpr] {kind: ...} | tst.ts:283:5:283:18 | [Property] kind: "string" | semmle.label | 1 | -| tst.ts:282:17:287:3 | [ObjectExpr] {kind: ...} | tst.ts:283:5:283:18 | [Property] kind: "string" | semmle.order | 1 | -| tst.ts:282:17:287:3 | [ObjectExpr] {kind: ...} | tst.ts:284:5:286:5 | [Property] f: (val ... g } | semmle.label | 2 | -| tst.ts:282:17:287:3 | [ObjectExpr] {kind: ...} | tst.ts:284:5:286:5 | [Property] f: (val ... g } | semmle.order | 2 | -| tst.ts:283:5:283:18 | [Property] kind: "string" | tst.ts:283:5:283:8 | [Label] kind | semmle.label | 1 | -| tst.ts:283:5:283:18 | [Property] kind: "string" | tst.ts:283:5:283:8 | [Label] kind | semmle.order | 1 | -| tst.ts:283:5:283:18 | [Property] kind: "string" | tst.ts:283:11:283:18 | [Literal] "string" | semmle.label | 2 | -| tst.ts:283:5:283:18 | [Property] kind: "string" | tst.ts:283:11:283:18 | [Literal] "string" | semmle.order | 2 | -| tst.ts:284:5:286:5 | [Property] f: (val ... g } | tst.ts:284:5:284:5 | [Label] f | semmle.label | 1 | -| tst.ts:284:5:286:5 | [Property] f: (val ... g } | tst.ts:284:5:284:5 | [Label] f | semmle.order | 1 | -| tst.ts:284:5:286:5 | [Property] f: (val ... g } | tst.ts:284:8:286:5 | [ArrowFunctionExpr] (val) = ... g } | semmle.label | 2 | -| tst.ts:284:5:286:5 | [Property] f: (val ... g } | tst.ts:284:8:286:5 | [ArrowFunctionExpr] (val) = ... g } | semmle.order | 2 | -| tst.ts:284:8:286:5 | [ArrowFunctionExpr] (val) = ... g } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:284:8:286:5 | [ArrowFunctionExpr] (val) = ... g } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:284:8:286:5 | [ArrowFunctionExpr] (val) = ... g } | tst.ts:284:17:286:5 | [BlockStmt] { ... g } | semmle.label | 5 | -| tst.ts:284:8:286:5 | [ArrowFunctionExpr] (val) = ... g } | tst.ts:284:17:286:5 | [BlockStmt] { ... g } | semmle.order | 5 | -| tst.ts:284:17:286:5 | [BlockStmt] { ... g } | tst.ts:285:7:285:37 | [ExprStmt] console ... ase()); | semmle.label | 1 | -| tst.ts:284:17:286:5 | [BlockStmt] { ... g } | tst.ts:285:7:285:37 | [ExprStmt] console ... ase()); | semmle.order | 1 | -| tst.ts:285:7:285:17 | [DotExpr] console.log | tst.ts:285:7:285:13 | [VarRef] console | semmle.label | 1 | -| tst.ts:285:7:285:17 | [DotExpr] console.log | tst.ts:285:7:285:13 | [VarRef] console | semmle.order | 1 | -| tst.ts:285:7:285:17 | [DotExpr] console.log | tst.ts:285:15:285:17 | [Label] log | semmle.label | 2 | -| tst.ts:285:7:285:17 | [DotExpr] console.log | tst.ts:285:15:285:17 | [Label] log | semmle.order | 2 | -| tst.ts:285:7:285:36 | [MethodCallExpr] console ... Case()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:285:7:285:36 | [MethodCallExpr] console ... Case()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:285:7:285:36 | [MethodCallExpr] console ... Case()) | tst.ts:285:7:285:17 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:285:7:285:36 | [MethodCallExpr] console ... Case()) | tst.ts:285:7:285:17 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:285:7:285:37 | [ExprStmt] console ... ase()); | tst.ts:285:7:285:36 | [MethodCallExpr] console ... Case()) | semmle.label | 1 | -| tst.ts:285:7:285:37 | [ExprStmt] console ... ase()); | tst.ts:285:7:285:36 | [MethodCallExpr] console ... Case()) | semmle.order | 1 | -| tst.ts:285:19:285:33 | [DotExpr] val.toUpperCase | tst.ts:285:19:285:21 | [VarRef] val | semmle.label | 1 | -| tst.ts:285:19:285:33 | [DotExpr] val.toUpperCase | tst.ts:285:19:285:21 | [VarRef] val | semmle.order | 1 | -| tst.ts:285:19:285:33 | [DotExpr] val.toUpperCase | tst.ts:285:23:285:33 | [Label] toUpperCase | semmle.label | 2 | -| tst.ts:285:19:285:33 | [DotExpr] val.toUpperCase | tst.ts:285:23:285:33 | [Label] toUpperCase | semmle.order | 2 | -| tst.ts:285:19:285:35 | [MethodCallExpr] val.toUpperCase() | tst.ts:285:19:285:33 | [DotExpr] val.toUpperCase | semmle.label | 0 | -| tst.ts:285:19:285:35 | [MethodCallExpr] val.toUpperCase() | tst.ts:285:19:285:33 | [DotExpr] val.toUpperCase | semmle.order | 0 | -| tst.ts:289:3:289:63 | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | tst.ts:289:8:289:11 | [Identifier] Func | semmle.label | 1 | -| tst.ts:289:3:289:63 | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | tst.ts:289:8:289:11 | [Identifier] Func | semmle.order | 1 | -| tst.ts:289:3:289:63 | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | tst.ts:289:15:289:62 | [FunctionTypeExpr] (...arg ... => void | semmle.label | 2 | -| tst.ts:289:3:289:63 | [TypeAliasDeclaration,TypeDefinition] type Fu ... > void; | tst.ts:289:15:289:62 | [FunctionTypeExpr] (...arg ... => void | semmle.order | 2 | -| tst.ts:289:15:289:62 | [FunctionExpr] (...arg ... => void | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:289:15:289:62 | [FunctionExpr] (...arg ... => void | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:289:15:289:62 | [FunctionExpr] (...arg ... => void | tst.ts:289:59:289:62 | [KeywordTypeExpr] void | semmle.label | 4 | -| tst.ts:289:15:289:62 | [FunctionExpr] (...arg ... => void | tst.ts:289:59:289:62 | [KeywordTypeExpr] void | semmle.order | 4 | -| tst.ts:289:15:289:62 | [FunctionTypeExpr] (...arg ... => void | tst.ts:289:15:289:62 | [FunctionExpr] (...arg ... => void | semmle.label | 1 | -| tst.ts:289:15:289:62 | [FunctionTypeExpr] (...arg ... => void | tst.ts:289:15:289:62 | [FunctionExpr] (...arg ... => void | semmle.order | 1 | -| tst.ts:289:19:289:22 | [SimpleParameter] args | tst.ts:289:25:289:53 | [UnionTypeExpr] ["a", n ... string] | semmle.label | -2 | -| tst.ts:289:19:289:22 | [SimpleParameter] args | tst.ts:289:25:289:53 | [UnionTypeExpr] ["a", n ... string] | semmle.order | -2 | -| tst.ts:289:25:289:37 | [TupleTypeExpr] ["a", number] | tst.ts:289:26:289:28 | [LiteralTypeExpr] "a" | semmle.label | 1 | -| tst.ts:289:25:289:37 | [TupleTypeExpr] ["a", number] | tst.ts:289:26:289:28 | [LiteralTypeExpr] "a" | semmle.order | 1 | -| tst.ts:289:25:289:37 | [TupleTypeExpr] ["a", number] | tst.ts:289:31:289:36 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:289:25:289:37 | [TupleTypeExpr] ["a", number] | tst.ts:289:31:289:36 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:289:25:289:53 | [UnionTypeExpr] ["a", n ... string] | tst.ts:289:25:289:37 | [TupleTypeExpr] ["a", number] | semmle.label | 1 | -| tst.ts:289:25:289:53 | [UnionTypeExpr] ["a", n ... string] | tst.ts:289:25:289:37 | [TupleTypeExpr] ["a", number] | semmle.order | 1 | -| tst.ts:289:25:289:53 | [UnionTypeExpr] ["a", n ... string] | tst.ts:289:41:289:53 | [TupleTypeExpr] ["b", string] | semmle.label | 2 | -| tst.ts:289:25:289:53 | [UnionTypeExpr] ["a", n ... string] | tst.ts:289:41:289:53 | [TupleTypeExpr] ["b", string] | semmle.order | 2 | -| tst.ts:289:41:289:53 | [TupleTypeExpr] ["b", string] | tst.ts:289:42:289:44 | [LiteralTypeExpr] "b" | semmle.label | 1 | -| tst.ts:289:41:289:53 | [TupleTypeExpr] ["b", string] | tst.ts:289:42:289:44 | [LiteralTypeExpr] "b" | semmle.order | 1 | -| tst.ts:289:41:289:53 | [TupleTypeExpr] ["b", string] | tst.ts:289:47:289:52 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:289:41:289:53 | [TupleTypeExpr] ["b", string] | tst.ts:289:47:289:52 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:291:3:295:4 | [DeclStmt] const f1 = ... | tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | semmle.label | 1 | -| tst.ts:291:3:295:4 | [DeclStmt] const f1 = ... | tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | semmle.order | 1 | -| tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | tst.ts:291:9:291:10 | [VarDecl] f1 | semmle.label | 1 | -| tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | tst.ts:291:9:291:10 | [VarDecl] f1 | semmle.order | 1 | -| tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | tst.ts:291:13:291:16 | [LocalTypeAccess] Func | semmle.label | 2 | -| tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | tst.ts:291:13:291:16 | [LocalTypeAccess] Func | semmle.order | 2 | -| tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | tst.ts:291:20:295:3 | [ArrowFunctionExpr] (kind, ... } } | semmle.label | 3 | -| tst.ts:291:9:295:3 | [VariableDeclarator] f1: Fun ... } } | tst.ts:291:20:295:3 | [ArrowFunctionExpr] (kind, ... } } | semmle.order | 3 | -| tst.ts:291:20:295:3 | [ArrowFunctionExpr] (kind, ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:291:20:295:3 | [ArrowFunctionExpr] (kind, ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:291:20:295:3 | [ArrowFunctionExpr] (kind, ... } } | tst.ts:291:39:295:3 | [BlockStmt] { i ... } } | semmle.label | 5 | -| tst.ts:291:20:295:3 | [ArrowFunctionExpr] (kind, ... } } | tst.ts:291:39:295:3 | [BlockStmt] { i ... } } | semmle.order | 5 | -| tst.ts:291:39:295:3 | [BlockStmt] { i ... } } | tst.ts:292:5:294:5 | [IfStmt] if (kin ... r } | semmle.label | 1 | -| tst.ts:291:39:295:3 | [BlockStmt] { i ... } } | tst.ts:292:5:294:5 | [IfStmt] if (kin ... r } | semmle.order | 1 | -| tst.ts:292:5:294:5 | [IfStmt] if (kin ... r } | tst.ts:292:9:292:20 | [BinaryExpr] kind === "a" | semmle.label | 1 | -| tst.ts:292:5:294:5 | [IfStmt] if (kin ... r } | tst.ts:292:9:292:20 | [BinaryExpr] kind === "a" | semmle.order | 1 | -| tst.ts:292:5:294:5 | [IfStmt] if (kin ... r } | tst.ts:292:23:294:5 | [BlockStmt] { ... r } | semmle.label | 2 | -| tst.ts:292:5:294:5 | [IfStmt] if (kin ... r } | tst.ts:292:23:294:5 | [BlockStmt] { ... r } | semmle.order | 2 | -| tst.ts:292:9:292:20 | [BinaryExpr] kind === "a" | tst.ts:292:9:292:12 | [VarRef] kind | semmle.label | 1 | -| tst.ts:292:9:292:20 | [BinaryExpr] kind === "a" | tst.ts:292:9:292:12 | [VarRef] kind | semmle.order | 1 | -| tst.ts:292:9:292:20 | [BinaryExpr] kind === "a" | tst.ts:292:18:292:20 | [Literal] "a" | semmle.label | 2 | -| tst.ts:292:9:292:20 | [BinaryExpr] kind === "a" | tst.ts:292:18:292:20 | [Literal] "a" | semmle.order | 2 | -| tst.ts:292:23:294:5 | [BlockStmt] { ... r } | tst.ts:293:7:293:24 | [ExprStmt] payload.toFixed(); | semmle.label | 1 | -| tst.ts:292:23:294:5 | [BlockStmt] { ... r } | tst.ts:293:7:293:24 | [ExprStmt] payload.toFixed(); | semmle.order | 1 | -| tst.ts:293:7:293:21 | [DotExpr] payload.toFixed | tst.ts:293:7:293:13 | [VarRef] payload | semmle.label | 1 | -| tst.ts:293:7:293:21 | [DotExpr] payload.toFixed | tst.ts:293:7:293:13 | [VarRef] payload | semmle.order | 1 | -| tst.ts:293:7:293:21 | [DotExpr] payload.toFixed | tst.ts:293:15:293:21 | [Label] toFixed | semmle.label | 2 | -| tst.ts:293:7:293:21 | [DotExpr] payload.toFixed | tst.ts:293:15:293:21 | [Label] toFixed | semmle.order | 2 | -| tst.ts:293:7:293:23 | [MethodCallExpr] payload.toFixed() | tst.ts:293:7:293:21 | [DotExpr] payload.toFixed | semmle.label | 0 | -| tst.ts:293:7:293:23 | [MethodCallExpr] payload.toFixed() | tst.ts:293:7:293:21 | [DotExpr] payload.toFixed | semmle.order | 0 | -| tst.ts:293:7:293:24 | [ExprStmt] payload.toFixed(); | tst.ts:293:7:293:23 | [MethodCallExpr] payload.toFixed() | semmle.label | 1 | -| tst.ts:293:7:293:24 | [ExprStmt] payload.toFixed(); | tst.ts:293:7:293:23 | [MethodCallExpr] payload.toFixed() | semmle.order | 1 | -| tst.ts:298:1:298:21 | [DeclStmt] const key = ... | tst.ts:298:7:298:20 | [VariableDeclarator] key = Symbol() | semmle.label | 1 | -| tst.ts:298:1:298:21 | [DeclStmt] const key = ... | tst.ts:298:7:298:20 | [VariableDeclarator] key = Symbol() | semmle.order | 1 | -| tst.ts:298:7:298:20 | [VariableDeclarator] key = Symbol() | tst.ts:298:7:298:9 | [VarDecl] key | semmle.label | 1 | -| tst.ts:298:7:298:20 | [VariableDeclarator] key = Symbol() | tst.ts:298:7:298:9 | [VarDecl] key | semmle.order | 1 | -| tst.ts:298:7:298:20 | [VariableDeclarator] key = Symbol() | tst.ts:298:13:298:20 | [CallExpr] Symbol() | semmle.label | 2 | -| tst.ts:298:7:298:20 | [VariableDeclarator] key = Symbol() | tst.ts:298:13:298:20 | [CallExpr] Symbol() | semmle.order | 2 | -| tst.ts:298:13:298:20 | [CallExpr] Symbol() | tst.ts:298:13:298:18 | [VarRef] Symbol | semmle.label | 0 | -| tst.ts:298:13:298:20 | [CallExpr] Symbol() | tst.ts:298:13:298:18 | [VarRef] Symbol | semmle.order | 0 | -| tst.ts:300:1:300:58 | [DeclStmt] const numberOrString = ... | tst.ts:300:7:300:57 | [VariableDeclarator] numberO ... "hello" | semmle.label | 1 | -| tst.ts:300:1:300:58 | [DeclStmt] const numberOrString = ... | tst.ts:300:7:300:57 | [VariableDeclarator] numberO ... "hello" | semmle.order | 1 | -| tst.ts:300:7:300:57 | [VariableDeclarator] numberO ... "hello" | tst.ts:300:7:300:20 | [VarDecl] numberOrString | semmle.label | 1 | -| tst.ts:300:7:300:57 | [VariableDeclarator] numberO ... "hello" | tst.ts:300:7:300:20 | [VarDecl] numberOrString | semmle.order | 1 | -| tst.ts:300:7:300:57 | [VariableDeclarator] numberO ... "hello" | tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | semmle.label | 2 | -| tst.ts:300:7:300:57 | [VariableDeclarator] numberO ... "hello" | tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | semmle.order | 2 | -| tst.ts:300:24:300:34 | [DotExpr] Math.random | tst.ts:300:24:300:27 | [VarRef] Math | semmle.label | 1 | -| tst.ts:300:24:300:34 | [DotExpr] Math.random | tst.ts:300:24:300:27 | [VarRef] Math | semmle.order | 1 | -| tst.ts:300:24:300:34 | [DotExpr] Math.random | tst.ts:300:29:300:34 | [Label] random | semmle.label | 2 | -| tst.ts:300:24:300:34 | [DotExpr] Math.random | tst.ts:300:29:300:34 | [Label] random | semmle.order | 2 | -| tst.ts:300:24:300:36 | [MethodCallExpr] Math.random() | tst.ts:300:24:300:34 | [DotExpr] Math.random | semmle.label | 0 | -| tst.ts:300:24:300:36 | [MethodCallExpr] Math.random() | tst.ts:300:24:300:34 | [DotExpr] Math.random | semmle.order | 0 | -| tst.ts:300:24:300:42 | [BinaryExpr] Math.random() < 0.5 | tst.ts:300:24:300:36 | [MethodCallExpr] Math.random() | semmle.label | 1 | -| tst.ts:300:24:300:42 | [BinaryExpr] Math.random() < 0.5 | tst.ts:300:24:300:36 | [MethodCallExpr] Math.random() | semmle.order | 1 | -| tst.ts:300:24:300:42 | [BinaryExpr] Math.random() < 0.5 | tst.ts:300:40:300:42 | [Literal] 0.5 | semmle.label | 2 | -| tst.ts:300:24:300:42 | [BinaryExpr] Math.random() < 0.5 | tst.ts:300:40:300:42 | [Literal] 0.5 | semmle.order | 2 | -| tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | tst.ts:300:24:300:42 | [BinaryExpr] Math.random() < 0.5 | semmle.label | 1 | -| tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | tst.ts:300:24:300:42 | [BinaryExpr] Math.random() < 0.5 | semmle.order | 1 | -| tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | tst.ts:300:46:300:47 | [Literal] 42 | semmle.label | 2 | -| tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | tst.ts:300:46:300:47 | [Literal] 42 | semmle.order | 2 | -| tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | tst.ts:300:51:300:57 | [Literal] "hello" | semmle.label | 3 | -| tst.ts:300:24:300:57 | [ConditionalExpr] Math.ra ... "hello" | tst.ts:300:51:300:57 | [Literal] "hello" | semmle.order | 3 | -| tst.ts:302:1:304:2 | [DeclStmt] let obj = ... | tst.ts:302:5:304:1 | [VariableDeclarator] obj = { ... ring, } | semmle.label | 1 | -| tst.ts:302:1:304:2 | [DeclStmt] let obj = ... | tst.ts:302:5:304:1 | [VariableDeclarator] obj = { ... ring, } | semmle.order | 1 | -| tst.ts:302:5:304:1 | [VariableDeclarator] obj = { ... ring, } | tst.ts:302:5:302:7 | [VarDecl] obj | semmle.label | 1 | -| tst.ts:302:5:304:1 | [VariableDeclarator] obj = { ... ring, } | tst.ts:302:5:302:7 | [VarDecl] obj | semmle.order | 1 | -| tst.ts:302:5:304:1 | [VariableDeclarator] obj = { ... ring, } | tst.ts:302:11:304:1 | [ObjectExpr] { [ke ... ring, } | semmle.label | 2 | -| tst.ts:302:5:304:1 | [VariableDeclarator] obj = { ... ring, } | tst.ts:302:11:304:1 | [ObjectExpr] { [ke ... ring, } | semmle.order | 2 | -| tst.ts:302:11:304:1 | [ObjectExpr] { [ke ... ring, } | tst.ts:303:3:303:23 | [Property] [key]: ... rString | semmle.label | 1 | -| tst.ts:302:11:304:1 | [ObjectExpr] { [ke ... ring, } | tst.ts:303:3:303:23 | [Property] [key]: ... rString | semmle.order | 1 | -| tst.ts:303:3:303:23 | [Property] [key]: ... rString | tst.ts:303:4:303:6 | [VarRef] key | semmle.label | 1 | -| tst.ts:303:3:303:23 | [Property] [key]: ... rString | tst.ts:303:4:303:6 | [VarRef] key | semmle.order | 1 | -| tst.ts:303:3:303:23 | [Property] [key]: ... rString | tst.ts:303:10:303:23 | [VarRef] numberOrString | semmle.label | 2 | -| tst.ts:303:3:303:23 | [Property] [key]: ... rString | tst.ts:303:10:303:23 | [VarRef] numberOrString | semmle.order | 2 | -| tst.ts:306:1:309:1 | [IfStmt] if (typ ... se(); } | tst.ts:306:5:306:32 | [BinaryExpr] typeof ... string" | semmle.label | 1 | -| tst.ts:306:1:309:1 | [IfStmt] if (typ ... se(); } | tst.ts:306:5:306:32 | [BinaryExpr] typeof ... string" | semmle.order | 1 | -| tst.ts:306:1:309:1 | [IfStmt] if (typ ... se(); } | tst.ts:306:35:309:1 | [BlockStmt] { let ... se(); } | semmle.label | 2 | -| tst.ts:306:1:309:1 | [IfStmt] if (typ ... se(); } | tst.ts:306:35:309:1 | [BlockStmt] { let ... se(); } | semmle.order | 2 | -| tst.ts:306:5:306:19 | [UnaryExpr] typeof obj[key] | tst.ts:306:12:306:19 | [IndexExpr] obj[key] | semmle.label | 1 | -| tst.ts:306:5:306:19 | [UnaryExpr] typeof obj[key] | tst.ts:306:12:306:19 | [IndexExpr] obj[key] | semmle.order | 1 | -| tst.ts:306:5:306:32 | [BinaryExpr] typeof ... string" | tst.ts:306:5:306:19 | [UnaryExpr] typeof obj[key] | semmle.label | 1 | -| tst.ts:306:5:306:32 | [BinaryExpr] typeof ... string" | tst.ts:306:5:306:19 | [UnaryExpr] typeof obj[key] | semmle.order | 1 | -| tst.ts:306:5:306:32 | [BinaryExpr] typeof ... string" | tst.ts:306:25:306:32 | [Literal] "string" | semmle.label | 2 | -| tst.ts:306:5:306:32 | [BinaryExpr] typeof ... string" | tst.ts:306:25:306:32 | [Literal] "string" | semmle.order | 2 | -| tst.ts:306:12:306:19 | [IndexExpr] obj[key] | tst.ts:306:12:306:14 | [VarRef] obj | semmle.label | 1 | -| tst.ts:306:12:306:19 | [IndexExpr] obj[key] | tst.ts:306:12:306:14 | [VarRef] obj | semmle.order | 1 | -| tst.ts:306:12:306:19 | [IndexExpr] obj[key] | tst.ts:306:16:306:18 | [VarRef] key | semmle.label | 2 | -| tst.ts:306:12:306:19 | [IndexExpr] obj[key] | tst.ts:306:16:306:18 | [VarRef] key | semmle.order | 2 | -| tst.ts:306:35:309:1 | [BlockStmt] { let ... se(); } | tst.ts:307:3:307:21 | [DeclStmt] let str = ... | semmle.label | 1 | -| tst.ts:306:35:309:1 | [BlockStmt] { let ... se(); } | tst.ts:307:3:307:21 | [DeclStmt] let str = ... | semmle.order | 1 | -| tst.ts:306:35:309:1 | [BlockStmt] { let ... se(); } | tst.ts:308:3:308:20 | [ExprStmt] str.toUpperCase(); | semmle.label | 2 | -| tst.ts:306:35:309:1 | [BlockStmt] { let ... se(); } | tst.ts:308:3:308:20 | [ExprStmt] str.toUpperCase(); | semmle.order | 2 | -| tst.ts:307:3:307:21 | [DeclStmt] let str = ... | tst.ts:307:7:307:20 | [VariableDeclarator] str = obj[key] | semmle.label | 1 | -| tst.ts:307:3:307:21 | [DeclStmt] let str = ... | tst.ts:307:7:307:20 | [VariableDeclarator] str = obj[key] | semmle.order | 1 | -| tst.ts:307:7:307:20 | [VariableDeclarator] str = obj[key] | tst.ts:307:7:307:9 | [VarDecl] str | semmle.label | 1 | -| tst.ts:307:7:307:20 | [VariableDeclarator] str = obj[key] | tst.ts:307:7:307:9 | [VarDecl] str | semmle.order | 1 | -| tst.ts:307:7:307:20 | [VariableDeclarator] str = obj[key] | tst.ts:307:13:307:20 | [IndexExpr] obj[key] | semmle.label | 2 | -| tst.ts:307:7:307:20 | [VariableDeclarator] str = obj[key] | tst.ts:307:13:307:20 | [IndexExpr] obj[key] | semmle.order | 2 | -| tst.ts:307:13:307:20 | [IndexExpr] obj[key] | tst.ts:307:13:307:15 | [VarRef] obj | semmle.label | 1 | -| tst.ts:307:13:307:20 | [IndexExpr] obj[key] | tst.ts:307:13:307:15 | [VarRef] obj | semmle.order | 1 | -| tst.ts:307:13:307:20 | [IndexExpr] obj[key] | tst.ts:307:17:307:19 | [VarRef] key | semmle.label | 2 | -| tst.ts:307:13:307:20 | [IndexExpr] obj[key] | tst.ts:307:17:307:19 | [VarRef] key | semmle.order | 2 | -| tst.ts:308:3:308:17 | [DotExpr] str.toUpperCase | tst.ts:308:3:308:5 | [VarRef] str | semmle.label | 1 | -| tst.ts:308:3:308:17 | [DotExpr] str.toUpperCase | tst.ts:308:3:308:5 | [VarRef] str | semmle.order | 1 | -| tst.ts:308:3:308:17 | [DotExpr] str.toUpperCase | tst.ts:308:7:308:17 | [Label] toUpperCase | semmle.label | 2 | -| tst.ts:308:3:308:17 | [DotExpr] str.toUpperCase | tst.ts:308:7:308:17 | [Label] toUpperCase | semmle.order | 2 | -| tst.ts:308:3:308:19 | [MethodCallExpr] str.toUpperCase() | tst.ts:308:3:308:17 | [DotExpr] str.toUpperCase | semmle.label | 0 | -| tst.ts:308:3:308:19 | [MethodCallExpr] str.toUpperCase() | tst.ts:308:3:308:17 | [DotExpr] str.toUpperCase | semmle.order | 0 | -| tst.ts:308:3:308:20 | [ExprStmt] str.toUpperCase(); | tst.ts:308:3:308:19 | [MethodCallExpr] str.toUpperCase() | semmle.label | 1 | -| tst.ts:308:3:308:20 | [ExprStmt] str.toUpperCase(); | tst.ts:308:3:308:19 | [MethodCallExpr] str.toUpperCase() | semmle.order | 1 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | file://:0:0:0:0 | (TypeParameters) | semmle.label | 2 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | file://:0:0:0:0 | (TypeParameters) | semmle.order | 2 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | tst.ts:313:10:313:10 | [VarDecl] f | semmle.label | 0 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | tst.ts:313:10:313:10 | [VarDecl] f | semmle.order | 0 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | tst.ts:316:4:316:7 | [KeywordTypeExpr] void | semmle.label | 4 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | tst.ts:316:4:316:7 | [KeywordTypeExpr] void | semmle.order | 4 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | tst.ts:316:9:316:10 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:313:1:316:10 | [FunctionDeclStmt] functio ... void {} | tst.ts:316:9:316:10 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:313:12:313:12 | [TypeParameter] T | tst.ts:313:12:313:12 | [Identifier] T | semmle.label | 1 | -| tst.ts:313:12:313:12 | [TypeParameter] T | tst.ts:313:12:313:12 | [Identifier] T | semmle.order | 1 | -| tst.ts:313:15:313:17 | [SimpleParameter] arg | tst.ts:313:20:315:27 | [InterfaceTypeExpr] { pro ... void } | semmle.label | -2 | -| tst.ts:313:15:313:17 | [SimpleParameter] arg | tst.ts:313:20:315:27 | [InterfaceTypeExpr] { pro ... void } | semmle.order | -2 | -| tst.ts:313:20:315:27 | [InterfaceTypeExpr] { pro ... void } | tst.ts:314:3:314:28 | [FieldDeclaration] produce ... ) => T, | semmle.label | 1 | -| tst.ts:313:20:315:27 | [InterfaceTypeExpr] { pro ... void } | tst.ts:314:3:314:28 | [FieldDeclaration] produce ... ) => T, | semmle.order | 1 | -| tst.ts:313:20:315:27 | [InterfaceTypeExpr] { pro ... void } | tst.ts:315:3:315:25 | [FieldDeclaration] consume ... => void | semmle.label | 2 | -| tst.ts:313:20:315:27 | [InterfaceTypeExpr] { pro ... void } | tst.ts:315:3:315:25 | [FieldDeclaration] consume ... => void | semmle.order | 2 | -| tst.ts:314:3:314:28 | [FieldDeclaration] produce ... ) => T, | tst.ts:314:3:314:9 | [Label] produce | semmle.label | 1 | -| tst.ts:314:3:314:28 | [FieldDeclaration] produce ... ) => T, | tst.ts:314:3:314:9 | [Label] produce | semmle.order | 1 | -| tst.ts:314:3:314:28 | [FieldDeclaration] produce ... ) => T, | tst.ts:314:12:314:27 | [FunctionTypeExpr] (n: string) => T | semmle.label | 2 | -| tst.ts:314:3:314:28 | [FieldDeclaration] produce ... ) => T, | tst.ts:314:12:314:27 | [FunctionTypeExpr] (n: string) => T | semmle.order | 2 | -| tst.ts:314:12:314:27 | [FunctionExpr] (n: string) => T | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:314:12:314:27 | [FunctionExpr] (n: string) => T | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:314:12:314:27 | [FunctionExpr] (n: string) => T | tst.ts:314:27:314:27 | [LocalTypeAccess] T | semmle.label | 4 | -| tst.ts:314:12:314:27 | [FunctionExpr] (n: string) => T | tst.ts:314:27:314:27 | [LocalTypeAccess] T | semmle.order | 4 | -| tst.ts:314:12:314:27 | [FunctionTypeExpr] (n: string) => T | tst.ts:314:12:314:27 | [FunctionExpr] (n: string) => T | semmle.label | 1 | -| tst.ts:314:12:314:27 | [FunctionTypeExpr] (n: string) => T | tst.ts:314:12:314:27 | [FunctionExpr] (n: string) => T | semmle.order | 1 | -| tst.ts:314:13:314:13 | [SimpleParameter] n | tst.ts:314:16:314:21 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:314:13:314:13 | [SimpleParameter] n | tst.ts:314:16:314:21 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:315:3:315:25 | [FieldDeclaration] consume ... => void | tst.ts:315:3:315:9 | [Label] consume | semmle.label | 1 | -| tst.ts:315:3:315:25 | [FieldDeclaration] consume ... => void | tst.ts:315:3:315:9 | [Label] consume | semmle.order | 1 | -| tst.ts:315:3:315:25 | [FieldDeclaration] consume ... => void | tst.ts:315:12:315:25 | [FunctionTypeExpr] (x: T) => void | semmle.label | 2 | -| tst.ts:315:3:315:25 | [FieldDeclaration] consume ... => void | tst.ts:315:12:315:25 | [FunctionTypeExpr] (x: T) => void | semmle.order | 2 | -| tst.ts:315:12:315:25 | [FunctionExpr] (x: T) => void | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:315:12:315:25 | [FunctionExpr] (x: T) => void | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:315:12:315:25 | [FunctionExpr] (x: T) => void | tst.ts:315:22:315:25 | [KeywordTypeExpr] void | semmle.label | 4 | -| tst.ts:315:12:315:25 | [FunctionExpr] (x: T) => void | tst.ts:315:22:315:25 | [KeywordTypeExpr] void | semmle.order | 4 | -| tst.ts:315:12:315:25 | [FunctionTypeExpr] (x: T) => void | tst.ts:315:12:315:25 | [FunctionExpr] (x: T) => void | semmle.label | 1 | -| tst.ts:315:12:315:25 | [FunctionTypeExpr] (x: T) => void | tst.ts:315:12:315:25 | [FunctionExpr] (x: T) => void | semmle.order | 1 | -| tst.ts:315:13:315:13 | [SimpleParameter] x | tst.ts:315:16:315:16 | [LocalTypeAccess] T | semmle.label | -2 | -| tst.ts:315:13:315:13 | [SimpleParameter] x | tst.ts:315:16:315:16 | [LocalTypeAccess] T | semmle.order | -2 | -| tst.ts:318:1:321:2 | [CallExpr] f({ p ... se() }) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:318:1:321:2 | [CallExpr] f({ p ... se() }) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:318:1:321:2 | [CallExpr] f({ p ... se() }) | tst.ts:318:1:318:1 | [VarRef] f | semmle.label | 0 | -| tst.ts:318:1:321:2 | [CallExpr] f({ p ... se() }) | tst.ts:318:1:318:1 | [VarRef] f | semmle.order | 0 | -| tst.ts:318:1:321:3 | [ExprStmt] f({ p ... e() }); | tst.ts:318:1:321:2 | [CallExpr] f({ p ... se() }) | semmle.label | 1 | -| tst.ts:318:1:321:3 | [ExprStmt] f({ p ... e() }); | tst.ts:318:1:321:2 | [CallExpr] f({ p ... se() }) | semmle.order | 1 | -| tst.ts:318:3:321:1 | [ObjectExpr] {produce: ...} | tst.ts:319:3:319:17 | [Property] produce: n => n | semmle.label | 1 | -| tst.ts:318:3:321:1 | [ObjectExpr] {produce: ...} | tst.ts:319:3:319:17 | [Property] produce: n => n | semmle.order | 1 | -| tst.ts:318:3:321:1 | [ObjectExpr] {produce: ...} | tst.ts:320:3:320:31 | [Property] consume ... rCase() | semmle.label | 2 | -| tst.ts:318:3:321:1 | [ObjectExpr] {produce: ...} | tst.ts:320:3:320:31 | [Property] consume ... rCase() | semmle.order | 2 | -| tst.ts:319:3:319:17 | [Property] produce: n => n | tst.ts:319:3:319:9 | [Label] produce | semmle.label | 1 | -| tst.ts:319:3:319:17 | [Property] produce: n => n | tst.ts:319:3:319:9 | [Label] produce | semmle.order | 1 | -| tst.ts:319:3:319:17 | [Property] produce: n => n | tst.ts:319:12:319:17 | [ArrowFunctionExpr] n => n | semmle.label | 2 | -| tst.ts:319:3:319:17 | [Property] produce: n => n | tst.ts:319:12:319:17 | [ArrowFunctionExpr] n => n | semmle.order | 2 | -| tst.ts:319:12:319:17 | [ArrowFunctionExpr] n => n | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:319:12:319:17 | [ArrowFunctionExpr] n => n | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:319:12:319:17 | [ArrowFunctionExpr] n => n | tst.ts:319:17:319:17 | [VarRef] n | semmle.label | 5 | -| tst.ts:319:12:319:17 | [ArrowFunctionExpr] n => n | tst.ts:319:17:319:17 | [VarRef] n | semmle.order | 5 | -| tst.ts:320:3:320:31 | [Property] consume ... rCase() | tst.ts:320:3:320:9 | [Label] consume | semmle.label | 1 | -| tst.ts:320:3:320:31 | [Property] consume ... rCase() | tst.ts:320:3:320:9 | [Label] consume | semmle.order | 1 | -| tst.ts:320:3:320:31 | [Property] consume ... rCase() | tst.ts:320:12:320:31 | [ArrowFunctionExpr] x => x.toLowerCase() | semmle.label | 2 | -| tst.ts:320:3:320:31 | [Property] consume ... rCase() | tst.ts:320:12:320:31 | [ArrowFunctionExpr] x => x.toLowerCase() | semmle.order | 2 | -| tst.ts:320:12:320:31 | [ArrowFunctionExpr] x => x.toLowerCase() | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:320:12:320:31 | [ArrowFunctionExpr] x => x.toLowerCase() | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:320:12:320:31 | [ArrowFunctionExpr] x => x.toLowerCase() | tst.ts:320:17:320:31 | [MethodCallExpr] x.toLowerCase() | semmle.label | 5 | -| tst.ts:320:12:320:31 | [ArrowFunctionExpr] x => x.toLowerCase() | tst.ts:320:17:320:31 | [MethodCallExpr] x.toLowerCase() | semmle.order | 5 | -| tst.ts:320:17:320:29 | [DotExpr] x.toLowerCase | tst.ts:320:17:320:17 | [VarRef] x | semmle.label | 1 | -| tst.ts:320:17:320:29 | [DotExpr] x.toLowerCase | tst.ts:320:17:320:17 | [VarRef] x | semmle.order | 1 | -| tst.ts:320:17:320:29 | [DotExpr] x.toLowerCase | tst.ts:320:19:320:29 | [Label] toLowerCase | semmle.label | 2 | -| tst.ts:320:17:320:29 | [DotExpr] x.toLowerCase | tst.ts:320:19:320:29 | [Label] toLowerCase | semmle.order | 2 | -| tst.ts:320:17:320:31 | [MethodCallExpr] x.toLowerCase() | tst.ts:320:17:320:29 | [DotExpr] x.toLowerCase | semmle.label | 0 | -| tst.ts:320:17:320:31 | [MethodCallExpr] x.toLowerCase() | tst.ts:320:17:320:29 | [DotExpr] x.toLowerCase | semmle.order | 0 | -| tst.ts:325:1:325:36 | [DeclStmt] const ErrorMap = ... | tst.ts:325:7:325:35 | [VariableDeclarator] ErrorMa ... Error> | semmle.label | 1 | -| tst.ts:325:1:325:36 | [DeclStmt] const ErrorMap = ... | tst.ts:325:7:325:35 | [VariableDeclarator] ErrorMa ... Error> | semmle.order | 1 | -| tst.ts:325:7:325:35 | [VariableDeclarator] ErrorMa ... Error> | tst.ts:325:7:325:14 | [VarDecl] ErrorMap | semmle.label | 1 | -| tst.ts:325:7:325:35 | [VariableDeclarator] ErrorMa ... Error> | tst.ts:325:7:325:14 | [VarDecl] ErrorMap | semmle.order | 1 | -| tst.ts:325:7:325:35 | [VariableDeclarator] ErrorMa ... Error> | tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | semmle.label | 2 | -| tst.ts:325:7:325:35 | [VariableDeclarator] ErrorMa ... Error> | tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | semmle.order | 2 | -| tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | tst.ts:325:18:325:20 | [VarRef] Map | semmle.label | 1 | -| tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | tst.ts:325:18:325:20 | [VarRef] Map | semmle.order | 1 | -| tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | tst.ts:325:22:325:27 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | tst.ts:325:22:325:27 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | tst.ts:325:30:325:34 | [LocalTypeAccess] Error | semmle.label | 3 | -| tst.ts:325:18:325:35 | [ExpressionWithTypeArguments] Map | tst.ts:325:30:325:34 | [LocalTypeAccess] Error | semmle.order | 3 | -| tst.ts:327:1:327:32 | [DeclStmt] const errorMap = ... | tst.ts:327:7:327:31 | [VariableDeclarator] errorMa ... orMap() | semmle.label | 1 | -| tst.ts:327:1:327:32 | [DeclStmt] const errorMap = ... | tst.ts:327:7:327:31 | [VariableDeclarator] errorMa ... orMap() | semmle.order | 1 | -| tst.ts:327:7:327:31 | [VariableDeclarator] errorMa ... orMap() | tst.ts:327:7:327:14 | [VarDecl] errorMap | semmle.label | 1 | -| tst.ts:327:7:327:31 | [VariableDeclarator] errorMa ... orMap() | tst.ts:327:7:327:14 | [VarDecl] errorMap | semmle.order | 1 | -| tst.ts:327:7:327:31 | [VariableDeclarator] errorMa ... orMap() | tst.ts:327:18:327:31 | [NewExpr] new ErrorMap() | semmle.label | 2 | -| tst.ts:327:7:327:31 | [VariableDeclarator] errorMa ... orMap() | tst.ts:327:18:327:31 | [NewExpr] new ErrorMap() | semmle.order | 2 | -| tst.ts:327:18:327:31 | [NewExpr] new ErrorMap() | tst.ts:327:22:327:29 | [VarRef] ErrorMap | semmle.label | 0 | -| tst.ts:327:18:327:31 | [NewExpr] new ErrorMap() | tst.ts:327:22:327:29 | [VarRef] ErrorMap | semmle.order | 0 | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | tst.ts:331:6:331:16 | [Identifier] FirstString | semmle.label | 1 | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | tst.ts:331:6:331:16 | [Identifier] FirstString | semmle.order | 1 | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | semmle.label | 3 | -| tst.ts:331:1:334:14 | [TypeAliasDeclaration,TypeDefinition] type Fi ... never; | tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | semmle.order | 3 | -| tst.ts:331:18:331:18 | [TypeParameter] T | tst.ts:331:18:331:18 | [Identifier] T | semmle.label | 1 | -| tst.ts:331:18:331:18 | [TypeParameter] T | tst.ts:331:18:331:18 | [Identifier] T | semmle.order | 1 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:332:3:332:3 | [LocalTypeAccess] T | semmle.label | 1 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:332:3:332:3 | [LocalTypeAccess] T | semmle.order | 1 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:332:13:332:50 | [TupleTypeExpr] [infer ... nown[]] | semmle.label | 2 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:332:13:332:50 | [TupleTypeExpr] [infer ... nown[]] | semmle.order | 2 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:333:9:333:9 | [LocalTypeAccess] S | semmle.label | 3 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:333:9:333:9 | [LocalTypeAccess] S | semmle.order | 3 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:334:9:334:13 | [KeywordTypeExpr] never | semmle.label | 4 | -| tst.ts:332:3:334:13 | [ConditionalTypeExpr] T exten ... : never | tst.ts:334:9:334:13 | [KeywordTypeExpr] never | semmle.order | 4 | -| tst.ts:332:13:332:50 | [TupleTypeExpr] [infer ... nown[]] | tst.ts:332:14:332:35 | [InferTypeExpr] infer S ... string | semmle.label | 1 | -| tst.ts:332:13:332:50 | [TupleTypeExpr] [infer ... nown[]] | tst.ts:332:14:332:35 | [InferTypeExpr] infer S ... string | semmle.order | 1 | -| tst.ts:332:13:332:50 | [TupleTypeExpr] [infer ... nown[]] | tst.ts:332:38:332:49 | [RestTypeExpr] ...unknown[] | semmle.label | 2 | -| tst.ts:332:13:332:50 | [TupleTypeExpr] [infer ... nown[]] | tst.ts:332:38:332:49 | [RestTypeExpr] ...unknown[] | semmle.order | 2 | -| tst.ts:332:14:332:35 | [InferTypeExpr] infer S ... string | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| tst.ts:332:14:332:35 | [InferTypeExpr] infer S ... string | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| tst.ts:332:20:332:35 | [TypeParameter] S extends string | tst.ts:332:20:332:20 | [Identifier] S | semmle.label | 1 | -| tst.ts:332:20:332:35 | [TypeParameter] S extends string | tst.ts:332:20:332:20 | [Identifier] S | semmle.order | 1 | -| tst.ts:332:20:332:35 | [TypeParameter] S extends string | tst.ts:332:30:332:35 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:332:20:332:35 | [TypeParameter] S extends string | tst.ts:332:30:332:35 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:332:38:332:49 | [RestTypeExpr] ...unknown[] | tst.ts:332:41:332:49 | [ArrayTypeExpr] unknown[] | semmle.label | 1 | -| tst.ts:332:38:332:49 | [RestTypeExpr] ...unknown[] | tst.ts:332:41:332:49 | [ArrayTypeExpr] unknown[] | semmle.order | 1 | -| tst.ts:332:41:332:49 | [ArrayTypeExpr] unknown[] | tst.ts:332:41:332:47 | [KeywordTypeExpr] unknown | semmle.label | 1 | -| tst.ts:332:41:332:49 | [ArrayTypeExpr] unknown[] | tst.ts:332:41:332:47 | [KeywordTypeExpr] unknown | semmle.order | 1 | -| tst.ts:336:1:336:51 | [TypeAliasDeclaration,TypeDefinition] type F ... lean]>; | tst.ts:336:6:336:6 | [Identifier] F | semmle.label | 1 | -| tst.ts:336:1:336:51 | [TypeAliasDeclaration,TypeDefinition] type F ... lean]>; | tst.ts:336:6:336:6 | [Identifier] F | semmle.order | 1 | -| tst.ts:336:1:336:51 | [TypeAliasDeclaration,TypeDefinition] type F ... lean]>; | tst.ts:336:10:336:50 | [GenericTypeExpr] FirstSt ... olean]> | semmle.label | 2 | -| tst.ts:336:1:336:51 | [TypeAliasDeclaration,TypeDefinition] type F ... lean]>; | tst.ts:336:10:336:50 | [GenericTypeExpr] FirstSt ... olean]> | semmle.order | 2 | -| tst.ts:336:10:336:50 | [GenericTypeExpr] FirstSt ... olean]> | tst.ts:336:10:336:20 | [LocalTypeAccess] FirstString | semmle.label | 1 | -| tst.ts:336:10:336:50 | [GenericTypeExpr] FirstSt ... olean]> | tst.ts:336:10:336:20 | [LocalTypeAccess] FirstString | semmle.order | 1 | -| tst.ts:336:10:336:50 | [GenericTypeExpr] FirstSt ... olean]> | tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | semmle.label | 2 | -| tst.ts:336:10:336:50 | [GenericTypeExpr] FirstSt ... olean]> | tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | semmle.order | 2 | -| tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | tst.ts:336:23:336:31 | [UnionTypeExpr] 'a' \| 'b' | semmle.label | 1 | -| tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | tst.ts:336:23:336:31 | [UnionTypeExpr] 'a' \| 'b' | semmle.order | 1 | -| tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | tst.ts:336:34:336:39 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | tst.ts:336:34:336:39 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | tst.ts:336:42:336:48 | [KeywordTypeExpr] boolean | semmle.label | 3 | -| tst.ts:336:22:336:49 | [TupleTypeExpr] ['a' \| ... oolean] | tst.ts:336:42:336:48 | [KeywordTypeExpr] boolean | semmle.order | 3 | -| tst.ts:336:23:336:31 | [UnionTypeExpr] 'a' \| 'b' | tst.ts:336:23:336:25 | [LiteralTypeExpr] 'a' | semmle.label | 1 | -| tst.ts:336:23:336:31 | [UnionTypeExpr] 'a' \| 'b' | tst.ts:336:23:336:25 | [LiteralTypeExpr] 'a' | semmle.order | 1 | -| tst.ts:336:23:336:31 | [UnionTypeExpr] 'a' \| 'b' | tst.ts:336:29:336:31 | [LiteralTypeExpr] 'b' | semmle.label | 2 | -| tst.ts:336:23:336:31 | [UnionTypeExpr] 'a' \| 'b' | tst.ts:336:29:336:31 | [LiteralTypeExpr] 'b' | semmle.order | 2 | -| tst.ts:338:1:338:17 | [DeclStmt] const a = ... | tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | semmle.label | 1 | -| tst.ts:338:1:338:17 | [DeclStmt] const a = ... | tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | semmle.order | 1 | -| tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | tst.ts:338:7:338:7 | [VarDecl] a | semmle.label | 1 | -| tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | tst.ts:338:7:338:7 | [VarDecl] a | semmle.order | 1 | -| tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | tst.ts:338:10:338:10 | [LocalTypeAccess] F | semmle.label | 2 | -| tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | tst.ts:338:10:338:10 | [LocalTypeAccess] F | semmle.order | 2 | -| tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | tst.ts:338:14:338:16 | [Literal] 'a' | semmle.label | 3 | -| tst.ts:338:7:338:16 | [VariableDeclarator] a: F = 'a' | tst.ts:338:14:338:16 | [Literal] 'a' | semmle.order | 3 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | tst.ts:342:11:342:15 | [Identifier] State | semmle.label | 1 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | tst.ts:342:11:342:15 | [Identifier] State | semmle.order | 1 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | tst.ts:343:3:343:15 | [FieldDeclaration] get: () => T; | semmle.label | 3 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | tst.ts:343:3:343:15 | [FieldDeclaration] get: () => T; | semmle.order | 3 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | tst.ts:344:3:344:26 | [FieldDeclaration] set: (v ... > void; | semmle.label | 4 | -| tst.ts:342:1:345:1 | [InterfaceDeclaration,TypeDefinition] interfa ... void; } | tst.ts:344:3:344:26 | [FieldDeclaration] set: (v ... > void; | semmle.order | 4 | -| tst.ts:342:17:342:24 | [TypeParameter] in out T | tst.ts:342:24:342:24 | [Identifier] T | semmle.label | 1 | -| tst.ts:342:17:342:24 | [TypeParameter] in out T | tst.ts:342:24:342:24 | [Identifier] T | semmle.order | 1 | -| tst.ts:343:3:343:15 | [FieldDeclaration] get: () => T; | tst.ts:343:3:343:5 | [Label] get | semmle.label | 1 | -| tst.ts:343:3:343:15 | [FieldDeclaration] get: () => T; | tst.ts:343:3:343:5 | [Label] get | semmle.order | 1 | -| tst.ts:343:3:343:15 | [FieldDeclaration] get: () => T; | tst.ts:343:8:343:14 | [FunctionTypeExpr] () => T | semmle.label | 2 | -| tst.ts:343:3:343:15 | [FieldDeclaration] get: () => T; | tst.ts:343:8:343:14 | [FunctionTypeExpr] () => T | semmle.order | 2 | -| tst.ts:343:8:343:14 | [FunctionExpr] () => T | tst.ts:343:14:343:14 | [LocalTypeAccess] T | semmle.label | 4 | -| tst.ts:343:8:343:14 | [FunctionExpr] () => T | tst.ts:343:14:343:14 | [LocalTypeAccess] T | semmle.order | 4 | -| tst.ts:343:8:343:14 | [FunctionTypeExpr] () => T | tst.ts:343:8:343:14 | [FunctionExpr] () => T | semmle.label | 1 | -| tst.ts:343:8:343:14 | [FunctionTypeExpr] () => T | tst.ts:343:8:343:14 | [FunctionExpr] () => T | semmle.order | 1 | -| tst.ts:344:3:344:26 | [FieldDeclaration] set: (v ... > void; | tst.ts:344:3:344:5 | [Label] set | semmle.label | 1 | -| tst.ts:344:3:344:26 | [FieldDeclaration] set: (v ... > void; | tst.ts:344:3:344:5 | [Label] set | semmle.order | 1 | -| tst.ts:344:3:344:26 | [FieldDeclaration] set: (v ... > void; | tst.ts:344:8:344:25 | [FunctionTypeExpr] (value: T) => void | semmle.label | 2 | -| tst.ts:344:3:344:26 | [FieldDeclaration] set: (v ... > void; | tst.ts:344:8:344:25 | [FunctionTypeExpr] (value: T) => void | semmle.order | 2 | -| tst.ts:344:8:344:25 | [FunctionExpr] (value: T) => void | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:344:8:344:25 | [FunctionExpr] (value: T) => void | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:344:8:344:25 | [FunctionExpr] (value: T) => void | tst.ts:344:22:344:25 | [KeywordTypeExpr] void | semmle.label | 4 | -| tst.ts:344:8:344:25 | [FunctionExpr] (value: T) => void | tst.ts:344:22:344:25 | [KeywordTypeExpr] void | semmle.order | 4 | -| tst.ts:344:8:344:25 | [FunctionTypeExpr] (value: T) => void | tst.ts:344:8:344:25 | [FunctionExpr] (value: T) => void | semmle.label | 1 | -| tst.ts:344:8:344:25 | [FunctionTypeExpr] (value: T) => void | tst.ts:344:8:344:25 | [FunctionExpr] (value: T) => void | semmle.order | 1 | -| tst.ts:344:9:344:13 | [SimpleParameter] value | tst.ts:344:16:344:16 | [LocalTypeAccess] T | semmle.label | -2 | -| tst.ts:344:9:344:13 | [SimpleParameter] value | tst.ts:344:16:344:16 | [LocalTypeAccess] T | semmle.order | -2 | -| tst.ts:347:1:350:1 | [DeclStmt] const state = ... | tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | semmle.label | 1 | -| tst.ts:347:1:350:1 | [DeclStmt] const state = ... | tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | semmle.order | 1 | -| tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | tst.ts:347:7:347:11 | [VarDecl] state | semmle.label | 1 | -| tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | tst.ts:347:7:347:11 | [VarDecl] state | semmle.order | 1 | -| tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | tst.ts:347:14:347:26 | [GenericTypeExpr] State | semmle.label | 2 | -| tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | tst.ts:347:14:347:26 | [GenericTypeExpr] State | semmle.order | 2 | -| tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | tst.ts:347:30:350:1 | [ObjectExpr] {get: ...} | semmle.label | 3 | -| tst.ts:347:7:350:1 | [VariableDeclarator] state: ... > { } } | tst.ts:347:30:350:1 | [ObjectExpr] {get: ...} | semmle.order | 3 | -| tst.ts:347:14:347:26 | [GenericTypeExpr] State | tst.ts:347:14:347:18 | [LocalTypeAccess] State | semmle.label | 1 | -| tst.ts:347:14:347:26 | [GenericTypeExpr] State | tst.ts:347:14:347:18 | [LocalTypeAccess] State | semmle.order | 1 | -| tst.ts:347:14:347:26 | [GenericTypeExpr] State | tst.ts:347:20:347:25 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:347:14:347:26 | [GenericTypeExpr] State | tst.ts:347:20:347:25 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:347:30:350:1 | [ObjectExpr] {get: ...} | tst.ts:348:3:348:15 | [Property] get: () => 42 | semmle.label | 1 | -| tst.ts:347:30:350:1 | [ObjectExpr] {get: ...} | tst.ts:348:3:348:15 | [Property] get: () => 42 | semmle.order | 1 | -| tst.ts:347:30:350:1 | [ObjectExpr] {get: ...} | tst.ts:349:3:349:21 | [Property] set: (value) => { } | semmle.label | 2 | -| tst.ts:347:30:350:1 | [ObjectExpr] {get: ...} | tst.ts:349:3:349:21 | [Property] set: (value) => { } | semmle.order | 2 | -| tst.ts:348:3:348:15 | [Property] get: () => 42 | tst.ts:348:3:348:5 | [Label] get | semmle.label | 1 | -| tst.ts:348:3:348:15 | [Property] get: () => 42 | tst.ts:348:3:348:5 | [Label] get | semmle.order | 1 | -| tst.ts:348:3:348:15 | [Property] get: () => 42 | tst.ts:348:8:348:15 | [ArrowFunctionExpr] () => 42 | semmle.label | 2 | -| tst.ts:348:3:348:15 | [Property] get: () => 42 | tst.ts:348:8:348:15 | [ArrowFunctionExpr] () => 42 | semmle.order | 2 | -| tst.ts:348:8:348:15 | [ArrowFunctionExpr] () => 42 | tst.ts:348:14:348:15 | [Literal] 42 | semmle.label | 5 | -| tst.ts:348:8:348:15 | [ArrowFunctionExpr] () => 42 | tst.ts:348:14:348:15 | [Literal] 42 | semmle.order | 5 | -| tst.ts:349:3:349:21 | [Property] set: (value) => { } | tst.ts:349:3:349:5 | [Label] set | semmle.label | 1 | -| tst.ts:349:3:349:21 | [Property] set: (value) => { } | tst.ts:349:3:349:5 | [Label] set | semmle.order | 1 | -| tst.ts:349:3:349:21 | [Property] set: (value) => { } | tst.ts:349:8:349:21 | [ArrowFunctionExpr] (value) => { } | semmle.label | 2 | -| tst.ts:349:3:349:21 | [Property] set: (value) => { } | tst.ts:349:8:349:21 | [ArrowFunctionExpr] (value) => { } | semmle.order | 2 | -| tst.ts:349:8:349:21 | [ArrowFunctionExpr] (value) => { } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:349:8:349:21 | [ArrowFunctionExpr] (value) => { } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:349:8:349:21 | [ArrowFunctionExpr] (value) => { } | tst.ts:349:19:349:21 | [BlockStmt] { } | semmle.label | 5 | -| tst.ts:349:8:349:21 | [ArrowFunctionExpr] (value) => { } | tst.ts:349:19:349:21 | [BlockStmt] { } | semmle.order | 5 | -| tst.ts:352:1:352:29 | [DeclStmt] const fortyTwo = ... | tst.ts:352:7:352:28 | [VariableDeclarator] fortyTw ... e.get() | semmle.label | 1 | -| tst.ts:352:1:352:29 | [DeclStmt] const fortyTwo = ... | tst.ts:352:7:352:28 | [VariableDeclarator] fortyTw ... e.get() | semmle.order | 1 | -| tst.ts:352:7:352:28 | [VariableDeclarator] fortyTw ... e.get() | tst.ts:352:7:352:14 | [VarDecl] fortyTwo | semmle.label | 1 | -| tst.ts:352:7:352:28 | [VariableDeclarator] fortyTw ... e.get() | tst.ts:352:7:352:14 | [VarDecl] fortyTwo | semmle.order | 1 | -| tst.ts:352:7:352:28 | [VariableDeclarator] fortyTw ... e.get() | tst.ts:352:18:352:28 | [MethodCallExpr] state.get() | semmle.label | 2 | -| tst.ts:352:7:352:28 | [VariableDeclarator] fortyTw ... e.get() | tst.ts:352:18:352:28 | [MethodCallExpr] state.get() | semmle.order | 2 | -| tst.ts:352:18:352:26 | [DotExpr] state.get | tst.ts:352:18:352:22 | [VarRef] state | semmle.label | 1 | -| tst.ts:352:18:352:26 | [DotExpr] state.get | tst.ts:352:18:352:22 | [VarRef] state | semmle.order | 1 | -| tst.ts:352:18:352:26 | [DotExpr] state.get | tst.ts:352:24:352:26 | [Label] get | semmle.label | 2 | -| tst.ts:352:18:352:26 | [DotExpr] state.get | tst.ts:352:24:352:26 | [Label] get | semmle.order | 2 | -| tst.ts:352:18:352:28 | [MethodCallExpr] state.get() | tst.ts:352:18:352:26 | [DotExpr] state.get | semmle.label | 0 | -| tst.ts:352:18:352:28 | [MethodCallExpr] state.get() | tst.ts:352:18:352:26 | [DotExpr] state.get | semmle.order | 0 | -| tst.ts:356:1:356:44 | [ImportDeclaration] import ... S.mjs'; | tst.ts:356:8:356:18 | [ImportSpecifier] tstModuleES | semmle.label | 1 | -| tst.ts:356:1:356:44 | [ImportDeclaration] import ... S.mjs'; | tst.ts:356:8:356:18 | [ImportSpecifier] tstModuleES | semmle.order | 1 | -| tst.ts:356:1:356:44 | [ImportDeclaration] import ... S.mjs'; | tst.ts:356:25:356:43 | [Literal] './tstModuleES.mjs' | semmle.label | 2 | -| tst.ts:356:1:356:44 | [ImportDeclaration] import ... S.mjs'; | tst.ts:356:25:356:43 | [Literal] './tstModuleES.mjs' | semmle.order | 2 | -| tst.ts:356:8:356:18 | [ImportSpecifier] tstModuleES | tst.ts:356:8:356:18 | [VarDecl] tstModuleES | semmle.label | 1 | -| tst.ts:356:8:356:18 | [ImportSpecifier] tstModuleES | tst.ts:356:8:356:18 | [VarDecl] tstModuleES | semmle.order | 1 | -| tst.ts:358:1:358:11 | [DotExpr] console.log | tst.ts:358:1:358:7 | [VarRef] console | semmle.label | 1 | -| tst.ts:358:1:358:11 | [DotExpr] console.log | tst.ts:358:1:358:7 | [VarRef] console | semmle.order | 1 | -| tst.ts:358:1:358:11 | [DotExpr] console.log | tst.ts:358:9:358:11 | [Label] log | semmle.label | 2 | -| tst.ts:358:1:358:11 | [DotExpr] console.log | tst.ts:358:9:358:11 | [Label] log | semmle.order | 2 | -| tst.ts:358:1:358:26 | [MethodCallExpr] console ... leES()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:358:1:358:26 | [MethodCallExpr] console ... leES()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:358:1:358:26 | [MethodCallExpr] console ... leES()) | tst.ts:358:1:358:11 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:358:1:358:26 | [MethodCallExpr] console ... leES()) | tst.ts:358:1:358:11 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:358:1:358:27 | [ExprStmt] console ... eES()); | tst.ts:358:1:358:26 | [MethodCallExpr] console ... leES()) | semmle.label | 1 | -| tst.ts:358:1:358:27 | [ExprStmt] console ... eES()); | tst.ts:358:1:358:26 | [MethodCallExpr] console ... leES()) | semmle.order | 1 | -| tst.ts:358:13:358:25 | [CallExpr] tstModuleES() | tst.ts:358:13:358:23 | [VarRef] tstModuleES | semmle.label | 0 | -| tst.ts:358:13:358:25 | [CallExpr] tstModuleES() | tst.ts:358:13:358:23 | [VarRef] tstModuleES | semmle.order | 0 | -| tst.ts:360:1:360:50 | [ImportDeclaration] import ... S.cjs'; | tst.ts:360:10:360:21 | [ImportSpecifier] tstModuleCJS | semmle.label | 1 | -| tst.ts:360:1:360:50 | [ImportDeclaration] import ... S.cjs'; | tst.ts:360:10:360:21 | [ImportSpecifier] tstModuleCJS | semmle.order | 1 | -| tst.ts:360:1:360:50 | [ImportDeclaration] import ... S.cjs'; | tst.ts:360:30:360:49 | [Literal] './tstModuleCJS.cjs' | semmle.label | 2 | -| tst.ts:360:1:360:50 | [ImportDeclaration] import ... S.cjs'; | tst.ts:360:30:360:49 | [Literal] './tstModuleCJS.cjs' | semmle.order | 2 | -| tst.ts:360:10:360:21 | [ImportSpecifier] tstModuleCJS | tst.ts:360:10:360:21 | [Label] tstModuleCJS | semmle.label | 1 | -| tst.ts:360:10:360:21 | [ImportSpecifier] tstModuleCJS | tst.ts:360:10:360:21 | [Label] tstModuleCJS | semmle.order | 1 | -| tst.ts:360:10:360:21 | [ImportSpecifier] tstModuleCJS | tst.ts:360:10:360:21 | [VarDecl] tstModuleCJS | semmle.label | 2 | -| tst.ts:360:10:360:21 | [ImportSpecifier] tstModuleCJS | tst.ts:360:10:360:21 | [VarDecl] tstModuleCJS | semmle.order | 2 | -| tst.ts:362:1:362:11 | [DotExpr] console.log | tst.ts:362:1:362:7 | [VarRef] console | semmle.label | 1 | -| tst.ts:362:1:362:11 | [DotExpr] console.log | tst.ts:362:1:362:7 | [VarRef] console | semmle.order | 1 | -| tst.ts:362:1:362:11 | [DotExpr] console.log | tst.ts:362:9:362:11 | [Label] log | semmle.label | 2 | -| tst.ts:362:1:362:11 | [DotExpr] console.log | tst.ts:362:9:362:11 | [Label] log | semmle.order | 2 | -| tst.ts:362:1:362:27 | [MethodCallExpr] console ... eCJS()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:362:1:362:27 | [MethodCallExpr] console ... eCJS()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:362:1:362:27 | [MethodCallExpr] console ... eCJS()) | tst.ts:362:1:362:11 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:362:1:362:27 | [MethodCallExpr] console ... eCJS()) | tst.ts:362:1:362:11 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:362:1:362:28 | [ExprStmt] console ... CJS()); | tst.ts:362:1:362:27 | [MethodCallExpr] console ... eCJS()) | semmle.label | 1 | -| tst.ts:362:1:362:28 | [ExprStmt] console ... CJS()); | tst.ts:362:1:362:27 | [MethodCallExpr] console ... eCJS()) | semmle.order | 1 | -| tst.ts:362:13:362:26 | [CallExpr] tstModuleCJS() | tst.ts:362:13:362:24 | [VarRef] tstModuleCJS | semmle.label | 0 | -| tst.ts:362:13:362:26 | [CallExpr] tstModuleCJS() | tst.ts:362:13:362:24 | [VarRef] tstModuleCJS | semmle.order | 0 | -| tst.ts:368:1:368:34 | [ImportDeclaration] import ... ffixA'; | tst.ts:368:8:368:13 | [ImportSpecifier] * as A | semmle.label | 1 | -| tst.ts:368:1:368:34 | [ImportDeclaration] import ... ffixA'; | tst.ts:368:8:368:13 | [ImportSpecifier] * as A | semmle.order | 1 | -| tst.ts:368:1:368:34 | [ImportDeclaration] import ... ffixA'; | tst.ts:368:20:368:33 | [Literal] './tstSuffixA' | semmle.label | 2 | -| tst.ts:368:1:368:34 | [ImportDeclaration] import ... ffixA'; | tst.ts:368:20:368:33 | [Literal] './tstSuffixA' | semmle.order | 2 | -| tst.ts:368:8:368:13 | [ImportSpecifier] * as A | tst.ts:368:13:368:13 | [VarDecl] A | semmle.label | 1 | -| tst.ts:368:8:368:13 | [ImportSpecifier] * as A | tst.ts:368:13:368:13 | [VarDecl] A | semmle.order | 1 | -| tst.ts:370:1:370:11 | [DotExpr] console.log | tst.ts:370:1:370:7 | [VarRef] console | semmle.label | 1 | -| tst.ts:370:1:370:11 | [DotExpr] console.log | tst.ts:370:1:370:7 | [VarRef] console | semmle.order | 1 | -| tst.ts:370:1:370:11 | [DotExpr] console.log | tst.ts:370:9:370:11 | [Label] log | semmle.label | 2 | -| tst.ts:370:1:370:11 | [DotExpr] console.log | tst.ts:370:9:370:11 | [Label] log | semmle.order | 2 | -| tst.ts:370:1:370:29 | [MethodCallExpr] console ... File()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:370:1:370:29 | [MethodCallExpr] console ... File()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:370:1:370:29 | [MethodCallExpr] console ... File()) | tst.ts:370:1:370:11 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:370:1:370:29 | [MethodCallExpr] console ... File()) | tst.ts:370:1:370:11 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:370:1:370:30 | [ExprStmt] console ... ile()); | tst.ts:370:1:370:29 | [MethodCallExpr] console ... File()) | semmle.label | 1 | -| tst.ts:370:1:370:30 | [ExprStmt] console ... ile()); | tst.ts:370:1:370:29 | [MethodCallExpr] console ... File()) | semmle.order | 1 | -| tst.ts:370:13:370:26 | [DotExpr] A.resolvedFile | tst.ts:370:13:370:13 | [VarRef] A | semmle.label | 1 | -| tst.ts:370:13:370:26 | [DotExpr] A.resolvedFile | tst.ts:370:13:370:13 | [VarRef] A | semmle.order | 1 | -| tst.ts:370:13:370:26 | [DotExpr] A.resolvedFile | tst.ts:370:15:370:26 | [Label] resolvedFile | semmle.label | 2 | -| tst.ts:370:13:370:26 | [DotExpr] A.resolvedFile | tst.ts:370:15:370:26 | [Label] resolvedFile | semmle.order | 2 | -| tst.ts:370:13:370:28 | [MethodCallExpr] A.resolvedFile() | tst.ts:370:13:370:26 | [DotExpr] A.resolvedFile | semmle.label | 0 | -| tst.ts:370:13:370:28 | [MethodCallExpr] A.resolvedFile() | tst.ts:370:13:370:26 | [DotExpr] A.resolvedFile | semmle.order | 0 | -| tst.ts:372:1:372:34 | [ImportDeclaration] import ... ffixB'; | tst.ts:372:8:372:13 | [ImportSpecifier] * as B | semmle.label | 1 | -| tst.ts:372:1:372:34 | [ImportDeclaration] import ... ffixB'; | tst.ts:372:8:372:13 | [ImportSpecifier] * as B | semmle.order | 1 | -| tst.ts:372:1:372:34 | [ImportDeclaration] import ... ffixB'; | tst.ts:372:20:372:33 | [Literal] './tstSuffixB' | semmle.label | 2 | -| tst.ts:372:1:372:34 | [ImportDeclaration] import ... ffixB'; | tst.ts:372:20:372:33 | [Literal] './tstSuffixB' | semmle.order | 2 | -| tst.ts:372:8:372:13 | [ImportSpecifier] * as B | tst.ts:372:13:372:13 | [VarDecl] B | semmle.label | 1 | -| tst.ts:372:8:372:13 | [ImportSpecifier] * as B | tst.ts:372:13:372:13 | [VarDecl] B | semmle.order | 1 | -| tst.ts:374:1:374:11 | [DotExpr] console.log | tst.ts:374:1:374:7 | [VarRef] console | semmle.label | 1 | -| tst.ts:374:1:374:11 | [DotExpr] console.log | tst.ts:374:1:374:7 | [VarRef] console | semmle.order | 1 | -| tst.ts:374:1:374:11 | [DotExpr] console.log | tst.ts:374:9:374:11 | [Label] log | semmle.label | 2 | -| tst.ts:374:1:374:11 | [DotExpr] console.log | tst.ts:374:9:374:11 | [Label] log | semmle.order | 2 | -| tst.ts:374:1:374:29 | [MethodCallExpr] console ... File()) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:374:1:374:29 | [MethodCallExpr] console ... File()) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:374:1:374:29 | [MethodCallExpr] console ... File()) | tst.ts:374:1:374:11 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:374:1:374:29 | [MethodCallExpr] console ... File()) | tst.ts:374:1:374:11 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:374:1:374:30 | [ExprStmt] console ... ile()); | tst.ts:374:1:374:29 | [MethodCallExpr] console ... File()) | semmle.label | 1 | -| tst.ts:374:1:374:30 | [ExprStmt] console ... ile()); | tst.ts:374:1:374:29 | [MethodCallExpr] console ... File()) | semmle.order | 1 | -| tst.ts:374:13:374:26 | [DotExpr] B.resolvedFile | tst.ts:374:13:374:13 | [VarRef] B | semmle.label | 1 | -| tst.ts:374:13:374:26 | [DotExpr] B.resolvedFile | tst.ts:374:13:374:13 | [VarRef] B | semmle.order | 1 | -| tst.ts:374:13:374:26 | [DotExpr] B.resolvedFile | tst.ts:374:15:374:26 | [Label] resolvedFile | semmle.label | 2 | -| tst.ts:374:13:374:26 | [DotExpr] B.resolvedFile | tst.ts:374:15:374:26 | [Label] resolvedFile | semmle.order | 2 | -| tst.ts:374:13:374:28 | [MethodCallExpr] B.resolvedFile() | tst.ts:374:13:374:26 | [DotExpr] B.resolvedFile | semmle.label | 0 | -| tst.ts:374:13:374:28 | [MethodCallExpr] B.resolvedFile() | tst.ts:374:13:374:26 | [DotExpr] B.resolvedFile | semmle.order | 0 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:379:8:379:11 | [VarDecl] TS48 | semmle.label | 1 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:379:8:379:11 | [VarDecl] TS48 | semmle.order | 1 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:381:5:381:73 | [TypeAliasDeclaration,TypeDefinition] type So ... never; | semmle.label | 2 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:381:5:381:73 | [TypeAliasDeclaration,TypeDefinition] type So ... never; | semmle.order | 2 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | semmle.label | 3 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | semmle.order | 3 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:385:5:385:74 | [DeclStmt] let [a, ... ye!"]); | semmle.label | 4 | -| tst.ts:379:1:386:1 | [NamespaceDeclaration] module ... ; } | tst.ts:385:5:385:74 | [DeclStmt] let [a, ... ye!"]); | semmle.order | 4 | -| tst.ts:381:5:381:73 | [TypeAliasDeclaration,TypeDefinition] type So ... never; | tst.ts:381:10:381:16 | [Identifier] SomeNum | semmle.label | 1 | -| tst.ts:381:5:381:73 | [TypeAliasDeclaration,TypeDefinition] type So ... never; | tst.ts:381:10:381:16 | [Identifier] SomeNum | semmle.order | 1 | -| tst.ts:381:5:381:73 | [TypeAliasDeclaration,TypeDefinition] type So ... never; | tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | semmle.label | 2 | -| tst.ts:381:5:381:73 | [TypeAliasDeclaration,TypeDefinition] type So ... never; | tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | semmle.order | 2 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:20:381:24 | [LiteralTypeExpr] "100" | semmle.label | 1 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:20:381:24 | [LiteralTypeExpr] "100" | semmle.order | 1 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:34:381:60 | [TemplateLiteralTypeExpr] `${infe ... umber}` | semmle.label | 2 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:34:381:60 | [TemplateLiteralTypeExpr] `${infe ... umber}` | semmle.order | 2 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:64:381:64 | [LocalTypeAccess] U | semmle.label | 3 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:64:381:64 | [LocalTypeAccess] U | semmle.order | 3 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:68:381:72 | [KeywordTypeExpr] never | semmle.label | 4 | -| tst.ts:381:20:381:72 | [ConditionalTypeExpr] "100" e ... : never | tst.ts:381:68:381:72 | [KeywordTypeExpr] never | semmle.order | 4 | -| tst.ts:381:34:381:60 | [TemplateLiteralTypeExpr] `${infe ... umber}` | tst.ts:381:37:381:58 | [InferTypeExpr] infer U ... number | semmle.label | 1 | -| tst.ts:381:34:381:60 | [TemplateLiteralTypeExpr] `${infe ... umber}` | tst.ts:381:37:381:58 | [InferTypeExpr] infer U ... number | semmle.order | 1 | -| tst.ts:381:37:381:58 | [InferTypeExpr] infer U ... number | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| tst.ts:381:37:381:58 | [InferTypeExpr] infer U ... number | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| tst.ts:381:43:381:58 | [TypeParameter] U extends number | tst.ts:381:43:381:43 | [Identifier] U | semmle.label | 1 | -| tst.ts:381:43:381:58 | [TypeParameter] U extends number | tst.ts:381:43:381:43 | [Identifier] U | semmle.order | 1 | -| tst.ts:381:43:381:58 | [TypeParameter] U extends number | tst.ts:381:53:381:58 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:381:43:381:58 | [TypeParameter] U extends number | tst.ts:381:53:381:58 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (TypeParameters) | semmle.label | 2 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (TypeParameters) | semmle.order | 2 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | tst.ts:383:22:383:35 | [VarDecl] chooseRandomly | semmle.label | 0 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | tst.ts:383:22:383:35 | [VarDecl] chooseRandomly | semmle.order | 0 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | tst.ts:383:53:383:53 | [LocalTypeAccess] T | semmle.label | 4 | -| tst.ts:383:5:383:54 | [FunctionDeclStmt] declare ... T): T; | tst.ts:383:53:383:53 | [LocalTypeAccess] T | semmle.order | 4 | -| tst.ts:383:37:383:37 | [TypeParameter] T | tst.ts:383:37:383:37 | [Identifier] T | semmle.label | 1 | -| tst.ts:383:37:383:37 | [TypeParameter] T | tst.ts:383:37:383:37 | [Identifier] T | semmle.order | 1 | -| tst.ts:383:40:383:40 | [SimpleParameter] x | tst.ts:383:43:383:43 | [LocalTypeAccess] T | semmle.label | -2 | -| tst.ts:383:40:383:40 | [SimpleParameter] x | tst.ts:383:43:383:43 | [LocalTypeAccess] T | semmle.order | -2 | -| tst.ts:383:46:383:46 | [SimpleParameter] y | tst.ts:383:49:383:49 | [LocalTypeAccess] T | semmle.label | -2 | -| tst.ts:383:46:383:46 | [SimpleParameter] y | tst.ts:383:49:383:49 | [LocalTypeAccess] T | semmle.order | -2 | -| tst.ts:385:5:385:74 | [DeclStmt] let [a, ... ye!"]); | tst.ts:385:9:385:73 | [VariableDeclarator] [a, b, ... bye!"]) | semmle.label | 1 | -| tst.ts:385:5:385:74 | [DeclStmt] let [a, ... ye!"]); | tst.ts:385:9:385:73 | [VariableDeclarator] [a, b, ... bye!"]) | semmle.order | 1 | -| tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | tst.ts:385:10:385:10 | [VarDecl] a | semmle.label | 1 | -| tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | tst.ts:385:10:385:10 | [VarDecl] a | semmle.order | 1 | -| tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | tst.ts:385:13:385:13 | [VarDecl] b | semmle.label | 2 | -| tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | tst.ts:385:13:385:13 | [VarDecl] b | semmle.order | 2 | -| tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | tst.ts:385:16:385:16 | [VarDecl] c | semmle.label | 3 | -| tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | tst.ts:385:16:385:16 | [VarDecl] c | semmle.order | 3 | -| tst.ts:385:9:385:73 | [VariableDeclarator] [a, b, ... bye!"]) | tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | semmle.label | 1 | -| tst.ts:385:9:385:73 | [VariableDeclarator] [a, b, ... bye!"]) | tst.ts:385:9:385:17 | [ArrayPattern] [a, b, c] | semmle.order | 1 | -| tst.ts:385:9:385:73 | [VariableDeclarator] [a, b, ... bye!"]) | tst.ts:385:21:385:73 | [CallExpr] chooseR ... bye!"]) | semmle.label | 2 | -| tst.ts:385:9:385:73 | [VariableDeclarator] [a, b, ... bye!"]) | tst.ts:385:21:385:73 | [CallExpr] chooseR ... bye!"]) | semmle.order | 2 | -| tst.ts:385:21:385:73 | [CallExpr] chooseR ... bye!"]) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:385:21:385:73 | [CallExpr] chooseR ... bye!"]) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:385:21:385:73 | [CallExpr] chooseR ... bye!"]) | tst.ts:385:21:385:34 | [VarRef] chooseRandomly | semmle.label | 0 | -| tst.ts:385:21:385:73 | [CallExpr] chooseR ... bye!"]) | tst.ts:385:21:385:34 | [VarRef] chooseRandomly | semmle.order | 0 | -| tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | tst.ts:385:37:385:38 | [Literal] 42 | semmle.label | 1 | -| tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | tst.ts:385:37:385:38 | [Literal] 42 | semmle.order | 1 | -| tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | tst.ts:385:41:385:44 | [Literal] true | semmle.label | 2 | -| tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | tst.ts:385:41:385:44 | [Literal] true | semmle.order | 2 | -| tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | tst.ts:385:47:385:51 | [Literal] "hi!" | semmle.label | 3 | -| tst.ts:385:36:385:52 | [ArrayExpr] [42, true, "hi!"] | tst.ts:385:47:385:51 | [Literal] "hi!" | semmle.order | 3 | -| tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | tst.ts:385:56:385:56 | [Literal] 0 | semmle.label | 1 | -| tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | tst.ts:385:56:385:56 | [Literal] 0 | semmle.order | 1 | -| tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | tst.ts:385:59:385:63 | [Literal] false | semmle.label | 2 | -| tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | tst.ts:385:59:385:63 | [Literal] false | semmle.order | 2 | -| tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | tst.ts:385:66:385:71 | [Literal] "bye!" | semmle.label | 3 | -| tst.ts:385:55:385:72 | [ArrayExpr] [0, false, "bye!"] | tst.ts:385:66:385:71 | [Literal] "bye!" | semmle.order | 3 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:390:8:390:11 | [VarDecl] TS49 | semmle.label | 1 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:390:8:390:11 | [VarDecl] TS49 | semmle.order | 1 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:391:3:391:41 | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | semmle.label | 2 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:391:3:391:41 | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | semmle.order | 2 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:393:3:393:56 | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | semmle.label | 3 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:393:3:393:56 | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | semmle.order | 3 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:395:3:399:43 | [DeclStmt] const palette = ... | semmle.label | 4 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:395:3:399:43 | [DeclStmt] const palette = ... | semmle.order | 4 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:402:3:402:41 | [DeclStmt] const redComponent = ... | semmle.label | 5 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:402:3:402:41 | [DeclStmt] const redComponent = ... | semmle.order | 5 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:404:3:406:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | semmle.label | 6 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:404:3:406:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | semmle.order | 6 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:408:3:410:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | semmle.label | 7 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:408:3:410:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | semmle.order | 7 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 8 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 8 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.label | 9 | -| tst.ts:390:1:426:1 | [NamespaceDeclaration] module ... } } } | tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.order | 9 | -| tst.ts:391:3:391:41 | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | tst.ts:391:8:391:13 | [Identifier] Colors | semmle.label | 1 | -| tst.ts:391:3:391:41 | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | tst.ts:391:8:391:13 | [Identifier] Colors | semmle.order | 1 | -| tst.ts:391:3:391:41 | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | semmle.label | 2 | -| tst.ts:391:3:391:41 | [TypeAliasDeclaration,TypeDefinition] type Co ... "blue"; | tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | semmle.order | 2 | -| tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | tst.ts:391:17:391:21 | [LiteralTypeExpr] "red" | semmle.label | 1 | -| tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | tst.ts:391:17:391:21 | [LiteralTypeExpr] "red" | semmle.order | 1 | -| tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | tst.ts:391:25:391:31 | [LiteralTypeExpr] "green" | semmle.label | 2 | -| tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | tst.ts:391:25:391:31 | [LiteralTypeExpr] "green" | semmle.order | 2 | -| tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | tst.ts:391:35:391:40 | [LiteralTypeExpr] "blue" | semmle.label | 3 | -| tst.ts:391:17:391:40 | [UnionTypeExpr] "red" \| ... "blue" | tst.ts:391:35:391:40 | [LiteralTypeExpr] "blue" | semmle.order | 3 | -| tst.ts:393:3:393:56 | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | tst.ts:393:8:393:10 | [Identifier] RGB | semmle.label | 1 | -| tst.ts:393:3:393:56 | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | tst.ts:393:8:393:10 | [Identifier] RGB | semmle.order | 1 | -| tst.ts:393:3:393:56 | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | semmle.label | 2 | -| tst.ts:393:3:393:56 | [TypeAliasDeclaration,TypeDefinition] type RG ... umber]; | tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | semmle.order | 2 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:15:393:17 | [Identifier] red | semmle.label | 1 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:15:393:17 | [Identifier] red | semmle.order | 1 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:20:393:25 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:20:393:25 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:28:393:32 | [Identifier] green | semmle.label | 3 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:28:393:32 | [Identifier] green | semmle.order | 3 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:35:393:40 | [KeywordTypeExpr] number | semmle.label | 4 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:35:393:40 | [KeywordTypeExpr] number | semmle.order | 4 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:43:393:46 | [Identifier] blue | semmle.label | 5 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:43:393:46 | [Identifier] blue | semmle.order | 5 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:49:393:54 | [KeywordTypeExpr] number | semmle.label | 6 | -| tst.ts:393:14:393:55 | [TupleTypeExpr] [red: n ... number] | tst.ts:393:49:393:54 | [KeywordTypeExpr] number | semmle.order | 6 | -| tst.ts:395:3:399:43 | [DeclStmt] const palette = ... | tst.ts:395:9:399:42 | [VariableDeclarator] palette ... \| RGB> | semmle.label | 1 | -| tst.ts:395:3:399:43 | [DeclStmt] const palette = ... | tst.ts:395:9:399:42 | [VariableDeclarator] palette ... \| RGB> | semmle.order | 1 | -| tst.ts:395:9:399:42 | [VariableDeclarator] palette ... \| RGB> | tst.ts:395:9:395:15 | [VarDecl] palette | semmle.label | 1 | -| tst.ts:395:9:399:42 | [VariableDeclarator] palette ... \| RGB> | tst.ts:395:9:395:15 | [VarDecl] palette | semmle.order | 1 | -| tst.ts:395:9:399:42 | [VariableDeclarator] palette ... \| RGB> | tst.ts:395:19:399:42 | [SatisfiesExpr] { r ... \| RGB> | semmle.label | 2 | -| tst.ts:395:9:399:42 | [VariableDeclarator] palette ... \| RGB> | tst.ts:395:19:399:42 | [SatisfiesExpr] { r ... \| RGB> | semmle.order | 2 | -| tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | tst.ts:396:5:396:20 | [Property] red: [255, 0, 0] | semmle.label | 1 | -| tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | tst.ts:396:5:396:20 | [Property] red: [255, 0, 0] | semmle.order | 1 | -| tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | tst.ts:397:5:397:20 | [Property] green: "#00ff00" | semmle.label | 2 | -| tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | tst.ts:397:5:397:20 | [Property] green: "#00ff00" | semmle.order | 2 | -| tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | tst.ts:398:5:398:21 | [Property] bleu: [0, 0, 255] | semmle.label | 3 | -| tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | tst.ts:398:5:398:21 | [Property] bleu: [0, 0, 255] | semmle.order | 3 | -| tst.ts:395:19:399:42 | [SatisfiesExpr] { r ... \| RGB> | tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | semmle.label | 1 | -| tst.ts:395:19:399:42 | [SatisfiesExpr] { r ... \| RGB> | tst.ts:395:19:399:3 | [ObjectExpr] {red: ...} | semmle.order | 1 | -| tst.ts:395:19:399:42 | [SatisfiesExpr] { r ... \| RGB> | tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | semmle.label | 2 | -| tst.ts:395:19:399:42 | [SatisfiesExpr] { r ... \| RGB> | tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | semmle.order | 2 | -| tst.ts:396:5:396:20 | [Property] red: [255, 0, 0] | tst.ts:396:5:396:7 | [Label] red | semmle.label | 1 | -| tst.ts:396:5:396:20 | [Property] red: [255, 0, 0] | tst.ts:396:5:396:7 | [Label] red | semmle.order | 1 | -| tst.ts:396:5:396:20 | [Property] red: [255, 0, 0] | tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | semmle.label | 2 | -| tst.ts:396:5:396:20 | [Property] red: [255, 0, 0] | tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | semmle.order | 2 | -| tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | tst.ts:396:11:396:13 | [Literal] 255 | semmle.label | 1 | -| tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | tst.ts:396:11:396:13 | [Literal] 255 | semmle.order | 1 | -| tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | tst.ts:396:16:396:16 | [Literal] 0 | semmle.label | 2 | -| tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | tst.ts:396:16:396:16 | [Literal] 0 | semmle.order | 2 | -| tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | tst.ts:396:19:396:19 | [Literal] 0 | semmle.label | 3 | -| tst.ts:396:10:396:20 | [ArrayExpr] [255, 0, 0] | tst.ts:396:19:396:19 | [Literal] 0 | semmle.order | 3 | -| tst.ts:397:5:397:20 | [Property] green: "#00ff00" | tst.ts:397:5:397:9 | [Label] green | semmle.label | 1 | -| tst.ts:397:5:397:20 | [Property] green: "#00ff00" | tst.ts:397:5:397:9 | [Label] green | semmle.order | 1 | -| tst.ts:397:5:397:20 | [Property] green: "#00ff00" | tst.ts:397:12:397:20 | [Literal] "#00ff00" | semmle.label | 2 | -| tst.ts:397:5:397:20 | [Property] green: "#00ff00" | tst.ts:397:12:397:20 | [Literal] "#00ff00" | semmle.order | 2 | -| tst.ts:398:5:398:21 | [Property] bleu: [0, 0, 255] | tst.ts:398:5:398:8 | [Label] bleu | semmle.label | 1 | -| tst.ts:398:5:398:21 | [Property] bleu: [0, 0, 255] | tst.ts:398:5:398:8 | [Label] bleu | semmle.order | 1 | -| tst.ts:398:5:398:21 | [Property] bleu: [0, 0, 255] | tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | semmle.label | 2 | -| tst.ts:398:5:398:21 | [Property] bleu: [0, 0, 255] | tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | semmle.order | 2 | -| tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | tst.ts:398:12:398:12 | [Literal] 0 | semmle.label | 1 | -| tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | tst.ts:398:12:398:12 | [Literal] 0 | semmle.order | 1 | -| tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | tst.ts:398:15:398:15 | [Literal] 0 | semmle.label | 2 | -| tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | tst.ts:398:15:398:15 | [Literal] 0 | semmle.order | 2 | -| tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | tst.ts:398:18:398:20 | [Literal] 255 | semmle.label | 3 | -| tst.ts:398:11:398:21 | [ArrayExpr] [0, 0, 255] | tst.ts:398:18:398:20 | [Literal] 255 | semmle.order | 3 | -| tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | tst.ts:399:15:399:20 | [LocalTypeAccess] Record | semmle.label | 1 | -| tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | tst.ts:399:15:399:20 | [LocalTypeAccess] Record | semmle.order | 1 | -| tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | tst.ts:399:22:399:27 | [LocalTypeAccess] Colors | semmle.label | 2 | -| tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | tst.ts:399:22:399:27 | [LocalTypeAccess] Colors | semmle.order | 2 | -| tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | tst.ts:399:30:399:41 | [UnionTypeExpr] string \| RGB | semmle.label | 3 | -| tst.ts:399:15:399:42 | [GenericTypeExpr] Record< ... \| RGB> | tst.ts:399:30:399:41 | [UnionTypeExpr] string \| RGB | semmle.order | 3 | -| tst.ts:399:30:399:41 | [UnionTypeExpr] string \| RGB | tst.ts:399:30:399:35 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:399:30:399:41 | [UnionTypeExpr] string \| RGB | tst.ts:399:30:399:35 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:399:30:399:41 | [UnionTypeExpr] string \| RGB | tst.ts:399:39:399:41 | [LocalTypeAccess] RGB | semmle.label | 2 | -| tst.ts:399:30:399:41 | [UnionTypeExpr] string \| RGB | tst.ts:399:39:399:41 | [LocalTypeAccess] RGB | semmle.order | 2 | -| tst.ts:402:3:402:41 | [DeclStmt] const redComponent = ... | tst.ts:402:9:402:40 | [VariableDeclarator] redComp ... d.at(0) | semmle.label | 1 | -| tst.ts:402:3:402:41 | [DeclStmt] const redComponent = ... | tst.ts:402:9:402:40 | [VariableDeclarator] redComp ... d.at(0) | semmle.order | 1 | -| tst.ts:402:9:402:40 | [VariableDeclarator] redComp ... d.at(0) | tst.ts:402:9:402:20 | [VarDecl] redComponent | semmle.label | 1 | -| tst.ts:402:9:402:40 | [VariableDeclarator] redComp ... d.at(0) | tst.ts:402:9:402:20 | [VarDecl] redComponent | semmle.order | 1 | -| tst.ts:402:9:402:40 | [VariableDeclarator] redComp ... d.at(0) | tst.ts:402:24:402:40 | [MethodCallExpr] palette.red.at(0) | semmle.label | 2 | -| tst.ts:402:9:402:40 | [VariableDeclarator] redComp ... d.at(0) | tst.ts:402:24:402:40 | [MethodCallExpr] palette.red.at(0) | semmle.order | 2 | -| tst.ts:402:24:402:34 | [DotExpr] palette.red | tst.ts:402:24:402:30 | [VarRef] palette | semmle.label | 1 | -| tst.ts:402:24:402:34 | [DotExpr] palette.red | tst.ts:402:24:402:30 | [VarRef] palette | semmle.order | 1 | -| tst.ts:402:24:402:34 | [DotExpr] palette.red | tst.ts:402:32:402:34 | [Label] red | semmle.label | 2 | -| tst.ts:402:24:402:34 | [DotExpr] palette.red | tst.ts:402:32:402:34 | [Label] red | semmle.order | 2 | -| tst.ts:402:24:402:37 | [DotExpr] palette.red.at | tst.ts:402:24:402:34 | [DotExpr] palette.red | semmle.label | 1 | -| tst.ts:402:24:402:37 | [DotExpr] palette.red.at | tst.ts:402:24:402:34 | [DotExpr] palette.red | semmle.order | 1 | -| tst.ts:402:24:402:37 | [DotExpr] palette.red.at | tst.ts:402:36:402:37 | [Label] at | semmle.label | 2 | -| tst.ts:402:24:402:37 | [DotExpr] palette.red.at | tst.ts:402:36:402:37 | [Label] at | semmle.order | 2 | -| tst.ts:402:24:402:40 | [MethodCallExpr] palette.red.at(0) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:402:24:402:40 | [MethodCallExpr] palette.red.at(0) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:402:24:402:40 | [MethodCallExpr] palette.red.at(0) | tst.ts:402:24:402:37 | [DotExpr] palette.red.at | semmle.label | 0 | -| tst.ts:402:24:402:40 | [MethodCallExpr] palette.red.at(0) | tst.ts:402:24:402:37 | [DotExpr] palette.red.at | semmle.order | 0 | -| tst.ts:404:3:406:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:404:13:404:18 | [Identifier] RGBObj | semmle.label | 1 | -| tst.ts:404:3:406:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:404:13:404:18 | [Identifier] RGBObj | semmle.order | 1 | -| tst.ts:404:3:406:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:405:5:405:16 | [FieldDeclaration] red: number; | semmle.label | 2 | -| tst.ts:404:3:406:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:405:5:405:16 | [FieldDeclaration] red: number; | semmle.order | 2 | -| tst.ts:405:5:405:16 | [FieldDeclaration] red: number; | tst.ts:405:5:405:7 | [Label] red | semmle.label | 1 | -| tst.ts:405:5:405:16 | [FieldDeclaration] red: number; | tst.ts:405:5:405:7 | [Label] red | semmle.order | 1 | -| tst.ts:405:5:405:16 | [FieldDeclaration] red: number; | tst.ts:405:10:405:15 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:405:5:405:16 | [FieldDeclaration] red: number; | tst.ts:405:10:405:15 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:408:3:410:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:408:13:408:18 | [Identifier] HSVObj | semmle.label | 1 | -| tst.ts:408:3:410:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:408:13:408:18 | [Identifier] HSVObj | semmle.order | 1 | -| tst.ts:408:3:410:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:409:5:409:16 | [FieldDeclaration] hue: number; | semmle.label | 2 | -| tst.ts:408:3:410:3 | [InterfaceDeclaration,TypeDefinition] interfa ... er; } | tst.ts:409:5:409:16 | [FieldDeclaration] hue: number; | semmle.order | 2 | -| tst.ts:409:5:409:16 | [FieldDeclaration] hue: number; | tst.ts:409:5:409:7 | [Label] hue | semmle.label | 1 | -| tst.ts:409:5:409:16 | [FieldDeclaration] hue: number; | tst.ts:409:5:409:7 | [Label] hue | semmle.order | 1 | -| tst.ts:409:5:409:16 | [FieldDeclaration] hue: number; | tst.ts:409:10:409:15 | [KeywordTypeExpr] number | semmle.label | 2 | -| tst.ts:409:5:409:16 | [FieldDeclaration] hue: number; | tst.ts:409:10:409:15 | [KeywordTypeExpr] number | semmle.order | 2 | -| tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | tst.ts:412:12:412:19 | [VarDecl] setColor | semmle.label | 0 | -| tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | tst.ts:412:12:412:19 | [VarDecl] setColor | semmle.order | 0 | -| tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | tst.ts:412:45:416:3 | [BlockStmt] { i ... } } | semmle.label | 5 | -| tst.ts:412:3:416:3 | [FunctionDeclStmt] functio ... } } | tst.ts:412:45:416:3 | [BlockStmt] { i ... } } | semmle.order | 5 | -| tst.ts:412:21:412:25 | [SimpleParameter] color | tst.ts:412:28:412:42 | [UnionTypeExpr] RGBObj \| HSVObj | semmle.label | -2 | -| tst.ts:412:21:412:25 | [SimpleParameter] color | tst.ts:412:28:412:42 | [UnionTypeExpr] RGBObj \| HSVObj | semmle.order | -2 | -| tst.ts:412:28:412:42 | [UnionTypeExpr] RGBObj \| HSVObj | tst.ts:412:28:412:33 | [LocalTypeAccess] RGBObj | semmle.label | 1 | -| tst.ts:412:28:412:42 | [UnionTypeExpr] RGBObj \| HSVObj | tst.ts:412:28:412:33 | [LocalTypeAccess] RGBObj | semmle.order | 1 | -| tst.ts:412:28:412:42 | [UnionTypeExpr] RGBObj \| HSVObj | tst.ts:412:37:412:42 | [LocalTypeAccess] HSVObj | semmle.label | 2 | -| tst.ts:412:28:412:42 | [UnionTypeExpr] RGBObj \| HSVObj | tst.ts:412:37:412:42 | [LocalTypeAccess] HSVObj | semmle.order | 2 | -| tst.ts:412:45:416:3 | [BlockStmt] { i ... } } | tst.ts:413:5:415:5 | [IfStmt] if ("hu ... j } | semmle.label | 1 | -| tst.ts:412:45:416:3 | [BlockStmt] { i ... } } | tst.ts:413:5:415:5 | [IfStmt] if ("hu ... j } | semmle.order | 1 | -| tst.ts:413:5:415:5 | [IfStmt] if ("hu ... j } | tst.ts:413:9:413:22 | [BinaryExpr] "hue" in color | semmle.label | 1 | -| tst.ts:413:5:415:5 | [IfStmt] if ("hu ... j } | tst.ts:413:9:413:22 | [BinaryExpr] "hue" in color | semmle.order | 1 | -| tst.ts:413:5:415:5 | [IfStmt] if ("hu ... j } | tst.ts:413:25:415:5 | [BlockStmt] { ... j } | semmle.label | 2 | -| tst.ts:413:5:415:5 | [IfStmt] if ("hu ... j } | tst.ts:413:25:415:5 | [BlockStmt] { ... j } | semmle.order | 2 | -| tst.ts:413:9:413:22 | [BinaryExpr] "hue" in color | tst.ts:413:9:413:13 | [Literal] "hue" | semmle.label | 1 | -| tst.ts:413:9:413:22 | [BinaryExpr] "hue" in color | tst.ts:413:9:413:13 | [Literal] "hue" | semmle.order | 1 | -| tst.ts:413:9:413:22 | [BinaryExpr] "hue" in color | tst.ts:413:18:413:22 | [VarRef] color | semmle.label | 2 | -| tst.ts:413:9:413:22 | [BinaryExpr] "hue" in color | tst.ts:413:18:413:22 | [VarRef] color | semmle.order | 2 | -| tst.ts:413:25:415:5 | [BlockStmt] { ... j } | tst.ts:414:7:414:20 | [DeclStmt] let h = ... | semmle.label | 1 | -| tst.ts:413:25:415:5 | [BlockStmt] { ... j } | tst.ts:414:7:414:20 | [DeclStmt] let h = ... | semmle.order | 1 | -| tst.ts:414:7:414:20 | [DeclStmt] let h = ... | tst.ts:414:11:414:19 | [VariableDeclarator] h = color | semmle.label | 1 | -| tst.ts:414:7:414:20 | [DeclStmt] let h = ... | tst.ts:414:11:414:19 | [VariableDeclarator] h = color | semmle.order | 1 | -| tst.ts:414:11:414:19 | [VariableDeclarator] h = color | tst.ts:414:11:414:11 | [VarDecl] h | semmle.label | 1 | -| tst.ts:414:11:414:19 | [VariableDeclarator] h = color | tst.ts:414:11:414:11 | [VarDecl] h | semmle.order | 1 | -| tst.ts:414:11:414:19 | [VariableDeclarator] h = color | tst.ts:414:15:414:19 | [VarRef] color | semmle.label | 2 | -| tst.ts:414:11:414:19 | [VariableDeclarator] h = color | tst.ts:414:15:414:19 | [VarRef] color | semmle.order | 2 | -| tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:419:9:419:14 | [VarDecl] Person | semmle.label | 1 | -| tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:419:9:419:14 | [VarDecl] Person | semmle.order | 1 | -| tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:420:5:420:26 | [FieldDeclaration] accesso ... string; | semmle.label | 2 | -| tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:420:5:420:26 | [FieldDeclaration] accesso ... string; | semmle.order | 2 | -| tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:422:5:424:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.label | 3 | -| tst.ts:419:3:425:3 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:422:5:424:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | semmle.order | 3 | -| tst.ts:420:5:420:26 | [FieldDeclaration] accesso ... string; | tst.ts:420:14:420:17 | [Label] name | semmle.label | 1 | -| tst.ts:420:5:420:26 | [FieldDeclaration] accesso ... string; | tst.ts:420:14:420:17 | [Label] name | semmle.order | 1 | -| tst.ts:420:5:420:26 | [FieldDeclaration] accesso ... string; | tst.ts:420:20:420:25 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:420:5:420:26 | [FieldDeclaration] accesso ... string; | tst.ts:420:20:420:25 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:422:5:424:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:422:5:424:5 | [FunctionExpr] constru ... ; } | semmle.label | 2 | -| tst.ts:422:5:424:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:422:5:424:5 | [FunctionExpr] constru ... ; } | semmle.order | 2 | -| tst.ts:422:5:424:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:422:5:424:5 | [Label] constructor | semmle.label | 1 | -| tst.ts:422:5:424:5 | [ClassInitializedMember,ConstructorDefinition] constru ... ; } | tst.ts:422:5:424:5 | [Label] constructor | semmle.order | 1 | -| tst.ts:422:5:424:5 | [FunctionExpr] constru ... ; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:422:5:424:5 | [FunctionExpr] constru ... ; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:422:5:424:5 | [FunctionExpr] constru ... ; } | tst.ts:422:31:424:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:422:5:424:5 | [FunctionExpr] constru ... ; } | tst.ts:422:31:424:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:422:17:422:20 | [SimpleParameter] name | tst.ts:422:23:422:28 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:422:17:422:20 | [SimpleParameter] name | tst.ts:422:23:422:28 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:422:31:424:5 | [BlockStmt] { ... ; } | tst.ts:423:7:423:23 | [ExprStmt] this.name = name; | semmle.label | 1 | -| tst.ts:422:31:424:5 | [BlockStmt] { ... ; } | tst.ts:423:7:423:23 | [ExprStmt] this.name = name; | semmle.order | 1 | -| tst.ts:423:7:423:15 | [DotExpr] this.name | tst.ts:423:7:423:10 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:423:7:423:15 | [DotExpr] this.name | tst.ts:423:7:423:10 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:423:7:423:15 | [DotExpr] this.name | tst.ts:423:12:423:15 | [Label] name | semmle.label | 2 | -| tst.ts:423:7:423:15 | [DotExpr] this.name | tst.ts:423:12:423:15 | [Label] name | semmle.order | 2 | -| tst.ts:423:7:423:22 | [AssignExpr] this.name = name | tst.ts:423:7:423:15 | [DotExpr] this.name | semmle.label | 1 | -| tst.ts:423:7:423:22 | [AssignExpr] this.name = name | tst.ts:423:7:423:15 | [DotExpr] this.name | semmle.order | 1 | -| tst.ts:423:7:423:22 | [AssignExpr] this.name = name | tst.ts:423:19:423:22 | [VarRef] name | semmle.label | 2 | -| tst.ts:423:7:423:22 | [AssignExpr] this.name = name | tst.ts:423:19:423:22 | [VarRef] name | semmle.order | 2 | -| tst.ts:423:7:423:23 | [ExprStmt] this.name = name; | tst.ts:423:7:423:22 | [AssignExpr] this.name = name | semmle.label | 1 | -| tst.ts:423:7:423:23 | [ExprStmt] this.name = name; | tst.ts:423:7:423:22 | [AssignExpr] this.name = name | semmle.order | 1 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:430:8:430:11 | [VarDecl] TS50 | semmle.label | 1 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:430:8:430:11 | [VarDecl] TS50 | semmle.order | 1 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | semmle.label | 2 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | semmle.order | 2 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.label | 3 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | semmle.order | 3 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:460:5:460:41 | [DeclStmt] const p = ... | semmle.label | 4 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:460:5:460:41 | [DeclStmt] const p = ... | semmle.order | 4 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | semmle.label | 5 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | semmle.order | 5 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:465:5:465:51 | [DeclStmt] const foo = ... | semmle.label | 6 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:465:5:465:51 | [DeclStmt] const foo = ... | semmle.order | 6 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:467:5:467:21 | [DeclStmt] const b = ... | semmle.label | 7 | -| tst.ts:430:1:468:1 | [NamespaceDeclaration] module ... - "b" } | tst.ts:467:5:467:21 | [DeclStmt] const b = ... | semmle.order | 7 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | file://:0:0:0:0 | (TypeParameters) | semmle.label | 2 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | file://:0:0:0:0 | (TypeParameters) | semmle.order | 2 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | tst.ts:431:14:431:25 | [VarDecl] loggedMethod | semmle.label | 0 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | tst.ts:431:14:431:25 | [VarDecl] loggedMethod | semmle.order | 0 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | semmle.label | 5 | -| tst.ts:431:5:445:5 | [FunctionDeclStmt] functio ... ; } | tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | semmle.order | 5 | -| tst.ts:431:27:431:30 | [TypeParameter] This | tst.ts:431:27:431:30 | [Identifier] This | semmle.label | 1 | -| tst.ts:431:27:431:30 | [TypeParameter] This | tst.ts:431:27:431:30 | [Identifier] This | semmle.order | 1 | -| tst.ts:431:33:431:50 | [TypeParameter] Args extends any[] | tst.ts:431:33:431:36 | [Identifier] Args | semmle.label | 1 | -| tst.ts:431:33:431:50 | [TypeParameter] Args extends any[] | tst.ts:431:33:431:36 | [Identifier] Args | semmle.order | 1 | -| tst.ts:431:33:431:50 | [TypeParameter] Args extends any[] | tst.ts:431:46:431:50 | [ArrayTypeExpr] any[] | semmle.label | 2 | -| tst.ts:431:33:431:50 | [TypeParameter] Args extends any[] | tst.ts:431:46:431:50 | [ArrayTypeExpr] any[] | semmle.order | 2 | -| tst.ts:431:46:431:50 | [ArrayTypeExpr] any[] | tst.ts:431:46:431:48 | [KeywordTypeExpr] any | semmle.label | 1 | -| tst.ts:431:46:431:50 | [ArrayTypeExpr] any[] | tst.ts:431:46:431:48 | [KeywordTypeExpr] any | semmle.order | 1 | -| tst.ts:431:53:431:58 | [TypeParameter] Return | tst.ts:431:53:431:58 | [Identifier] Return | semmle.label | 1 | -| tst.ts:431:53:431:58 | [TypeParameter] Return | tst.ts:431:53:431:58 | [Identifier] Return | semmle.order | 1 | -| tst.ts:432:9:432:14 | [SimpleParameter] target | tst.ts:432:17:432:53 | [FunctionTypeExpr] (this: ... Return | semmle.label | -2 | -| tst.ts:432:9:432:14 | [SimpleParameter] target | tst.ts:432:17:432:53 | [FunctionTypeExpr] (this: ... Return | semmle.order | -2 | -| tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | tst.ts:432:24:432:27 | [LocalTypeAccess] This | semmle.label | 3 | -| tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | tst.ts:432:24:432:27 | [LocalTypeAccess] This | semmle.order | 3 | -| tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | tst.ts:432:48:432:53 | [LocalTypeAccess] Return | semmle.label | 4 | -| tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | tst.ts:432:48:432:53 | [LocalTypeAccess] Return | semmle.order | 4 | -| tst.ts:432:17:432:53 | [FunctionTypeExpr] (this: ... Return | tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | semmle.label | 1 | -| tst.ts:432:17:432:53 | [FunctionTypeExpr] (this: ... Return | tst.ts:432:17:432:53 | [FunctionExpr] (this: ... Return | semmle.order | 1 | -| tst.ts:432:33:432:36 | [SimpleParameter] args | tst.ts:432:39:432:42 | [LocalTypeAccess] Args | semmle.label | -2 | -| tst.ts:432:33:432:36 | [SimpleParameter] args | tst.ts:432:39:432:42 | [LocalTypeAccess] Args | semmle.order | -2 | -| tst.ts:433:9:433:15 | [SimpleParameter] context | tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | semmle.label | -2 | -| tst.ts:433:9:433:15 | [SimpleParameter] context | tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | semmle.order | -2 | -| tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | tst.ts:433:18:433:44 | [LocalTypeAccess] ClassMethodDecoratorContext | semmle.label | 1 | -| tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | tst.ts:433:18:433:44 | [LocalTypeAccess] ClassMethodDecoratorContext | semmle.order | 1 | -| tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | tst.ts:433:46:433:49 | [LocalTypeAccess] This | semmle.label | 2 | -| tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | tst.ts:433:46:433:49 | [LocalTypeAccess] This | semmle.order | 2 | -| tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | tst.ts:433:52:433:88 | [FunctionTypeExpr] (this: ... Return | semmle.label | 3 | -| tst.ts:433:18:433:89 | [GenericTypeExpr] ClassMe ... Return> | tst.ts:433:52:433:88 | [FunctionTypeExpr] (this: ... Return | semmle.order | 3 | -| tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | tst.ts:433:59:433:62 | [LocalTypeAccess] This | semmle.label | 3 | -| tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | tst.ts:433:59:433:62 | [LocalTypeAccess] This | semmle.order | 3 | -| tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | tst.ts:433:83:433:88 | [LocalTypeAccess] Return | semmle.label | 4 | -| tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | tst.ts:433:83:433:88 | [LocalTypeAccess] Return | semmle.order | 4 | -| tst.ts:433:52:433:88 | [FunctionTypeExpr] (this: ... Return | tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | semmle.label | 1 | -| tst.ts:433:52:433:88 | [FunctionTypeExpr] (this: ... Return | tst.ts:433:52:433:88 | [FunctionExpr] (this: ... Return | semmle.order | 1 | -| tst.ts:433:68:433:71 | [SimpleParameter] args | tst.ts:433:74:433:77 | [LocalTypeAccess] Args | semmle.label | -2 | -| tst.ts:433:68:433:71 | [SimpleParameter] args | tst.ts:433:74:433:77 | [LocalTypeAccess] Args | semmle.order | -2 | -| tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | tst.ts:435:9:435:48 | [DeclStmt] const methodName = ... | semmle.label | 1 | -| tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | tst.ts:435:9:435:48 | [DeclStmt] const methodName = ... | semmle.order | 1 | -| tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | semmle.label | 2 | -| tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | semmle.order | 2 | -| tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | tst.ts:444:9:444:33 | [ReturnStmt] return ... Method; | semmle.label | 3 | -| tst.ts:434:7:445:5 | [BlockStmt] { ... ; } | tst.ts:444:9:444:33 | [ReturnStmt] return ... Method; | semmle.order | 3 | -| tst.ts:435:9:435:48 | [DeclStmt] const methodName = ... | tst.ts:435:15:435:47 | [VariableDeclarator] methodN ... t.name) | semmle.label | 1 | -| tst.ts:435:9:435:48 | [DeclStmt] const methodName = ... | tst.ts:435:15:435:47 | [VariableDeclarator] methodN ... t.name) | semmle.order | 1 | -| tst.ts:435:15:435:47 | [VariableDeclarator] methodN ... t.name) | tst.ts:435:15:435:24 | [VarDecl] methodName | semmle.label | 1 | -| tst.ts:435:15:435:47 | [VariableDeclarator] methodN ... t.name) | tst.ts:435:15:435:24 | [VarDecl] methodName | semmle.order | 1 | -| tst.ts:435:15:435:47 | [VariableDeclarator] methodN ... t.name) | tst.ts:435:28:435:47 | [CallExpr] String(context.name) | semmle.label | 2 | -| tst.ts:435:15:435:47 | [VariableDeclarator] methodN ... t.name) | tst.ts:435:28:435:47 | [CallExpr] String(context.name) | semmle.order | 2 | -| tst.ts:435:28:435:47 | [CallExpr] String(context.name) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:435:28:435:47 | [CallExpr] String(context.name) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:435:28:435:47 | [CallExpr] String(context.name) | tst.ts:435:28:435:33 | [VarRef] String | semmle.label | 0 | -| tst.ts:435:28:435:47 | [CallExpr] String(context.name) | tst.ts:435:28:435:33 | [VarRef] String | semmle.order | 0 | -| tst.ts:435:35:435:46 | [DotExpr] context.name | tst.ts:435:35:435:41 | [VarRef] context | semmle.label | 1 | -| tst.ts:435:35:435:46 | [DotExpr] context.name | tst.ts:435:35:435:41 | [VarRef] context | semmle.order | 1 | -| tst.ts:435:35:435:46 | [DotExpr] context.name | tst.ts:435:43:435:46 | [Label] name | semmle.label | 2 | -| tst.ts:435:35:435:46 | [DotExpr] context.name | tst.ts:435:43:435:46 | [Label] name | semmle.order | 2 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:18:437:34 | [VarDecl] replacementMethod | semmle.label | 0 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:18:437:34 | [VarDecl] replacementMethod | semmle.order | 0 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:42:437:45 | [LocalTypeAccess] This | semmle.label | 3 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:42:437:45 | [LocalTypeAccess] This | semmle.order | 3 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:64:437:69 | [LocalTypeAccess] Return | semmle.label | 4 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:64:437:69 | [LocalTypeAccess] Return | semmle.order | 4 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:71:442:9 | [BlockStmt] { ... } | semmle.label | 5 | -| tst.ts:437:9:442:9 | [FunctionDeclStmt] functio ... } | tst.ts:437:71:442:9 | [BlockStmt] { ... } | semmle.order | 5 | -| tst.ts:437:51:437:54 | [SimpleParameter] args | tst.ts:437:57:437:60 | [LocalTypeAccess] Args | semmle.label | -2 | -| tst.ts:437:51:437:54 | [SimpleParameter] args | tst.ts:437:57:437:60 | [LocalTypeAccess] Args | semmle.order | -2 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:438:13:438:64 | [ExprStmt] console ... me}'.`) | semmle.label | 1 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:438:13:438:64 | [ExprStmt] console ... me}'.`) | semmle.order | 1 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:439:13:439:54 | [DeclStmt] const result = ... | semmle.label | 2 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:439:13:439:54 | [DeclStmt] const result = ... | semmle.order | 2 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:440:13:440:63 | [ExprStmt] console ... me}'.`) | semmle.label | 3 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:440:13:440:63 | [ExprStmt] console ... me}'.`) | semmle.order | 3 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:441:13:441:26 | [ReturnStmt] return result; | semmle.label | 4 | -| tst.ts:437:71:442:9 | [BlockStmt] { ... } | tst.ts:441:13:441:26 | [ReturnStmt] return result; | semmle.order | 4 | -| tst.ts:438:13:438:23 | [DotExpr] console.log | tst.ts:438:13:438:19 | [VarRef] console | semmle.label | 1 | -| tst.ts:438:13:438:23 | [DotExpr] console.log | tst.ts:438:13:438:19 | [VarRef] console | semmle.order | 1 | -| tst.ts:438:13:438:23 | [DotExpr] console.log | tst.ts:438:21:438:23 | [Label] log | semmle.label | 2 | -| tst.ts:438:13:438:23 | [DotExpr] console.log | tst.ts:438:21:438:23 | [Label] log | semmle.order | 2 | -| tst.ts:438:13:438:64 | [ExprStmt] console ... me}'.`) | tst.ts:438:13:438:64 | [MethodCallExpr] console ... me}'.`) | semmle.label | 1 | -| tst.ts:438:13:438:64 | [ExprStmt] console ... me}'.`) | tst.ts:438:13:438:64 | [MethodCallExpr] console ... me}'.`) | semmle.order | 1 | -| tst.ts:438:13:438:64 | [MethodCallExpr] console ... me}'.`) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:438:13:438:64 | [MethodCallExpr] console ... me}'.`) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:438:13:438:64 | [MethodCallExpr] console ... me}'.`) | tst.ts:438:13:438:23 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:438:13:438:64 | [MethodCallExpr] console ... me}'.`) | tst.ts:438:13:438:23 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:438:26:438:47 | [TemplateElement] LOG: En ... ethod ' | semmle.label | 1 | -| tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:438:26:438:47 | [TemplateElement] LOG: En ... ethod ' | semmle.order | 1 | -| tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:438:50:438:59 | [VarRef] methodName | semmle.label | 2 | -| tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:438:50:438:59 | [VarRef] methodName | semmle.order | 2 | -| tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:438:61:438:62 | [TemplateElement] '. | semmle.label | 3 | -| tst.ts:438:25:438:63 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:438:61:438:62 | [TemplateElement] '. | semmle.order | 3 | -| tst.ts:439:13:439:54 | [DeclStmt] const result = ... | tst.ts:439:19:439:53 | [VariableDeclarator] result ... ..args) | semmle.label | 1 | -| tst.ts:439:13:439:54 | [DeclStmt] const result = ... | tst.ts:439:19:439:53 | [VariableDeclarator] result ... ..args) | semmle.order | 1 | -| tst.ts:439:19:439:53 | [VariableDeclarator] result ... ..args) | tst.ts:439:19:439:24 | [VarDecl] result | semmle.label | 1 | -| tst.ts:439:19:439:53 | [VariableDeclarator] result ... ..args) | tst.ts:439:19:439:24 | [VarDecl] result | semmle.order | 1 | -| tst.ts:439:19:439:53 | [VariableDeclarator] result ... ..args) | tst.ts:439:28:439:53 | [MethodCallExpr] target. ... ..args) | semmle.label | 2 | -| tst.ts:439:19:439:53 | [VariableDeclarator] result ... ..args) | tst.ts:439:28:439:53 | [MethodCallExpr] target. ... ..args) | semmle.order | 2 | -| tst.ts:439:28:439:38 | [DotExpr] target.call | tst.ts:439:28:439:33 | [VarRef] target | semmle.label | 1 | -| tst.ts:439:28:439:38 | [DotExpr] target.call | tst.ts:439:28:439:33 | [VarRef] target | semmle.order | 1 | -| tst.ts:439:28:439:38 | [DotExpr] target.call | tst.ts:439:35:439:38 | [Label] call | semmle.label | 2 | -| tst.ts:439:28:439:38 | [DotExpr] target.call | tst.ts:439:35:439:38 | [Label] call | semmle.order | 2 | -| tst.ts:439:28:439:53 | [MethodCallExpr] target. ... ..args) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:439:28:439:53 | [MethodCallExpr] target. ... ..args) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:439:28:439:53 | [MethodCallExpr] target. ... ..args) | tst.ts:439:28:439:38 | [DotExpr] target.call | semmle.label | 0 | -| tst.ts:439:28:439:53 | [MethodCallExpr] target. ... ..args) | tst.ts:439:28:439:38 | [DotExpr] target.call | semmle.order | 0 | -| tst.ts:439:46:439:52 | [SpreadElement] ...args | tst.ts:439:49:439:52 | [VarRef] args | semmle.label | 1 | -| tst.ts:439:46:439:52 | [SpreadElement] ...args | tst.ts:439:49:439:52 | [VarRef] args | semmle.order | 1 | -| tst.ts:440:13:440:23 | [DotExpr] console.log | tst.ts:440:13:440:19 | [VarRef] console | semmle.label | 1 | -| tst.ts:440:13:440:23 | [DotExpr] console.log | tst.ts:440:13:440:19 | [VarRef] console | semmle.order | 1 | -| tst.ts:440:13:440:23 | [DotExpr] console.log | tst.ts:440:21:440:23 | [Label] log | semmle.label | 2 | -| tst.ts:440:13:440:23 | [DotExpr] console.log | tst.ts:440:21:440:23 | [Label] log | semmle.order | 2 | -| tst.ts:440:13:440:63 | [ExprStmt] console ... me}'.`) | tst.ts:440:13:440:63 | [MethodCallExpr] console ... me}'.`) | semmle.label | 1 | -| tst.ts:440:13:440:63 | [ExprStmt] console ... me}'.`) | tst.ts:440:13:440:63 | [MethodCallExpr] console ... me}'.`) | semmle.order | 1 | -| tst.ts:440:13:440:63 | [MethodCallExpr] console ... me}'.`) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:440:13:440:63 | [MethodCallExpr] console ... me}'.`) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:440:13:440:63 | [MethodCallExpr] console ... me}'.`) | tst.ts:440:13:440:23 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:440:13:440:63 | [MethodCallExpr] console ... me}'.`) | tst.ts:440:13:440:23 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:440:26:440:46 | [TemplateElement] LOG: Ex ... ethod ' | semmle.label | 1 | -| tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:440:26:440:46 | [TemplateElement] LOG: Ex ... ethod ' | semmle.order | 1 | -| tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:440:49:440:58 | [VarRef] methodName | semmle.label | 2 | -| tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:440:49:440:58 | [VarRef] methodName | semmle.order | 2 | -| tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:440:60:440:61 | [TemplateElement] '. | semmle.label | 3 | -| tst.ts:440:25:440:62 | [TemplateLiteral] `LOG: E ... ame}'.` | tst.ts:440:60:440:61 | [TemplateElement] '. | semmle.order | 3 | -| tst.ts:441:13:441:26 | [ReturnStmt] return result; | tst.ts:441:20:441:25 | [VarRef] result | semmle.label | 1 | -| tst.ts:441:13:441:26 | [ReturnStmt] return result; | tst.ts:441:20:441:25 | [VarRef] result | semmle.order | 1 | -| tst.ts:444:9:444:33 | [ReturnStmt] return ... Method; | tst.ts:444:16:444:32 | [VarRef] replacementMethod | semmle.label | 1 | -| tst.ts:444:9:444:33 | [ReturnStmt] return ... Method; | tst.ts:444:16:444:32 | [VarRef] replacementMethod | semmle.order | 1 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:447:11:447:16 | [VarDecl] Person | semmle.label | 1 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:447:11:447:16 | [VarDecl] Person | semmle.order | 1 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:448:9:448:21 | [FieldDeclaration] name: string; | semmle.label | 2 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:448:9:448:21 | [FieldDeclaration] name: string; | semmle.order | 2 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:449:9:451:9 | [ClassInitializedMember,ConstructorDefinition] constru ... } | semmle.label | 3 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:449:9:451:9 | [ClassInitializedMember,ConstructorDefinition] constru ... } | semmle.order | 3 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | semmle.label | 4 | -| tst.ts:447:5:458:5 | [ClassDefinition,TypeDefinition] class P ... } } | tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | semmle.order | 4 | -| tst.ts:448:9:448:21 | [FieldDeclaration] name: string; | tst.ts:448:9:448:12 | [Label] name | semmle.label | 1 | -| tst.ts:448:9:448:21 | [FieldDeclaration] name: string; | tst.ts:448:9:448:12 | [Label] name | semmle.order | 1 | -| tst.ts:448:9:448:21 | [FieldDeclaration] name: string; | tst.ts:448:15:448:20 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:448:9:448:21 | [FieldDeclaration] name: string; | tst.ts:448:15:448:20 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:449:9:451:9 | [ClassInitializedMember,ConstructorDefinition] constru ... } | tst.ts:449:9:451:9 | [FunctionExpr] constru ... } | semmle.label | 2 | -| tst.ts:449:9:451:9 | [ClassInitializedMember,ConstructorDefinition] constru ... } | tst.ts:449:9:451:9 | [FunctionExpr] constru ... } | semmle.order | 2 | -| tst.ts:449:9:451:9 | [ClassInitializedMember,ConstructorDefinition] constru ... } | tst.ts:449:9:451:9 | [Label] constructor | semmle.label | 1 | -| tst.ts:449:9:451:9 | [ClassInitializedMember,ConstructorDefinition] constru ... } | tst.ts:449:9:451:9 | [Label] constructor | semmle.order | 1 | -| tst.ts:449:9:451:9 | [FunctionExpr] constru ... } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:449:9:451:9 | [FunctionExpr] constru ... } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:449:9:451:9 | [FunctionExpr] constru ... } | tst.ts:449:35:451:9 | [BlockStmt] { ... } | semmle.label | 5 | -| tst.ts:449:9:451:9 | [FunctionExpr] constru ... } | tst.ts:449:35:451:9 | [BlockStmt] { ... } | semmle.order | 5 | -| tst.ts:449:21:449:24 | [SimpleParameter] name | tst.ts:449:27:449:32 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:449:21:449:24 | [SimpleParameter] name | tst.ts:449:27:449:32 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:449:35:451:9 | [BlockStmt] { ... } | tst.ts:450:13:450:29 | [ExprStmt] this.name = name; | semmle.label | 1 | -| tst.ts:449:35:451:9 | [BlockStmt] { ... } | tst.ts:450:13:450:29 | [ExprStmt] this.name = name; | semmle.order | 1 | -| tst.ts:450:13:450:21 | [DotExpr] this.name | tst.ts:450:13:450:16 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:450:13:450:21 | [DotExpr] this.name | tst.ts:450:13:450:16 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:450:13:450:21 | [DotExpr] this.name | tst.ts:450:18:450:21 | [Label] name | semmle.label | 2 | -| tst.ts:450:13:450:21 | [DotExpr] this.name | tst.ts:450:18:450:21 | [Label] name | semmle.order | 2 | -| tst.ts:450:13:450:28 | [AssignExpr] this.name = name | tst.ts:450:13:450:21 | [DotExpr] this.name | semmle.label | 1 | -| tst.ts:450:13:450:28 | [AssignExpr] this.name = name | tst.ts:450:13:450:21 | [DotExpr] this.name | semmle.order | 1 | -| tst.ts:450:13:450:28 | [AssignExpr] this.name = name | tst.ts:450:25:450:28 | [VarRef] name | semmle.label | 2 | -| tst.ts:450:13:450:28 | [AssignExpr] this.name = name | tst.ts:450:25:450:28 | [VarRef] name | semmle.order | 2 | -| tst.ts:450:13:450:29 | [ExprStmt] this.name = name; | tst.ts:450:13:450:28 | [AssignExpr] this.name = name | semmle.label | 1 | -| tst.ts:450:13:450:29 | [ExprStmt] this.name = name; | tst.ts:450:13:450:28 | [AssignExpr] this.name = name | semmle.order | 1 | -| tst.ts:453:9:453:25 | [Decorator] @loggedMethod("") | tst.ts:453:10:453:25 | [CallExpr] loggedMethod("") | semmle.label | 1 | -| tst.ts:453:9:453:25 | [Decorator] @loggedMethod("") | tst.ts:453:10:453:25 | [CallExpr] loggedMethod("") | semmle.order | 1 | -| tst.ts:453:10:453:25 | [CallExpr] loggedMethod("") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:453:10:453:25 | [CallExpr] loggedMethod("") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:453:10:453:25 | [CallExpr] loggedMethod("") | tst.ts:453:10:453:21 | [VarRef] loggedMethod | semmle.label | 0 | -| tst.ts:453:10:453:25 | [CallExpr] loggedMethod("") | tst.ts:453:10:453:21 | [VarRef] loggedMethod | semmle.order | 0 | -| tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | tst.ts:453:9:453:25 | [Decorator] @loggedMethod("") | semmle.label | 1 | -| tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | tst.ts:453:9:453:25 | [Decorator] @loggedMethod("") | semmle.order | 1 | -| tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | tst.ts:454:9:454:13 | [Label] greet | semmle.label | 2 | -| tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | tst.ts:454:9:454:13 | [Label] greet | semmle.order | 2 | -| tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | tst.ts:454:9:457:9 | [FunctionExpr] greet() ... } | semmle.label | 3 | -| tst.ts:454:9:457:9 | [ClassInitializedMember,MethodDefinition] greet() ... } | tst.ts:454:9:457:9 | [FunctionExpr] greet() ... } | semmle.order | 3 | -| tst.ts:454:9:457:9 | [FunctionExpr] greet() ... } | tst.ts:454:17:457:9 | [BlockStmt] { ... } | semmle.label | 5 | -| tst.ts:454:9:457:9 | [FunctionExpr] greet() ... } | tst.ts:454:17:457:9 | [BlockStmt] { ... } | semmle.order | 5 | -| tst.ts:454:17:457:9 | [BlockStmt] { ... } | tst.ts:455:13:455:59 | [ExprStmt] console ... me}.`); | semmle.label | 1 | -| tst.ts:454:17:457:9 | [BlockStmt] { ... } | tst.ts:455:13:455:59 | [ExprStmt] console ... me}.`); | semmle.order | 1 | -| tst.ts:454:17:457:9 | [BlockStmt] { ... } | tst.ts:456:13:456:21 | [ReturnStmt] return 2; | semmle.label | 2 | -| tst.ts:454:17:457:9 | [BlockStmt] { ... } | tst.ts:456:13:456:21 | [ReturnStmt] return 2; | semmle.order | 2 | -| tst.ts:455:13:455:23 | [DotExpr] console.log | tst.ts:455:13:455:19 | [VarRef] console | semmle.label | 1 | -| tst.ts:455:13:455:23 | [DotExpr] console.log | tst.ts:455:13:455:19 | [VarRef] console | semmle.order | 1 | -| tst.ts:455:13:455:23 | [DotExpr] console.log | tst.ts:455:21:455:23 | [Label] log | semmle.label | 2 | -| tst.ts:455:13:455:23 | [DotExpr] console.log | tst.ts:455:21:455:23 | [Label] log | semmle.order | 2 | -| tst.ts:455:13:455:58 | [MethodCallExpr] console ... ame}.`) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:455:13:455:58 | [MethodCallExpr] console ... ame}.`) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:455:13:455:58 | [MethodCallExpr] console ... ame}.`) | tst.ts:455:13:455:23 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:455:13:455:58 | [MethodCallExpr] console ... ame}.`) | tst.ts:455:13:455:23 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:455:13:455:59 | [ExprStmt] console ... me}.`); | tst.ts:455:13:455:58 | [MethodCallExpr] console ... ame}.`) | semmle.label | 1 | -| tst.ts:455:13:455:59 | [ExprStmt] console ... me}.`); | tst.ts:455:13:455:58 | [MethodCallExpr] console ... ame}.`) | semmle.order | 1 | -| tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | tst.ts:455:26:455:43 | [TemplateElement] Hello, my name is | semmle.label | 1 | -| tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | tst.ts:455:26:455:43 | [TemplateElement] Hello, my name is | semmle.order | 1 | -| tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | tst.ts:455:46:455:54 | [DotExpr] this.name | semmle.label | 2 | -| tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | tst.ts:455:46:455:54 | [DotExpr] this.name | semmle.order | 2 | -| tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | tst.ts:455:56:455:56 | [TemplateElement] . | semmle.label | 3 | -| tst.ts:455:25:455:57 | [TemplateLiteral] `Hello, ... name}.` | tst.ts:455:56:455:56 | [TemplateElement] . | semmle.order | 3 | -| tst.ts:455:46:455:54 | [DotExpr] this.name | tst.ts:455:46:455:49 | [ThisExpr] this | semmle.label | 1 | -| tst.ts:455:46:455:54 | [DotExpr] this.name | tst.ts:455:46:455:49 | [ThisExpr] this | semmle.order | 1 | -| tst.ts:455:46:455:54 | [DotExpr] this.name | tst.ts:455:51:455:54 | [Label] name | semmle.label | 2 | -| tst.ts:455:46:455:54 | [DotExpr] this.name | tst.ts:455:51:455:54 | [Label] name | semmle.order | 2 | -| tst.ts:456:13:456:21 | [ReturnStmt] return 2; | tst.ts:456:20:456:20 | [Literal] 2 | semmle.label | 1 | -| tst.ts:456:13:456:21 | [ReturnStmt] return 2; | tst.ts:456:20:456:20 | [Literal] 2 | semmle.order | 1 | -| tst.ts:460:5:460:41 | [DeclStmt] const p = ... | tst.ts:460:11:460:40 | [VariableDeclarator] p = new ... greet() | semmle.label | 1 | -| tst.ts:460:5:460:41 | [DeclStmt] const p = ... | tst.ts:460:11:460:40 | [VariableDeclarator] p = new ... greet() | semmle.order | 1 | -| tst.ts:460:11:460:40 | [VariableDeclarator] p = new ... greet() | tst.ts:460:11:460:11 | [VarDecl] p | semmle.label | 1 | -| tst.ts:460:11:460:40 | [VariableDeclarator] p = new ... greet() | tst.ts:460:11:460:11 | [VarDecl] p | semmle.order | 1 | -| tst.ts:460:11:460:40 | [VariableDeclarator] p = new ... greet() | tst.ts:460:15:460:40 | [MethodCallExpr] new Per ... greet() | semmle.label | 2 | -| tst.ts:460:11:460:40 | [VariableDeclarator] p = new ... greet() | tst.ts:460:15:460:40 | [MethodCallExpr] new Per ... greet() | semmle.order | 2 | -| tst.ts:460:15:460:32 | [NewExpr] new Person("John") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:460:15:460:32 | [NewExpr] new Person("John") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:460:15:460:32 | [NewExpr] new Person("John") | tst.ts:460:19:460:24 | [VarRef] Person | semmle.label | 0 | -| tst.ts:460:15:460:32 | [NewExpr] new Person("John") | tst.ts:460:19:460:24 | [VarRef] Person | semmle.order | 0 | -| tst.ts:460:15:460:38 | [DotExpr] new Per ... ).greet | tst.ts:460:15:460:32 | [NewExpr] new Person("John") | semmle.label | 1 | -| tst.ts:460:15:460:38 | [DotExpr] new Per ... ).greet | tst.ts:460:15:460:32 | [NewExpr] new Person("John") | semmle.order | 1 | -| tst.ts:460:15:460:38 | [DotExpr] new Per ... ).greet | tst.ts:460:34:460:38 | [Label] greet | semmle.label | 2 | -| tst.ts:460:15:460:38 | [DotExpr] new Per ... ).greet | tst.ts:460:34:460:38 | [Label] greet | semmle.order | 2 | -| tst.ts:460:15:460:40 | [MethodCallExpr] new Per ... greet() | tst.ts:460:15:460:38 | [DotExpr] new Per ... ).greet | semmle.label | 0 | -| tst.ts:460:15:460:40 | [MethodCallExpr] new Per ... greet() | tst.ts:460:15:460:38 | [DotExpr] new Per ... ).greet | semmle.order | 0 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (TypeParameters) | semmle.label | 2 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | file://:0:0:0:0 | (TypeParameters) | semmle.order | 2 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | tst.ts:462:22:462:38 | [VarDecl] myConstIdFunction | semmle.label | 0 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | tst.ts:462:22:462:38 | [VarDecl] myConstIdFunction | semmle.order | 0 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | tst.ts:462:85:462:85 | [LocalTypeAccess] T | semmle.label | 4 | -| tst.ts:462:5:462:86 | [FunctionDeclStmt] declare ... T): T; | tst.ts:462:85:462:85 | [LocalTypeAccess] T | semmle.order | 4 | -| tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | tst.ts:462:46:462:46 | [Identifier] T | semmle.label | 1 | -| tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | tst.ts:462:46:462:46 | [Identifier] T | semmle.order | 1 | -| tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | tst.ts:462:56:462:72 | [ReadonlyTypeExpr] readonly string[] | semmle.label | 2 | -| tst.ts:462:40:462:72 | [TypeParameter] const T ... tring[] | tst.ts:462:56:462:72 | [ReadonlyTypeExpr] readonly string[] | semmle.order | 2 | -| tst.ts:462:56:462:72 | [ReadonlyTypeExpr] readonly string[] | tst.ts:462:65:462:72 | [ArrayTypeExpr] string[] | semmle.label | 1 | -| tst.ts:462:56:462:72 | [ReadonlyTypeExpr] readonly string[] | tst.ts:462:65:462:72 | [ArrayTypeExpr] string[] | semmle.order | 1 | -| tst.ts:462:65:462:72 | [ArrayTypeExpr] string[] | tst.ts:462:65:462:70 | [KeywordTypeExpr] string | semmle.label | 1 | -| tst.ts:462:65:462:72 | [ArrayTypeExpr] string[] | tst.ts:462:65:462:70 | [KeywordTypeExpr] string | semmle.order | 1 | -| tst.ts:462:75:462:78 | [SimpleParameter] args | tst.ts:462:81:462:81 | [LocalTypeAccess] T | semmle.label | -2 | -| tst.ts:462:75:462:78 | [SimpleParameter] args | tst.ts:462:81:462:81 | [LocalTypeAccess] T | semmle.order | -2 | -| tst.ts:465:5:465:51 | [DeclStmt] const foo = ... | tst.ts:465:11:465:50 | [VariableDeclarator] foo = m ... ,"c"]) | semmle.label | 1 | -| tst.ts:465:5:465:51 | [DeclStmt] const foo = ... | tst.ts:465:11:465:50 | [VariableDeclarator] foo = m ... ,"c"]) | semmle.order | 1 | -| tst.ts:465:11:465:50 | [VariableDeclarator] foo = m ... ,"c"]) | tst.ts:465:11:465:13 | [VarDecl] foo | semmle.label | 1 | -| tst.ts:465:11:465:50 | [VariableDeclarator] foo = m ... ,"c"]) | tst.ts:465:11:465:13 | [VarDecl] foo | semmle.order | 1 | -| tst.ts:465:11:465:50 | [VariableDeclarator] foo = m ... ,"c"]) | tst.ts:465:17:465:50 | [CallExpr] myConst ... ,"c"]) | semmle.label | 2 | -| tst.ts:465:11:465:50 | [VariableDeclarator] foo = m ... ,"c"]) | tst.ts:465:17:465:50 | [CallExpr] myConst ... ,"c"]) | semmle.order | 2 | -| tst.ts:465:17:465:50 | [CallExpr] myConst ... ,"c"]) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:465:17:465:50 | [CallExpr] myConst ... ,"c"]) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:465:17:465:50 | [CallExpr] myConst ... ,"c"]) | tst.ts:465:17:465:33 | [VarRef] myConstIdFunction | semmle.label | 0 | -| tst.ts:465:17:465:50 | [CallExpr] myConst ... ,"c"]) | tst.ts:465:17:465:33 | [VarRef] myConstIdFunction | semmle.order | 0 | -| tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | tst.ts:465:36:465:38 | [Literal] "a" | semmle.label | 1 | -| tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | tst.ts:465:36:465:38 | [Literal] "a" | semmle.order | 1 | -| tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | tst.ts:465:41:465:43 | [Literal] "b" | semmle.label | 2 | -| tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | tst.ts:465:41:465:43 | [Literal] "b" | semmle.order | 2 | -| tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | tst.ts:465:46:465:48 | [Literal] "c" | semmle.label | 3 | -| tst.ts:465:35:465:49 | [ArrayExpr] ["a", "b" ,"c"] | tst.ts:465:46:465:48 | [Literal] "c" | semmle.order | 3 | -| tst.ts:467:5:467:21 | [DeclStmt] const b = ... | tst.ts:467:11:467:20 | [VariableDeclarator] b = foo[1] | semmle.label | 1 | -| tst.ts:467:5:467:21 | [DeclStmt] const b = ... | tst.ts:467:11:467:20 | [VariableDeclarator] b = foo[1] | semmle.order | 1 | -| tst.ts:467:11:467:20 | [VariableDeclarator] b = foo[1] | tst.ts:467:11:467:11 | [VarDecl] b | semmle.label | 1 | -| tst.ts:467:11:467:20 | [VariableDeclarator] b = foo[1] | tst.ts:467:11:467:11 | [VarDecl] b | semmle.order | 1 | -| tst.ts:467:11:467:20 | [VariableDeclarator] b = foo[1] | tst.ts:467:15:467:20 | [IndexExpr] foo[1] | semmle.label | 2 | -| tst.ts:467:11:467:20 | [VariableDeclarator] b = foo[1] | tst.ts:467:15:467:20 | [IndexExpr] foo[1] | semmle.order | 2 | -| tst.ts:467:15:467:20 | [IndexExpr] foo[1] | tst.ts:467:15:467:17 | [VarRef] foo | semmle.label | 1 | -| tst.ts:467:15:467:20 | [IndexExpr] foo[1] | tst.ts:467:15:467:17 | [VarRef] foo | semmle.order | 1 | -| tst.ts:467:15:467:20 | [IndexExpr] foo[1] | tst.ts:467:19:467:19 | [Literal] 1 | semmle.label | 2 | -| tst.ts:467:15:467:20 | [IndexExpr] foo[1] | tst.ts:467:19:467:19 | [Literal] 1 | semmle.order | 2 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:472:8:472:11 | [VarDecl] TS52 | semmle.label | 1 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:472:8:472:11 | [VarDecl] TS52 | semmle.order | 1 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | semmle.label | 2 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | semmle.order | 2 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:478:5:478:44 | [ExprStmt] console ... data]); | semmle.label | 3 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:478:5:478:44 | [ExprStmt] console ... data]); | semmle.order | 3 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | semmle.label | 4 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | semmle.order | 4 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:483:5:483:60 | [ExprStmt] console ... ring>); | semmle.label | 5 | -| tst.ts:472:1:484:1 | [NamespaceDeclaration] module ... ng>); } | tst.ts:483:5:483:60 | [ExprStmt] console ... ring>); | semmle.order | 5 | -| tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | tst.ts:473:11:473:19 | [VarDecl] SomeClass | semmle.label | 1 | -| tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | tst.ts:473:11:473:19 | [VarDecl] SomeClass | semmle.order | 1 | -| tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | tst.ts:473:21:473:20 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | tst.ts:473:21:473:20 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | semmle.label | 3 | -| tst.ts:473:5:476:5 | [ClassDefinition,TypeDefinition] class S ... ; } | tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | semmle.order | 3 | -| tst.ts:473:21:473:20 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:473:21:473:20 | [FunctionExpr] () {} | semmle.label | 2 | -| tst.ts:473:21:473:20 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:473:21:473:20 | [FunctionExpr] () {} | semmle.order | 2 | -| tst.ts:473:21:473:20 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:473:21:473:20 | [Label] constructor | semmle.label | 1 | -| tst.ts:473:21:473:20 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:473:21:473:20 | [Label] constructor | semmle.order | 1 | -| tst.ts:473:21:473:20 | [FunctionExpr] () {} | tst.ts:473:21:473:20 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:473:21:473:20 | [FunctionExpr] () {} | tst.ts:473:21:473:20 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:474:9:474:36 | [Decorator] @((_tar ... => {}) | tst.ts:474:10:474:36 | [ParExpr] ((_targ ... => {}) | semmle.label | 1 | -| tst.ts:474:9:474:36 | [Decorator] @((_tar ... => {}) | tst.ts:474:10:474:36 | [ParExpr] ((_targ ... => {}) | semmle.order | 1 | -| tst.ts:474:10:474:36 | [ParExpr] ((_targ ... => {}) | tst.ts:474:11:474:35 | [ArrowFunctionExpr] (_targe ... ) => {} | semmle.label | 1 | -| tst.ts:474:10:474:36 | [ParExpr] ((_targ ... => {}) | tst.ts:474:11:474:35 | [ArrowFunctionExpr] (_targe ... ) => {} | semmle.order | 1 | -| tst.ts:474:11:474:35 | [ArrowFunctionExpr] (_targe ... ) => {} | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:474:11:474:35 | [ArrowFunctionExpr] (_targe ... ) => {} | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:474:11:474:35 | [ArrowFunctionExpr] (_targe ... ) => {} | tst.ts:474:34:474:35 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:474:11:474:35 | [ArrowFunctionExpr] (_targe ... ) => {} | tst.ts:474:34:474:35 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | tst.ts:474:9:474:36 | [Decorator] @((_tar ... => {}) | semmle.label | 1 | -| tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | tst.ts:474:9:474:36 | [Decorator] @((_tar ... => {}) | semmle.order | 1 | -| tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | tst.ts:475:9:475:11 | [Label] foo | semmle.label | 2 | -| tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | tst.ts:475:9:475:11 | [Label] foo | semmle.order | 2 | -| tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | tst.ts:475:15:475:17 | [Literal] 123 | semmle.label | 3 | -| tst.ts:475:9:475:18 | [FieldDeclaration] foo = 123; | tst.ts:475:15:475:17 | [Literal] 123 | semmle.order | 3 | -| tst.ts:478:5:478:15 | [DotExpr] console.log | tst.ts:478:5:478:11 | [VarRef] console | semmle.label | 1 | -| tst.ts:478:5:478:15 | [DotExpr] console.log | tst.ts:478:5:478:11 | [VarRef] console | semmle.order | 1 | -| tst.ts:478:5:478:15 | [DotExpr] console.log | tst.ts:478:13:478:15 | [Label] log | semmle.label | 2 | -| tst.ts:478:5:478:15 | [DotExpr] console.log | tst.ts:478:13:478:15 | [Label] log | semmle.order | 2 | -| tst.ts:478:5:478:43 | [MethodCallExpr] console ... adata]) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:478:5:478:43 | [MethodCallExpr] console ... adata]) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:478:5:478:43 | [MethodCallExpr] console ... adata]) | tst.ts:478:5:478:15 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:478:5:478:43 | [MethodCallExpr] console ... adata]) | tst.ts:478:5:478:15 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:478:5:478:44 | [ExprStmt] console ... data]); | tst.ts:478:5:478:43 | [MethodCallExpr] console ... adata]) | semmle.label | 1 | -| tst.ts:478:5:478:44 | [ExprStmt] console ... data]); | tst.ts:478:5:478:43 | [MethodCallExpr] console ... adata]) | semmle.order | 1 | -| tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | tst.ts:478:17:478:25 | [VarRef] SomeClass | semmle.label | 1 | -| tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | tst.ts:478:17:478:25 | [VarRef] SomeClass | semmle.order | 1 | -| tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | tst.ts:478:27:478:41 | [DotExpr] Symbol.metadata | semmle.label | 2 | -| tst.ts:478:17:478:42 | [IndexExpr] SomeCla ... tadata] | tst.ts:478:27:478:41 | [DotExpr] Symbol.metadata | semmle.order | 2 | -| tst.ts:478:27:478:41 | [DotExpr] Symbol.metadata | tst.ts:478:27:478:32 | [VarRef] Symbol | semmle.label | 1 | -| tst.ts:478:27:478:41 | [DotExpr] Symbol.metadata | tst.ts:478:27:478:32 | [VarRef] Symbol | semmle.order | 1 | -| tst.ts:478:27:478:41 | [DotExpr] Symbol.metadata | tst.ts:478:34:478:41 | [Label] metadata | semmle.label | 2 | -| tst.ts:478:27:478:41 | [DotExpr] Symbol.metadata | tst.ts:478:34:478:41 | [Label] metadata | semmle.order | 2 | -| tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | tst.ts:481:10:481:14 | [Identifier] Pair3 | semmle.label | 1 | -| tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | tst.ts:481:10:481:14 | [Identifier] Pair3 | semmle.order | 1 | -| tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | semmle.label | 3 | -| tst.ts:481:5:481:34 | [TypeAliasDeclaration,TypeDefinition] type Pa ... T, T]; | tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | semmle.order | 3 | -| tst.ts:481:16:481:16 | [TypeParameter] T | tst.ts:481:16:481:16 | [Identifier] T | semmle.label | 1 | -| tst.ts:481:16:481:16 | [TypeParameter] T | tst.ts:481:16:481:16 | [Identifier] T | semmle.order | 1 | -| tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | tst.ts:481:22:481:26 | [Identifier] first | semmle.label | 1 | -| tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | tst.ts:481:22:481:26 | [Identifier] first | semmle.order | 1 | -| tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | tst.ts:481:29:481:29 | [LocalTypeAccess] T | semmle.label | 2 | -| tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | tst.ts:481:29:481:29 | [LocalTypeAccess] T | semmle.order | 2 | -| tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | tst.ts:481:32:481:32 | [LocalTypeAccess] T | semmle.label | 3 | -| tst.ts:481:21:481:33 | [TupleTypeExpr] [first: T, T] | tst.ts:481:32:481:32 | [LocalTypeAccess] T | semmle.order | 3 | -| tst.ts:483:5:483:15 | [DotExpr] console.log | tst.ts:483:5:483:11 | [VarRef] console | semmle.label | 1 | -| tst.ts:483:5:483:15 | [DotExpr] console.log | tst.ts:483:5:483:11 | [VarRef] console | semmle.order | 1 | -| tst.ts:483:5:483:15 | [DotExpr] console.log | tst.ts:483:13:483:15 | [Label] log | semmle.label | 2 | -| tst.ts:483:5:483:15 | [DotExpr] console.log | tst.ts:483:13:483:15 | [Label] log | semmle.order | 2 | -| tst.ts:483:5:483:59 | [MethodCallExpr] console ... tring>) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:483:5:483:59 | [MethodCallExpr] console ... tring>) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:483:5:483:59 | [MethodCallExpr] console ... tring>) | tst.ts:483:5:483:15 | [DotExpr] console.log | semmle.label | 0 | -| tst.ts:483:5:483:59 | [MethodCallExpr] console ... tring>) | tst.ts:483:5:483:15 | [DotExpr] console.log | semmle.order | 0 | -| tst.ts:483:5:483:60 | [ExprStmt] console ... ring>); | tst.ts:483:5:483:59 | [MethodCallExpr] console ... tring>) | semmle.label | 1 | -| tst.ts:483:5:483:60 | [ExprStmt] console ... ring>); | tst.ts:483:5:483:59 | [MethodCallExpr] console ... tring>) | semmle.order | 1 | -| tst.ts:483:17:483:34 | [ArrayExpr] ["hello", "world"] | tst.ts:483:18:483:24 | [Literal] "hello" | semmle.label | 1 | -| tst.ts:483:17:483:34 | [ArrayExpr] ["hello", "world"] | tst.ts:483:18:483:24 | [Literal] "hello" | semmle.order | 1 | -| tst.ts:483:17:483:34 | [ArrayExpr] ["hello", "world"] | tst.ts:483:27:483:33 | [Literal] "world" | semmle.label | 2 | -| tst.ts:483:17:483:34 | [ArrayExpr] ["hello", "world"] | tst.ts:483:27:483:33 | [Literal] "world" | semmle.order | 2 | -| tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | tst.ts:483:17:483:34 | [ArrayExpr] ["hello", "world"] | semmle.label | 1 | -| tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | tst.ts:483:17:483:34 | [ArrayExpr] ["hello", "world"] | semmle.order | 1 | -| tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | semmle.label | 2 | -| tst.ts:483:17:483:58 | [SatisfiesExpr] ["hello ... string> | tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | semmle.order | 2 | -| tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | tst.ts:483:46:483:50 | [LocalTypeAccess] Pair3 | semmle.label | 1 | -| tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | tst.ts:483:46:483:50 | [LocalTypeAccess] Pair3 | semmle.order | 1 | -| tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:483:46:483:58 | [GenericTypeExpr] Pair3 | tst.ts:483:52:483:57 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.label | 1 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:486:8:486:11 | [VarDecl] TS54 | semmle.order | 1 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.label | 2 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | semmle.order | 2 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.label | 3 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | semmle.order | 3 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | semmle.label | 4 | -| tst.ts:486:1:496:1 | [NamespaceDeclaration] module ... }); } | tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | semmle.order | 4 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (TypeParameters) | semmle.label | 2 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | file://:0:0:0:0 | (TypeParameters) | semmle.order | 2 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:12:487:28 | [VarDecl] createStreetLight | semmle.label | 0 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:12:487:28 | [VarDecl] createStreetLight | semmle.order | 0 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | semmle.label | 5 | -| tst.ts:487:3:489:3 | [FunctionDeclStmt] functio ... 0]; } | tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | semmle.order | 5 | -| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:30:487:30 | [Identifier] C | semmle.label | 1 | -| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:30:487:30 | [Identifier] C | semmle.order | 1 | -| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:40:487:45 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:487:30:487:45 | [TypeParameter] C extends string | tst.ts:487:40:487:45 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:487:48:487:53 | [SimpleParameter] colors | tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | semmle.label | -2 | -| tst.ts:487:48:487:53 | [SimpleParameter] colors | tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | semmle.order | -2 | -| tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | tst.ts:487:56:487:56 | [LocalTypeAccess] C | semmle.label | 1 | -| tst.ts:487:56:487:58 | [ArrayTypeExpr] C[] | tst.ts:487:56:487:56 | [LocalTypeAccess] C | semmle.order | 1 | -| tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | semmle.label | -2 | -| tst.ts:487:61:487:72 | [SimpleParameter] defaultColor | tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | semmle.order | -2 | -| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.label | 1 | -| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | tst.ts:487:76:487:82 | [LocalTypeAccess] NoInfer | semmle.order | 1 | -| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | tst.ts:487:84:487:84 | [LocalTypeAccess] C | semmle.label | 2 | -| tst.ts:487:76:487:85 | [GenericTypeExpr] NoInfer | tst.ts:487:84:487:84 | [LocalTypeAccess] C | semmle.order | 2 | -| tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | semmle.label | 1 | -| tst.ts:487:88:489:3 | [BlockStmt] { r ... 0]; } | tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | semmle.order | 1 | -| tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | tst.ts:488:12:488:20 | [IndexExpr] colors[0] | semmle.label | 1 | -| tst.ts:488:5:488:21 | [ReturnStmt] return colors[0]; | tst.ts:488:12:488:20 | [IndexExpr] colors[0] | semmle.order | 1 | -| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:12:488:17 | [VarRef] colors | semmle.label | 1 | -| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:12:488:17 | [VarRef] colors | semmle.order | 1 | -| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:19:488:19 | [Literal] 0 | semmle.label | 2 | -| tst.ts:488:12:488:20 | [IndexExpr] colors[0] | tst.ts:488:19:488:19 | [Literal] 0 | semmle.order | 2 | -| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | tst.ts:491:3:491:19 | [VarRef] createStreetLight | semmle.label | 0 | -| tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | tst.ts:491:3:491:19 | [VarRef] createStreetLight | semmle.order | 0 | -| tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | semmle.label | 1 | -| tst.ts:491:3:491:58 | [ExprStmt] createS ... llow"); | tst.ts:491:3:491:57 | [CallExpr] createS ... ellow") | semmle.order | 1 | -| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:22:491:26 | [Literal] "red" | semmle.label | 1 | -| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:22:491:26 | [Literal] "red" | semmle.order | 1 | -| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:29:491:36 | [Literal] "yellow" | semmle.label | 2 | -| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:29:491:36 | [Literal] "yellow" | semmle.order | 2 | -| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:39:491:45 | [Literal] "green" | semmle.label | 3 | -| tst.ts:491:21:491:46 | [ArrayExpr] ["red", ... green"] | tst.ts:491:39:491:45 | [Literal] "green" | semmle.order | 3 | -| tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | semmle.label | 1 | -| tst.ts:493:3:495:5 | [DeclStmt] const myObj = ... | tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | semmle.order | 1 | -| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:9:493:13 | [VarDecl] myObj | semmle.label | 1 | -| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:9:493:13 | [VarDecl] myObj | semmle.order | 1 | -| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | semmle.label | 2 | -| tst.ts:493:9:495:4 | [VariableDeclarator] myObj = ... "; }) | tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | semmle.order | 2 | -| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:17:493:22 | [VarRef] Object | semmle.label | 1 | -| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:17:493:22 | [VarRef] Object | semmle.order | 1 | -| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:24:493:30 | [Label] groupBy | semmle.label | 2 | -| tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | tst.ts:493:24:493:30 | [Label] groupBy | semmle.order | 2 | -| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | semmle.label | 0 | -| tst.ts:493:17:495:4 | [MethodCallExpr] Object. ... "; }) | tst.ts:493:17:493:30 | [DotExpr] Object.groupBy | semmle.order | 0 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:33:493:33 | [Literal] 0 | semmle.label | 1 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:33:493:33 | [Literal] 0 | semmle.order | 1 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:36:493:36 | [Literal] 1 | semmle.label | 2 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:36:493:36 | [Literal] 1 | semmle.order | 2 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:39:493:39 | [Literal] 2 | semmle.label | 3 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:39:493:39 | [Literal] 2 | semmle.order | 3 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:42:493:42 | [Literal] 3 | semmle.label | 4 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:42:493:42 | [Literal] 3 | semmle.order | 4 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:45:493:45 | [Literal] 4 | semmle.label | 5 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:45:493:45 | [Literal] 4 | semmle.order | 5 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:48:493:48 | [Literal] 5 | semmle.label | 6 | -| tst.ts:493:32:493:49 | [ArrayExpr] [0, 1, 2, 3, 4, 5] | tst.ts:493:48:493:48 | [Literal] 5 | semmle.order | 6 | -| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | semmle.label | 5 | -| tst.ts:493:52:495:3 | [ArrowFunctionExpr] (num, i ... d"; } | tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | semmle.order | 5 | -| tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | semmle.label | 1 | -| tst.ts:493:68:495:3 | [BlockStmt] { r ... d"; } | tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | semmle.order | 1 | -| tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | semmle.label | 1 | -| tst.ts:494:5:494:41 | [ReturnStmt] return ... "odd"; | tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | semmle.order | 1 | -| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:12:494:14 | [VarRef] num | semmle.label | 1 | -| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:12:494:14 | [VarRef] num | semmle.order | 1 | -| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:18:494:18 | [Literal] 2 | semmle.label | 2 | -| tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | tst.ts:494:18:494:18 | [Literal] 2 | semmle.order | 2 | -| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | semmle.label | 1 | -| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:12:494:18 | [BinaryExpr] num % 2 | semmle.order | 1 | -| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:24:494:24 | [Literal] 0 | semmle.label | 2 | -| tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | tst.ts:494:24:494:24 | [Literal] 0 | semmle.order | 2 | -| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | semmle.label | 1 | -| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:12:494:24 | [BinaryExpr] num % 2 === 0 | semmle.order | 1 | -| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:28:494:33 | [Literal] "even" | semmle.label | 2 | -| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:28:494:33 | [Literal] "even" | semmle.order | 2 | -| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:36:494:40 | [Literal] "odd" | semmle.label | 3 | -| tst.ts:494:12:494:40 | [ConditionalExpr] num % 2 ... : "odd" | tst.ts:494:36:494:40 | [Literal] "odd" | semmle.order | 3 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:498:8:498:11 | [VarDecl] TS55 | semmle.label | 1 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:498:8:498:11 | [VarDecl] TS55 | semmle.order | 1 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:499:3:500:40 | [DeclStmt] const strings = ... | semmle.label | 2 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:499:3:500:40 | [DeclStmt] const strings = ... | semmle.order | 2 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | semmle.label | 3 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | semmle.order | 3 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | semmle.label | 4 | -| tst.ts:498:1:511:1 | [NamespaceDeclaration] module ... } } } | tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | semmle.order | 4 | -| tst.ts:499:3:500:40 | [DeclStmt] const strings = ... | tst.ts:499:9:500:39 | [VariableDeclarator] strings ... tring") | semmle.label | 1 | -| tst.ts:499:3:500:40 | [DeclStmt] const strings = ... | tst.ts:499:9:500:39 | [VariableDeclarator] strings ... tring") | semmle.order | 1 | -| tst.ts:499:9:500:39 | [VariableDeclarator] strings ... tring") | tst.ts:499:9:499:15 | [VarDecl] strings | semmle.label | 1 | -| tst.ts:499:9:500:39 | [VariableDeclarator] strings ... tring") | tst.ts:499:9:499:15 | [VarDecl] strings | semmle.order | 1 | -| tst.ts:499:9:500:39 | [VariableDeclarator] strings ... tring") | tst.ts:499:19:500:39 | [MethodCallExpr] (["foo" ... tring") | semmle.label | 2 | -| tst.ts:499:9:500:39 | [VariableDeclarator] strings ... tring") | tst.ts:499:19:500:39 | [MethodCallExpr] (["foo" ... tring") | semmle.order | 2 | -| tst.ts:499:19:499:32 | [ParExpr] (["foo", 123]) | tst.ts:499:20:499:31 | [ArrayExpr] ["foo", 123] | semmle.label | 1 | -| tst.ts:499:19:499:32 | [ParExpr] (["foo", 123]) | tst.ts:499:20:499:31 | [ArrayExpr] ["foo", 123] | semmle.order | 1 | -| tst.ts:499:19:500:11 | [DotExpr] (["foo" ... .filter | tst.ts:499:19:499:32 | [ParExpr] (["foo", 123]) | semmle.label | 1 | -| tst.ts:499:19:500:11 | [DotExpr] (["foo" ... .filter | tst.ts:499:19:499:32 | [ParExpr] (["foo", 123]) | semmle.order | 1 | -| tst.ts:499:19:500:11 | [DotExpr] (["foo" ... .filter | tst.ts:500:6:500:11 | [Label] filter | semmle.label | 2 | -| tst.ts:499:19:500:11 | [DotExpr] (["foo" ... .filter | tst.ts:500:6:500:11 | [Label] filter | semmle.order | 2 | -| tst.ts:499:19:500:39 | [MethodCallExpr] (["foo" ... tring") | file://:0:0:0:0 | (Arguments) | semmle.label | 1 | -| tst.ts:499:19:500:39 | [MethodCallExpr] (["foo" ... tring") | file://:0:0:0:0 | (Arguments) | semmle.order | 1 | -| tst.ts:499:19:500:39 | [MethodCallExpr] (["foo" ... tring") | tst.ts:499:19:500:11 | [DotExpr] (["foo" ... .filter | semmle.label | 0 | -| tst.ts:499:19:500:39 | [MethodCallExpr] (["foo" ... tring") | tst.ts:499:19:500:11 | [DotExpr] (["foo" ... .filter | semmle.order | 0 | -| tst.ts:499:20:499:31 | [ArrayExpr] ["foo", 123] | tst.ts:499:21:499:25 | [Literal] "foo" | semmle.label | 1 | -| tst.ts:499:20:499:31 | [ArrayExpr] ["foo", 123] | tst.ts:499:21:499:25 | [Literal] "foo" | semmle.order | 1 | -| tst.ts:499:20:499:31 | [ArrayExpr] ["foo", 123] | tst.ts:499:28:499:30 | [Literal] 123 | semmle.label | 2 | -| tst.ts:499:20:499:31 | [ArrayExpr] ["foo", 123] | tst.ts:499:28:499:30 | [Literal] 123 | semmle.order | 2 | -| tst.ts:500:13:500:38 | [ArrowFunctionExpr] s => ty ... string" | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:500:13:500:38 | [ArrowFunctionExpr] s => ty ... string" | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:500:13:500:38 | [ArrowFunctionExpr] s => ty ... string" | tst.ts:500:18:500:38 | [BinaryExpr] typeof ... string" | semmle.label | 5 | -| tst.ts:500:13:500:38 | [ArrowFunctionExpr] s => ty ... string" | tst.ts:500:18:500:38 | [BinaryExpr] typeof ... string" | semmle.order | 5 | -| tst.ts:500:18:500:25 | [UnaryExpr] typeof s | tst.ts:500:25:500:25 | [VarRef] s | semmle.label | 1 | -| tst.ts:500:18:500:25 | [UnaryExpr] typeof s | tst.ts:500:25:500:25 | [VarRef] s | semmle.order | 1 | -| tst.ts:500:18:500:38 | [BinaryExpr] typeof ... string" | tst.ts:500:18:500:25 | [UnaryExpr] typeof s | semmle.label | 1 | -| tst.ts:500:18:500:38 | [BinaryExpr] typeof ... string" | tst.ts:500:18:500:25 | [UnaryExpr] typeof s | semmle.order | 1 | -| tst.ts:500:18:500:38 | [BinaryExpr] typeof ... string" | tst.ts:500:31:500:38 | [Literal] "string" | semmle.label | 2 | -| tst.ts:500:18:500:38 | [BinaryExpr] typeof ... string" | tst.ts:500:31:500:38 | [Literal] "string" | semmle.order | 2 | -| tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | tst.ts:502:8:502:16 | [DeclStmt] const str = ... | semmle.label | 1 | -| tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | tst.ts:502:8:502:16 | [DeclStmt] const str = ... | semmle.order | 1 | -| tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | tst.ts:502:21:502:27 | [VarRef] strings | semmle.label | 2 | -| tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | tst.ts:502:21:502:27 | [VarRef] strings | semmle.order | 2 | -| tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | tst.ts:502:30:504:3 | [BlockStmt] { s ... 5.4 } | semmle.label | 3 | -| tst.ts:502:3:504:3 | [ForOfStmt] for (co ... 5.4 } | tst.ts:502:30:504:3 | [BlockStmt] { s ... 5.4 } | semmle.order | 3 | -| tst.ts:502:8:502:16 | [DeclStmt] const str = ... | tst.ts:502:14:502:16 | [VariableDeclarator] str | semmle.label | 1 | -| tst.ts:502:8:502:16 | [DeclStmt] const str = ... | tst.ts:502:14:502:16 | [VariableDeclarator] str | semmle.order | 1 | -| tst.ts:502:14:502:16 | [VariableDeclarator] str | tst.ts:502:14:502:16 | [VarDecl] str | semmle.label | 1 | -| tst.ts:502:14:502:16 | [VariableDeclarator] str | tst.ts:502:14:502:16 | [VarDecl] str | semmle.order | 1 | -| tst.ts:502:30:504:3 | [BlockStmt] { s ... 5.4 } | tst.ts:503:5:503:22 | [ExprStmt] str.toLowerCase(); | semmle.label | 1 | -| tst.ts:502:30:504:3 | [BlockStmt] { s ... 5.4 } | tst.ts:503:5:503:22 | [ExprStmt] str.toLowerCase(); | semmle.order | 1 | -| tst.ts:503:5:503:19 | [DotExpr] str.toLowerCase | tst.ts:503:5:503:7 | [VarRef] str | semmle.label | 1 | -| tst.ts:503:5:503:19 | [DotExpr] str.toLowerCase | tst.ts:503:5:503:7 | [VarRef] str | semmle.order | 1 | -| tst.ts:503:5:503:19 | [DotExpr] str.toLowerCase | tst.ts:503:9:503:19 | [Label] toLowerCase | semmle.label | 2 | -| tst.ts:503:5:503:19 | [DotExpr] str.toLowerCase | tst.ts:503:9:503:19 | [Label] toLowerCase | semmle.order | 2 | -| tst.ts:503:5:503:21 | [MethodCallExpr] str.toLowerCase() | tst.ts:503:5:503:19 | [DotExpr] str.toLowerCase | semmle.label | 0 | -| tst.ts:503:5:503:21 | [MethodCallExpr] str.toLowerCase() | tst.ts:503:5:503:19 | [DotExpr] str.toLowerCase | semmle.order | 0 | -| tst.ts:503:5:503:22 | [ExprStmt] str.toLowerCase(); | tst.ts:503:5:503:21 | [MethodCallExpr] str.toLowerCase() | semmle.label | 1 | -| tst.ts:503:5:503:22 | [ExprStmt] str.toLowerCase(); | tst.ts:503:5:503:21 | [MethodCallExpr] str.toLowerCase() | semmle.order | 1 | -| tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | tst.ts:506:12:506:13 | [VarDecl] f1 | semmle.label | 0 | -| tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | tst.ts:506:12:506:13 | [VarDecl] f1 | semmle.order | 0 | -| tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | tst.ts:506:58:510:3 | [BlockStmt] { i ... } } | semmle.label | 5 | -| tst.ts:506:3:510:3 | [FunctionDeclStmt] functio ... } } | tst.ts:506:58:510:3 | [BlockStmt] { i ... } } | semmle.order | 5 | -| tst.ts:506:15:506:17 | [SimpleParameter] obj | tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | semmle.label | -2 | -| tst.ts:506:15:506:17 | [SimpleParameter] obj | tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | semmle.order | -2 | -| tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | tst.ts:506:20:506:25 | [LocalTypeAccess] Record | semmle.label | 1 | -| tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | tst.ts:506:20:506:25 | [LocalTypeAccess] Record | semmle.order | 1 | -| tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | tst.ts:506:27:506:32 | [KeywordTypeExpr] string | semmle.label | 2 | -| tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | tst.ts:506:27:506:32 | [KeywordTypeExpr] string | semmle.order | 2 | -| tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | tst.ts:506:35:506:41 | [KeywordTypeExpr] unknown | semmle.label | 3 | -| tst.ts:506:20:506:42 | [GenericTypeExpr] Record< ... nknown> | tst.ts:506:35:506:41 | [KeywordTypeExpr] unknown | semmle.order | 3 | -| tst.ts:506:45:506:47 | [SimpleParameter] key | tst.ts:506:50:506:55 | [KeywordTypeExpr] string | semmle.label | -2 | -| tst.ts:506:45:506:47 | [SimpleParameter] key | tst.ts:506:50:506:55 | [KeywordTypeExpr] string | semmle.order | -2 | -| tst.ts:506:58:510:3 | [BlockStmt] { i ... } } | tst.ts:507:5:509:5 | [IfStmt] if (typ ... r } | semmle.label | 1 | -| tst.ts:506:58:510:3 | [BlockStmt] { i ... } } | tst.ts:507:5:509:5 | [IfStmt] if (typ ... r } | semmle.order | 1 | -| tst.ts:507:5:509:5 | [IfStmt] if (typ ... r } | tst.ts:507:9:507:36 | [BinaryExpr] typeof ... string" | semmle.label | 1 | -| tst.ts:507:5:509:5 | [IfStmt] if (typ ... r } | tst.ts:507:9:507:36 | [BinaryExpr] typeof ... string" | semmle.order | 1 | -| tst.ts:507:5:509:5 | [IfStmt] if (typ ... r } | tst.ts:507:39:509:5 | [BlockStmt] { ... r } | semmle.label | 2 | -| tst.ts:507:5:509:5 | [IfStmt] if (typ ... r } | tst.ts:507:39:509:5 | [BlockStmt] { ... r } | semmle.order | 2 | -| tst.ts:507:9:507:23 | [UnaryExpr] typeof obj[key] | tst.ts:507:16:507:23 | [IndexExpr] obj[key] | semmle.label | 1 | -| tst.ts:507:9:507:23 | [UnaryExpr] typeof obj[key] | tst.ts:507:16:507:23 | [IndexExpr] obj[key] | semmle.order | 1 | -| tst.ts:507:9:507:36 | [BinaryExpr] typeof ... string" | tst.ts:507:9:507:23 | [UnaryExpr] typeof obj[key] | semmle.label | 1 | -| tst.ts:507:9:507:36 | [BinaryExpr] typeof ... string" | tst.ts:507:9:507:23 | [UnaryExpr] typeof obj[key] | semmle.order | 1 | -| tst.ts:507:9:507:36 | [BinaryExpr] typeof ... string" | tst.ts:507:29:507:36 | [Literal] "string" | semmle.label | 2 | -| tst.ts:507:9:507:36 | [BinaryExpr] typeof ... string" | tst.ts:507:29:507:36 | [Literal] "string" | semmle.order | 2 | -| tst.ts:507:16:507:23 | [IndexExpr] obj[key] | tst.ts:507:16:507:18 | [VarRef] obj | semmle.label | 1 | -| tst.ts:507:16:507:23 | [IndexExpr] obj[key] | tst.ts:507:16:507:18 | [VarRef] obj | semmle.order | 1 | -| tst.ts:507:16:507:23 | [IndexExpr] obj[key] | tst.ts:507:20:507:22 | [VarRef] key | semmle.label | 2 | -| tst.ts:507:16:507:23 | [IndexExpr] obj[key] | tst.ts:507:20:507:22 | [VarRef] key | semmle.order | 2 | -| tst.ts:507:39:509:5 | [BlockStmt] { ... r } | tst.ts:508:7:508:39 | [DeclStmt] var str = ... | semmle.label | 1 | -| tst.ts:507:39:509:5 | [BlockStmt] { ... r } | tst.ts:508:7:508:39 | [DeclStmt] var str = ... | semmle.order | 1 | -| tst.ts:508:7:508:39 | [DeclStmt] var str = ... | tst.ts:508:11:508:38 | [VariableDeclarator] str = o ... rCase() | semmle.label | 1 | -| tst.ts:508:7:508:39 | [DeclStmt] var str = ... | tst.ts:508:11:508:38 | [VariableDeclarator] str = o ... rCase() | semmle.order | 1 | -| tst.ts:508:11:508:38 | [VariableDeclarator] str = o ... rCase() | tst.ts:508:11:508:13 | [VarDecl] str | semmle.label | 1 | -| tst.ts:508:11:508:38 | [VariableDeclarator] str = o ... rCase() | tst.ts:508:11:508:13 | [VarDecl] str | semmle.order | 1 | -| tst.ts:508:11:508:38 | [VariableDeclarator] str = o ... rCase() | tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | semmle.label | 2 | -| tst.ts:508:11:508:38 | [VariableDeclarator] str = o ... rCase() | tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | semmle.order | 2 | -| tst.ts:508:17:508:24 | [IndexExpr] obj[key] | tst.ts:508:17:508:19 | [VarRef] obj | semmle.label | 1 | -| tst.ts:508:17:508:24 | [IndexExpr] obj[key] | tst.ts:508:17:508:19 | [VarRef] obj | semmle.order | 1 | -| tst.ts:508:17:508:24 | [IndexExpr] obj[key] | tst.ts:508:21:508:23 | [VarRef] key | semmle.label | 2 | -| tst.ts:508:17:508:24 | [IndexExpr] obj[key] | tst.ts:508:21:508:23 | [VarRef] key | semmle.order | 2 | -| tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | tst.ts:508:17:508:24 | [IndexExpr] obj[key] | semmle.label | 1 | -| tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | tst.ts:508:17:508:24 | [IndexExpr] obj[key] | semmle.order | 1 | -| tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | tst.ts:508:26:508:36 | [Label] toUpperCase | semmle.label | 2 | -| tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | tst.ts:508:26:508:36 | [Label] toUpperCase | semmle.order | 2 | -| tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | semmle.label | 0 | -| tst.ts:508:17:508:38 | [MethodCallExpr] obj[key ... rCase() | tst.ts:508:17:508:36 | [DotExpr] obj[key].toUpperCase | semmle.order | 0 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:513:11:513:14 | [VarDecl] TS57 | semmle.label | 1 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:513:11:513:14 | [VarDecl] TS57 | semmle.order | 1 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:514:3:514:26 | [DeclStmt] const a = ... | semmle.label | 2 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:514:3:514:26 | [DeclStmt] const a = ... | semmle.order | 2 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | semmle.label | 3 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | semmle.order | 3 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | semmle.label | 4 | -| tst.ts:513:1:520:1 | [NamespaceDeclaration] namespa ... type. } | tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | semmle.order | 4 | -| tst.ts:514:3:514:26 | [DeclStmt] const a = ... | tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | semmle.label | 1 | -| tst.ts:514:3:514:26 | [DeclStmt] const a = ... | tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | semmle.order | 1 | -| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:17:514:17 | [VarDecl] a | semmle.label | 1 | -| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:17:514:17 | [VarDecl] a | semmle.order | 1 | -| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:20:514:25 | [KeywordTypeExpr] symbol | semmle.label | 2 | -| tst.ts:514:17:514:25 | [VariableDeclarator] a: symbol | tst.ts:514:20:514:25 | [KeywordTypeExpr] symbol | semmle.order | 2 | -| tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | semmle.label | 1 | -| tst.ts:515:3:517:3 | [ExportDeclaration] export ... }; } | tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | semmle.order | 1 | -| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:16:515:16 | [VarDecl] A | semmle.label | 1 | -| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:16:515:16 | [VarDecl] A | semmle.order | 1 | -| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | semmle.label | 3 | -| tst.ts:515:10:517:3 | [ClassDefinition,TypeDefinition] class A ... }; } | tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | semmle.order | 3 | -| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [FunctionExpr] () {} | semmle.label | 2 | -| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [FunctionExpr] () {} | semmle.order | 2 | -| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [Label] constructor | semmle.label | 1 | -| tst.ts:515:18:515:17 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | tst.ts:515:18:515:17 | [Label] constructor | semmle.order | 1 | -| tst.ts:515:18:515:17 | [FunctionExpr] () {} | tst.ts:515:18:515:17 | [BlockStmt] {} | semmle.label | 5 | -| tst.ts:515:18:515:17 | [FunctionExpr] () {} | tst.ts:515:18:515:17 | [BlockStmt] {} | semmle.order | 5 | -| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | semmle.label | 1 | -| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | semmle.order | 1 | -| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:8:516:8 | [VarRef] a | semmle.label | 2 | -| tst.ts:516:7:516:24 | [ClassInitializedMember,MethodDefinition] [a]() { return 1 } | tst.ts:516:8:516:8 | [VarRef] a | semmle.order | 2 | -| tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | semmle.label | 5 | -| tst.ts:516:7:516:24 | [FunctionExpr] [a]() { return 1 } | tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | semmle.order | 5 | -| tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | tst.ts:516:15:516:22 | [ReturnStmt] return 1 | semmle.label | 1 | -| tst.ts:516:13:516:24 | [BlockStmt] { return 1 } | tst.ts:516:15:516:22 | [ReturnStmt] return 1 | semmle.order | 1 | -| tst.ts:516:15:516:22 | [ReturnStmt] return 1 | tst.ts:516:22:516:22 | [Literal] 1 | semmle.label | 1 | -| tst.ts:516:15:516:22 | [ReturnStmt] return 1 | tst.ts:516:22:516:22 | [Literal] 1 | semmle.order | 1 | -| tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | semmle.label | 1 | -| tst.ts:519:3:519:32 | [DeclStmt] const e1 = ... | tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | semmle.order | 1 | -| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:17:519:18 | [VarDecl] e1 | semmle.label | 1 | -| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:17:519:18 | [VarDecl] e1 | semmle.order | 1 | -| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | semmle.label | 2 | -| tst.ts:519:17:519:31 | [VariableDeclarator] e1: A[typeof a] | tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | semmle.order | 2 | -| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:21:519:21 | [LocalTypeAccess] A | semmle.label | 1 | -| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:21:519:21 | [LocalTypeAccess] A | semmle.order | 1 | -| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | semmle.label | 2 | -| tst.ts:519:21:519:31 | [IndexedAccessTypeExpr] A[typeof a] | tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | semmle.order | 2 | -| tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | tst.ts:519:30:519:30 | [LocalVarTypeAccess] a | semmle.label | 1 | -| tst.ts:519:23:519:30 | [TypeofTypeExpr] typeof a | tst.ts:519:30:519:30 | [LocalVarTypeAccess] a | semmle.order | 1 | -| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | 1 | -| tstModuleCJS.cts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.order | 1 | -| tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:17:1:28 | [VarDecl] tstModuleCJS | semmle.label | 0 | -| tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:17:1:28 | [VarDecl] tstModuleCJS | semmle.order | 0 | -| tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:33:1:41 | [UnionTypeExpr] 'a' \| 'b' | semmle.label | 4 | -| tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:33:1:41 | [UnionTypeExpr] 'a' \| 'b' | semmle.order | 4 | -| tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:43:3:1 | [BlockStmt] { r ... 'b'; } | semmle.label | 5 | -| tstModuleCJS.cts:1:8:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleCJS.cts:1:43:3:1 | [BlockStmt] { r ... 'b'; } | semmle.order | 5 | -| tstModuleCJS.cts:1:33:1:41 | [UnionTypeExpr] 'a' \| 'b' | tstModuleCJS.cts:1:33:1:35 | [LiteralTypeExpr] 'a' | semmle.label | 1 | -| tstModuleCJS.cts:1:33:1:41 | [UnionTypeExpr] 'a' \| 'b' | tstModuleCJS.cts:1:33:1:35 | [LiteralTypeExpr] 'a' | semmle.order | 1 | -| tstModuleCJS.cts:1:33:1:41 | [UnionTypeExpr] 'a' \| 'b' | tstModuleCJS.cts:1:39:1:41 | [LiteralTypeExpr] 'b' | semmle.label | 2 | -| tstModuleCJS.cts:1:33:1:41 | [UnionTypeExpr] 'a' \| 'b' | tstModuleCJS.cts:1:39:1:41 | [LiteralTypeExpr] 'b' | semmle.order | 2 | -| tstModuleCJS.cts:1:43:3:1 | [BlockStmt] { r ... 'b'; } | tstModuleCJS.cts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | semmle.label | 1 | -| tstModuleCJS.cts:1:43:3:1 | [BlockStmt] { r ... 'b'; } | tstModuleCJS.cts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | semmle.order | 1 | -| tstModuleCJS.cts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | semmle.label | 1 | -| tstModuleCJS.cts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | semmle.order | 1 | -| tstModuleCJS.cts:2:12:2:22 | [DotExpr] Math.random | tstModuleCJS.cts:2:12:2:15 | [VarRef] Math | semmle.label | 1 | -| tstModuleCJS.cts:2:12:2:22 | [DotExpr] Math.random | tstModuleCJS.cts:2:12:2:15 | [VarRef] Math | semmle.order | 1 | -| tstModuleCJS.cts:2:12:2:22 | [DotExpr] Math.random | tstModuleCJS.cts:2:17:2:22 | [Label] random | semmle.label | 2 | -| tstModuleCJS.cts:2:12:2:22 | [DotExpr] Math.random | tstModuleCJS.cts:2:17:2:22 | [Label] random | semmle.order | 2 | -| tstModuleCJS.cts:2:12:2:24 | [MethodCallExpr] Math.random() | tstModuleCJS.cts:2:12:2:22 | [DotExpr] Math.random | semmle.label | 0 | -| tstModuleCJS.cts:2:12:2:24 | [MethodCallExpr] Math.random() | tstModuleCJS.cts:2:12:2:22 | [DotExpr] Math.random | semmle.order | 0 | -| tstModuleCJS.cts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleCJS.cts:2:12:2:24 | [MethodCallExpr] Math.random() | semmle.label | 1 | -| tstModuleCJS.cts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleCJS.cts:2:12:2:24 | [MethodCallExpr] Math.random() | semmle.order | 1 | -| tstModuleCJS.cts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleCJS.cts:2:28:2:30 | [Literal] 0.5 | semmle.label | 2 | -| tstModuleCJS.cts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleCJS.cts:2:28:2:30 | [Literal] 0.5 | semmle.order | 2 | -| tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleCJS.cts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | semmle.label | 1 | -| tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleCJS.cts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | semmle.order | 1 | -| tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleCJS.cts:2:34:2:36 | [Literal] 'a' | semmle.label | 2 | -| tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleCJS.cts:2:34:2:36 | [Literal] 'a' | semmle.order | 2 | -| tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleCJS.cts:2:40:2:42 | [Literal] 'b' | semmle.label | 3 | -| tstModuleCJS.cts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleCJS.cts:2:40:2:42 | [Literal] 'b' | semmle.order | 3 | -| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.label | 1 | -| tstModuleES.mts:1:1:3:1 | [ExportDeclaration] export ... 'b'; } | tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | semmle.order | 1 | -| tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleES.mts:1:25:1:35 | [VarDecl] tstModuleES | semmle.label | 0 | -| tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleES.mts:1:25:1:35 | [VarDecl] tstModuleES | semmle.order | 0 | -| tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleES.mts:1:40:1:48 | [UnionTypeExpr] 'a' \| 'b' | semmle.label | 4 | -| tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleES.mts:1:40:1:48 | [UnionTypeExpr] 'a' \| 'b' | semmle.order | 4 | -| tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleES.mts:1:50:3:1 | [BlockStmt] { r ... 'b'; } | semmle.label | 5 | -| tstModuleES.mts:1:16:3:1 | [FunctionDeclStmt] functio ... 'b'; } | tstModuleES.mts:1:50:3:1 | [BlockStmt] { r ... 'b'; } | semmle.order | 5 | -| tstModuleES.mts:1:40:1:48 | [UnionTypeExpr] 'a' \| 'b' | tstModuleES.mts:1:40:1:42 | [LiteralTypeExpr] 'a' | semmle.label | 1 | -| tstModuleES.mts:1:40:1:48 | [UnionTypeExpr] 'a' \| 'b' | tstModuleES.mts:1:40:1:42 | [LiteralTypeExpr] 'a' | semmle.order | 1 | -| tstModuleES.mts:1:40:1:48 | [UnionTypeExpr] 'a' \| 'b' | tstModuleES.mts:1:46:1:48 | [LiteralTypeExpr] 'b' | semmle.label | 2 | -| tstModuleES.mts:1:40:1:48 | [UnionTypeExpr] 'a' \| 'b' | tstModuleES.mts:1:46:1:48 | [LiteralTypeExpr] 'b' | semmle.order | 2 | -| tstModuleES.mts:1:50:3:1 | [BlockStmt] { r ... 'b'; } | tstModuleES.mts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | semmle.label | 1 | -| tstModuleES.mts:1:50:3:1 | [BlockStmt] { r ... 'b'; } | tstModuleES.mts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | semmle.order | 1 | -| tstModuleES.mts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | semmle.label | 1 | -| tstModuleES.mts:2:5:2:43 | [ReturnStmt] return ... : 'b'; | tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | semmle.order | 1 | -| tstModuleES.mts:2:12:2:22 | [DotExpr] Math.random | tstModuleES.mts:2:12:2:15 | [VarRef] Math | semmle.label | 1 | -| tstModuleES.mts:2:12:2:22 | [DotExpr] Math.random | tstModuleES.mts:2:12:2:15 | [VarRef] Math | semmle.order | 1 | -| tstModuleES.mts:2:12:2:22 | [DotExpr] Math.random | tstModuleES.mts:2:17:2:22 | [Label] random | semmle.label | 2 | -| tstModuleES.mts:2:12:2:22 | [DotExpr] Math.random | tstModuleES.mts:2:17:2:22 | [Label] random | semmle.order | 2 | -| tstModuleES.mts:2:12:2:24 | [MethodCallExpr] Math.random() | tstModuleES.mts:2:12:2:22 | [DotExpr] Math.random | semmle.label | 0 | -| tstModuleES.mts:2:12:2:24 | [MethodCallExpr] Math.random() | tstModuleES.mts:2:12:2:22 | [DotExpr] Math.random | semmle.order | 0 | -| tstModuleES.mts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleES.mts:2:12:2:24 | [MethodCallExpr] Math.random() | semmle.label | 1 | -| tstModuleES.mts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleES.mts:2:12:2:24 | [MethodCallExpr] Math.random() | semmle.order | 1 | -| tstModuleES.mts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleES.mts:2:28:2:30 | [Literal] 0.5 | semmle.label | 2 | -| tstModuleES.mts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | tstModuleES.mts:2:28:2:30 | [Literal] 0.5 | semmle.order | 2 | -| tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleES.mts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | semmle.label | 1 | -| tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleES.mts:2:12:2:30 | [BinaryExpr] Math.random() > 0.5 | semmle.order | 1 | -| tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleES.mts:2:34:2:36 | [Literal] 'a' | semmle.label | 2 | -| tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleES.mts:2:34:2:36 | [Literal] 'a' | semmle.order | 2 | -| tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleES.mts:2:40:2:42 | [Literal] 'b' | semmle.label | 3 | -| tstModuleES.mts:2:12:2:42 | [ConditionalExpr] Math.ra ... ' : 'b' | tstModuleES.mts:2:40:2:42 | [Literal] 'b' | semmle.order | 3 | -| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | 1 | -| tstSuffixA.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.order | 1 | -| tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixA.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | 0 | -| tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixA.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.order | 0 | -| tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixA.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixA.ts' | semmle.label | 4 | -| tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixA.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixA.ts' | semmle.order | 4 | -| tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixA.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | semmle.label | 5 | -| tstSuffixA.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixA.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | semmle.order | 5 | -| tstSuffixA.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | tstSuffixA.ts:2:5:2:27 | [ReturnStmt] return ... xA.ts'; | semmle.label | 1 | -| tstSuffixA.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | tstSuffixA.ts:2:5:2:27 | [ReturnStmt] return ... xA.ts'; | semmle.order | 1 | -| tstSuffixA.ts:2:5:2:27 | [ReturnStmt] return ... xA.ts'; | tstSuffixA.ts:2:12:2:26 | [Literal] 'tstSuffixA.ts' | semmle.label | 1 | -| tstSuffixA.ts:2:5:2:27 | [ReturnStmt] return ... xA.ts'; | tstSuffixA.ts:2:12:2:26 | [Literal] 'tstSuffixA.ts' | semmle.order | 1 | -| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | 1 | -| tstSuffixB.ios.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.order | 1 | -| tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ios.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | 0 | -| tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ios.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.order | 0 | -| tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ios.ts:1:33:1:51 | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | semmle.label | 4 | -| tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ios.ts:1:33:1:51 | [LiteralTypeExpr] 'tstSuffixB.ios.ts' | semmle.order | 4 | -| tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ios.ts:1:53:3:1 | [BlockStmt] { r ... .ts'; } | semmle.label | 5 | -| tstSuffixB.ios.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ios.ts:1:53:3:1 | [BlockStmt] { r ... .ts'; } | semmle.order | 5 | -| tstSuffixB.ios.ts:1:53:3:1 | [BlockStmt] { r ... .ts'; } | tstSuffixB.ios.ts:2:5:2:31 | [ReturnStmt] return ... os.ts'; | semmle.label | 1 | -| tstSuffixB.ios.ts:1:53:3:1 | [BlockStmt] { r ... .ts'; } | tstSuffixB.ios.ts:2:5:2:31 | [ReturnStmt] return ... os.ts'; | semmle.order | 1 | -| tstSuffixB.ios.ts:2:5:2:31 | [ReturnStmt] return ... os.ts'; | tstSuffixB.ios.ts:2:12:2:30 | [Literal] 'tstSuffixB.ios.ts' | semmle.label | 1 | -| tstSuffixB.ios.ts:2:5:2:31 | [ReturnStmt] return ... os.ts'; | tstSuffixB.ios.ts:2:12:2:30 | [Literal] 'tstSuffixB.ios.ts' | semmle.order | 1 | -| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.label | 1 | -| tstSuffixB.ts:1:1:3:1 | [ExportDeclaration] export ... .ts'; } | tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | semmle.order | 1 | -| tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.label | 0 | -| tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ts:1:17:1:28 | [VarDecl] resolvedFile | semmle.order | 0 | -| tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixB.ts' | semmle.label | 4 | -| tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ts:1:33:1:47 | [LiteralTypeExpr] 'tstSuffixB.ts' | semmle.order | 4 | -| tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | semmle.label | 5 | -| tstSuffixB.ts:1:8:3:1 | [FunctionDeclStmt] functio ... .ts'; } | tstSuffixB.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | semmle.order | 5 | -| tstSuffixB.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | tstSuffixB.ts:2:5:2:27 | [ReturnStmt] return ... xB.ts'; | semmle.label | 1 | -| tstSuffixB.ts:1:49:3:1 | [BlockStmt] { r ... .ts'; } | tstSuffixB.ts:2:5:2:27 | [ReturnStmt] return ... xB.ts'; | semmle.order | 1 | -| tstSuffixB.ts:2:5:2:27 | [ReturnStmt] return ... xB.ts'; | tstSuffixB.ts:2:12:2:26 | [Literal] 'tstSuffixB.ts' | semmle.label | 1 | -| tstSuffixB.ts:2:5:2:27 | [ReturnStmt] return ... xB.ts'; | tstSuffixB.ts:2:12:2:26 | [Literal] 'tstSuffixB.ts' | semmle.order | 1 | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.label | 1 | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:6:1:6 | [Identifier] B | semmle.order | 1 | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.label | 2 | -| type_alias.ts:1:1:1:17 | [TypeAliasDeclaration,TypeDefinition] type B = boolean; | type_alias.ts:1:10:1:16 | [KeywordTypeExpr] boolean | semmle.order | 2 | -| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | semmle.label | 1 | -| type_alias.ts:3:1:3:9 | [DeclStmt] var b = ... | type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | semmle.order | 1 | -| type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | type_alias.ts:3:5:3:5 | [VarDecl] b | semmle.label | 1 | -| type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | type_alias.ts:3:5:3:5 | [VarDecl] b | semmle.order | 1 | -| type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | type_alias.ts:3:8:3:8 | [LocalTypeAccess] B | semmle.label | 2 | -| type_alias.ts:3:5:3:8 | [VariableDeclarator] b: B | type_alias.ts:3:8:3:8 | [LocalTypeAccess] B | semmle.order | 2 | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | type_alias.ts:5:6:5:17 | [Identifier] ValueOrArray | semmle.label | 1 | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | type_alias.ts:5:6:5:17 | [Identifier] ValueOrArray | semmle.order | 1 | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | type_alias.ts:5:24:5:49 | [UnionTypeExpr] T \| Arr ... ray> | semmle.label | 3 | -| type_alias.ts:5:1:5:50 | [TypeAliasDeclaration,TypeDefinition] type Va ... ay>; | type_alias.ts:5:24:5:49 | [UnionTypeExpr] T \| Arr ... ray> | semmle.order | 3 | -| type_alias.ts:5:19:5:19 | [TypeParameter] T | type_alias.ts:5:19:5:19 | [Identifier] T | semmle.label | 1 | -| type_alias.ts:5:19:5:19 | [TypeParameter] T | type_alias.ts:5:19:5:19 | [Identifier] T | semmle.order | 1 | -| type_alias.ts:5:24:5:49 | [UnionTypeExpr] T \| Arr ... ray> | type_alias.ts:5:24:5:24 | [LocalTypeAccess] T | semmle.label | 1 | -| type_alias.ts:5:24:5:49 | [UnionTypeExpr] T \| Arr ... ray> | type_alias.ts:5:24:5:24 | [LocalTypeAccess] T | semmle.order | 1 | -| type_alias.ts:5:24:5:49 | [UnionTypeExpr] T \| Arr ... ray> | type_alias.ts:5:28:5:49 | [GenericTypeExpr] Array> | semmle.label | 2 | -| type_alias.ts:5:24:5:49 | [UnionTypeExpr] T \| Arr ... ray> | type_alias.ts:5:28:5:49 | [GenericTypeExpr] Array> | semmle.order | 2 | -| type_alias.ts:5:28:5:49 | [GenericTypeExpr] Array> | type_alias.ts:5:28:5:32 | [LocalTypeAccess] Array | semmle.label | 1 | -| type_alias.ts:5:28:5:49 | [GenericTypeExpr] Array> | type_alias.ts:5:28:5:32 | [LocalTypeAccess] Array | semmle.order | 1 | -| type_alias.ts:5:28:5:49 | [GenericTypeExpr] Array> | type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | semmle.label | 2 | -| type_alias.ts:5:28:5:49 | [GenericTypeExpr] Array> | type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | semmle.order | 2 | -| type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | type_alias.ts:5:34:5:45 | [LocalTypeAccess] ValueOrArray | semmle.label | 1 | -| type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | type_alias.ts:5:34:5:45 | [LocalTypeAccess] ValueOrArray | semmle.order | 1 | -| type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | type_alias.ts:5:47:5:47 | [LocalTypeAccess] T | semmle.label | 2 | -| type_alias.ts:5:34:5:48 | [GenericTypeExpr] ValueOrArray | type_alias.ts:5:47:5:47 | [LocalTypeAccess] T | semmle.order | 2 | -| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | semmle.label | 1 | -| type_alias.ts:7:1:7:28 | [DeclStmt] var c = ... | type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | semmle.order | 1 | -| type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | type_alias.ts:7:5:7:5 | [VarDecl] c | semmle.label | 1 | -| type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | type_alias.ts:7:5:7:5 | [VarDecl] c | semmle.order | 1 | -| type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | semmle.label | 2 | -| type_alias.ts:7:5:7:27 | [VariableDeclarator] c: Valu ... number> | type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | semmle.order | 2 | -| type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | type_alias.ts:7:8:7:19 | [LocalTypeAccess] ValueOrArray | semmle.label | 1 | -| type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | type_alias.ts:7:8:7:19 | [LocalTypeAccess] ValueOrArray | semmle.order | 1 | -| type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | type_alias.ts:7:21:7:26 | [KeywordTypeExpr] number | semmle.label | 2 | -| type_alias.ts:7:8:7:27 | [GenericTypeExpr] ValueOrArray | type_alias.ts:7:21:7:26 | [KeywordTypeExpr] number | semmle.order | 2 | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | type_alias.ts:9:6:9:9 | [Identifier] Json | semmle.label | 1 | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | type_alias.ts:9:6:9:9 | [Identifier] Json | semmle.order | 1 | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | semmle.label | 2 | -| type_alias.ts:9:1:15:13 | [TypeAliasDeclaration,TypeDefinition] type Js ... Json[]; | type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | semmle.order | 2 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:10:7:10:12 | [KeywordTypeExpr] string | semmle.label | 1 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:10:7:10:12 | [KeywordTypeExpr] string | semmle.order | 1 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:11:7:11:12 | [KeywordTypeExpr] number | semmle.label | 2 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:11:7:11:12 | [KeywordTypeExpr] number | semmle.order | 2 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:12:7:12:13 | [KeywordTypeExpr] boolean | semmle.label | 3 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:12:7:12:13 | [KeywordTypeExpr] boolean | semmle.order | 3 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:13:7:13:10 | [KeywordTypeExpr] null | semmle.label | 4 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:13:7:13:10 | [KeywordTypeExpr] null | semmle.order | 4 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:14:7:14:34 | [InterfaceTypeExpr] { [prop ... Json } | semmle.label | 5 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:14:7:14:34 | [InterfaceTypeExpr] { [prop ... Json } | semmle.order | 5 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | semmle.label | 6 | -| type_alias.ts:10:5:15:12 | [UnionTypeExpr] \| strin ... Json[] | type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | semmle.order | 6 | -| type_alias.ts:14:7:14:34 | [InterfaceTypeExpr] { [prop ... Json } | type_alias.ts:14:9:14:32 | [IndexSignature] [proper ... ]: Json | semmle.label | 1 | -| type_alias.ts:14:7:14:34 | [InterfaceTypeExpr] { [prop ... Json } | type_alias.ts:14:9:14:32 | [IndexSignature] [proper ... ]: Json | semmle.order | 1 | -| type_alias.ts:14:9:14:32 | [FunctionExpr] [proper ... ]: Json | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| type_alias.ts:14:9:14:32 | [FunctionExpr] [proper ... ]: Json | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| type_alias.ts:14:9:14:32 | [FunctionExpr] [proper ... ]: Json | type_alias.ts:14:29:14:32 | [LocalTypeAccess] Json | semmle.label | 4 | -| type_alias.ts:14:9:14:32 | [FunctionExpr] [proper ... ]: Json | type_alias.ts:14:29:14:32 | [LocalTypeAccess] Json | semmle.order | 4 | -| type_alias.ts:14:9:14:32 | [IndexSignature] [proper ... ]: Json | type_alias.ts:14:9:14:32 | [FunctionExpr] [proper ... ]: Json | semmle.label | 1 | -| type_alias.ts:14:9:14:32 | [IndexSignature] [proper ... ]: Json | type_alias.ts:14:9:14:32 | [FunctionExpr] [proper ... ]: Json | semmle.order | 1 | -| type_alias.ts:14:10:14:17 | [SimpleParameter] property | type_alias.ts:14:20:14:25 | [KeywordTypeExpr] string | semmle.label | -2 | -| type_alias.ts:14:10:14:17 | [SimpleParameter] property | type_alias.ts:14:20:14:25 | [KeywordTypeExpr] string | semmle.order | -2 | -| type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | type_alias.ts:15:7:15:10 | [LocalTypeAccess] Json | semmle.label | 1 | -| type_alias.ts:15:7:15:12 | [ArrayTypeExpr] Json[] | type_alias.ts:15:7:15:10 | [LocalTypeAccess] Json | semmle.order | 1 | -| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | semmle.label | 1 | -| type_alias.ts:17:1:17:15 | [DeclStmt] var json = ... | type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | semmle.order | 1 | -| type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | type_alias.ts:17:5:17:8 | [VarDecl] json | semmle.label | 1 | -| type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | type_alias.ts:17:5:17:8 | [VarDecl] json | semmle.order | 1 | -| type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | type_alias.ts:17:11:17:14 | [LocalTypeAccess] Json | semmle.label | 2 | -| type_alias.ts:17:5:17:14 | [VariableDeclarator] json: Json | type_alias.ts:17:11:17:14 | [LocalTypeAccess] Json | semmle.order | 2 | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | type_alias.ts:19:6:19:16 | [Identifier] VirtualNode | semmle.label | 1 | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | type_alias.ts:19:6:19:16 | [Identifier] VirtualNode | semmle.order | 1 | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | semmle.label | 2 | -| type_alias.ts:19:1:21:57 | [TypeAliasDeclaration,TypeDefinition] type Vi ... ode[]]; | type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | semmle.order | 2 | -| type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | type_alias.ts:20:7:20:12 | [KeywordTypeExpr] string | semmle.label | 1 | -| type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | type_alias.ts:20:7:20:12 | [KeywordTypeExpr] string | semmle.order | 1 | -| type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | semmle.label | 2 | -| type_alias.ts:20:5:21:56 | [UnionTypeExpr] \| strin ... Node[]] | type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | semmle.order | 2 | -| type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | type_alias.ts:21:8:21:13 | [KeywordTypeExpr] string | semmle.label | 1 | -| type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | type_alias.ts:21:8:21:13 | [KeywordTypeExpr] string | semmle.order | 1 | -| type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | type_alias.ts:21:16:21:37 | [InterfaceTypeExpr] { [key: ... : any } | semmle.label | 2 | -| type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | type_alias.ts:21:16:21:37 | [InterfaceTypeExpr] { [key: ... : any } | semmle.order | 2 | -| type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | type_alias.ts:21:40:21:55 | [RestTypeExpr] ...VirtualNode[] | semmle.label | 3 | -| type_alias.ts:21:7:21:56 | [TupleTypeExpr] [string ... Node[]] | type_alias.ts:21:40:21:55 | [RestTypeExpr] ...VirtualNode[] | semmle.order | 3 | -| type_alias.ts:21:16:21:37 | [InterfaceTypeExpr] { [key: ... : any } | type_alias.ts:21:18:21:35 | [IndexSignature] [key: string]: any | semmle.label | 1 | -| type_alias.ts:21:16:21:37 | [InterfaceTypeExpr] { [key: ... : any } | type_alias.ts:21:18:21:35 | [IndexSignature] [key: string]: any | semmle.order | 1 | -| type_alias.ts:21:18:21:35 | [FunctionExpr] [key: string]: any | file://:0:0:0:0 | (Parameters) | semmle.label | 1 | -| type_alias.ts:21:18:21:35 | [FunctionExpr] [key: string]: any | file://:0:0:0:0 | (Parameters) | semmle.order | 1 | -| type_alias.ts:21:18:21:35 | [FunctionExpr] [key: string]: any | type_alias.ts:21:33:21:35 | [KeywordTypeExpr] any | semmle.label | 4 | -| type_alias.ts:21:18:21:35 | [FunctionExpr] [key: string]: any | type_alias.ts:21:33:21:35 | [KeywordTypeExpr] any | semmle.order | 4 | -| type_alias.ts:21:18:21:35 | [IndexSignature] [key: string]: any | type_alias.ts:21:18:21:35 | [FunctionExpr] [key: string]: any | semmle.label | 1 | -| type_alias.ts:21:18:21:35 | [IndexSignature] [key: string]: any | type_alias.ts:21:18:21:35 | [FunctionExpr] [key: string]: any | semmle.order | 1 | -| type_alias.ts:21:19:21:21 | [SimpleParameter] key | type_alias.ts:21:24:21:29 | [KeywordTypeExpr] string | semmle.label | -2 | -| type_alias.ts:21:19:21:21 | [SimpleParameter] key | type_alias.ts:21:24:21:29 | [KeywordTypeExpr] string | semmle.order | -2 | -| type_alias.ts:21:40:21:55 | [RestTypeExpr] ...VirtualNode[] | type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | semmle.label | 1 | -| type_alias.ts:21:40:21:55 | [RestTypeExpr] ...VirtualNode[] | type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | semmle.order | 1 | -| type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | type_alias.ts:21:43:21:53 | [LocalTypeAccess] VirtualNode | semmle.label | 1 | -| type_alias.ts:21:43:21:55 | [ArrayTypeExpr] VirtualNode[] | type_alias.ts:21:43:21:53 | [LocalTypeAccess] VirtualNode | semmle.order | 1 | -| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | semmle.label | 1 | -| type_alias.ts:23:1:27:6 | [DeclStmt] const myNode = ... | type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | semmle.order | 1 | -| type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | type_alias.ts:23:7:23:12 | [VarDecl] myNode | semmle.label | 1 | -| type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | type_alias.ts:23:7:23:12 | [VarDecl] myNode | semmle.order | 1 | -| type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | type_alias.ts:23:15:23:25 | [LocalTypeAccess] VirtualNode | semmle.label | 2 | -| type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | type_alias.ts:23:15:23:25 | [LocalTypeAccess] VirtualNode | semmle.order | 2 | -| type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | semmle.label | 3 | -| type_alias.ts:23:7:27:5 | [VariableDeclarator] myNode: ... ] ] | type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | semmle.order | 3 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:24:6:24:10 | [Literal] "div" | semmle.label | 1 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:24:6:24:10 | [Literal] "div" | semmle.order | 1 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:24:13:24:28 | [ObjectExpr] {id: ...} | semmle.label | 2 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:24:13:24:28 | [ObjectExpr] {id: ...} | semmle.order | 2 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | semmle.label | 3 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | semmle.order | 3 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | semmle.label | 4 | -| type_alias.ts:24:5:27:5 | [ArrayExpr] ["div", ... ] ] | type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | semmle.order | 4 | -| type_alias.ts:24:13:24:28 | [ObjectExpr] {id: ...} | type_alias.ts:24:15:24:26 | [Property] id: "parent" | semmle.label | 1 | -| type_alias.ts:24:13:24:28 | [ObjectExpr] {id: ...} | type_alias.ts:24:15:24:26 | [Property] id: "parent" | semmle.order | 1 | -| type_alias.ts:24:15:24:26 | [Property] id: "parent" | type_alias.ts:24:15:24:16 | [Label] id | semmle.label | 1 | -| type_alias.ts:24:15:24:26 | [Property] id: "parent" | type_alias.ts:24:15:24:16 | [Label] id | semmle.order | 1 | -| type_alias.ts:24:15:24:26 | [Property] id: "parent" | type_alias.ts:24:19:24:26 | [Literal] "parent" | semmle.label | 2 | -| type_alias.ts:24:15:24:26 | [Property] id: "parent" | type_alias.ts:24:19:24:26 | [Literal] "parent" | semmle.order | 2 | -| type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | type_alias.ts:25:10:25:14 | [Literal] "div" | semmle.label | 1 | -| type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | type_alias.ts:25:10:25:14 | [Literal] "div" | semmle.order | 1 | -| type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | type_alias.ts:25:17:25:37 | [ObjectExpr] {id: ...} | semmle.label | 2 | -| type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | type_alias.ts:25:17:25:37 | [ObjectExpr] {id: ...} | semmle.order | 2 | -| type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | type_alias.ts:25:40:25:60 | [Literal] "I'm the first child" | semmle.label | 3 | -| type_alias.ts:25:9:25:61 | [ArrayExpr] ["div", ... child"] | type_alias.ts:25:40:25:60 | [Literal] "I'm the first child" | semmle.order | 3 | -| type_alias.ts:25:17:25:37 | [ObjectExpr] {id: ...} | type_alias.ts:25:19:25:35 | [Property] id: "first-child" | semmle.label | 1 | -| type_alias.ts:25:17:25:37 | [ObjectExpr] {id: ...} | type_alias.ts:25:19:25:35 | [Property] id: "first-child" | semmle.order | 1 | -| type_alias.ts:25:19:25:35 | [Property] id: "first-child" | type_alias.ts:25:19:25:20 | [Label] id | semmle.label | 1 | -| type_alias.ts:25:19:25:35 | [Property] id: "first-child" | type_alias.ts:25:19:25:20 | [Label] id | semmle.order | 1 | -| type_alias.ts:25:19:25:35 | [Property] id: "first-child" | type_alias.ts:25:23:25:35 | [Literal] "first-child" | semmle.label | 2 | -| type_alias.ts:25:19:25:35 | [Property] id: "first-child" | type_alias.ts:25:23:25:35 | [Literal] "first-child" | semmle.order | 2 | -| type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | type_alias.ts:26:10:26:14 | [Literal] "div" | semmle.label | 1 | -| type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | type_alias.ts:26:10:26:14 | [Literal] "div" | semmle.order | 1 | -| type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | type_alias.ts:26:17:26:38 | [ObjectExpr] {id: ...} | semmle.label | 2 | -| type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | type_alias.ts:26:17:26:38 | [ObjectExpr] {id: ...} | semmle.order | 2 | -| type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | type_alias.ts:26:41:26:62 | [Literal] "I'm the second child" | semmle.label | 3 | -| type_alias.ts:26:9:26:63 | [ArrayExpr] ["div", ... child"] | type_alias.ts:26:41:26:62 | [Literal] "I'm the second child" | semmle.order | 3 | -| type_alias.ts:26:17:26:38 | [ObjectExpr] {id: ...} | type_alias.ts:26:19:26:36 | [Property] id: "second-child" | semmle.label | 1 | -| type_alias.ts:26:17:26:38 | [ObjectExpr] {id: ...} | type_alias.ts:26:19:26:36 | [Property] id: "second-child" | semmle.order | 1 | -| type_alias.ts:26:19:26:36 | [Property] id: "second-child" | type_alias.ts:26:19:26:20 | [Label] id | semmle.label | 1 | -| type_alias.ts:26:19:26:36 | [Property] id: "second-child" | type_alias.ts:26:19:26:20 | [Label] id | semmle.order | 1 | -| type_alias.ts:26:19:26:36 | [Property] id: "second-child" | type_alias.ts:26:23:26:36 | [Literal] "second-child" | semmle.label | 2 | -| type_alias.ts:26:19:26:36 | [Property] id: "second-child" | type_alias.ts:26:23:26:36 | [Literal] "second-child" | semmle.order | 2 | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | 1 | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.order | 1 | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definition_objects.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | 2 | -| type_definition_objects.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definition_objects.ts:1:24:1:32 | [Literal] "./dummy" | semmle.order | 2 | -| type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | type_definition_objects.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | 1 | -| type_definition_objects.ts:1:8:1:17 | [ImportSpecifier] * as dummy | type_definition_objects.ts:1:13:1:17 | [VarDecl] dummy | semmle.order | 1 | -| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | semmle.label | 1 | -| type_definition_objects.ts:3:1:3:17 | [ExportDeclaration] export class C {} | type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | semmle.order | 1 | -| type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | type_definition_objects.ts:3:14:3:14 | [VarDecl] C | semmle.label | 1 | -| type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | type_definition_objects.ts:3:14:3:14 | [VarDecl] C | semmle.order | 1 | -| type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | type_definition_objects.ts:3:16:3:15 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| type_definition_objects.ts:3:8:3:17 | [ClassDefinition,TypeDefinition] class C {} | type_definition_objects.ts:3:16:3:15 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| type_definition_objects.ts:3:16:3:15 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | semmle.label | 2 | -| type_definition_objects.ts:3:16:3:15 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | semmle.order | 2 | -| type_definition_objects.ts:3:16:3:15 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definition_objects.ts:3:16:3:15 | [Label] constructor | semmle.label | 1 | -| type_definition_objects.ts:3:16:3:15 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definition_objects.ts:3:16:3:15 | [Label] constructor | semmle.order | 1 | -| type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | type_definition_objects.ts:3:16:3:15 | [BlockStmt] {} | semmle.label | 5 | -| type_definition_objects.ts:3:16:3:15 | [FunctionExpr] () {} | type_definition_objects.ts:3:16:3:15 | [BlockStmt] {} | semmle.order | 5 | -| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | semmle.label | 1 | -| type_definition_objects.ts:4:1:4:17 | [DeclStmt] let classObj = ... | type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | semmle.order | 1 | -| type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | type_definition_objects.ts:4:5:4:12 | [VarDecl] classObj | semmle.label | 1 | -| type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | type_definition_objects.ts:4:5:4:12 | [VarDecl] classObj | semmle.order | 1 | -| type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | type_definition_objects.ts:4:16:4:16 | [VarRef] C | semmle.label | 2 | -| type_definition_objects.ts:4:5:4:16 | [VariableDeclarator] classObj = C | type_definition_objects.ts:4:16:4:16 | [VarRef] C | semmle.order | 2 | -| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | semmle.label | 1 | -| type_definition_objects.ts:6:1:6:16 | [ExportDeclaration] export enum E {} | type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | semmle.order | 1 | -| type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | type_definition_objects.ts:6:13:6:13 | [VarDecl] E | semmle.label | 1 | -| type_definition_objects.ts:6:8:6:16 | [EnumDeclaration,TypeDefinition] enum E {} | type_definition_objects.ts:6:13:6:13 | [VarDecl] E | semmle.order | 1 | -| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | semmle.label | 1 | -| type_definition_objects.ts:7:1:7:16 | [DeclStmt] let enumObj = ... | type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | semmle.order | 1 | -| type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | type_definition_objects.ts:7:5:7:11 | [VarDecl] enumObj | semmle.label | 1 | -| type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | type_definition_objects.ts:7:5:7:11 | [VarDecl] enumObj | semmle.order | 1 | -| type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | type_definition_objects.ts:7:15:7:15 | [VarRef] E | semmle.label | 2 | -| type_definition_objects.ts:7:5:7:15 | [VariableDeclarator] enumObj = E | type_definition_objects.ts:7:15:7:15 | [VarRef] E | semmle.order | 2 | -| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | semmle.label | 1 | -| type_definition_objects.ts:9:1:9:22 | [ExportDeclaration] export ... e N {;} | type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | semmle.order | 1 | -| type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | type_definition_objects.ts:9:18:9:18 | [VarDecl] N | semmle.label | 1 | -| type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | type_definition_objects.ts:9:18:9:18 | [VarDecl] N | semmle.order | 1 | -| type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | type_definition_objects.ts:9:21:9:21 | [EmptyStmt] ; | semmle.label | 2 | -| type_definition_objects.ts:9:8:9:22 | [NamespaceDeclaration] namespace N {;} | type_definition_objects.ts:9:21:9:21 | [EmptyStmt] ; | semmle.order | 2 | -| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | semmle.label | 1 | -| type_definition_objects.ts:10:1:10:21 | [DeclStmt] let namespaceObj = ... | type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | semmle.order | 1 | -| type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | type_definition_objects.ts:10:5:10:16 | [VarDecl] namespaceObj | semmle.label | 1 | -| type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | type_definition_objects.ts:10:5:10:16 | [VarDecl] namespaceObj | semmle.order | 1 | -| type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | type_definition_objects.ts:10:20:10:20 | [VarRef] N | semmle.label | 2 | -| type_definition_objects.ts:10:5:10:20 | [VariableDeclarator] namespaceObj = N | type_definition_objects.ts:10:20:10:20 | [VarRef] N | semmle.order | 2 | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.label | 1 | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | semmle.order | 1 | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definitions.ts:1:24:1:32 | [Literal] "./dummy" | semmle.label | 2 | -| type_definitions.ts:1:1:1:33 | [ImportDeclaration] import ... dummy"; | type_definitions.ts:1:24:1:32 | [Literal] "./dummy" | semmle.order | 2 | -| type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | type_definitions.ts:1:13:1:17 | [VarDecl] dummy | semmle.label | 1 | -| type_definitions.ts:1:8:1:17 | [ImportSpecifier] * as dummy | type_definitions.ts:1:13:1:17 | [VarDecl] dummy | semmle.order | 1 | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | type_definitions.ts:3:11:3:11 | [Identifier] I | semmle.label | 1 | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | type_definitions.ts:3:11:3:11 | [Identifier] I | semmle.order | 1 | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | semmle.label | 3 | -| type_definitions.ts:3:1:5:1 | [InterfaceDeclaration,TypeDefinition] interfa ... x: S; } | type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | semmle.order | 3 | -| type_definitions.ts:3:13:3:13 | [TypeParameter] S | type_definitions.ts:3:13:3:13 | [Identifier] S | semmle.label | 1 | -| type_definitions.ts:3:13:3:13 | [TypeParameter] S | type_definitions.ts:3:13:3:13 | [Identifier] S | semmle.order | 1 | -| type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | type_definitions.ts:4:3:4:3 | [Label] x | semmle.label | 1 | -| type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | type_definitions.ts:4:3:4:3 | [Label] x | semmle.order | 1 | -| type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | type_definitions.ts:4:6:4:6 | [LocalTypeAccess] S | semmle.label | 2 | -| type_definitions.ts:4:3:4:7 | [FieldDeclaration] x: S; | type_definitions.ts:4:6:4:6 | [LocalTypeAccess] S | semmle.order | 2 | -| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | semmle.label | 1 | -| type_definitions.ts:6:1:6:16 | [DeclStmt] let i = ... | type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | semmle.order | 1 | -| type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | type_definitions.ts:6:5:6:5 | [VarDecl] i | semmle.label | 1 | -| type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | type_definitions.ts:6:5:6:5 | [VarDecl] i | semmle.order | 1 | -| type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | semmle.label | 2 | -| type_definitions.ts:6:5:6:16 | [VariableDeclarator] i: I | type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | semmle.order | 2 | -| type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | type_definitions.ts:6:8:6:8 | [LocalTypeAccess] I | semmle.label | 1 | -| type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | type_definitions.ts:6:8:6:8 | [LocalTypeAccess] I | semmle.order | 1 | -| type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | type_definitions.ts:6:10:6:15 | [KeywordTypeExpr] number | semmle.label | 2 | -| type_definitions.ts:6:8:6:16 | [GenericTypeExpr] I | type_definitions.ts:6:10:6:15 | [KeywordTypeExpr] number | semmle.order | 2 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | type_definitions.ts:8:7:8:7 | [VarDecl] C | semmle.label | 1 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | type_definitions.ts:8:7:8:7 | [VarDecl] C | semmle.order | 1 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.label | 2 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | semmle.order | 2 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | semmle.label | 4 | -| type_definitions.ts:8:1:10:1 | [ClassDefinition,TypeDefinition] class C ... x: T } | type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | semmle.order | 4 | -| type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definitions.ts:8:8:8:7 | [FunctionExpr] () {} | semmle.label | 2 | -| type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definitions.ts:8:8:8:7 | [FunctionExpr] () {} | semmle.order | 2 | -| type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definitions.ts:8:8:8:7 | [Label] constructor | semmle.label | 1 | -| type_definitions.ts:8:8:8:7 | [ClassInitializedMember,ConstructorDefinition] constructor() {} | type_definitions.ts:8:8:8:7 | [Label] constructor | semmle.order | 1 | -| type_definitions.ts:8:8:8:7 | [FunctionExpr] () {} | type_definitions.ts:8:8:8:7 | [BlockStmt] {} | semmle.label | 5 | -| type_definitions.ts:8:8:8:7 | [FunctionExpr] () {} | type_definitions.ts:8:8:8:7 | [BlockStmt] {} | semmle.order | 5 | -| type_definitions.ts:8:9:8:9 | [TypeParameter] T | type_definitions.ts:8:9:8:9 | [Identifier] T | semmle.label | 1 | -| type_definitions.ts:8:9:8:9 | [TypeParameter] T | type_definitions.ts:8:9:8:9 | [Identifier] T | semmle.order | 1 | -| type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | type_definitions.ts:9:3:9:3 | [Label] x | semmle.label | 1 | -| type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | type_definitions.ts:9:3:9:3 | [Label] x | semmle.order | 1 | -| type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | type_definitions.ts:9:6:9:6 | [LocalTypeAccess] T | semmle.label | 2 | -| type_definitions.ts:9:3:9:6 | [FieldDeclaration] x: T | type_definitions.ts:9:6:9:6 | [LocalTypeAccess] T | semmle.order | 2 | -| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | semmle.label | 1 | -| type_definitions.ts:11:1:11:17 | [DeclStmt] let c = ... | type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | semmle.order | 1 | -| type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | type_definitions.ts:11:5:11:5 | [VarDecl] c | semmle.label | 1 | -| type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | type_definitions.ts:11:5:11:5 | [VarDecl] c | semmle.order | 1 | -| type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | semmle.label | 2 | -| type_definitions.ts:11:5:11:16 | [VariableDeclarator] c: C | type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | semmle.order | 2 | -| type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | type_definitions.ts:11:8:11:8 | [LocalTypeAccess] C | semmle.label | 1 | -| type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | type_definitions.ts:11:8:11:8 | [LocalTypeAccess] C | semmle.order | 1 | -| type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | type_definitions.ts:11:10:11:15 | [KeywordTypeExpr] number | semmle.label | 2 | -| type_definitions.ts:11:8:11:16 | [GenericTypeExpr] C | type_definitions.ts:11:10:11:15 | [KeywordTypeExpr] number | semmle.order | 2 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:13:6:13:10 | [VarDecl] Color | semmle.label | 1 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:13:6:13:10 | [VarDecl] Color | semmle.order | 1 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | semmle.label | 2 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | semmle.order | 2 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:14:8:14:12 | [EnumMember,TypeDefinition] green | semmle.label | 3 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:14:8:14:12 | [EnumMember,TypeDefinition] green | semmle.order | 3 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | semmle.label | 4 | -| type_definitions.ts:13:1:15:1 | [EnumDeclaration,TypeDefinition] enum Co ... blue } | type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | semmle.order | 4 | -| type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | type_definitions.ts:14:3:14:5 | [VarDecl] red | semmle.label | 1 | -| type_definitions.ts:14:3:14:5 | [EnumMember,TypeDefinition] red | type_definitions.ts:14:3:14:5 | [VarDecl] red | semmle.order | 1 | -| type_definitions.ts:14:8:14:12 | [EnumMember,TypeDefinition] green | type_definitions.ts:14:8:14:12 | [VarDecl] green | semmle.label | 1 | -| type_definitions.ts:14:8:14:12 | [EnumMember,TypeDefinition] green | type_definitions.ts:14:8:14:12 | [VarDecl] green | semmle.order | 1 | -| type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | type_definitions.ts:14:15:14:18 | [VarDecl] blue | semmle.label | 1 | -| type_definitions.ts:14:15:14:18 | [EnumMember,TypeDefinition] blue | type_definitions.ts:14:15:14:18 | [VarDecl] blue | semmle.order | 1 | -| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | semmle.label | 1 | -| type_definitions.ts:16:1:16:17 | [DeclStmt] let color = ... | type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | semmle.order | 1 | -| type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | type_definitions.ts:16:5:16:9 | [VarDecl] color | semmle.label | 1 | -| type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | type_definitions.ts:16:5:16:9 | [VarDecl] color | semmle.order | 1 | -| type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | type_definitions.ts:16:12:16:16 | [LocalTypeAccess] Color | semmle.label | 2 | -| type_definitions.ts:16:5:16:16 | [VariableDeclarator] color: Color | type_definitions.ts:16:12:16:16 | [LocalTypeAccess] Color | semmle.order | 2 | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | type_definitions.ts:18:6:18:22 | [VarDecl] EnumWithOneMember | semmle.label | 1 | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | type_definitions.ts:18:6:18:22 | [VarDecl] EnumWithOneMember | semmle.order | 1 | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | semmle.label | 2 | -| type_definitions.ts:18:1:18:33 | [EnumDeclaration,TypeDefinition] enum En ... ember } | type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | semmle.order | 2 | -| type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | type_definitions.ts:18:26:18:31 | [VarDecl] member | semmle.label | 1 | -| type_definitions.ts:18:26:18:31 | [EnumMember,TypeDefinition] member | type_definitions.ts:18:26:18:31 | [VarDecl] member | semmle.order | 1 | -| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | semmle.label | 1 | -| type_definitions.ts:19:1:19:25 | [DeclStmt] let e = ... | type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | semmle.order | 1 | -| type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | type_definitions.ts:19:5:19:5 | [VarDecl] e | semmle.label | 1 | -| type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | type_definitions.ts:19:5:19:5 | [VarDecl] e | semmle.order | 1 | -| type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | type_definitions.ts:19:8:19:24 | [LocalTypeAccess] EnumWithOneMember | semmle.label | 2 | -| type_definitions.ts:19:5:19:24 | [VariableDeclarator] e: EnumWithOneMember | type_definitions.ts:19:8:19:24 | [LocalTypeAccess] EnumWithOneMember | semmle.order | 2 | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | file://:0:0:0:0 | (TypeParameters) | semmle.label | -100 | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | file://:0:0:0:0 | (TypeParameters) | semmle.order | -100 | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | type_definitions.ts:21:6:21:10 | [Identifier] Alias | semmle.label | 1 | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | type_definitions.ts:21:6:21:10 | [Identifier] Alias | semmle.order | 1 | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | semmle.label | 3 | -| type_definitions.ts:21:1:21:20 | [TypeAliasDeclaration,TypeDefinition] type Alias = T[]; | type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | semmle.order | 3 | -| type_definitions.ts:21:12:21:12 | [TypeParameter] T | type_definitions.ts:21:12:21:12 | [Identifier] T | semmle.label | 1 | -| type_definitions.ts:21:12:21:12 | [TypeParameter] T | type_definitions.ts:21:12:21:12 | [Identifier] T | semmle.order | 1 | -| type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | type_definitions.ts:21:17:21:17 | [LocalTypeAccess] T | semmle.label | 1 | -| type_definitions.ts:21:17:21:19 | [ArrayTypeExpr] T[] | type_definitions.ts:21:17:21:17 | [LocalTypeAccess] T | semmle.order | 1 | -| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | semmle.label | 1 | -| type_definitions.ts:22:1:22:39 | [DeclStmt] let aliasForNumberArray = ... | type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | semmle.order | 1 | -| type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | type_definitions.ts:22:5:22:23 | [VarDecl] aliasForNumberArray | semmle.label | 1 | -| type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | type_definitions.ts:22:5:22:23 | [VarDecl] aliasForNumberArray | semmle.order | 1 | -| type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | type_definitions.ts:22:26:22:38 | [GenericTypeExpr] Alias | semmle.label | 2 | -| type_definitions.ts:22:5:22:38 | [VariableDeclarator] aliasFo ... number> | type_definitions.ts:22:26:22:38 | [GenericTypeExpr] Alias | semmle.order | 2 | -| type_definitions.ts:22:26:22:38 | [GenericTypeExpr] Alias | type_definitions.ts:22:26:22:30 | [LocalTypeAccess] Alias | semmle.label | 1 | -| type_definitions.ts:22:26:22:38 | [GenericTypeExpr] Alias | type_definitions.ts:22:26:22:30 | [LocalTypeAccess] Alias | semmle.order | 1 | -| type_definitions.ts:22:26:22:38 | [GenericTypeExpr] Alias | type_definitions.ts:22:32:22:37 | [KeywordTypeExpr] number | semmle.label | 2 | -| type_definitions.ts:22:26:22:38 | [GenericTypeExpr] Alias | type_definitions.ts:22:32:22:37 | [KeywordTypeExpr] number | semmle.order | 2 | -graphProperties -| semmle.graphKind | tree | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/printAst.ql b/javascript/ql/test/library-tests/TypeScript/Types/printAst.ql deleted file mode 100644 index 248ea7ad396b..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/printAst.ql +++ /dev/null @@ -1,2 +0,0 @@ -import javascript -import semmle.javascript.PrintAst diff --git a/javascript/ql/test/library-tests/TypeScript/Types/something.json b/javascript/ql/test/library-tests/TypeScript/Types/something.json deleted file mode 100644 index 8a79687628fe..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/something.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "foo": "bar" -} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected b/javascript/ql/test/library-tests/TypeScript/Types/tests.expected deleted file mode 100644 index b9e11cfa92f3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.expected +++ /dev/null @@ -1,1545 +0,0 @@ -booleans -| boolean | -getExprType -| boolean-type.ts:1:13:1:17 | dummy | typeof dummy.ts | -| boolean-type.ts:1:24:1:32 | "./dummy" | any | -| boolean-type.ts:3:5:3:9 | true1 | true | -| boolean-type.ts:4:5:4:9 | true2 | true | -| boolean-type.ts:6:5:6:10 | false1 | false | -| boolean-type.ts:7:5:7:10 | false2 | false | -| boolean-type.ts:9:5:9:12 | boolean1 | boolean | -| boolean-type.ts:10:5:10:12 | boolean2 | boolean | -| boolean-type.ts:11:5:11:12 | boolean3 | boolean | -| boolean-type.ts:13:5:13:12 | boolean4 | boolean | -| boolean-type.ts:14:5:14:12 | boolean5 | boolean | -| boolean-type.ts:15:5:15:12 | boolean6 | boolean | -| dummy.ts:2:12:2:12 | x | number | -| dummy.ts:2:16:2:16 | 5 | 5 | -| dummy.ts:4:12:4:14 | reg | RegExp | -| dummy.ts:4:18:4:23 | /ab+c/ | RegExp | -| middle-rest.ts:1:5:1:7 | foo | [boolean, ...string[], number] | -| middle-rest.ts:3:1:3:3 | foo | [boolean, ...string[], number] | -| middle-rest.ts:3:1:3:26 | foo = [ ... ", 123] | [true, string, number] | -| middle-rest.ts:3:7:3:26 | [true, "hello", 123] | [boolean, ...string[], number] | -| middle-rest.ts:3:8:3:11 | true | true | -| middle-rest.ts:3:14:3:20 | "hello" | "hello" | -| middle-rest.ts:3:23:3:25 | 123 | 123 | -| tst.ts:1:13:1:17 | dummy | typeof dummy.ts | -| tst.ts:1:24:1:32 | "./dummy" | any | -| tst.ts:3:5:3:10 | numVar | number | -| tst.ts:5:5:5:8 | num1 | number | -| tst.ts:5:12:5:17 | numVar | number | -| tst.ts:6:5:6:8 | num2 | number | -| tst.ts:6:12:6:12 | 5 | 5 | -| tst.ts:7:5:7:8 | num3 | number | -| tst.ts:7:12:7:15 | num1 | number | -| tst.ts:7:12:7:22 | num1 + num2 | number | -| tst.ts:7:19:7:22 | num2 | number | -| tst.ts:9:5:9:10 | strVar | string | -| tst.ts:10:5:10:9 | hello | string | -| tst.ts:10:13:10:19 | "hello" | "hello" | -| tst.ts:11:5:11:9 | world | string | -| tst.ts:11:13:11:19 | "world" | "world" | -| tst.ts:12:5:12:7 | msg | string | -| tst.ts:12:11:12:15 | hello | string | -| tst.ts:12:11:12:21 | hello + " " | string | -| tst.ts:12:11:12:29 | hello + " " + world | string | -| tst.ts:12:19:12:21 | " " | " " | -| tst.ts:12:25:12:29 | world | string | -| tst.ts:14:10:14:15 | concat | (x: string, y: string) => string | -| tst.ts:14:17:14:17 | x | string | -| tst.ts:14:28:14:28 | y | string | -| tst.ts:14:56:14:56 | x | string | -| tst.ts:14:56:14:60 | x + y | string | -| tst.ts:14:60:14:60 | y | string | -| tst.ts:16:10:16:12 | add | (x: number, y: number) => number | -| tst.ts:16:14:16:14 | x | number | -| tst.ts:16:25:16:25 | y | number | -| tst.ts:16:53:16:53 | x | number | -| tst.ts:16:53:16:57 | x + y | number | -| tst.ts:16:57:16:57 | y | number | -| tst.ts:18:10:18:16 | untyped | (x: any, y: any) => any | -| tst.ts:18:18:18:18 | x | any | -| tst.ts:18:21:18:21 | y | any | -| tst.ts:18:33:18:33 | x | any | -| tst.ts:18:33:18:37 | x + y | any | -| tst.ts:18:37:18:37 | y | any | -| tst.ts:20:10:20:21 | partialTyped | (x: any, y: string) => string | -| tst.ts:20:23:20:23 | x | any | -| tst.ts:20:26:20:26 | y | string | -| tst.ts:20:46:20:46 | x | any | -| tst.ts:20:46:20:50 | x + y | string | -| tst.ts:20:50:20:50 | y | string | -| tst.ts:22:10:22:20 | numFromLoop | number | -| tst.ts:22:25:22:30 | [1, 2] | number[] | -| tst.ts:22:26:22:26 | 1 | 1 | -| tst.ts:22:29:22:29 | 2 | 2 | -| tst.ts:24:5:24:9 | array | number[] | -| tst.ts:26:5:26:12 | voidType | () => void | -| tst.ts:26:15:26:24 | () => void | () => void | -| tst.ts:27:5:27:17 | undefinedType | undefined | -| tst.ts:28:5:28:12 | nullType | null | -| tst.ts:29:5:29:13 | neverType | () => never | -| tst.ts:29:16:29:26 | () => never | () => never | -| tst.ts:30:5:30:14 | symbolType | symbol | -| tst.ts:31:7:31:22 | uniqueSymbolType | typeof uniqueSymbolType | -| tst.ts:32:5:32:14 | objectType | object | -| tst.ts:33:5:33:16 | intersection | string & { x: string; } | -| tst.ts:33:29:33:29 | x | string | -| tst.ts:34:5:34:9 | tuple | [number, string] | -| tst.ts:36:5:36:28 | tupleWi ... Element | [number, string, number?] | -| tst.ts:37:5:37:14 | emptyTuple | [] | -| tst.ts:38:5:38:24 | tupleWithRestElement | [number, ...string[]] | -| tst.ts:39:5:39:36 | tupleWi ... lements | [number, string?, ...number[]] | -| tst.ts:40:5:40:15 | unknownType | unknown | -| tst.ts:42:5:42:21 | constArrayLiteral | readonly [1, 2] | -| tst.ts:42:25:42:30 | [1, 2] | readonly [1, 2] | -| tst.ts:42:25:42:39 | [1, 2] as const | readonly [1, 2] | -| tst.ts:42:26:42:26 | 1 | 1 | -| tst.ts:42:29:42:29 | 2 | 2 | -| tst.ts:43:5:43:22 | constObjectLiteral | { readonly foo: "foo"; } | -| tst.ts:43:26:43:39 | { foo: "foo" } | { readonly foo: "foo"; } | -| tst.ts:43:26:43:48 | { foo: ... s const | { readonly foo: "foo"; } | -| tst.ts:43:28:43:30 | foo | "foo" | -| tst.ts:43:33:43:37 | "foo" | "foo" | -| tst.ts:47:8:47:8 | e | unknown | -| tst.ts:48:7:48:14 | typeof e | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| tst.ts:48:7:48:27 | typeof ... string" | boolean | -| tst.ts:48:14:48:14 | e | unknown | -| tst.ts:48:20:48:27 | "string" | "string" | -| tst.ts:49:11:49:11 | b | string | -| tst.ts:49:24:49:24 | e | string | -| tst.ts:55:3:55:9 | getArea | () => number | -| tst.ts:55:3:55:20 | getArea(): number; | () => number | -| tst.ts:59:3:59:9 | getArea | () => number | -| tst.ts:59:3:59:20 | getArea(): number; | () => number | -| tst.ts:63:5:63:8 | Ctor | abstract new () => HasArea | -| tst.ts:63:11:63:36 | abstrac ... HasArea | abstract new () => HasArea | -| tst.ts:63:40:63:44 | Shape | any | -| tst.ts:65:17:65:23 | myUnion | true | -| tst.ts:65:35:65:46 | stillMyUnion | true | -| tst.ts:66:5:66:10 | union1 | MyUnion | -| tst.ts:66:23:66:37 | {myUnion: true} | MyUnion | -| tst.ts:66:24:66:30 | myUnion | true | -| tst.ts:66:33:66:36 | true | true | -| tst.ts:68:28:68:41 | yetAnotherType | true | -| tst.ts:69:5:69:10 | union2 | MyUnion2 | -| tst.ts:69:24:69:45 | {yetAno ... : true} | MyUnion2 | -| tst.ts:69:25:69:38 | yetAnotherType | true | -| tst.ts:69:41:69:44 | true | true | -| tst.ts:71:8:71:11 | TS43 | typeof TS43 in tst.ts | -| tst.ts:74:5:74:22 | get size(): number | number | -| tst.ts:74:9:74:12 | size | number | -| tst.ts:75:5:75:47 | set siz ... olean); | number | -| tst.ts:75:9:75:12 | size | number | -| tst.ts:75:14:75:18 | value | string \| number \| boolean | -| tst.ts:78:16:78:20 | Thing | Thing | -| tst.ts:79:13:79:13 | 0 | 0 | -| tst.ts:81:5:83:5 | get siz ... ;\\n } | number | -| tst.ts:81:9:81:12 | size | number | -| tst.ts:82:14:82:23 | this.#size | number | -| tst.ts:85:5:87:5 | set siz ... ;\\n } | number | -| tst.ts:85:9:85:12 | size | number | -| tst.ts:85:14:85:18 | value | string \| number \| boolean | -| tst.ts:86:7:86:16 | this.#size | number | -| tst.ts:86:7:86:32 | this.#s ... (value) | number | -| tst.ts:86:20:86:25 | Number | NumberConstructor | -| tst.ts:86:20:86:32 | Number(value) | number | -| tst.ts:86:27:86:31 | value | string \| number \| boolean | -| tst.ts:91:9:91:13 | Super | Super | -| tst.ts:92:5:92:10 | random | () => number | -| tst.ts:92:5:94:5 | random( ... ;\\n } | () => number | -| tst.ts:93:14:93:14 | 4 | 4 | -| tst.ts:97:9:97:11 | Sub | Sub | -| tst.ts:97:21:97:25 | Super | Super | -| tst.ts:98:5:100:5 | overrid ... ;\\n } | () => number | -| tst.ts:98:14:98:19 | random | () => number | -| tst.ts:99:14:99:25 | super.random | () => number | -| tst.ts:99:14:99:27 | super.random() | number | -| tst.ts:99:14:99:32 | super.random() * 10 | number | -| tst.ts:99:20:99:25 | random | () => number | -| tst.ts:99:31:99:32 | 10 | 10 | -| tst.ts:104:16:104:16 | s | string | -| tst.ts:106:13:106:18 | hello | any | -| tst.ts:106:21:106:21 | s | string | -| tst.ts:110:15:110:16 | s2 | "1-2-3" | -| tst.ts:112:3:112:9 | s1 = s2 | "1-2-3" | -| tst.ts:112:8:112:9 | s2 | "1-2-3" | -| tst.ts:116:9:116:11 | Foo | Foo | -| tst.ts:117:5:119:5 | #someMe ... ;\\n } | () => number | -| tst.ts:118:14:118:15 | 42 | 42 | -| tst.ts:121:5:123:5 | get #so ... ;\\n } | number | -| tst.ts:122:14:122:16 | 100 | 100 | -| tst.ts:125:5:125:16 | publicMethod | () => number | -| tst.ts:125:5:128:5 | publicM ... ;\\n } | () => number | -| tst.ts:126:7:126:22 | this.#someMethod | () => number | -| tst.ts:126:7:126:24 | this.#someMethod() | number | -| tst.ts:127:14:127:28 | this.#someValue | number | -| tst.ts:132:8:132:11 | TS44 | typeof TS44 in tst.ts | -| tst.ts:133:12:133:14 | foo | (arg: unknown) => void | -| tst.ts:133:16:133:18 | arg | unknown | -| tst.ts:134:11:134:21 | argIsString | boolean | -| tst.ts:134:25:134:34 | typeof arg | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| tst.ts:134:25:134:47 | typeof ... string" | boolean | -| tst.ts:134:32:134:34 | arg | unknown | -| tst.ts:134:40:134:47 | "string" | "string" | -| tst.ts:135:9:135:19 | argIsString | boolean | -| tst.ts:136:15:136:19 | upper | string | -| tst.ts:136:23:136:25 | arg | string | -| tst.ts:136:23:136:37 | arg.toUpperCase | () => string | -| tst.ts:136:23:136:39 | arg.toUpperCase() | string | -| tst.ts:136:27:136:37 | toUpperCase | () => string | -| tst.ts:141:11:141:14 | kind | "circle" | -| tst.ts:141:27:141:32 | radius | number | -| tst.ts:142:11:142:14 | kind | "square" | -| tst.ts:142:27:142:36 | sideLength | number | -| tst.ts:144:12:144:15 | side | (shape: Shape) => number | -| tst.ts:144:17:144:21 | shape | Shape | -| tst.ts:145:15:145:18 | kind | "circle" \| "square" | -| tst.ts:145:15:145:18 | kind | "circle" \| "square" | -| tst.ts:145:24:145:28 | shape | Shape | -| tst.ts:147:11:147:14 | kind | "circle" \| "square" | -| tst.ts:147:11:147:27 | kind === "circle" | boolean | -| tst.ts:147:20:147:27 | "circle" | "circle" | -| tst.ts:147:39:147:43 | shape | { kind: "circle"; radius: number; } | -| tst.ts:147:39:147:50 | shape.radius | number | -| tst.ts:147:45:147:50 | radius | number | -| tst.ts:148:21:148:25 | shape | { kind: "square"; sideLength: number; } | -| tst.ts:148:21:148:36 | shape.sideLength | number | -| tst.ts:148:27:148:36 | sideLength | number | -| tst.ts:151:12:151:22 | symbolIndex | () => void | -| tst.ts:153:7:153:28 | [sym: s ... number; | any | -| tst.ts:153:8:153:10 | sym | symbol | -| tst.ts:154:7:154:28 | [key: s ... string; | any | -| tst.ts:154:8:154:10 | key | string | -| tst.ts:155:7:155:29 | [num: n ... oolean; | any | -| tst.ts:155:8:155:10 | num | number | -| tst.ts:158:9:158:14 | colors | Colors | -| tst.ts:158:26:158:27 | {} | Colors | -| tst.ts:159:11:159:13 | red | number | -| tst.ts:159:17:159:22 | colors | Colors | -| tst.ts:159:17:159:37 | colors[ ... "red")] | number | -| tst.ts:159:24:159:29 | Symbol | SymbolConstructor | -| tst.ts:159:24:159:36 | Symbol("red") | symbol | -| tst.ts:159:31:159:35 | "red" | "red" | -| tst.ts:160:11:160:15 | green | string | -| tst.ts:160:19:160:24 | colors | Colors | -| tst.ts:160:19:160:33 | colors["green"] | string | -| tst.ts:160:26:160:32 | "green" | "green" | -| tst.ts:161:11:161:14 | blue | boolean | -| tst.ts:161:18:161:23 | colors | Colors | -| tst.ts:161:18:161:26 | colors[2] | boolean | -| tst.ts:161:25:161:25 | 2 | 2 | -| tst.ts:164:12:164:29 | stringPatternIndex | () => void | -| tst.ts:166:7:166:37 | [key: ` ... number; | any | -| tst.ts:168:9:168:11 | bla | Foo | -| tst.ts:168:21:168:22 | {} | Foo | -| tst.ts:169:11:169:13 | bar | number | -| tst.ts:169:17:169:19 | bla | Foo | -| tst.ts:169:17:169:28 | bla[`foo-1`] | number | -| tst.ts:169:21:169:27 | `foo-1` | "foo-1" | -| tst.ts:169:21:169:27 | `foo-1` | "foo-1" | -| tst.ts:172:7:172:42 | [optNam ... oolean; | any | -| tst.ts:172:8:172:14 | optName | string \| symbol | -| tst.ts:175:11:175:14 | data | Data | -| tst.ts:175:24:175:25 | {} | Data | -| tst.ts:176:11:176:13 | baz | boolean | -| tst.ts:176:17:176:20 | data | Data | -| tst.ts:176:17:176:27 | data["foo"] | boolean | -| tst.ts:176:22:176:26 | "foo" | "foo" | -| tst.ts:179:9:179:11 | Foo | Foo | -| tst.ts:180:21:180:21 | 0 | 0 | -| tst.ts:182:5:184:5 | get cou ... ;\\n } | number | -| tst.ts:182:9:182:13 | count | number | -| tst.ts:183:16:183:18 | Foo | typeof Foo in tst.ts:132 | -| tst.ts:183:16:183:25 | Foo.#count | number | -| tst.ts:186:7:186:9 | Foo | typeof Foo in tst.ts:132 | -| tst.ts:186:7:186:16 | Foo.#count | number | -| tst.ts:186:7:186:21 | Foo.#count += 3 | number | -| tst.ts:186:21:186:21 | 3 | 3 | -| tst.ts:189:11:189:15 | count | number | -| tst.ts:189:19:189:21 | Foo | typeof Foo in tst.ts:132 | -| tst.ts:189:19:189:28 | Foo.#count | number | -| tst.ts:195:8:195:11 | TS45 | typeof TS45 in tst.ts | -| tst.ts:207:5:207:8 | body | string | -| tst.ts:212:7:212:13 | message | string | -| tst.ts:215:19:215:25 | handler | (r: Success \| Error) => void | -| tst.ts:215:27:215:27 | r | Success \| Error | -| tst.ts:216:11:216:11 | r | Success \| Error | -| tst.ts:216:11:216:34 | r.type ... uccess" | boolean | -| tst.ts:216:22:216:34 | "HttpSuccess" | "HttpSuccess" | -| tst.ts:218:15:218:19 | token | string | -| tst.ts:218:23:218:23 | r | Success | -| tst.ts:218:23:218:28 | r.body | string | -| tst.ts:218:25:218:28 | body | string | -| tst.ts:222:9:222:14 | Person | Person | -| tst.ts:224:5:226:5 | constru ... ;\\n } | any | -| tst.ts:224:17:224:20 | name | string | -| tst.ts:225:9:225:18 | this.#name | string | -| tst.ts:225:9:225:25 | this.#name = name | string | -| tst.ts:225:22:225:25 | name | string | -| tst.ts:228:5:228:10 | equals | (other: unknown) => boolean | -| tst.ts:228:5:233:5 | equals( ... .\\n } | (other: unknown) => boolean | -| tst.ts:228:12:228:16 | other | unknown | -| tst.ts:229:16:229:20 | other | unknown | -| tst.ts:229:16:230:37 | other & ... object" | boolean | -| tst.ts:229:16:231:26 | other & ... n other | boolean | -| tst.ts:229:16:232:38 | other & ... r.#name | boolean | -| tst.ts:230:13:230:24 | typeof other | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| tst.ts:230:13:230:37 | typeof ... object" | boolean | -| tst.ts:230:20:230:24 | other | unknown | -| tst.ts:230:30:230:37 | "object" | "object" | -| tst.ts:231:13:231:26 | #name in other | boolean | -| tst.ts:231:22:231:26 | other | object | -| tst.ts:232:13:232:22 | this.#name | string | -| tst.ts:232:13:232:38 | this.#n ... r.#name | boolean | -| tst.ts:232:28:232:32 | other | Person | -| tst.ts:232:28:232:38 | other.#name | string | -| tst.ts:237:13:237:16 | Foo3 | { foo: string; } | -| tst.ts:237:23:237:40 | "./something.json" | any | -| tst.ts:238:5:238:7 | foo | string | -| tst.ts:238:11:238:14 | Foo3 | { foo: string; } | -| tst.ts:238:11:238:18 | Foo3.foo | string | -| tst.ts:238:16:238:18 | foo | string | -| tst.ts:240:8:240:11 | TS46 | typeof TS46 in tst.ts | -| tst.ts:241:9:241:12 | Base | Base | -| tst.ts:243:9:243:15 | Derived | Derived | -| tst.ts:243:25:243:28 | Base | Base | -| tst.ts:244:5:244:10 | myProp | boolean | -| tst.ts:244:14:244:17 | true | true | -| tst.ts:246:5:249:5 | constru ... ;\\n } | any | -| tst.ts:247:7:247:13 | console | Console | -| tst.ts:247:7:247:17 | console.log | (...data: any[]) => void | -| tst.ts:247:7:247:51 | console ... per()") | void | -| tst.ts:247:15:247:17 | log | (...data: any[]) => void | -| tst.ts:247:19:247:50 | "Doing ... uper()" | "Doing something before super()" | -| tst.ts:248:7:248:13 | super() | void | -| tst.ts:253:9:253:12 | kind | "NumberContents" | -| tst.ts:253:33:253:39 | payload | number | -| tst.ts:254:9:254:12 | kind | "StringContents" | -| tst.ts:254:33:254:39 | payload | string | -| tst.ts:256:12:256:24 | processAction | (action: Action) => void | -| tst.ts:256:26:256:31 | action | Action | -| tst.ts:257:13:257:16 | kind | "NumberContents" \| "StringContents" | -| tst.ts:257:13:257:16 | kind | "NumberContents" \| "StringContents" | -| tst.ts:257:19:257:25 | payload | string \| number | -| tst.ts:257:19:257:25 | payload | string \| number | -| tst.ts:257:31:257:36 | action | Action | -| tst.ts:258:9:258:12 | kind | "NumberContents" \| "StringContents" | -| tst.ts:258:9:258:33 | kind == ... ntents" | boolean | -| tst.ts:258:18:258:33 | "NumberContents" | "NumberContents" | -| tst.ts:259:7:259:13 | console | Console | -| tst.ts:259:7:259:17 | console.log | (...data: any[]) => void | -| tst.ts:259:7:259:36 | console ... ixed()) | void | -| tst.ts:259:15:259:17 | log | (...data: any[]) => void | -| tst.ts:259:19:259:25 | payload | number | -| tst.ts:259:19:259:33 | payload.toFixed | (fractionDigits?: number) => string | -| tst.ts:259:19:259:35 | payload.toFixed() | string | -| tst.ts:259:27:259:33 | toFixed | (fractionDigits?: number) => string | -| tst.ts:260:16:260:19 | kind | "StringContents" | -| tst.ts:260:16:260:40 | kind == ... ntents" | boolean | -| tst.ts:260:25:260:40 | "StringContents" | "StringContents" | -| tst.ts:261:7:261:13 | console | Console | -| tst.ts:261:7:261:17 | console.log | (...data: any[]) => void | -| tst.ts:261:7:261:40 | console ... Case()) | void | -| tst.ts:261:15:261:17 | log | (...data: any[]) => void | -| tst.ts:261:19:261:25 | payload | string | -| tst.ts:261:19:261:37 | payload.toLowerCase | () => string | -| tst.ts:261:19:261:39 | payload ... rCase() | string | -| tst.ts:261:27:261:37 | toLowerCase | () => string | -| tst.ts:266:5:266:10 | number | number | -| tst.ts:267:5:267:10 | string | string | -| tst.ts:268:5:268:11 | boolean | boolean | -| tst.ts:273:7:273:10 | kind | K | -| tst.ts:278:12:278:24 | processRecord | (record: UnionRecord | -| tst.ts:279:5:279:10 | record | UnionRecord | -| tst.ts:279:5:279:22 | record.f(record.v) | void | -| tst.ts:279:14:279:19 | record | UnionRecord | -| tst.ts:279:14:279:21 | record.v | any | -| tst.ts:279:21:279:21 | v | any | -| tst.ts:282:3:282:15 | processRecord | (record: UnionRecord void; } | -| tst.ts:283:5:283:8 | kind | "string" | -| tst.ts:283:11:283:18 | "string" | "string" | -| tst.ts:284:5:284:5 | f | (val: string) => void | -| tst.ts:284:8:286:5 | (val) = ... g\\n } | (val: string) => void | -| tst.ts:284:9:284:11 | val | string | -| tst.ts:285:7:285:13 | console | Console | -| tst.ts:285:7:285:17 | console.log | (...data: any[]) => void | -| tst.ts:285:7:285:36 | console ... Case()) | void | -| tst.ts:285:15:285:17 | log | (...data: any[]) => void | -| tst.ts:285:19:285:21 | val | string | -| tst.ts:285:19:285:33 | val.toUpperCase | () => string | -| tst.ts:285:19:285:35 | val.toUpperCase() | string | -| tst.ts:285:23:285:33 | toUpperCase | () => string | -| tst.ts:289:19:289:22 | args | ["a", number] \| ["b", string] | -| tst.ts:291:9:291:10 | f1 | Func | -| tst.ts:291:20:295:3 | (kind, ... }\\n } | (kind: "a" \| "b", payload: string \| number) => ... | -| tst.ts:291:21:291:24 | kind | "a" \| "b" | -| tst.ts:291:27:291:33 | payload | string \| number | -| tst.ts:292:9:292:12 | kind | "a" \| "b" | -| tst.ts:292:9:292:20 | kind === "a" | boolean | -| tst.ts:292:18:292:20 | "a" | "a" | -| tst.ts:293:7:293:13 | payload | number | -| tst.ts:293:7:293:21 | payload.toFixed | (fractionDigits?: number) => string | -| tst.ts:293:7:293:23 | payload.toFixed() | string | -| tst.ts:293:15:293:21 | toFixed | (fractionDigits?: number) => string | -| tst.ts:298:7:298:9 | key | typeof key | -| tst.ts:298:13:298:18 | Symbol | SymbolConstructor | -| tst.ts:298:13:298:20 | Symbol() | typeof key | -| tst.ts:300:7:300:20 | numberOrString | "hello" \| 42 | -| tst.ts:300:24:300:27 | Math | Math | -| tst.ts:300:24:300:34 | Math.random | () => number | -| tst.ts:300:24:300:36 | Math.random() | number | -| tst.ts:300:24:300:42 | Math.random() < 0.5 | boolean | -| tst.ts:300:24:300:57 | Math.ra ... "hello" | "hello" \| 42 | -| tst.ts:300:29:300:34 | random | () => number | -| tst.ts:300:40:300:42 | 0.5 | 0.5 | -| tst.ts:300:46:300:47 | 42 | 42 | -| tst.ts:300:51:300:57 | "hello" | "hello" | -| tst.ts:302:5:302:7 | obj | { [key]: string \| number; } | -| tst.ts:302:11:304:1 | {\\n [ke ... ring,\\n} | { [key]: string \| number; } | -| tst.ts:303:4:303:6 | key | typeof key | -| tst.ts:303:10:303:23 | numberOrString | "hello" \| 42 | -| tst.ts:306:5:306:19 | typeof obj[key] | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| tst.ts:306:5:306:32 | typeof ... string" | boolean | -| tst.ts:306:12:306:14 | obj | { [key]: string \| number; } | -| tst.ts:306:12:306:19 | obj[key] | string \| number | -| tst.ts:306:16:306:18 | key | typeof key | -| tst.ts:306:25:306:32 | "string" | "string" | -| tst.ts:307:7:307:9 | str | string | -| tst.ts:307:13:307:15 | obj | { [key]: string \| number; } | -| tst.ts:307:13:307:20 | obj[key] | string | -| tst.ts:307:17:307:19 | key | typeof key | -| tst.ts:308:3:308:5 | str | string | -| tst.ts:308:3:308:17 | str.toUpperCase | () => string | -| tst.ts:308:3:308:19 | str.toUpperCase() | string | -| tst.ts:308:7:308:17 | toUpperCase | () => string | -| tst.ts:313:10:313:10 | f | (arg: { produce: (n: string) => T; consume: ... | -| tst.ts:313:15:313:17 | arg | { produce: (n: string) => T; consume: (x: T) =>... | -| tst.ts:314:3:314:9 | produce | (n: string) => T | -| tst.ts:314:12:314:27 | (n: string) => T | (n: string) => T | -| tst.ts:314:13:314:13 | n | string | -| tst.ts:315:3:315:9 | consume | (x: T) => void | -| tst.ts:315:12:315:25 | (x: T) => void | (x: T) => void | -| tst.ts:315:13:315:13 | x | T | -| tst.ts:318:1:318:1 | f | (arg: { produce: (n: string) => T; consume: ... | -| tst.ts:318:1:321:2 | f({\\n p ... se()\\n}) | void | -| tst.ts:318:3:321:1 | {\\n pro ... ase()\\n} | { produce: (n: string) => string; consume: (x: ... | -| tst.ts:319:3:319:9 | produce | (n: string) => string | -| tst.ts:319:12:319:12 | n | string | -| tst.ts:319:12:319:17 | n => n | (n: string) => string | -| tst.ts:319:17:319:17 | n | string | -| tst.ts:320:3:320:9 | consume | (x: string) => string | -| tst.ts:320:12:320:12 | x | string | -| tst.ts:320:12:320:31 | x => x.toLowerCase() | (x: string) => string | -| tst.ts:320:17:320:17 | x | string | -| tst.ts:320:17:320:29 | x.toLowerCase | () => string | -| tst.ts:320:17:320:31 | x.toLowerCase() | string | -| tst.ts:320:19:320:29 | toLowerCase | () => string | -| tst.ts:325:7:325:14 | ErrorMap | { new (entries?: readonly (readonly [string, Er... | -| tst.ts:325:18:325:20 | Map | MapConstructor | -| tst.ts:325:18:325:35 | Map | { new (entries?: readonly (readonly [string, Er... | -| tst.ts:327:7:327:14 | errorMap | Map | -| tst.ts:327:18:327:31 | new ErrorMap() | Map | -| tst.ts:327:22:327:29 | ErrorMap | { new (entries?: readonly (readonly [string, Er... | -| tst.ts:338:7:338:7 | a | "a" \| "b" | -| tst.ts:338:14:338:16 | 'a' | "a" | -| tst.ts:343:3:343:5 | get | () => T | -| tst.ts:343:8:343:14 | () => T | () => T | -| tst.ts:344:3:344:5 | set | (value: T) => void | -| tst.ts:344:8:344:25 | (value: T) => void | (value: T) => void | -| tst.ts:344:9:344:13 | value | T | -| tst.ts:347:7:347:11 | state | State | -| tst.ts:347:30:350:1 | {\\n get ... > { }\\n} | State | -| tst.ts:348:3:348:5 | get | () => number | -| tst.ts:348:8:348:15 | () => 42 | () => number | -| tst.ts:348:14:348:15 | 42 | 42 | -| tst.ts:349:3:349:5 | set | (value: number) => void | -| tst.ts:349:8:349:21 | (value) => { } | (value: number) => void | -| tst.ts:349:9:349:13 | value | number | -| tst.ts:352:7:352:14 | fortyTwo | number | -| tst.ts:352:18:352:22 | state | State | -| tst.ts:352:18:352:26 | state.get | () => number | -| tst.ts:352:18:352:28 | state.get() | number | -| tst.ts:352:24:352:26 | get | () => number | -| tst.ts:356:8:356:18 | tstModuleES | () => "a" \| "b" | -| tst.ts:356:25:356:43 | './tstModuleES.mjs' | any | -| tst.ts:358:1:358:7 | console | Console | -| tst.ts:358:1:358:11 | console.log | (...data: any[]) => void | -| tst.ts:358:1:358:26 | console ... leES()) | void | -| tst.ts:358:9:358:11 | log | (...data: any[]) => void | -| tst.ts:358:13:358:23 | tstModuleES | () => "a" \| "b" | -| tst.ts:358:13:358:25 | tstModuleES() | "a" \| "b" | -| tst.ts:360:10:360:21 | tstModuleCJS | () => "a" \| "b" | -| tst.ts:360:30:360:49 | './tstModuleCJS.cjs' | any | -| tst.ts:362:1:362:7 | console | Console | -| tst.ts:362:1:362:11 | console.log | (...data: any[]) => void | -| tst.ts:362:1:362:27 | console ... eCJS()) | void | -| tst.ts:362:9:362:11 | log | (...data: any[]) => void | -| tst.ts:362:13:362:24 | tstModuleCJS | () => "a" \| "b" | -| tst.ts:362:13:362:26 | tstModuleCJS() | "a" \| "b" | -| tst.ts:368:13:368:13 | A | typeof tstSuffixA.ts | -| tst.ts:368:20:368:33 | './tstSuffixA' | any | -| tst.ts:370:1:370:7 | console | Console | -| tst.ts:370:1:370:11 | console.log | (...data: any[]) => void | -| tst.ts:370:1:370:29 | console ... File()) | void | -| tst.ts:370:9:370:11 | log | (...data: any[]) => void | -| tst.ts:370:13:370:13 | A | typeof tstSuffixA.ts | -| tst.ts:370:13:370:26 | A.resolvedFile | () => "tstSuffixA.ts" | -| tst.ts:370:13:370:28 | A.resolvedFile() | "tstSuffixA.ts" | -| tst.ts:370:15:370:26 | resolvedFile | () => "tstSuffixA.ts" | -| tst.ts:372:13:372:13 | B | typeof tstSuffixB.ios.ts | -| tst.ts:372:20:372:33 | './tstSuffixB' | any | -| tst.ts:374:1:374:7 | console | Console | -| tst.ts:374:1:374:11 | console.log | (...data: any[]) => void | -| tst.ts:374:1:374:29 | console ... File()) | void | -| tst.ts:374:9:374:11 | log | (...data: any[]) => void | -| tst.ts:374:13:374:13 | B | typeof tstSuffixB.ios.ts | -| tst.ts:374:13:374:26 | B.resolvedFile | () => "tstSuffixB.ios.ts" | -| tst.ts:374:13:374:28 | B.resolvedFile() | "tstSuffixB.ios.ts" | -| tst.ts:374:15:374:26 | resolvedFile | () => "tstSuffixB.ios.ts" | -| tst.ts:379:8:379:11 | TS48 | typeof TS48 in tst.ts | -| tst.ts:383:22:383:35 | chooseRandomly | (x: T, y: T) => T | -| tst.ts:383:40:383:40 | x | T | -| tst.ts:383:46:383:46 | y | T | -| tst.ts:385:10:385:10 | a | number | -| tst.ts:385:13:385:13 | b | boolean | -| tst.ts:385:16:385:16 | c | string | -| tst.ts:385:21:385:34 | chooseRandomly | (x: T, y: T) => T | -| tst.ts:385:21:385:73 | chooseR ... bye!"]) | [number, boolean, string] | -| tst.ts:385:36:385:52 | [42, true, "hi!"] | [number, boolean, string] | -| tst.ts:385:37:385:38 | 42 | 42 | -| tst.ts:385:41:385:44 | true | true | -| tst.ts:385:47:385:51 | "hi!" | "hi!" | -| tst.ts:385:55:385:72 | [0, false, "bye!"] | [number, boolean, string] | -| tst.ts:385:56:385:56 | 0 | 0 | -| tst.ts:385:59:385:63 | false | false | -| tst.ts:385:66:385:71 | "bye!" | "bye!" | -| tst.ts:390:8:390:11 | TS49 | typeof TS49 in tst.ts | -| tst.ts:395:9:395:15 | palette | { red: [number, number, number]; green: string;... | -| tst.ts:395:19:399:3 | {\\n r ... 5],\\n } | Record | -| tst.ts:395:19:399:42 | {\\n r ... \| RGB> | { red: [number, number, number]; green: string;... | -| tst.ts:396:5:396:7 | red | [red: number, green: number, blue: number] | -| tst.ts:396:10:396:20 | [255, 0, 0] | string \| RGB | -| tst.ts:396:11:396:13 | 255 | 255 | -| tst.ts:396:16:396:16 | 0 | 0 | -| tst.ts:396:19:396:19 | 0 | 0 | -| tst.ts:397:5:397:9 | green | string | -| tst.ts:397:12:397:20 | "#00ff00" | "#00ff00" | -| tst.ts:398:5:398:8 | bleu | number[] | -| tst.ts:398:11:398:21 | [0, 0, 255] | number[] | -| tst.ts:398:12:398:12 | 0 | 0 | -| tst.ts:398:15:398:15 | 0 | 0 | -| tst.ts:398:18:398:20 | 255 | 255 | -| tst.ts:402:9:402:20 | redComponent | number | -| tst.ts:402:24:402:30 | palette | { red: [number, number, number]; green: string;... | -| tst.ts:402:24:402:34 | palette.red | [red: number, green: number, blue: number] | -| tst.ts:402:24:402:37 | palette.red.at | (index: number) => number | -| tst.ts:402:24:402:40 | palette.red.at(0) | number | -| tst.ts:402:32:402:34 | red | [red: number, green: number, blue: number] | -| tst.ts:402:36:402:37 | at | (index: number) => number | -| tst.ts:402:39:402:39 | 0 | 0 | -| tst.ts:405:5:405:7 | red | number | -| tst.ts:409:5:409:7 | hue | number | -| tst.ts:412:12:412:19 | setColor | (color: RGBObj \| HSVObj) => void | -| tst.ts:412:21:412:25 | color | RGBObj \| HSVObj | -| tst.ts:413:9:413:13 | "hue" | "hue" | -| tst.ts:413:9:413:22 | "hue" in color | boolean | -| tst.ts:413:18:413:22 | color | RGBObj \| HSVObj | -| tst.ts:414:11:414:11 | h | HSVObj | -| tst.ts:414:15:414:19 | color | HSVObj | -| tst.ts:419:9:419:14 | Person | Person | -| tst.ts:420:14:420:17 | name | string | -| tst.ts:422:5:424:5 | constru ... ;\\n } | any | -| tst.ts:422:17:422:20 | name | string | -| tst.ts:423:7:423:15 | this.name | string | -| tst.ts:423:7:423:22 | this.name = name | string | -| tst.ts:423:12:423:15 | name | string | -| tst.ts:423:19:423:22 | name | string | -| tst.ts:430:8:430:11 | TS50 | typeof TS50 in tst.ts | -| tst.ts:432:33:432:36 | args | Args | -| tst.ts:433:68:433:71 | args | Args | -| tst.ts:435:15:435:24 | methodName | string | -| tst.ts:435:28:435:33 | String | StringConstructor | -| tst.ts:435:28:435:47 | String(context.name) | string | -| tst.ts:435:35:435:46 | context.name | string \| symbol | -| tst.ts:435:43:435:46 | name | string \| symbol | -| tst.ts:437:51:437:54 | args | Args | -| tst.ts:438:13:438:19 | console | Console | -| tst.ts:438:13:438:23 | console.log | (...data: any[]) => void | -| tst.ts:438:13:438:64 | console ... me}'.`) | void | -| tst.ts:438:21:438:23 | log | (...data: any[]) => void | -| tst.ts:438:25:438:63 | `LOG: E ... ame}'.` | string | -| tst.ts:438:26:438:47 | LOG: En ... ethod ' | any | -| tst.ts:438:50:438:59 | methodName | string | -| tst.ts:438:61:438:62 | '. | any | -| tst.ts:439:19:439:24 | result | any | -| tst.ts:439:28:439:38 | target.call | (this: Function, thisArg: any, ...argArray: any... | -| tst.ts:439:28:439:53 | target. ... ..args) | any | -| tst.ts:439:35:439:38 | call | (this: Function, thisArg: any, ...argArray: any... | -| tst.ts:439:49:439:52 | args | Args | -| tst.ts:440:13:440:19 | console | Console | -| tst.ts:440:13:440:23 | console.log | (...data: any[]) => void | -| tst.ts:440:13:440:63 | console ... me}'.`) | void | -| tst.ts:440:21:440:23 | log | (...data: any[]) => void | -| tst.ts:440:25:440:62 | `LOG: E ... ame}'.` | string | -| tst.ts:440:26:440:46 | LOG: Ex ... ethod ' | any | -| tst.ts:440:49:440:58 | methodName | string | -| tst.ts:440:60:440:61 | '. | any | -| tst.ts:441:20:441:25 | result | any | -| tst.ts:447:11:447:16 | Person | Person | -| tst.ts:448:9:448:12 | name | string | -| tst.ts:449:9:451:9 | constru ... } | any | -| tst.ts:449:21:449:24 | name | string | -| tst.ts:450:13:450:21 | this.name | string | -| tst.ts:450:13:450:28 | this.name = name | string | -| tst.ts:450:18:450:21 | name | string | -| tst.ts:450:25:450:28 | name | string | -| tst.ts:453:10:453:25 | loggedMethod("") | (this: unknown, args_0: () => number, args_1: C... | -| tst.ts:453:23:453:24 | "" | "" | -| tst.ts:454:9:454:13 | greet | () => number | -| tst.ts:454:9:457:9 | greet() ... } | () => number | -| tst.ts:455:13:455:19 | console | Console | -| tst.ts:455:13:455:23 | console.log | (...data: any[]) => void | -| tst.ts:455:13:455:58 | console ... ame}.`) | void | -| tst.ts:455:21:455:23 | log | (...data: any[]) => void | -| tst.ts:455:25:455:57 | `Hello, ... name}.` | string | -| tst.ts:455:26:455:43 | Hello, my name is | any | -| tst.ts:455:46:455:54 | this.name | string | -| tst.ts:455:51:455:54 | name | string | -| tst.ts:455:56:455:56 | . | any | -| tst.ts:456:20:456:20 | 2 | 2 | -| tst.ts:460:11:460:11 | p | number | -| tst.ts:460:15:460:32 | new Person("John") | Person | -| tst.ts:460:15:460:38 | new Per ... ).greet | () => number | -| tst.ts:460:15:460:40 | new Per ... greet() | number | -| tst.ts:460:19:460:24 | Person | typeof Person in tst.ts:430 | -| tst.ts:460:26:460:31 | "John" | "John" | -| tst.ts:460:34:460:38 | greet | () => number | -| tst.ts:462:22:462:38 | myConstIdFunction | (args: T) => T | -| tst.ts:462:75:462:78 | args | T | -| tst.ts:465:11:465:13 | foo | readonly ["a", "b", "c"] | -| tst.ts:465:17:465:33 | myConstIdFunction | (args: T) => T | -| tst.ts:465:17:465:50 | myConst ... ,"c"]) | readonly ["a", "b", "c"] | -| tst.ts:465:35:465:49 | ["a", "b" ,"c"] | readonly ["a", "b", "c"] | -| tst.ts:465:36:465:38 | "a" | "a" | -| tst.ts:465:41:465:43 | "b" | "b" | -| tst.ts:465:46:465:48 | "c" | "c" | -| tst.ts:467:11:467:11 | b | "b" | -| tst.ts:467:15:467:17 | foo | readonly ["a", "b", "c"] | -| tst.ts:467:15:467:20 | foo[1] | "b" | -| tst.ts:467:19:467:19 | 1 | 1 | -| tst.ts:472:8:472:11 | TS52 | typeof TS52 in tst.ts | -| tst.ts:473:11:473:19 | SomeClass | SomeClass | -| tst.ts:474:10:474:36 | ((_targ ... => {}) | (_target: undefined, _context: ClassFieldDecora... | -| tst.ts:474:11:474:35 | (_targe ... ) => {} | (_target: undefined, _context: ClassFieldDecora... | -| tst.ts:474:12:474:18 | _target | undefined | -| tst.ts:474:21:474:28 | _context | ClassFieldDecoratorContext &... | -| tst.ts:475:9:475:11 | foo | number | -| tst.ts:475:15:475:17 | 123 | 123 | -| tst.ts:478:5:478:11 | console | Console | -| tst.ts:478:5:478:15 | console.log | (...data: any[]) => void | -| tst.ts:478:5:478:43 | console ... adata]) | void | -| tst.ts:478:13:478:15 | log | (...data: any[]) => void | -| tst.ts:478:17:478:25 | SomeClass | typeof SomeClass in tst.ts:472 | -| tst.ts:478:17:478:42 | SomeCla ... tadata] | DecoratorMetadataObject | -| tst.ts:478:27:478:32 | Symbol | SymbolConstructor | -| tst.ts:478:27:478:41 | Symbol.metadata | typeof metadata | -| tst.ts:478:34:478:41 | metadata | typeof metadata | -| tst.ts:483:5:483:11 | console | Console | -| tst.ts:483:5:483:15 | console.log | (...data: any[]) => void | -| tst.ts:483:5:483:59 | console ... tring>) | void | -| tst.ts:483:13:483:15 | log | (...data: any[]) => void | -| tst.ts:483:17:483:34 | ["hello", "world"] | Pair3 | -| tst.ts:483:17:483:58 | ["hello ... string> | [first: string, string] | -| tst.ts:483:18:483:24 | "hello" | "hello" | -| tst.ts:483:27:483:33 | "world" | "world" | -| tst.ts:486:8:486:11 | TS54 | typeof TS54 in tst.ts | -| tst.ts:487:48:487:53 | colors | C[] | -| tst.ts:488:12:488:17 | colors | C[] | -| tst.ts:488:12:488:20 | colors[0] | C | -| tst.ts:488:19:488:19 | 0 | 0 | -| tst.ts:491:3:491:57 | createS ... ellow") | "red" \| "green" \| "yellow" | -| tst.ts:491:21:491:46 | ["red", ... green"] | ("red" \| "green" \| "yellow")[] | -| tst.ts:491:22:491:26 | "red" | "red" | -| tst.ts:491:29:491:36 | "yellow" | "yellow" | -| tst.ts:491:39:491:45 | "green" | "green" | -| tst.ts:491:49:491:56 | "yellow" | "yellow" | -| tst.ts:493:9:493:13 | myObj | Partial> | -| tst.ts:493:17:493:22 | Object | ObjectConstructor | -| tst.ts:493:17:493:30 | Object.groupBy | (items: Iterable, ... | -| tst.ts:493:17:495:4 | Object. ... ";\\n }) | Partial> | -| tst.ts:493:24:493:30 | groupBy | (items: Iterable, ... | -| tst.ts:493:32:493:49 | [0, 1, 2, 3, 4, 5] | Iterable | -| tst.ts:493:33:493:33 | 0 | 0 | -| tst.ts:493:36:493:36 | 1 | 1 | -| tst.ts:493:39:493:39 | 2 | 2 | -| tst.ts:493:42:493:42 | 3 | 3 | -| tst.ts:493:45:493:45 | 4 | 4 | -| tst.ts:493:48:493:48 | 5 | 5 | -| tst.ts:493:52:495:3 | (num, i ... d";\\n } | (num: number, index: number) => "even" \| "odd" | -| tst.ts:493:53:493:55 | num | number | -| tst.ts:493:58:493:62 | index | number | -| tst.ts:494:12:494:14 | num | number | -| tst.ts:494:12:494:18 | num % 2 | number | -| tst.ts:494:12:494:24 | num % 2 === 0 | boolean | -| tst.ts:494:12:494:40 | num % 2 ... : "odd" | "even" \| "odd" | -| tst.ts:494:18:494:18 | 2 | 2 | -| tst.ts:494:24:494:24 | 0 | 0 | -| tst.ts:494:28:494:33 | "even" | "even" | -| tst.ts:494:36:494:40 | "odd" | "odd" | -| tst.ts:498:8:498:11 | TS55 | typeof TS55 in tst.ts | -| tst.ts:499:9:499:15 | strings | string[] | -| tst.ts:499:19:499:32 | (["foo", 123]) | (string \| number)[] | -| tst.ts:499:19:500:11 | (["foo" ... .filter | { (predicate: (value... | -| tst.ts:499:19:500:39 | (["foo" ... tring") | string[] | -| tst.ts:499:20:499:31 | ["foo", 123] | (string \| number)[] | -| tst.ts:499:21:499:25 | "foo" | "foo" | -| tst.ts:499:28:499:30 | 123 | 123 | -| tst.ts:500:6:500:11 | filter | { (predicate: (value... | -| tst.ts:500:13:500:13 | s | string \| number | -| tst.ts:500:13:500:38 | s => ty ... string" | (s: string \| number) => s is string | -| tst.ts:500:18:500:25 | typeof s | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| tst.ts:500:18:500:38 | typeof ... string" | boolean | -| tst.ts:500:25:500:25 | s | string \| number | -| tst.ts:500:31:500:38 | "string" | "string" | -| tst.ts:502:14:502:16 | str | string | -| tst.ts:502:21:502:27 | strings | string[] | -| tst.ts:503:5:503:7 | str | string | -| tst.ts:503:5:503:19 | str.toLowerCase | () => string | -| tst.ts:503:5:503:21 | str.toLowerCase() | string | -| tst.ts:503:9:503:19 | toLowerCase | () => string | -| tst.ts:506:12:506:13 | f1 | (obj: Record, key: string) => ... | -| tst.ts:506:15:506:17 | obj | Record | -| tst.ts:506:45:506:47 | key | string | -| tst.ts:507:9:507:23 | typeof obj[key] | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| tst.ts:507:9:507:36 | typeof ... string" | boolean | -| tst.ts:507:16:507:18 | obj | Record | -| tst.ts:507:16:507:23 | obj[key] | unknown | -| tst.ts:507:20:507:22 | key | string | -| tst.ts:507:29:507:36 | "string" | "string" | -| tst.ts:508:11:508:13 | str | string | -| tst.ts:508:17:508:19 | obj | Record | -| tst.ts:508:17:508:24 | obj[key] | string | -| tst.ts:508:17:508:36 | obj[key].toUpperCase | () => string | -| tst.ts:508:17:508:38 | obj[key ... rCase() | string | -| tst.ts:508:21:508:23 | key | string | -| tst.ts:508:26:508:36 | toUpperCase | () => string | -| tst.ts:513:11:513:14 | TS57 | typeof TS57 in tst.ts | -| tst.ts:514:17:514:17 | a | symbol | -| tst.ts:515:16:515:16 | A | A | -| tst.ts:516:7:516:24 | [a]() { return 1 } | () => number | -| tst.ts:516:8:516:8 | a | symbol | -| tst.ts:516:22:516:22 | 1 | 1 | -| tst.ts:519:17:519:18 | e1 | () => number | -| tstModuleCJS.cts:1:17:1:28 | tstModuleCJS | () => "a" \| "b" | -| tstModuleCJS.cts:2:12:2:15 | Math | Math | -| tstModuleCJS.cts:2:12:2:22 | Math.random | () => number | -| tstModuleCJS.cts:2:12:2:24 | Math.random() | number | -| tstModuleCJS.cts:2:12:2:30 | Math.random() > 0.5 | boolean | -| tstModuleCJS.cts:2:12:2:42 | Math.ra ... ' : 'b' | "a" \| "b" | -| tstModuleCJS.cts:2:17:2:22 | random | () => number | -| tstModuleCJS.cts:2:28:2:30 | 0.5 | 0.5 | -| tstModuleCJS.cts:2:34:2:36 | 'a' | "a" | -| tstModuleCJS.cts:2:40:2:42 | 'b' | "b" | -| tstModuleES.mts:1:25:1:35 | tstModuleES | () => "a" \| "b" | -| tstModuleES.mts:2:12:2:15 | Math | Math | -| tstModuleES.mts:2:12:2:22 | Math.random | () => number | -| tstModuleES.mts:2:12:2:24 | Math.random() | number | -| tstModuleES.mts:2:12:2:30 | Math.random() > 0.5 | boolean | -| tstModuleES.mts:2:12:2:42 | Math.ra ... ' : 'b' | "a" \| "b" | -| tstModuleES.mts:2:17:2:22 | random | () => number | -| tstModuleES.mts:2:28:2:30 | 0.5 | 0.5 | -| tstModuleES.mts:2:34:2:36 | 'a' | "a" | -| tstModuleES.mts:2:40:2:42 | 'b' | "b" | -| tstSuffixA.ts:1:17:1:28 | resolvedFile | () => "tstSuffixA.ts" | -| tstSuffixA.ts:2:12:2:26 | 'tstSuffixA.ts' | "tstSuffixA.ts" | -| tstSuffixB.ios.ts:1:17:1:28 | resolvedFile | () => "tstSuffixB.ios.ts" | -| tstSuffixB.ios.ts:2:12:2:30 | 'tstSuffixB.ios.ts' | "tstSuffixB.ios.ts" | -| tstSuffixB.ts:1:17:1:28 | resolvedFile | () => "tstSuffixB.ts" | -| tstSuffixB.ts:2:12:2:26 | 'tstSuffixB.ts' | "tstSuffixB.ts" | -| type_alias.ts:3:5:3:5 | b | boolean | -| type_alias.ts:7:5:7:5 | c | ValueOrArray | -| type_alias.ts:14:9:14:32 | [proper ... ]: Json | any | -| type_alias.ts:14:10:14:17 | property | string | -| type_alias.ts:17:5:17:8 | json | Json | -| type_alias.ts:21:18:21:35 | [key: string]: any | any | -| type_alias.ts:21:19:21:21 | key | string | -| type_alias.ts:23:7:23:12 | myNode | VirtualNode | -| type_alias.ts:24:5:27:5 | ["div", ... ]\\n ] | VirtualNode | -| type_alias.ts:24:6:24:10 | "div" | "div" | -| type_alias.ts:24:13:24:28 | { id: "parent" } | string \| { [key: string]: any; } | -| type_alias.ts:24:15:24:16 | id | string | -| type_alias.ts:24:19:24:26 | "parent" | "parent" | -| type_alias.ts:25:9:25:61 | ["div", ... child"] | VirtualNode | -| type_alias.ts:25:10:25:14 | "div" | "div" | -| type_alias.ts:25:17:25:37 | { id: " ... hild" } | string \| { [key: string]: any; } | -| type_alias.ts:25:19:25:20 | id | string | -| type_alias.ts:25:23:25:35 | "first-child" | "first-child" | -| type_alias.ts:25:40:25:60 | "I'm th ... child" | "I'm the first child" | -| type_alias.ts:26:9:26:63 | ["div", ... child"] | VirtualNode | -| type_alias.ts:26:10:26:14 | "div" | "div" | -| type_alias.ts:26:17:26:38 | { id: " ... hild" } | string \| { [key: string]: any; } | -| type_alias.ts:26:19:26:20 | id | string | -| type_alias.ts:26:23:26:36 | "second-child" | "second-child" | -| type_alias.ts:26:41:26:62 | "I'm th ... child" | "I'm the second child" | -| type_definition_objects.ts:1:13:1:17 | dummy | typeof dummy.ts | -| type_definition_objects.ts:1:24:1:32 | "./dummy" | any | -| type_definition_objects.ts:3:14:3:14 | C | C | -| type_definition_objects.ts:4:5:4:12 | classObj | typeof C in type_definition_objects.ts | -| type_definition_objects.ts:4:16:4:16 | C | typeof C in type_definition_objects.ts | -| type_definition_objects.ts:6:13:6:13 | E | E | -| type_definition_objects.ts:7:5:7:11 | enumObj | typeof E in type_definition_objects.ts | -| type_definition_objects.ts:7:15:7:15 | E | typeof E in type_definition_objects.ts | -| type_definition_objects.ts:9:18:9:18 | N | typeof N in type_definition_objects.ts | -| type_definition_objects.ts:10:5:10:16 | namespaceObj | typeof N in type_definition_objects.ts | -| type_definition_objects.ts:10:20:10:20 | N | typeof N in type_definition_objects.ts | -| type_definitions.ts:1:13:1:17 | dummy | typeof dummy.ts | -| type_definitions.ts:1:24:1:32 | "./dummy" | any | -| type_definitions.ts:4:3:4:3 | x | S | -| type_definitions.ts:6:5:6:5 | i | I | -| type_definitions.ts:8:7:8:7 | C | C | -| type_definitions.ts:9:3:9:3 | x | T | -| type_definitions.ts:11:5:11:5 | c | C | -| type_definitions.ts:13:6:13:10 | Color | Color | -| type_definitions.ts:16:5:16:9 | color | Color | -| type_definitions.ts:18:6:18:22 | EnumWithOneMember | EnumWithOneMember | -| type_definitions.ts:19:5:19:5 | e | EnumWithOneMember | -| type_definitions.ts:22:5:22:23 | aliasForNumberArray | Alias | -getTypeDefinitionType -| badTypes.ts:5:1:5:29 | interfa ... is.B {} | A | -| badTypes.ts:6:1:6:24 | type T ... ar.bar; | any | -| tst.ts:54:1:56:1 | interfa ... mber;\\n} | NonAbstractDummy | -| tst.ts:58:1:60:1 | interfa ... mber;\\n} | HasArea | -| tst.ts:65:1:65:54 | type My ... true}; | MyUnion | -| tst.ts:68:1:68:49 | type My ... true}; | MyUnion2 | -| tst.ts:73:3:76:3 | interfa ... n);\\n } | ThingI | -| tst.ts:78:10:88:3 | class T ... }\\n } | Thing | -| tst.ts:91:3:95:3 | class S ... }\\n } | Super | -| tst.ts:97:3:101:3 | class S ... }\\n } | Sub | -| tst.ts:116:3:129:3 | class F ... }\\n } | Foo | -| tst.ts:140:3:142:47 | type Sh ... mber }; | Shape | -| tst.ts:152:5:156:5 | interfa ... ;\\n } | Colors | -| tst.ts:165:5:167:5 | interfa ... ;\\n } | Foo | -| tst.ts:171:5:173:5 | interfa ... ;\\n } | Data | -| tst.ts:179:3:192:3 | class F ... \\n } | Foo | -| tst.ts:197:3:197:36 | type A ... ring>>; | string | -| tst.ts:200:3:200:45 | type B ... ber>>>; | number | -| tst.ts:203:3:203:46 | type C ... mber>>; | C | -| tst.ts:205:10:208:3 | interfa ... ng;\\n } | Success | -| tst.ts:210:10:213:3 | interfa ... ng;\\n } | Error | -| tst.ts:222:3:234:3 | class P ... }\\n } | Person | -| tst.ts:241:3:241:15 | class Base {} | Base | -| tst.ts:243:3:250:3 | class D ... }\\n } | Derived | -| tst.ts:252:3:254:50 | type Ac ... ring }; | Action | -| tst.ts:265:3:269:3 | interfa ... an;\\n } | TypeMap | -| tst.ts:271:3:276:7 | type Un ... }[P]; | UnionRecord

| -| tst.ts:289:3:289:63 | type Fu ... > void; | Func | -| tst.ts:331:1:334:14 | type Fi ... never; | FirstString | -| tst.ts:336:1:336:51 | type F ... lean]>; | "a" \| "b" | -| tst.ts:342:1:345:1 | interfa ... void;\\n} | State | -| tst.ts:381:5:381:73 | type So ... never; | 100 | -| tst.ts:391:3:391:41 | type Co ... "blue"; | Colors | -| tst.ts:393:3:393:56 | type RG ... umber]; | RGB | -| tst.ts:404:3:406:3 | interfa ... er;\\n } | RGBObj | -| tst.ts:408:3:410:3 | interfa ... er;\\n } | HSVObj | -| tst.ts:419:3:425:3 | class P ... }\\n } | Person | -| tst.ts:447:5:458:5 | class P ... }\\n } | Person | -| tst.ts:473:5:476:5 | class S ... ;\\n } | SomeClass | -| tst.ts:481:5:481:34 | type Pa ... T, T]; | Pair3 | -| tst.ts:515:10:517:3 | class A ... };\\n } | A | -| type_alias.ts:1:1:1:17 | type B = boolean; | boolean | -| type_alias.ts:5:1:5:50 | type Va ... ay>; | ValueOrArray | -| type_alias.ts:9:1:15:13 | type Js ... Json[]; | Json | -| type_alias.ts:19:1:21:57 | type Vi ... ode[]]; | VirtualNode | -| type_definition_objects.ts:3:8:3:17 | class C {} | C | -| type_definition_objects.ts:6:8:6:16 | enum E {} | E | -| type_definitions.ts:3:1:5:1 | interfa ... x: S;\\n} | I | -| type_definitions.ts:8:1:10:1 | class C ... x: T\\n} | C | -| type_definitions.ts:13:1:15:1 | enum Co ... blue\\n} | Color | -| type_definitions.ts:18:1:18:33 | enum En ... ember } | EnumWithOneMember | -| type_definitions.ts:21:1:21:20 | type Alias = T[]; | Alias | -getTypeExprType -| badTypes.ts:5:11:5:11 | A | A | -| badTypes.ts:6:6:6:6 | T | any | -| badTypes.ts:6:10:6:23 | typeof var.bar | any | -| badTypes.ts:6:17:6:19 | var | any | -| badTypes.ts:6:21:6:23 | bar | any | -| boolean-type.ts:3:12:3:15 | true | true | -| boolean-type.ts:4:12:4:15 | true | true | -| boolean-type.ts:4:12:4:22 | true \| true | true | -| boolean-type.ts:4:19:4:22 | true | true | -| boolean-type.ts:6:13:6:17 | false | false | -| boolean-type.ts:7:13:7:17 | false | false | -| boolean-type.ts:7:13:7:25 | false \| false | false | -| boolean-type.ts:7:21:7:25 | false | false | -| boolean-type.ts:9:15:9:21 | boolean | boolean | -| boolean-type.ts:10:15:10:18 | true | true | -| boolean-type.ts:10:15:10:26 | true \| false | boolean | -| boolean-type.ts:10:22:10:26 | false | false | -| boolean-type.ts:11:15:11:19 | false | false | -| boolean-type.ts:11:15:11:26 | false \| true | boolean | -| boolean-type.ts:11:23:11:26 | true | true | -| boolean-type.ts:13:15:13:21 | boolean | boolean | -| boolean-type.ts:13:15:13:31 | boolean \| boolean | boolean | -| boolean-type.ts:13:25:13:31 | boolean | boolean | -| boolean-type.ts:14:15:14:21 | boolean | boolean | -| boolean-type.ts:14:15:14:28 | boolean \| true | boolean | -| boolean-type.ts:14:25:14:28 | true | true | -| boolean-type.ts:15:15:15:19 | false | false | -| boolean-type.ts:15:15:15:29 | false \| boolean | boolean | -| boolean-type.ts:15:23:15:29 | boolean | boolean | -| middle-rest.ts:1:10:1:39 | [boolea ... number] | [boolean, ...string[], number] | -| middle-rest.ts:1:11:1:17 | boolean | boolean | -| middle-rest.ts:1:20:1:30 | ...string[] | string | -| middle-rest.ts:1:23:1:28 | string | string | -| middle-rest.ts:1:23:1:30 | string[] | string[] | -| middle-rest.ts:1:33:1:38 | number | number | -| tst.ts:3:13:3:18 | number | number | -| tst.ts:9:13:9:18 | string | string | -| tst.ts:14:20:14:25 | string | string | -| tst.ts:14:31:14:36 | string | string | -| tst.ts:14:40:14:45 | string | string | -| tst.ts:16:17:16:22 | number | number | -| tst.ts:16:28:16:33 | number | number | -| tst.ts:16:37:16:42 | number | number | -| tst.ts:20:29:20:34 | string | string | -| tst.ts:24:12:24:17 | number | number | -| tst.ts:24:12:24:19 | number[] | number[] | -| tst.ts:26:15:26:24 | () => void | () => void | -| tst.ts:26:21:26:24 | void | void | -| tst.ts:27:20:27:28 | undefined | undefined | -| tst.ts:28:15:28:18 | null | null | -| tst.ts:29:16:29:26 | () => never | () => never | -| tst.ts:29:22:29:26 | never | never | -| tst.ts:30:17:30:22 | symbol | symbol | -| tst.ts:31:25:31:37 | unique symbol | typeof uniqueSymbolType | -| tst.ts:32:17:32:22 | object | object | -| tst.ts:33:19:33:24 | string | string | -| tst.ts:33:19:33:38 | string & {x: string} | string & { x: string; } | -| tst.ts:33:28:33:38 | {x: string} | { x: string; } | -| tst.ts:33:32:33:37 | string | string | -| tst.ts:34:12:34:27 | [number, string] | [number, string] | -| tst.ts:34:13:34:18 | number | number | -| tst.ts:34:21:34:26 | string | string | -| tst.ts:36:31:36:55 | [number ... umber?] | [number, string, number?] | -| tst.ts:36:32:36:37 | number | number | -| tst.ts:36:40:36:45 | string | string | -| tst.ts:36:48:36:53 | number | number | -| tst.ts:36:48:36:54 | number? | number | -| tst.ts:37:17:37:18 | [] | [] | -| tst.ts:38:27:38:47 | [number ... ring[]] | [number, ...string[]] | -| tst.ts:38:28:38:33 | number | number | -| tst.ts:38:36:38:46 | ...string[] | string | -| tst.ts:38:39:38:44 | string | string | -| tst.ts:38:39:38:46 | string[] | string[] | -| tst.ts:39:39:39:68 | [number ... mber[]] | [number, string?, ...number[]] | -| tst.ts:39:40:39:45 | number | number | -| tst.ts:39:48:39:53 | string | string | -| tst.ts:39:48:39:54 | string? | string | -| tst.ts:39:57:39:67 | ...number[] | number | -| tst.ts:39:60:39:65 | number | number | -| tst.ts:39:60:39:67 | number[] | number[] | -| tst.ts:40:18:40:24 | unknown | unknown | -| tst.ts:49:15:49:20 | string | string | -| tst.ts:54:11:54:26 | NonAbstractDummy | NonAbstractDummy | -| tst.ts:55:14:55:19 | number | number | -| tst.ts:58:11:58:17 | HasArea | HasArea | -| tst.ts:59:14:59:19 | number | number | -| tst.ts:63:11:63:36 | abstrac ... HasArea | abstract new () => HasArea | -| tst.ts:63:30:63:36 | HasArea | HasArea | -| tst.ts:65:6:65:12 | MyUnion | MyUnion | -| tst.ts:65:16:65:30 | {myUnion: true} | { myUnion: true; } | -| tst.ts:65:16:65:53 | {myUnio ... : true} | { myUnion: true; } \| { stillMyUnion: true; } | -| tst.ts:65:26:65:29 | true | true | -| tst.ts:65:34:65:53 | {stillMyUnion: true} | { stillMyUnion: true; } | -| tst.ts:65:49:65:52 | true | true | -| tst.ts:66:13:66:19 | MyUnion | MyUnion | -| tst.ts:68:6:68:13 | MyUnion2 | MyUnion2 | -| tst.ts:68:17:68:23 | MyUnion | MyUnion | -| tst.ts:68:17:68:48 | MyUnion ... : true} | MyUnion \| { yetAnotherType: true; } | -| tst.ts:68:27:68:48 | {yetAno ... : true} | { yetAnotherType: true; } | -| tst.ts:68:44:68:47 | true | true | -| tst.ts:69:13:69:20 | MyUnion2 | MyUnion2 | -| tst.ts:73:13:73:18 | ThingI | ThingI | -| tst.ts:74:17:74:22 | number | number | -| tst.ts:75:21:75:26 | number | number | -| tst.ts:75:21:75:45 | number ... boolean | string \| number \| boolean | -| tst.ts:75:30:75:35 | string | string | -| tst.ts:75:39:75:45 | boolean | boolean | -| tst.ts:78:33:78:38 | ThingI | ThingI | -| tst.ts:81:17:81:22 | number | number | -| tst.ts:85:21:85:26 | string | string | -| tst.ts:85:21:85:45 | string ... boolean | string \| number \| boolean | -| tst.ts:85:30:85:35 | number | number | -| tst.ts:85:39:85:45 | boolean | boolean | -| tst.ts:92:15:92:20 | number | number | -| tst.ts:98:24:98:29 | number | number | -| tst.ts:104:19:104:24 | string | string | -| tst.ts:104:29:104:34 | hello | any | -| tst.ts:104:37:104:42 | string | string | -| tst.ts:109:22:109:27 | number | number | -| tst.ts:109:29:109:29 | - | any | -| tst.ts:109:32:109:37 | number | number | -| tst.ts:109:39:109:39 | - | any | -| tst.ts:109:42:109:47 | number | number | -| tst.ts:110:19:110:25 | `1-2-3` | "1-2-3" | -| tst.ts:110:19:110:25 | `1-2-3` | any | -| tst.ts:111:22:111:27 | number | number | -| tst.ts:111:29:111:32 | -2-3 | any | -| tst.ts:117:20:117:25 | number | number | -| tst.ts:121:23:121:28 | number | number | -| tst.ts:133:21:133:27 | unknown | unknown | -| tst.ts:140:8:140:12 | Shape | Shape | -| tst.ts:141:7:142:46 | \| { kin ... umber } | { kind: "circle"; radius: number; } \| { kind: "... | -| tst.ts:141:9:141:42 | { kind: ... umber } | { kind: "circle"; radius: number; } | -| tst.ts:141:17:141:24 | "circle" | "circle" | -| tst.ts:141:35:141:40 | number | number | -| tst.ts:142:9:142:46 | { kind: ... umber } | { kind: "square"; sideLength: number; } | -| tst.ts:142:17:142:24 | "square" | "square" | -| tst.ts:142:39:142:44 | number | number | -| tst.ts:144:24:144:28 | Shape | Shape | -| tst.ts:144:32:144:37 | number | number | -| tst.ts:152:15:152:20 | Colors | Colors | -| tst.ts:153:13:153:18 | symbol | symbol | -| tst.ts:153:22:153:27 | number | number | -| tst.ts:154:13:154:18 | string | string | -| tst.ts:154:22:154:27 | string | string | -| tst.ts:155:13:155:18 | number | number | -| tst.ts:155:22:155:28 | boolean | boolean | -| tst.ts:158:17:158:22 | Colors | Colors | -| tst.ts:165:15:165:17 | Foo | Foo | -| tst.ts:166:14:166:17 | foo- | any | -| tst.ts:166:20:166:25 | number | number | -| tst.ts:166:31:166:36 | number | number | -| tst.ts:168:15:168:17 | Foo | Foo | -| tst.ts:171:15:171:18 | Data | Data | -| tst.ts:172:17:172:22 | string | string | -| tst.ts:172:17:172:31 | string \| symbol | string \| symbol | -| tst.ts:172:26:172:31 | symbol | symbol | -| tst.ts:172:35:172:41 | boolean | boolean | -| tst.ts:175:17:175:20 | Data | Data | -| tst.ts:197:8:197:8 | A | string | -| tst.ts:197:12:197:18 | Awaited | Awaited | -| tst.ts:197:12:197:35 | Awaited ... tring>> | string | -| tst.ts:197:20:197:26 | Promise | Promise | -| tst.ts:197:20:197:34 | Promise | Promise | -| tst.ts:197:28:197:33 | string | string | -| tst.ts:200:8:200:8 | B | number | -| tst.ts:200:12:200:18 | Awaited | Awaited | -| tst.ts:200:12:200:44 | Awaited ... mber>>> | number | -| tst.ts:200:20:200:26 | Promise | Promise | -| tst.ts:200:20:200:43 | Promise ... umber>> | Promise> | -| tst.ts:200:28:200:34 | Promise | Promise | -| tst.ts:200:28:200:42 | Promise | Promise | -| tst.ts:200:36:200:41 | number | number | -| tst.ts:203:8:203:8 | C | C | -| tst.ts:203:12:203:18 | Awaited | Awaited | -| tst.ts:203:12:203:45 | Awaited ... umber>> | number \| boolean | -| tst.ts:203:20:203:26 | boolean | boolean | -| tst.ts:203:20:203:44 | boolean ... number> | boolean \| Promise | -| tst.ts:203:30:203:36 | Promise | Promise | -| tst.ts:203:30:203:44 | Promise | Promise | -| tst.ts:203:38:203:43 | number | number | -| tst.ts:205:20:205:26 | Success | Success | -| tst.ts:206:14:206:19 | string | string | -| tst.ts:206:21:206:27 | Success | any | -| tst.ts:207:11:207:16 | string | string | -| tst.ts:210:20:210:24 | Error | Error | -| tst.ts:211:16:211:21 | string | string | -| tst.ts:211:23:211:27 | Error | any | -| tst.ts:212:16:212:21 | string | string | -| tst.ts:215:30:215:36 | Success | Success | -| tst.ts:215:30:215:44 | Success \| Error | Success \| Error | -| tst.ts:215:40:215:44 | Error | Error | -| tst.ts:223:12:223:17 | string | string | -| tst.ts:224:23:224:28 | string | string | -| tst.ts:228:19:228:25 | unknown | unknown | -| tst.ts:252:8:252:13 | Action | Action | -| tst.ts:253:5:254:49 | \| { kin ... tring } | { kind: "NumberContents"; payload: number; } \| ... | -| tst.ts:253:7:253:49 | { kind: ... umber } | { kind: "NumberContents"; payload: number; } | -| tst.ts:253:15:253:30 | "NumberContents" | "NumberContents" | -| tst.ts:253:42:253:47 | number | number | -| tst.ts:254:7:254:49 | { kind: ... tring } | { kind: "StringContents"; payload: string; } | -| tst.ts:254:15:254:30 | "StringContents" | "StringContents" | -| tst.ts:254:42:254:47 | string | string | -| tst.ts:256:34:256:39 | Action | Action | -| tst.ts:265:13:265:19 | TypeMap | TypeMap | -| tst.ts:266:13:266:18 | number | number | -| tst.ts:267:13:267:18 | string | string | -| tst.ts:268:14:268:20 | boolean | boolean | -| tst.ts:271:8:271:18 | UnionRecord | UnionRecord

| -| tst.ts:271:20:271:20 | P | P | -| tst.ts:271:30:271:42 | keyof TypeMap | keyof TypeMap | -| tst.ts:271:36:271:42 | TypeMap | TypeMap | -| tst.ts:272:6:272:6 | K | K | -| tst.ts:272:11:272:11 | P | P | -| tst.ts:273:13:273:13 | K | K | -| tst.ts:274:14:274:20 | TypeMap | TypeMap | -| tst.ts:274:22:274:22 | K | K | -| tst.ts:274:29:274:32 | void | void | -| tst.ts:276:5:276:5 | P | P | -| tst.ts:278:26:278:26 | K | K | -| tst.ts:278:36:278:48 | keyof TypeMap | keyof TypeMap | -| tst.ts:278:42:278:48 | TypeMap | TypeMap | -| tst.ts:278:59:278:69 | UnionRecord | UnionRecord

| -| tst.ts:278:59:278:72 | UnionRecord | UnionRecord | -| tst.ts:278:71:278:71 | K | K | -| tst.ts:289:8:289:11 | Func | Func | -| tst.ts:289:25:289:37 | ["a", number] | ["a", number] | -| tst.ts:289:25:289:53 | ["a", n ... string] | ["a", number] \| ["b", string] | -| tst.ts:289:26:289:28 | "a" | "a" | -| tst.ts:289:31:289:36 | number | number | -| tst.ts:289:41:289:53 | ["b", string] | ["b", string] | -| tst.ts:289:42:289:44 | "b" | "b" | -| tst.ts:289:47:289:52 | string | string | -| tst.ts:289:59:289:62 | void | void | -| tst.ts:291:13:291:16 | Func | Func | -| tst.ts:313:12:313:12 | T | T | -| tst.ts:313:20:315:27 | {\\n pro ... void } | { produce: (n: string) => T; consume: (x: T) =>... | -| tst.ts:314:12:314:27 | (n: string) => T | (n: string) => T | -| tst.ts:314:16:314:21 | string | string | -| tst.ts:314:27:314:27 | T | T | -| tst.ts:315:12:315:25 | (x: T) => void | (x: T) => void | -| tst.ts:315:16:315:16 | T | T | -| tst.ts:315:22:315:25 | void | void | -| tst.ts:316:4:316:7 | void | void | -| tst.ts:325:22:325:27 | string | string | -| tst.ts:325:30:325:34 | Error | Error | -| tst.ts:331:6:331:16 | FirstString | FirstString | -| tst.ts:331:18:331:18 | T | T | -| tst.ts:332:3:332:3 | T | T | -| tst.ts:332:13:332:50 | [infer ... nown[]] | [S, ...unknown[]] | -| tst.ts:332:14:332:35 | infer S ... string | S | -| tst.ts:332:20:332:20 | S | S | -| tst.ts:332:30:332:35 | string | string | -| tst.ts:332:38:332:49 | ...unknown[] | unknown | -| tst.ts:332:41:332:47 | unknown | unknown | -| tst.ts:332:41:332:49 | unknown[] | unknown[] | -| tst.ts:333:9:333:9 | S | S | -| tst.ts:334:9:334:13 | never | never | -| tst.ts:336:6:336:6 | F | "a" \| "b" | -| tst.ts:336:10:336:20 | FirstString | FirstString | -| tst.ts:336:10:336:50 | FirstSt ... olean]> | "a" \| "b" | -| tst.ts:336:22:336:49 | ['a' \| ... oolean] | ["a" \| "b", number, boolean] | -| tst.ts:336:23:336:25 | 'a' | "a" | -| tst.ts:336:23:336:31 | 'a' \| 'b' | "a" \| "b" | -| tst.ts:336:29:336:31 | 'b' | "b" | -| tst.ts:336:34:336:39 | number | number | -| tst.ts:336:42:336:48 | boolean | boolean | -| tst.ts:338:10:338:10 | F | "a" \| "b" | -| tst.ts:342:11:342:15 | State | State | -| tst.ts:342:24:342:24 | T | T | -| tst.ts:343:8:343:14 | () => T | () => T | -| tst.ts:343:14:343:14 | T | T | -| tst.ts:344:8:344:25 | (value: T) => void | (value: T) => void | -| tst.ts:344:16:344:16 | T | T | -| tst.ts:344:22:344:25 | void | void | -| tst.ts:347:14:347:18 | State | State | -| tst.ts:347:14:347:26 | State | State | -| tst.ts:347:20:347:25 | number | number | -| tst.ts:381:10:381:16 | SomeNum | 100 | -| tst.ts:381:20:381:24 | "100" | "100" | -| tst.ts:381:20:381:72 | "100" e ... : never | 100 | -| tst.ts:381:37:381:58 | infer U ... number | U | -| tst.ts:381:43:381:43 | U | U | -| tst.ts:381:53:381:58 | number | number | -| tst.ts:381:64:381:64 | U | U | -| tst.ts:381:68:381:72 | never | never | -| tst.ts:383:37:383:37 | T | T | -| tst.ts:383:43:383:43 | T | T | -| tst.ts:383:49:383:49 | T | T | -| tst.ts:383:53:383:53 | T | T | -| tst.ts:391:8:391:13 | Colors | Colors | -| tst.ts:391:17:391:21 | "red" | "red" | -| tst.ts:391:17:391:40 | "red" \| ... "blue" | "red" \| "green" \| "blue" | -| tst.ts:391:25:391:31 | "green" | "green" | -| tst.ts:391:35:391:40 | "blue" | "blue" | -| tst.ts:393:8:393:10 | RGB | RGB | -| tst.ts:393:14:393:55 | [red: n ... number] | [red: number, green: number, blue: number] | -| tst.ts:393:15:393:17 | red | any | -| tst.ts:393:20:393:25 | number | number | -| tst.ts:393:28:393:32 | green | any | -| tst.ts:393:35:393:40 | number | number | -| tst.ts:393:43:393:46 | blue | any | -| tst.ts:393:49:393:54 | number | number | -| tst.ts:399:15:399:20 | Record | Record | -| tst.ts:399:15:399:42 | Record< ... \| RGB> | Record | -| tst.ts:399:22:399:27 | Colors | Colors | -| tst.ts:399:30:399:35 | string | string | -| tst.ts:399:30:399:41 | string \| RGB | string \| RGB | -| tst.ts:399:39:399:41 | RGB | RGB | -| tst.ts:404:13:404:18 | RGBObj | RGBObj | -| tst.ts:405:10:405:15 | number | number | -| tst.ts:408:13:408:18 | HSVObj | HSVObj | -| tst.ts:409:10:409:15 | number | number | -| tst.ts:412:28:412:33 | RGBObj | RGBObj | -| tst.ts:412:28:412:42 | RGBObj \| HSVObj | RGBObj \| HSVObj | -| tst.ts:412:37:412:42 | HSVObj | HSVObj | -| tst.ts:420:20:420:25 | string | string | -| tst.ts:422:23:422:28 | string | string | -| tst.ts:431:27:431:30 | This | This | -| tst.ts:431:33:431:36 | Args | Args | -| tst.ts:431:46:431:48 | any | any | -| tst.ts:431:46:431:50 | any[] | any[] | -| tst.ts:431:53:431:58 | Return | Return | -| tst.ts:432:24:432:27 | This | This | -| tst.ts:432:39:432:42 | Args | Args | -| tst.ts:432:48:432:53 | Return | Return | -| tst.ts:433:18:433:44 | ClassMe ... Context | ClassMethodDecoratorContext | -| tst.ts:433:46:433:49 | This | This | -| tst.ts:433:59:433:62 | This | This | -| tst.ts:433:74:433:77 | Args | Args | -| tst.ts:433:83:433:88 | Return | Return | -| tst.ts:437:42:437:45 | This | This | -| tst.ts:437:57:437:60 | Args | Args | -| tst.ts:437:64:437:69 | Return | Return | -| tst.ts:448:15:448:20 | string | string | -| tst.ts:449:27:449:32 | string | string | -| tst.ts:462:46:462:46 | T | T | -| tst.ts:462:56:462:72 | readonly string[] | readonly string[] | -| tst.ts:462:65:462:70 | string | string | -| tst.ts:462:65:462:72 | string[] | readonly string[] | -| tst.ts:462:81:462:81 | T | T | -| tst.ts:462:85:462:85 | T | T | -| tst.ts:481:10:481:14 | Pair3 | Pair3 | -| tst.ts:481:16:481:16 | T | T | -| tst.ts:481:21:481:33 | [first: T, T] | [first: T, T] | -| tst.ts:481:22:481:26 | first | any | -| tst.ts:481:29:481:29 | T | T | -| tst.ts:481:32:481:32 | T | T | -| tst.ts:483:46:483:50 | Pair3 | Pair3 | -| tst.ts:483:46:483:58 | Pair3 | Pair3 | -| tst.ts:483:52:483:57 | string | string | -| tst.ts:487:30:487:30 | C | C | -| tst.ts:487:40:487:45 | string | string | -| tst.ts:487:56:487:56 | C | C | -| tst.ts:487:56:487:58 | C[] | C[] | -| tst.ts:487:76:487:82 | NoInfer | any | -| tst.ts:487:84:487:84 | C | C | -| tst.ts:506:20:506:25 | Record | Record | -| tst.ts:506:20:506:42 | Record< ... nknown> | Record | -| tst.ts:506:27:506:32 | string | string | -| tst.ts:506:35:506:41 | unknown | unknown | -| tst.ts:506:50:506:55 | string | string | -| tst.ts:514:20:514:25 | symbol | symbol | -| tst.ts:519:21:519:21 | A | A | -| tst.ts:519:21:519:31 | A[typeof a] | () => number | -| tst.ts:519:23:519:30 | typeof a | symbol | -| tst.ts:519:30:519:30 | a | symbol | -| tstModuleCJS.cts:1:33:1:35 | 'a' | "a" | -| tstModuleCJS.cts:1:33:1:41 | 'a' \| 'b' | "a" \| "b" | -| tstModuleCJS.cts:1:39:1:41 | 'b' | "b" | -| tstModuleES.mts:1:40:1:42 | 'a' | "a" | -| tstModuleES.mts:1:40:1:48 | 'a' \| 'b' | "a" \| "b" | -| tstModuleES.mts:1:46:1:48 | 'b' | "b" | -| tstSuffixA.ts:1:33:1:47 | 'tstSuffixA.ts' | "tstSuffixA.ts" | -| tstSuffixB.ios.ts:1:33:1:51 | 'tstSuffixB.ios.ts' | "tstSuffixB.ios.ts" | -| tstSuffixB.ts:1:33:1:47 | 'tstSuffixB.ts' | "tstSuffixB.ts" | -| type_alias.ts:1:6:1:6 | B | boolean | -| type_alias.ts:1:10:1:16 | boolean | boolean | -| type_alias.ts:3:8:3:8 | B | boolean | -| type_alias.ts:5:6:5:17 | ValueOrArray | ValueOrArray | -| type_alias.ts:5:19:5:19 | T | T | -| type_alias.ts:5:24:5:24 | T | T | -| type_alias.ts:5:24:5:49 | T \| Arr ... ray> | T \| ValueOrArray[] | -| type_alias.ts:5:28:5:32 | Array | T[] | -| type_alias.ts:5:28:5:49 | Array> | ValueOrArray[] | -| type_alias.ts:5:34:5:45 | ValueOrArray | ValueOrArray | -| type_alias.ts:5:34:5:48 | ValueOrArray | ValueOrArray | -| type_alias.ts:5:47:5:47 | T | T | -| type_alias.ts:7:8:7:19 | ValueOrArray | ValueOrArray | -| type_alias.ts:7:8:7:27 | ValueOrArray | ValueOrArray | -| type_alias.ts:7:21:7:26 | number | number | -| type_alias.ts:9:6:9:9 | Json | Json | -| type_alias.ts:10:5:15:12 | \| strin ... Json[] | string \| number \| boolean \| { [property: string... | -| type_alias.ts:10:7:10:12 | string | string | -| type_alias.ts:11:7:11:12 | number | number | -| type_alias.ts:12:7:12:13 | boolean | boolean | -| type_alias.ts:13:7:13:10 | null | null | -| type_alias.ts:14:7:14:34 | { [prop ... Json } | { [property: string]: Json; } | -| type_alias.ts:14:20:14:25 | string | string | -| type_alias.ts:14:29:14:32 | Json | Json | -| type_alias.ts:15:7:15:10 | Json | Json | -| type_alias.ts:15:7:15:12 | Json[] | Json[] | -| type_alias.ts:17:11:17:14 | Json | Json | -| type_alias.ts:19:6:19:16 | VirtualNode | VirtualNode | -| type_alias.ts:20:5:21:56 | \| strin ... Node[]] | string \| [string, { [key: string]: any; }, ...V... | -| type_alias.ts:20:7:20:12 | string | string | -| type_alias.ts:21:7:21:56 | [string ... Node[]] | [string, { [key: string]: any; }, ...VirtualNod... | -| type_alias.ts:21:8:21:13 | string | string | -| type_alias.ts:21:16:21:37 | { [key: ... : any } | { [key: string]: any; } | -| type_alias.ts:21:24:21:29 | string | string | -| type_alias.ts:21:33:21:35 | any | any | -| type_alias.ts:21:40:21:55 | ...VirtualNode[] | VirtualNode | -| type_alias.ts:21:43:21:53 | VirtualNode | VirtualNode | -| type_alias.ts:21:43:21:55 | VirtualNode[] | VirtualNode[] | -| type_alias.ts:23:15:23:25 | VirtualNode | VirtualNode | -| type_definitions.ts:3:11:3:11 | I | I | -| type_definitions.ts:3:13:3:13 | S | S | -| type_definitions.ts:4:6:4:6 | S | S | -| type_definitions.ts:6:8:6:8 | I | I | -| type_definitions.ts:6:8:6:16 | I | I | -| type_definitions.ts:6:10:6:15 | number | number | -| type_definitions.ts:8:9:8:9 | T | T | -| type_definitions.ts:9:6:9:6 | T | T | -| type_definitions.ts:11:8:11:8 | C | C | -| type_definitions.ts:11:8:11:16 | C | C | -| type_definitions.ts:11:10:11:15 | number | number | -| type_definitions.ts:16:12:16:16 | Color | Color | -| type_definitions.ts:19:8:19:24 | EnumWithOneMember | EnumWithOneMember | -| type_definitions.ts:21:6:21:10 | Alias | Alias | -| type_definitions.ts:21:12:21:12 | T | T | -| type_definitions.ts:21:17:21:17 | T | T | -| type_definitions.ts:21:17:21:19 | T[] | T[] | -| type_definitions.ts:22:26:22:30 | Alias | Alias | -| type_definitions.ts:22:26:22:38 | Alias | Alias | -| type_definitions.ts:22:32:22:37 | number | number | -missingToString -referenceDefinition -| A | badTypes.ts:5:1:5:29 | interfa ... is.B {} | -| A | tst.ts:515:10:517:3 | class A ... };\\n } | -| Action | tst.ts:252:3:254:50 | type Ac ... ring }; | -| Alias | type_definitions.ts:21:1:21:20 | type Alias = T[]; | -| Alias | type_definitions.ts:21:1:21:20 | type Alias = T[]; | -| Base | tst.ts:241:3:241:15 | class Base {} | -| Base | tst.ts:241:3:241:15 | class Base {} | -| C | tst.ts:203:3:203:46 | type C ... mber>>; | -| C | type_definition_objects.ts:3:8:3:17 | class C {} | -| C | type_definitions.ts:8:1:10:1 | class C ... x: T\\n} | -| C | type_definitions.ts:8:1:10:1 | class C ... x: T\\n} | -| Color | type_definitions.ts:13:1:15:1 | enum Co ... blue\\n} | -| Color.blue | type_definitions.ts:14:15:14:18 | blue | -| Color.green | type_definitions.ts:14:8:14:12 | green | -| Color.red | type_definitions.ts:14:3:14:5 | red | -| Colors | tst.ts:152:5:156:5 | interfa ... ;\\n } | -| Colors | tst.ts:391:3:391:41 | type Co ... "blue"; | -| Data | tst.ts:171:5:173:5 | interfa ... ;\\n } | -| Derived | tst.ts:243:3:250:3 | class D ... }\\n } | -| E | type_definition_objects.ts:6:8:6:16 | enum E {} | -| EnumWithOneMember | type_definitions.ts:18:26:18:31 | member | -| Error | tst.ts:210:10:213:3 | interfa ... ng;\\n } | -| FirstString | tst.ts:331:1:334:14 | type Fi ... never; | -| Foo | tst.ts:116:3:129:3 | class F ... }\\n } | -| Foo | tst.ts:165:5:167:5 | interfa ... ;\\n } | -| Foo | tst.ts:179:3:192:3 | class F ... \\n } | -| Func | tst.ts:289:3:289:63 | type Fu ... > void; | -| HSVObj | tst.ts:408:3:410:3 | interfa ... er;\\n } | -| HasArea | tst.ts:58:1:60:1 | interfa ... mber;\\n} | -| I | type_definitions.ts:3:1:5:1 | interfa ... x: S;\\n} | -| I | type_definitions.ts:3:1:5:1 | interfa ... x: S;\\n} | -| Json | type_alias.ts:9:1:15:13 | type Js ... Json[]; | -| MyUnion | tst.ts:65:1:65:54 | type My ... true}; | -| MyUnion2 | tst.ts:68:1:68:49 | type My ... true}; | -| NonAbstractDummy | tst.ts:54:1:56:1 | interfa ... mber;\\n} | -| Pair3 | tst.ts:481:5:481:34 | type Pa ... T, T]; | -| Pair3 | tst.ts:481:5:481:34 | type Pa ... T, T]; | -| Person | tst.ts:222:3:234:3 | class P ... }\\n } | -| Person | tst.ts:419:3:425:3 | class P ... }\\n } | -| Person | tst.ts:447:5:458:5 | class P ... }\\n } | -| RGB | tst.ts:393:3:393:56 | type RG ... umber]; | -| RGBObj | tst.ts:404:3:406:3 | interfa ... er;\\n } | -| Shape | tst.ts:140:3:142:47 | type Sh ... mber }; | -| SomeClass | tst.ts:473:5:476:5 | class S ... ;\\n } | -| State | tst.ts:342:1:345:1 | interfa ... void;\\n} | -| State | tst.ts:342:1:345:1 | interfa ... void;\\n} | -| Sub | tst.ts:97:3:101:3 | class S ... }\\n } | -| Success | tst.ts:205:10:208:3 | interfa ... ng;\\n } | -| Super | tst.ts:91:3:95:3 | class S ... }\\n } | -| Super | tst.ts:91:3:95:3 | class S ... }\\n } | -| Thing | tst.ts:78:10:88:3 | class T ... }\\n } | -| ThingI | tst.ts:73:3:76:3 | interfa ... n);\\n } | -| TypeMap | tst.ts:265:3:269:3 | interfa ... an;\\n } | -| UnionRecord | tst.ts:271:3:276:7 | type Un ... }[P]; | -| UnionRecord

| tst.ts:271:3:276:7 | type Un ... }[P]; | -| ValueOrArray | type_alias.ts:5:1:5:50 | type Va ... ay>; | -| ValueOrArray | type_alias.ts:5:1:5:50 | type Va ... ay>; | -| VirtualNode | type_alias.ts:19:1:21:57 | type Vi ... ode[]]; | -tupleTypes -| middle-rest.ts:1:5:1:7 | foo | [boolean, ...string[], number] | 0 | boolean | 2 | string | -| middle-rest.ts:1:5:1:7 | foo | [boolean, ...string[], number] | 1 | string | 2 | string | -| middle-rest.ts:1:5:1:7 | foo | [boolean, ...string[], number] | 2 | number | 2 | string | -| middle-rest.ts:3:1:3:3 | foo | [boolean, ...string[], number] | 0 | boolean | 2 | string | -| middle-rest.ts:3:1:3:3 | foo | [boolean, ...string[], number] | 1 | string | 2 | string | -| middle-rest.ts:3:1:3:3 | foo | [boolean, ...string[], number] | 2 | number | 2 | string | -| middle-rest.ts:3:1:3:26 | foo = [ ... ", 123] | [true, string, number] | 0 | true | 3 | no-rest | -| middle-rest.ts:3:1:3:26 | foo = [ ... ", 123] | [true, string, number] | 1 | string | 3 | no-rest | -| middle-rest.ts:3:1:3:26 | foo = [ ... ", 123] | [true, string, number] | 2 | number | 3 | no-rest | -| middle-rest.ts:3:7:3:26 | [true, "hello", 123] | [boolean, ...string[], number] | 0 | boolean | 2 | string | -| middle-rest.ts:3:7:3:26 | [true, "hello", 123] | [boolean, ...string[], number] | 1 | string | 2 | string | -| middle-rest.ts:3:7:3:26 | [true, "hello", 123] | [boolean, ...string[], number] | 2 | number | 2 | string | -| tst.ts:34:5:34:9 | tuple | [number, string] | 0 | number | 2 | no-rest | -| tst.ts:34:5:34:9 | tuple | [number, string] | 1 | string | 2 | no-rest | -| tst.ts:36:5:36:28 | tupleWi ... Element | [number, string, number?] | 0 | number | 2 | no-rest | -| tst.ts:36:5:36:28 | tupleWi ... Element | [number, string, number?] | 1 | string | 2 | no-rest | -| tst.ts:36:5:36:28 | tupleWi ... Element | [number, string, number?] | 2 | number | 2 | no-rest | -| tst.ts:38:5:38:24 | tupleWithRestElement | [number, ...string[]] | 0 | number | 1 | string | -| tst.ts:38:5:38:24 | tupleWithRestElement | [number, ...string[]] | 1 | string | 1 | string | -| tst.ts:39:5:39:36 | tupleWi ... lements | [number, string?, ...number[]] | 0 | number | 1 | number | -| tst.ts:39:5:39:36 | tupleWi ... lements | [number, string?, ...number[]] | 1 | string | 1 | number | -| tst.ts:39:5:39:36 | tupleWi ... lements | [number, string?, ...number[]] | 2 | number | 1 | number | -| tst.ts:42:5:42:21 | constArrayLiteral | readonly [1, 2] | 0 | 1 | 2 | no-rest | -| tst.ts:42:5:42:21 | constArrayLiteral | readonly [1, 2] | 1 | 2 | 2 | no-rest | -| tst.ts:42:25:42:30 | [1, 2] | readonly [1, 2] | 0 | 1 | 2 | no-rest | -| tst.ts:42:25:42:30 | [1, 2] | readonly [1, 2] | 1 | 2 | 2 | no-rest | -| tst.ts:42:25:42:39 | [1, 2] as const | readonly [1, 2] | 0 | 1 | 2 | no-rest | -| tst.ts:42:25:42:39 | [1, 2] as const | readonly [1, 2] | 1 | 2 | 2 | no-rest | -| tst.ts:385:21:385:73 | chooseR ... bye!"]) | [number, boolean, string] | 0 | number | 3 | no-rest | -| tst.ts:385:21:385:73 | chooseR ... bye!"]) | [number, boolean, string] | 1 | boolean | 3 | no-rest | -| tst.ts:385:21:385:73 | chooseR ... bye!"]) | [number, boolean, string] | 2 | string | 3 | no-rest | -| tst.ts:385:36:385:52 | [42, true, "hi!"] | [number, boolean, string] | 0 | number | 3 | no-rest | -| tst.ts:385:36:385:52 | [42, true, "hi!"] | [number, boolean, string] | 1 | boolean | 3 | no-rest | -| tst.ts:385:36:385:52 | [42, true, "hi!"] | [number, boolean, string] | 2 | string | 3 | no-rest | -| tst.ts:385:55:385:72 | [0, false, "bye!"] | [number, boolean, string] | 0 | number | 3 | no-rest | -| tst.ts:385:55:385:72 | [0, false, "bye!"] | [number, boolean, string] | 1 | boolean | 3 | no-rest | -| tst.ts:385:55:385:72 | [0, false, "bye!"] | [number, boolean, string] | 2 | string | 3 | no-rest | -| tst.ts:396:5:396:7 | red | [red: number, green: number, blue: number] | 0 | number | 3 | no-rest | -| tst.ts:396:5:396:7 | red | [red: number, green: number, blue: number] | 1 | number | 3 | no-rest | -| tst.ts:396:5:396:7 | red | [red: number, green: number, blue: number] | 2 | number | 3 | no-rest | -| tst.ts:402:24:402:34 | palette.red | [red: number, green: number, blue: number] | 0 | number | 3 | no-rest | -| tst.ts:402:24:402:34 | palette.red | [red: number, green: number, blue: number] | 1 | number | 3 | no-rest | -| tst.ts:402:24:402:34 | palette.red | [red: number, green: number, blue: number] | 2 | number | 3 | no-rest | -| tst.ts:402:32:402:34 | red | [red: number, green: number, blue: number] | 0 | number | 3 | no-rest | -| tst.ts:402:32:402:34 | red | [red: number, green: number, blue: number] | 1 | number | 3 | no-rest | -| tst.ts:402:32:402:34 | red | [red: number, green: number, blue: number] | 2 | number | 3 | no-rest | -| tst.ts:465:11:465:13 | foo | readonly ["a", "b", "c"] | 0 | "a" | 3 | no-rest | -| tst.ts:465:11:465:13 | foo | readonly ["a", "b", "c"] | 1 | "b" | 3 | no-rest | -| tst.ts:465:11:465:13 | foo | readonly ["a", "b", "c"] | 2 | "c" | 3 | no-rest | -| tst.ts:465:17:465:50 | myConst ... ,"c"]) | readonly ["a", "b", "c"] | 0 | "a" | 3 | no-rest | -| tst.ts:465:17:465:50 | myConst ... ,"c"]) | readonly ["a", "b", "c"] | 1 | "b" | 3 | no-rest | -| tst.ts:465:17:465:50 | myConst ... ,"c"]) | readonly ["a", "b", "c"] | 2 | "c" | 3 | no-rest | -| tst.ts:465:35:465:49 | ["a", "b" ,"c"] | readonly ["a", "b", "c"] | 0 | "a" | 3 | no-rest | -| tst.ts:465:35:465:49 | ["a", "b" ,"c"] | readonly ["a", "b", "c"] | 1 | "b" | 3 | no-rest | -| tst.ts:465:35:465:49 | ["a", "b" ,"c"] | readonly ["a", "b", "c"] | 2 | "c" | 3 | no-rest | -| tst.ts:467:15:467:17 | foo | readonly ["a", "b", "c"] | 0 | "a" | 3 | no-rest | -| tst.ts:467:15:467:17 | foo | readonly ["a", "b", "c"] | 1 | "b" | 3 | no-rest | -| tst.ts:467:15:467:17 | foo | readonly ["a", "b", "c"] | 2 | "c" | 3 | no-rest | -| tst.ts:483:17:483:58 | ["hello ... string> | [first: string, string] | 0 | string | 2 | no-rest | -| tst.ts:483:17:483:58 | ["hello ... string> | [first: string, string] | 1 | string | 2 | no-rest | -unknownType -| tst.ts:40:5:40:15 | unknownType | unknown | -| tst.ts:47:8:47:8 | e | unknown | -| tst.ts:48:14:48:14 | e | unknown | -| tst.ts:133:16:133:18 | arg | unknown | -| tst.ts:134:32:134:34 | arg | unknown | -| tst.ts:228:12:228:16 | other | unknown | -| tst.ts:229:16:229:20 | other | unknown | -| tst.ts:230:20:230:24 | other | unknown | -| tst.ts:507:16:507:23 | obj[key] | unknown | -abstractSignature -| (): HasArea | -| new (): HasArea | -unionIndex -| 1 | 0 | 1 \| 2 | -| 2 | 1 | 1 \| 2 | -| 42 | 1 | "hello" \| 42 | -| "NumberContents" | 0 | "NumberContents" \| "StringContents" | -| "StringContents" | 1 | "NumberContents" \| "StringContents" | -| "a" | 0 | "a" \| "b" | -| "a" | 0 | "a" \| "b" \| "c" | -| "a" | 1 | number \| "a" | -| "a" | 3 | number \| boolean \| "a" \| "b" | -| "b" | 1 | "a" \| "b" | -| "b" | 1 | "a" \| "b" \| "c" | -| "b" | 4 | number \| boolean \| "a" \| "b" | -| "bigint" | 2 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "blue" | 2 | "red" \| "green" \| "blue" | -| "boolean" | 2 | keyof TypeMap | -| "boolean" | 3 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "c" | 2 | "a" \| "b" \| "c" | -| "circle" | 0 | "circle" \| "square" | -| "even" | 0 | "even" \| "odd" | -| "function" | 7 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "green" | 1 | "red" \| "green" \| "blue" | -| "green" | 1 | "red" \| "green" \| "yellow" | -| "hello" | 0 | "hello" \| 42 | -| "number" | 1 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "number" | 1 | keyof TypeMap | -| "object" | 6 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "odd" | 1 | "even" \| "odd" | -| "red" | 0 | "red" \| "green" \| "blue" | -| "red" | 0 | "red" \| "green" \| "yellow" | -| "square" | 1 | "circle" \| "square" | -| "string" | 0 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "string" | 0 | keyof TypeMap | -| "symbol" | 4 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "undefined" | 5 | "string" \| "number" \| "bigint" \| "boolean" \| "s... | -| "yellow" | 2 | "red" \| "green" \| "yellow" | -| () => number | 0 | (() => number) \| (ClassMethodDecoratorContext number | 1 | void \| (() => number) | -| ClassMethodDecoratorContext numbe... | 1 | (() => number) \| (ClassMethodDecoratorContext | 2 | boolean \| Promise | -| PromiseLike | 1 | TResult1 \| PromiseLike | -| PromiseLike | 1 | TResult2 \| PromiseLike | -| RGB | 1 | string \| RGB | -| RGBObj | 0 | RGBObj \| HSVObj | -| Success | 0 | Success \| Error | -| T | 0 | T \| ValueOrArray[] | -| TResult1 | 0 | TResult1 \| PromiseLike | -| TResult1 | 0 | TResult1 \| TResult2 | -| TResult2 | 0 | TResult2 \| PromiseLike | -| TResult2 | 1 | TResult1 \| TResult2 | -| ValueOrArray[] | 1 | T \| ValueOrArray[] | -| ValueOrArray[] | 1 | number \| ValueOrArray[] | -| ["a", number] | 0 | ["a", number] \| ["b", string] | -| ["b", string] | 1 | ["a", number] \| ["b", string] | -| [string, { [key: string]: any; }, ...VirtualNod... | 1 | VirtualNode \| { [key: string]: any; } | -| [string, { [key: string]: any; }, ...VirtualNod... | 1 | string \| [string, { [key: string]: any; }, ...V... | -| false | 0 | boolean | -| false | 0 | boolean \| Promise | -| false | 1 | number \| boolean | -| false | 1 | number \| boolean \| "a" \| "b" | -| false | 2 | string \| number \| boolean | -| false | 2 | string \| number \| boolean \| { [property: string... | -| number | 0 | number \| "a" | -| number | 0 | number \| ValueOrArray[] | -| number | 0 | number \| boolean | -| number | 0 | number \| boolean \| "a" \| "b" | -| number | 1 | string \| number | -| number | 1 | string \| number \| boolean | -| number | 1 | string \| number \| boolean \| { [property: string... | -| number | 1 | string \| number \| symbol | -| number | 1 | string \| number \| true | -| string | 0 | VirtualNode \| { [key: string]: any; } | -| string | 0 | string \| Error | -| string | 0 | string \| RGB | -| string | 0 | string \| [string, { [key: string]: any; }, ...V... | -| string | 0 | string \| number | -| string | 0 | string \| number \| boolean | -| string | 0 | string \| number \| boolean \| { [property: string... | -| string | 0 | string \| number \| symbol | -| string | 0 | string \| number \| true | -| string | 0 | string \| symbol | -| string | 0 | string \| { [key: string]: any; } | -| symbol | 1 | string \| symbol | -| symbol | 2 | string \| number \| symbol | -| true | 1 | boolean | -| true | 1 | boolean \| Promise | -| true | 2 | number \| boolean | -| true | 2 | number \| boolean \| "a" \| "b" | -| true | 2 | string \| number \| true | -| true | 3 | string \| number \| boolean | -| true | 3 | string \| number \| boolean \| { [property: string... | -| void | 0 | void \| (() => number) | -| { [key: string]: any; } | 1 | string \| { [key: string]: any; } | -| { [key: string]: any; } | 2 | VirtualNode \| { [key: string]: any; } | -| { [property: string]: Json; } | 4 | string \| number \| boolean \| { [property: string... | -| { kind: "NumberContents"; payload: number; } | 0 | { kind: "NumberContents"; payload: number; } \| ... | -| { kind: "StringContents"; payload: string; } | 1 | { kind: "NumberContents"; payload: number; } \| ... | -| { kind: "circle"; radius: number; } | 0 | { kind: "circle"; radius: number; } \| { kind: "... | -| { kind: "square"; sideLength: number; } | 1 | { kind: "circle"; radius: number; } \| { kind: "... | -| { myUnion: true; } | 0 | MyUnion \| { yetAnotherType: true; } | -| { myUnion: true; } | 0 | { myUnion: true; } \| { stillMyUnion: true; } | -| { stillMyUnion: true; } | 1 | MyUnion \| { yetAnotherType: true; } | -| { stillMyUnion: true; } | 1 | { myUnion: true; } \| { stillMyUnion: true; } | -| { yetAnotherType: true; } | 2 | MyUnion \| { yetAnotherType: true; } | -getAStaticInitializerBlock -| tst.ts:179:3:192:3 | class F ... \\n } | tst.ts:185:5:187:5 | static ... ;\\n } | -| tst.ts:179:3:192:3 | class F ... \\n } | tst.ts:188:5:190:5 | static ... ;\\n } | diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tests.ql b/javascript/ql/test/library-tests/TypeScript/Types/tests.ql deleted file mode 100644 index dad3934113e3..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tests.ql +++ /dev/null @@ -1,45 +0,0 @@ -import javascript - -// Ensure `true | false` and `false | true` are not distinct boolean types. -query predicate booleans(BooleanType t) { any() } - -query predicate getExprType(Expr expr, Type type) { type = expr.getType() } - -query predicate getTypeDefinitionType(TypeDefinition def, Type type) { type = def.getType() } - -query predicate getTypeExprType(TypeExpr e, Type type) { e.getType() = type } - -query predicate missingToString(Type typ, string msg) { - not exists(typ.toString()) and - msg = "Missing toString for " + typ.getAQlClass() -} - -query predicate referenceDefinition(TypeReference ref, TypeDefinition def) { - def = ref.getADefinition() -} - -string getRest(TupleType tuple) { - if tuple.hasRestElement() - then result = tuple.getRestElementType().toString() - else result = "no-rest" -} - -query predicate tupleTypes(Expr e, TupleType tuple, int n, Type element, int minLength, string rest) { - e.getType() = tuple and - element = tuple.getElementType(n) and - minLength = tuple.getMinimumLength() and - rest = getRest(tuple) -} - -query predicate unknownType(Expr e, Type type) { - type = e.getType() and - e.getType() instanceof UnknownType -} - -query CallSignatureType abstractSignature() { result.isAbstract() } - -query UnionType unionIndex(Type element, int i) { result.getElementType(i) = element } - -query BlockStmt getAStaticInitializerBlock(ClassDefinition cls) { - result = cls.getAStaticInitializerBlock() -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tsconfig.json b/javascript/ql/test/library-tests/TypeScript/Types/tsconfig.json deleted file mode 100644 index 2235cec7f7d4..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "module": "esnext", - "target": "esnext", - "lib": ["dom", "esnext"], - "resolveJsonModule": true, - "moduleSuffixes": [".ios", ""] - } -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts b/javascript/ql/test/library-tests/TypeScript/Types/tst.ts deleted file mode 100644 index 87f876be9d0f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tst.ts +++ /dev/null @@ -1,520 +0,0 @@ -import * as dummy from "./dummy"; - -var numVar: number; - -var num1 = numVar; -var num2 = 5; -var num3 = num1 + num2; - -var strVar: string; -var hello = "hello"; -var world = "world"; -var msg = hello + " " + world; - -function concat(x: string, y: string): string { return x + y; } - -function add(x: number, y: number): number { return x + y; } - -function untyped(x, y) { return x + y; } - -function partialTyped(x, y: string) { return x + y; } - -for (let numFromLoop of [1, 2]) {} - -let array: number[]; - -let voidType: () => void; -let undefinedType: undefined; -let nullType: null = null; -let neverType: () => never; -let symbolType: symbol; -const uniqueSymbolType: unique symbol = null; -let objectType: object; -let intersection: string & {x: string}; -let tuple: [number, string]; - -let tupleWithOptionalElement: [number, string, number?]; -let emptyTuple: []; -let tupleWithRestElement: [number, ...string[]]; -let tupleWithOptionalAndRestElements: [number, string?, ...number[]]; -let unknownType: unknown; - -let constArrayLiteral = [1, 2] as const; -let constObjectLiteral = { foo: "foo" } as const; - - -try { } -catch (e: unknown) { - if (typeof e === "string") { - let b : string = e; - } -} - - -interface NonAbstractDummy { - getArea(): number; -} - -interface HasArea { - getArea(): number; -} - -// abstract construct signature! -let Ctor: abstract new () => HasArea = Shape; - -type MyUnion = {myUnion: true} | {stillMyUnion: true}; -let union1: MyUnion = {myUnion: true}; - -type MyUnion2 = MyUnion | {yetAnotherType: true}; -let union2: MyUnion2 = {yetAnotherType: true}; - -module TS43 { - // TypeScript 4.3 setter/getter types - interface ThingI { - get size(): number - set size(value: number | string | boolean); - } - - export class Thing implements ThingI { - #size = 0; - - get size(): number { - return this.#size; - } - - set size(value: string | number | boolean) { - this.#size = Number(value); - } - } - - // overrides - class Super { - random(): number { - return 4; - } - } - - class Sub extends Super { - override random(): number { - return super.random() * 10; - } - } - - // inference of template strings. - function bar(s: string): `hello ${string}` { - // Previously an error, now works! - return `hello ${s}`; - } - - declare let s1: `${number}-${number}-${number}`; - declare let s2: `1-2-3`; - declare let s3: `${number}-2-3`; - s1 = s2; - s1 = s3; - - // private methods - class Foo { - #someMethod(): number { - return 42; - } - - get #someValue(): number { - return 100; - } - - publicMethod() { - this.#someMethod(); - return this.#someValue; - } - } -} - -module TS44 { - function foo(arg: unknown) { - const argIsString = typeof arg === "string"; - if (argIsString) { - const upper = arg.toUpperCase(); - } - } - - type Shape = - | { kind: "circle", radius: number } - | { kind: "square", sideLength: number }; - - function side(shape: Shape): number { - const { kind } = shape; - - if (kind === "circle") { return shape.radius;} - else { return shape.sideLength; } - } - - function symbolIndex() { - interface Colors { - [sym: symbol]: number; - [key: string]: string; - [num: number]: boolean; - } - - let colors: Colors = {}; - const red = colors[Symbol("red")]; - const green = colors["green"]; - const blue = colors[2]; - } - - function stringPatternIndex() { - interface Foo { - [key: `foo-${number}`]: number; - } - var bla : Foo = {}; - const bar = bla[`foo-1`]; - - interface Data { - [optName: string | symbol]: boolean; - } - - const data: Data = {}; - const baz = data["foo"]; - } - - class Foo { - static #count = 0; - - get count() { - return Foo.#count; - } - static { - Foo.#count += 3; - } - static { - var count = Foo.#count; - } - - } -} - -module TS45 { - // A = string - type A = Awaited>; - - // B = number - type B = Awaited>>; - - // C = boolean | number - type C = Awaited>; - - export interface Success { - type: `${string}Success`; - body: string; - } - - export interface Error { - type: `${string}Error`; - message: string; - } - - export function handler(r: Success | Error) { - if (r.type === "HttpSuccess") { - // 'r' has type 'Success' - let token = r.body; - } - } - - class Person { - #name: string; - constructor(name: string) { - this.#name = name; - } - - equals(other: unknown) { - return other && - typeof other === "object" && - #name in other && // <- this is new! - this.#name === other.#name; // <- other has type Person here. - } - } -} - -import * as Foo3 from "./something.json" with { type: "json" }; -var foo = Foo3.foo; - -module TS46 { - class Base {} - - class Derived extends Base { - myProp = true; - - constructor() { - console.log("Doing something before super()"); - super(); - } - } - - type Action = - | { kind: "NumberContents"; payload: number } - | { kind: "StringContents"; payload: string }; - - function processAction(action: Action) { - const { kind, payload } = action; - if (kind === "NumberContents") { - console.log(payload.toFixed()); // <- number - } else if (kind === "StringContents") { - console.log(payload.toLowerCase()); // <- string - } - } - - interface TypeMap { - number: number; - string: string; - boolean: boolean; - } - - type UnionRecord

= { - [K in P]: { - kind: K; - f: (p: TypeMap[K]) => void; - }; - }[P]; - - function processRecord(record: UnionRecord) { - record.f(record.v); - } - - processRecord({ - kind: "string", - f: (val) => { - console.log(val.toUpperCase()); // <- string - }, - }); - - type Func = (...args: ["a", number] | ["b", string]) => void; - - const f1: Func = (kind, payload) => { - if (kind === "a") { - payload.toFixed(); // <- number - } - }; -} - -const key = Symbol(); - -const numberOrString = Math.random() < 0.5 ? 42 : "hello"; - -let obj = { - [key]: numberOrString, -}; - -if (typeof obj[key] === "string") { - let str = obj[key]; // <- string - str.toUpperCase(); -} - -////////// - -function f(arg: { - produce: (n: string) => T, - consume: (x: T) => void } -): void {}; - -f({ - produce: n => n, // <- (n: string) => string - consume: x => x.toLowerCase() -}); - -/////////// - -const ErrorMap = Map; - -const errorMap = new ErrorMap(); // <- Map - -//////////// - -type FirstString = - T extends [infer S extends string, ...unknown[]] - ? S - : never; - -type F = FirstString<['a' | 'b', number, boolean]>; - -const a: F = 'a'; // <- 'a' | 'b' - -//////////// - -interface State { - get: () => T; - set: (value: T) => void; -} - -const state: State = { - get: () => 42, - set: (value) => { } -} - -const fortyTwo = state.get(); // <- number - -///////////////// - -import tstModuleES from './tstModuleES.mjs'; - -console.log(tstModuleES()); - -import { tstModuleCJS } from './tstModuleCJS.cjs'; - -console.log(tstModuleCJS()); - -///////////////// - -// test file resolution order (see tsconfig: moduleSuffixes setting) - -import * as A from './tstSuffixA'; - -console.log(A.resolvedFile()); // <- 'tstSuffixA.ts' - -import * as B from './tstSuffixB'; - -console.log(B.resolvedFile()); // <- 'tstSuffixB.ios.ts' - - -///////////////// - -module TS48 { - // SomeNum used to be 'number'; now it's '100'. - type SomeNum = "100" extends `${infer U extends number}` ? U : never; - - declare function chooseRandomly(x: T, y: T): T; - - let [a, b, c] = chooseRandomly([42, true, "hi!"], [0, false, "bye!"]); -} - -///////////////// - -module TS49 { - type Colors = "red" | "green" | "blue"; - - type RGB = [red: number, green: number, blue: number]; - - const palette = { - red: [255, 0, 0], - green: "#00ff00", - bleu: [0, 0, 255], - } satisfies Record; - - // Both of these methods are still accessible! - const redComponent = palette.red.at(0); - - interface RGBObj { - red: number; - } - - interface HSVObj { - hue: number; - } - - function setColor(color: RGBObj | HSVObj) { - if ("hue" in color) { - let h = color; // <- HSVObj - } - } - - // auto-accessors - class Person { - accessor name: string; // behaves as a normal field for our purposes - - constructor(name: string) { - this.name = name; - } - } -} - -///////////////// - -module TS50 { - function loggedMethod( - target: (this: This, ...args: Args) => Return, - context: ClassMethodDecoratorContext Return> - ) { - const methodName = String(context.name); - - function replacementMethod(this: This, ...args: Args): Return { - console.log(`LOG: Entering method '${methodName}'.`) - const result = target.call(this, ...args); - console.log(`LOG: Exiting method '${methodName}'.`) - return result; - } - - return replacementMethod; - } - - class Person { - name: string; - constructor(name: string) { - this.name = name; - } - - @loggedMethod("") - greet() { - console.log(`Hello, my name is ${this.name}.`); - return 2; - } - } - - const p = new Person("John").greet(); // <- number, part of well-typed decorators in TS 5.0. - - declare function myConstIdFunction(args: T): T; - - // foo is readonly ["a", "b", "c"] - const foo = myConstIdFunction(["a", "b" ,"c"]); - - const b = foo[1]; // <- "b" -} - -///////////////// - -module TS52 { - class SomeClass { - @((_target, _context) => {}) - foo = 123; - } - - console.log(SomeClass[Symbol.metadata]); // <- has type DecoratorMetadataObject - - // named and anonymous tuple elements. - type Pair3 = [first: T, T]; - - console.log(["hello", "world"] satisfies Pair3); -} - -module TS54 { - function createStreetLight(colors: C[], defaultColor?: NoInfer) { - return colors[0]; - } - - createStreetLight(["red", "yellow", "green"], "yellow"); - - const myObj = Object.groupBy([0, 1, 2, 3, 4, 5], (num, index) => { - return num % 2 === 0 ? "even": "odd"; - }); -} - -module TS55 { - const strings = (["foo", 123]) - .filter(s => typeof s === "string"); - - for (const str of strings) { - str.toLowerCase(); // <- string in 5.5, string | number in 5.4 - } - - function f1(obj: Record, key: string) { - if (typeof obj[key] === "string") { - var str = obj[key].toUpperCase(); // Now okay, previously was error - } - } -} - -namespace TS57{ - declare const a: symbol; - export class A { - [a]() { return 1 }; - } - - declare const e1: A[typeof a]; // Now okay, previously was compilation error TS2538: Type 'symbol' cannot be used as an index type. -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tstModuleCJS.cts b/javascript/ql/test/library-tests/TypeScript/Types/tstModuleCJS.cts deleted file mode 100644 index c764c1e1243f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tstModuleCJS.cts +++ /dev/null @@ -1,3 +0,0 @@ -export function tstModuleCJS(): 'a' | 'b' { - return Math.random() > 0.5 ? 'a' : 'b'; -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tstModuleES.mts b/javascript/ql/test/library-tests/TypeScript/Types/tstModuleES.mts deleted file mode 100644 index cf735d1bb493..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tstModuleES.mts +++ /dev/null @@ -1,3 +0,0 @@ -export default function tstModuleES(): 'a' | 'b' { - return Math.random() > 0.5 ? 'a' : 'b'; -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixA.ts b/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixA.ts deleted file mode 100644 index ffe0b8114924..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixA.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function resolvedFile(): 'tstSuffixA.ts' { - return 'tstSuffixA.ts'; -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ios.ts b/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ios.ts deleted file mode 100644 index 04463fc7699f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ios.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function resolvedFile(): 'tstSuffixB.ios.ts' { - return 'tstSuffixB.ios.ts'; -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ts b/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ts deleted file mode 100644 index cdb26f8f6146..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/tstSuffixB.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function resolvedFile(): 'tstSuffixB.ts' { - return 'tstSuffixB.ts'; -} diff --git a/javascript/ql/test/library-tests/TypeScript/Types/type_alias.ts b/javascript/ql/test/library-tests/TypeScript/Types/type_alias.ts deleted file mode 100644 index d13eb159754f..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/type_alias.ts +++ /dev/null @@ -1,27 +0,0 @@ -type B = boolean; - -var b: B; - -type ValueOrArray = T | Array>; - -var c: ValueOrArray; - -type Json = - | string - | number - | boolean - | null - | { [property: string]: Json } - | Json[]; - -var json: Json; - -type VirtualNode = - | string - | [string, { [key: string]: any }, ...VirtualNode[]]; - -const myNode: VirtualNode = - ["div", { id: "parent" }, - ["div", { id: "first-child" }, "I'm the first child"], - ["div", { id: "second-child" }, "I'm the second child"] - ]; diff --git a/javascript/ql/test/library-tests/TypeScript/Types/type_definition_objects.ts b/javascript/ql/test/library-tests/TypeScript/Types/type_definition_objects.ts deleted file mode 100644 index b365d7ecbbed..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/type_definition_objects.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as dummy from "./dummy"; - -export class C {} -let classObj = C; - -export enum E {} -let enumObj = E; - -export namespace N {;} -let namespaceObj = N; diff --git a/javascript/ql/test/library-tests/TypeScript/Types/type_definitions.ts b/javascript/ql/test/library-tests/TypeScript/Types/type_definitions.ts deleted file mode 100644 index f9e32ded1258..000000000000 --- a/javascript/ql/test/library-tests/TypeScript/Types/type_definitions.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as dummy from "./dummy"; - -interface I { - x: S; -} -let i: I - -class C { - x: T -} -let c: C; - -enum Color { - red, green, blue -} -let color: Color; - -enum EnumWithOneMember { member } -let e: EnumWithOneMember; - -type Alias = T[]; -let aliasForNumberArray: Alias; From 1cab99290e1cd2d33787b91eaf53d58283a40975 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 2 Jun 2025 16:41:34 +0200 Subject: [PATCH 16/32] JS: Remove unneeded integration test --- javascript/ql/integration-tests/no-types/foo.ts | 1 - javascript/ql/integration-tests/no-types/javascript.expected | 0 javascript/ql/integration-tests/no-types/javascript.ql | 5 ----- javascript/ql/integration-tests/no-types/test.py | 2 -- javascript/ql/integration-tests/no-types/tsconfig.json | 1 - 5 files changed, 9 deletions(-) delete mode 100644 javascript/ql/integration-tests/no-types/foo.ts delete mode 100644 javascript/ql/integration-tests/no-types/javascript.expected delete mode 100644 javascript/ql/integration-tests/no-types/javascript.ql delete mode 100755 javascript/ql/integration-tests/no-types/test.py delete mode 100644 javascript/ql/integration-tests/no-types/tsconfig.json diff --git a/javascript/ql/integration-tests/no-types/foo.ts b/javascript/ql/integration-tests/no-types/foo.ts deleted file mode 100644 index a443ec59b123..000000000000 --- a/javascript/ql/integration-tests/no-types/foo.ts +++ /dev/null @@ -1 +0,0 @@ -export const foo: { bar: number } = { bar: 42}; \ No newline at end of file diff --git a/javascript/ql/integration-tests/no-types/javascript.expected b/javascript/ql/integration-tests/no-types/javascript.expected deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/javascript/ql/integration-tests/no-types/javascript.ql b/javascript/ql/integration-tests/no-types/javascript.ql deleted file mode 100644 index 9bb497c687c4..000000000000 --- a/javascript/ql/integration-tests/no-types/javascript.ql +++ /dev/null @@ -1,5 +0,0 @@ -import javascript - -from Expr e, Type t -where t = e.getType() -select e, t diff --git a/javascript/ql/integration-tests/no-types/test.py b/javascript/ql/integration-tests/no-types/test.py deleted file mode 100755 index 2c3862227aa9..000000000000 --- a/javascript/ql/integration-tests/no-types/test.py +++ /dev/null @@ -1,2 +0,0 @@ -def test(codeql, javascript): - codeql.database.create(extractor_option="skip_types=true") diff --git a/javascript/ql/integration-tests/no-types/tsconfig.json b/javascript/ql/integration-tests/no-types/tsconfig.json deleted file mode 100644 index 9e26dfeeb6e6..000000000000 --- a/javascript/ql/integration-tests/no-types/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file From 07f84a5add596492eeb8a516ae1090c0d5ed4430 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 12:40:56 +0200 Subject: [PATCH 17/32] JS: Remove an unnecessary import --- javascript/ql/lib/semmle/javascript/TypeScript.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/TypeScript.qll b/javascript/ql/lib/semmle/javascript/TypeScript.qll index 350efcea18eb..0a093dc9f039 100644 --- a/javascript/ql/lib/semmle/javascript/TypeScript.qll +++ b/javascript/ql/lib/semmle/javascript/TypeScript.qll @@ -1,5 +1,4 @@ import javascript -private import semmle.javascript.internal.UnderlyingTypes /** * A statement that defines a namespace, that is, a namespace declaration or enum declaration. From e323833bc3505cdfd59c9d61ad4f70c264ef2fa0 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 12:57:25 +0200 Subject: [PATCH 18/32] JS: Fix qldoc coverage --- javascript/ql/lib/semmle/javascript/internal/NameResolution.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 7496b6c0482a..2397716bd58a 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -17,6 +17,7 @@ module NameResolution { * A node in a graph which we use to perform name and type resolution. */ class Node extends NodeBase { + /** Gets a string representation of this node. */ string toString() { result = this.(AstNode).toString() or @@ -25,6 +26,7 @@ module NameResolution { result = this.(JSDocTypeExpr).toString() } + /** Gets the location of this node. */ Location getLocation() { result = this.(AstNode).getLocation() or From 8efa38be79b1f7586622e3e263524f708916406f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 14:53:05 +0200 Subject: [PATCH 19/32] JS: Change default TypeScript extraction mode to basic --- javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index f96211bd5c41..341313e15b53 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -239,7 +239,7 @@ public AutoBuild() { this.outputConfig = new ExtractorOutputConfig(LegacyLanguage.JAVASCRIPT); this.trapCache = ITrapCache.fromExtractorOptions(); this.typeScriptMode = - getEnumFromEnvVar("LGTM_INDEX_TYPESCRIPT", TypeScriptMode.class, TypeScriptMode.FULL); + getEnumFromEnvVar("LGTM_INDEX_TYPESCRIPT", TypeScriptMode.class, TypeScriptMode.BASIC); this.defaultEncoding = getEnvVar("LGTM_INDEX_DEFAULT_ENCODING"); this.installDependencies = Boolean.valueOf(getEnvVar("LGTM_INDEX_TYPESCRIPT_INSTALL_DEPS")); this.virtualSourceRoot = makeVirtualSourceRoot(); From 74b817b6425d8caf2e49958d5cc032313deeb015 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 24 Jun 2025 17:16:06 +0200 Subject: [PATCH 20/32] JS: Remove code path for TypeScript full extraction --- .../lib/typescript/src/ast_extractor.ts | 206 +-- .../extractor/lib/typescript/src/common.ts | 104 +- .../extractor/lib/typescript/src/main.ts | 356 +---- .../lib/typescript/src/type_table.ts | 1423 ----------------- .../com/semmle/js/extractor/AutoBuild.java | 95 +- .../src/com/semmle/js/extractor/Main.java | 60 +- .../semmle/ts/extractor/TypeExtractor.java | 330 ---- .../semmle/ts/extractor/TypeScriptParser.java | 107 -- .../com/semmle/ts/extractor/TypeTable.java | 119 -- 9 files changed, 49 insertions(+), 2751 deletions(-) delete mode 100644 javascript/extractor/lib/typescript/src/type_table.ts delete mode 100644 javascript/extractor/src/com/semmle/ts/extractor/TypeExtractor.java delete mode 100644 javascript/extractor/src/com/semmle/ts/extractor/TypeTable.java diff --git a/javascript/extractor/lib/typescript/src/ast_extractor.ts b/javascript/extractor/lib/typescript/src/ast_extractor.ts index 8c34c9997ac9..3dbc8a52d641 100644 --- a/javascript/extractor/lib/typescript/src/ast_extractor.ts +++ b/javascript/extractor/lib/typescript/src/ast_extractor.ts @@ -10,7 +10,6 @@ export interface AugmentedSourceFile extends ts.SourceFile { /** Internal property that we expose as a workaround. */ redirectInfo?: object | null; $tokens?: Token[]; - $symbol?: number; $lineStarts?: ReadonlyArray; } @@ -18,11 +17,6 @@ export interface AugmentedNode extends ts.Node { $pos?: any; $end?: any; $declarationKind?: string; - $type?: number; - $symbol?: number; - $resolvedSignature?: number; - $overloadIndex?: number; - $declaredSignature?: number; } export type AugmentedPos = number; @@ -73,7 +67,7 @@ function tryGetTypeOfNode(typeChecker: ts.TypeChecker, node: AugmentedNode): ts. } catch (e) { let sourceFile = node.getSourceFile(); let { line, character } = sourceFile.getLineAndCharacterOfPosition(node.pos); - console.warn(`Could not compute type of ${ts.SyntaxKind[node.kind]} at ${sourceFile.fileName}:${line+1}:${character+1}`); + console.warn(`Could not compute type of ${ts.SyntaxKind[node.kind]} at ${sourceFile.fileName}:${line + 1}:${character + 1}`); return null; } } @@ -157,17 +151,6 @@ export function augmentAst(ast: AugmentedSourceFile, code: string, project: Proj }); } - let typeChecker = project && project.program.getTypeChecker(); - let typeTable = project && project.typeTable; - - // Associate a symbol with the AST node root, in case it is a module. - if (typeTable != null) { - let symbol = typeChecker.getSymbolAtLocation(ast); - if (symbol != null) { - ast.$symbol = typeTable.getSymbolId(symbol); - } - } - visitAstNode(ast); function visitAstNode(node: AugmentedNode) { ts.forEachChild(node, visitAstNode); @@ -190,192 +173,5 @@ export function augmentAst(ast: AugmentedSourceFile, code: string, project: Proj node.$declarationKind = "var"; } } - - if (typeChecker != null) { - if (isTypedNode(node) && !typeTable.skipExtractingTypes) { - let contextualType = isContextuallyTypedNode(node) - ? typeChecker.getContextualType(node) - : null; - let type = contextualType || tryGetTypeOfNode(typeChecker, node); - if (type != null) { - let parent = node.parent; - let unfoldAlias = ts.isTypeAliasDeclaration(parent) && node === parent.type; - let id = typeTable.buildType(type, unfoldAlias); - if (id != null) { - node.$type = id; - } - } - // Extract the target call signature of a function call. - // In case the callee is overloaded or generic, this is not something we can - // derive from the callee type in QL. - if (ts.isCallOrNewExpression(node)) { - let kind = ts.isCallExpression(node) ? ts.SignatureKind.Call : ts.SignatureKind.Construct; - let resolvedSignature = typeChecker.getResolvedSignature(node); - if (resolvedSignature != null) { - let resolvedId = typeTable.getSignatureId(kind, resolvedSignature); - if (resolvedId != null) { - (node as AugmentedNode).$resolvedSignature = resolvedId; - } - let declaration = resolvedSignature.declaration; - if (declaration != null) { - // Find the generic signature, i.e. without call-site type arguments substituted, - // but with overloading resolved. - let calleeType = typeChecker.getTypeAtLocation(node.expression); - if (calleeType != null && declaration != null) { - let calleeSignatures = typeChecker.getSignaturesOfType(calleeType, kind); - for (let i = 0; i < calleeSignatures.length; ++i) { - if (calleeSignatures[i].declaration === declaration) { - (node as AugmentedNode).$overloadIndex = i; - break; - } - } - } - // Extract the symbol so the declaration can be found from QL. - let name = (declaration as any).name; - let symbol = name && typeChecker.getSymbolAtLocation(name); - if (symbol != null) { - (node as AugmentedNode).$symbol = typeTable.getSymbolId(symbol); - } - } - } - } - } - let symbolNode = - isNamedNodeWithSymbol(node) ? node.name : - ts.isImportDeclaration(node) ? node.moduleSpecifier : - ts.isExternalModuleReference(node) ? node.expression : - null; - if (symbolNode != null) { - let symbol = typeChecker.getSymbolAtLocation(symbolNode); - if (symbol != null) { - node.$symbol = typeTable.getSymbolId(symbol); - } - } - if (ts.isTypeReferenceNode(node)) { - // For type references we inject a symbol on each part of the name. - // We traverse each node in the name here since we know these are part of - // a type annotation. This means we don't have to do it for all identifiers - // and qualified names, which would extract more information than we need. - let namePart: (ts.EntityName & AugmentedNode) = node.typeName; - while (ts.isQualifiedName(namePart)) { - let symbol = typeChecker.getSymbolAtLocation(namePart.right); - if (symbol != null) { - namePart.$symbol = typeTable.getSymbolId(symbol); - } - - // Traverse into the prefix. - namePart = namePart.left; - } - let symbol = typeChecker.getSymbolAtLocation(namePart); - if (symbol != null) { - namePart.$symbol = typeTable.getSymbolId(symbol); - } - } - if (ts.isFunctionLike(node)) { - let signature = typeChecker.getSignatureFromDeclaration(node); - if (signature != null) { - let kind = ts.isConstructSignatureDeclaration(node) || ts.isConstructorDeclaration(node) - ? ts.SignatureKind.Construct : ts.SignatureKind.Call; - let id = typeTable.getSignatureId(kind, signature); - if (id != null) { - (node as AugmentedNode).$declaredSignature = id; - } - } - } - } - } -} - -type NamedNodeWithSymbol = AugmentedNode & (ts.ClassDeclaration | ts.InterfaceDeclaration - | ts.TypeAliasDeclaration | ts.EnumDeclaration | ts.EnumMember | ts.ModuleDeclaration | ts.FunctionDeclaration - | ts.MethodDeclaration | ts.MethodSignature); - -/** - * True if the given AST node has a name, and should be associated with a symbol. - */ -function isNamedNodeWithSymbol(node: ts.Node): node is NamedNodeWithSymbol { - switch (node.kind) { - case ts.SyntaxKind.ClassDeclaration: - case ts.SyntaxKind.InterfaceDeclaration: - case ts.SyntaxKind.TypeAliasDeclaration: - case ts.SyntaxKind.EnumDeclaration: - case ts.SyntaxKind.EnumMember: - case ts.SyntaxKind.ModuleDeclaration: - case ts.SyntaxKind.FunctionDeclaration: - case ts.SyntaxKind.MethodDeclaration: - case ts.SyntaxKind.MethodSignature: - return true; } - return false; -} - -/** - * True if the given AST node has a type. - */ -function isTypedNode(node: ts.Node): boolean { - switch (node.kind) { - case ts.SyntaxKind.ArrayLiteralExpression: - case ts.SyntaxKind.ArrowFunction: - case ts.SyntaxKind.AsExpression: - case ts.SyntaxKind.SatisfiesExpression: - case ts.SyntaxKind.AwaitExpression: - case ts.SyntaxKind.BinaryExpression: - case ts.SyntaxKind.CallExpression: - case ts.SyntaxKind.ClassExpression: - case ts.SyntaxKind.ClassDeclaration: - case ts.SyntaxKind.CommaListExpression: - case ts.SyntaxKind.ConditionalExpression: - case ts.SyntaxKind.Constructor: - case ts.SyntaxKind.DeleteExpression: - case ts.SyntaxKind.ElementAccessExpression: - case ts.SyntaxKind.ExpressionStatement: - case ts.SyntaxKind.ExpressionWithTypeArguments: - case ts.SyntaxKind.FalseKeyword: - case ts.SyntaxKind.FunctionDeclaration: - case ts.SyntaxKind.FunctionExpression: - case ts.SyntaxKind.GetAccessor: - case ts.SyntaxKind.Identifier: - case ts.SyntaxKind.IndexSignature: - case ts.SyntaxKind.JsxExpression: - case ts.SyntaxKind.LiteralType: - case ts.SyntaxKind.MethodDeclaration: - case ts.SyntaxKind.MethodSignature: - case ts.SyntaxKind.NewExpression: - case ts.SyntaxKind.NonNullExpression: - case ts.SyntaxKind.NoSubstitutionTemplateLiteral: - case ts.SyntaxKind.NumericLiteral: - case ts.SyntaxKind.ObjectKeyword: - case ts.SyntaxKind.ObjectLiteralExpression: - case ts.SyntaxKind.OmittedExpression: - case ts.SyntaxKind.ParenthesizedExpression: - case ts.SyntaxKind.PartiallyEmittedExpression: - case ts.SyntaxKind.PostfixUnaryExpression: - case ts.SyntaxKind.PrefixUnaryExpression: - case ts.SyntaxKind.PropertyAccessExpression: - case ts.SyntaxKind.RegularExpressionLiteral: - case ts.SyntaxKind.SetAccessor: - case ts.SyntaxKind.StringLiteral: - case ts.SyntaxKind.TaggedTemplateExpression: - case ts.SyntaxKind.TemplateExpression: - case ts.SyntaxKind.TemplateHead: - case ts.SyntaxKind.TemplateMiddle: - case ts.SyntaxKind.TemplateSpan: - case ts.SyntaxKind.TemplateTail: - case ts.SyntaxKind.TrueKeyword: - case ts.SyntaxKind.TypeAssertionExpression: - case ts.SyntaxKind.TypeLiteral: - case ts.SyntaxKind.TypeOfExpression: - case ts.SyntaxKind.VoidExpression: - case ts.SyntaxKind.YieldExpression: - return true; - default: - return ts.isTypeNode(node); - } -} - -type ContextuallyTypedNode = (ts.ArrayLiteralExpression | ts.ObjectLiteralExpression) & AugmentedNode; - -function isContextuallyTypedNode(node: ts.Node): node is ContextuallyTypedNode { - let kind = node.kind; - return kind === ts.SyntaxKind.ArrayLiteralExpression || kind === ts.SyntaxKind.ObjectLiteralExpression; } diff --git a/javascript/extractor/lib/typescript/src/common.ts b/javascript/extractor/lib/typescript/src/common.ts index c660b7bcb5e3..9276a567bb08 100644 --- a/javascript/extractor/lib/typescript/src/common.ts +++ b/javascript/extractor/lib/typescript/src/common.ts @@ -1,54 +1,26 @@ import * as ts from "./typescript"; -import { TypeTable } from "./type_table"; -import * as pathlib from "path"; -import { VirtualSourceRoot } from "./virtual_source_root"; - -/** - * Extracts the package name from the prefix of an import string. - */ -const packageNameRex = /^(?:@[\w.-]+[/\\]+)?\w[\w.-]*(?=[/\\]|$)/; -const extensions = ['.ts', '.tsx', '.d.ts', '.js', '.jsx']; - -function getPackageName(importString: string) { - let packageNameMatch = packageNameRex.exec(importString); - if (packageNameMatch == null) return null; - let packageName = packageNameMatch[0]; - if (packageName.charAt(0) === '@') { - packageName = packageName.replace(/[/\\]+/g, '/'); // Normalize slash after the scope. - } - return packageName; -} export class Project { public program: ts.Program = null; private host: ts.CompilerHost; - private resolutionCache: ts.ModuleResolutionCache; constructor( - public tsConfig: string, - public config: ts.ParsedCommandLine, - public typeTable: TypeTable, - public packageEntryPoints: Map, - public virtualSourceRoot: VirtualSourceRoot) { - - this.resolveModuleNames = this.resolveModuleNames.bind(this); + public tsConfig: string, + public config: ts.ParsedCommandLine, + public packageEntryPoints: Map) { - this.resolutionCache = ts.createModuleResolutionCache(pathlib.dirname(tsConfig), ts.sys.realpath, config.options); let host = ts.createCompilerHost(config.options, true); - host.resolveModuleNames = this.resolveModuleNames; host.trace = undefined; // Disable tracing which would otherwise go to standard out this.host = host; } public unload(): void { - this.typeTable.releaseProgram(); this.program = null; } public load(): void { const { config, host } = this; this.program = ts.createProgram(config.fileNames, config.options, host); - this.typeTable.setProgram(this.program, this.virtualSourceRoot); } /** @@ -60,74 +32,4 @@ export class Project { this.unload(); this.load(); } - - /** - * Override for module resolution in the TypeScript compiler host. - */ - private resolveModuleNames( - moduleNames: string[], - containingFile: string, - reusedNames: string[], - redirectedReference: ts.ResolvedProjectReference, - options: ts.CompilerOptions) { - - let oppositePath = - this.virtualSourceRoot.toVirtualPath(containingFile) || - this.virtualSourceRoot.fromVirtualPath(containingFile); - - const { host, resolutionCache } = this; - return moduleNames.map((moduleName) => { - let redirected = this.redirectModuleName(moduleName, containingFile, options); - if (redirected != null) return redirected; - if (oppositePath != null) { - // If the containing file is in the virtual source root, try resolving from the real source root, and vice versa. - redirected = ts.resolveModuleName(moduleName, oppositePath, options, host, resolutionCache).resolvedModule; - if (redirected != null) return redirected; - } - return ts.resolveModuleName(moduleName, containingFile, options, host, resolutionCache).resolvedModule; - }); - } - - /** - * Returns the path that the given import string should be redirected to, or null if it should - * fall back to standard module resolution. - */ - private redirectModuleName(moduleName: string, containingFile: string, options: ts.CompilerOptions): ts.ResolvedModule { - // Get a package name from the leading part of the module name, e.g. '@scope/foo' from '@scope/foo/bar'. - let packageName = getPackageName(moduleName); - if (packageName == null) return null; - - // Get the overridden location of this package, if one exists. - let packageEntryPoint = this.packageEntryPoints.get(packageName); - if (packageEntryPoint == null) return null; - - // If the requested module name is exactly the overridden package name, - // return the entry point file (it is not necessarily called `index.ts`). - if (moduleName === packageName) { - return { resolvedFileName: packageEntryPoint, isExternalLibraryImport: true }; - } - - // Get the suffix after the package name, e.g. the '/bar' in '@scope/foo/bar'. - let suffix = moduleName.substring(packageName.length); - - // Resolve the suffix relative to the package directory. - let packageDir = pathlib.dirname(packageEntryPoint); - let joinedPath = pathlib.join(packageDir, suffix); - - // Add implicit '/index' - if (ts.sys.directoryExists(joinedPath)) { - joinedPath = pathlib.join(joinedPath, 'index'); - } - - // Try each recognized extension. We must not return a file whose extension is not - // recognized by TypeScript. - for (let ext of extensions) { - let candidate = joinedPath.endsWith(ext) ? joinedPath : (joinedPath + ext); - if (ts.sys.fileExists(candidate)) { - return { resolvedFileName: candidate, isExternalLibraryImport: true }; - } - } - - return null; - } } diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index d34f516cf554..eb888a00ea8f 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -31,14 +31,12 @@ "use strict"; -import * as fs from "fs"; import * as pathlib from "path"; import * as readline from "readline"; import * as ts from "./typescript"; import * as ast_extractor from "./ast_extractor"; import { Project } from "./common"; -import { TypeTable } from "./type_table"; import { VirtualSourceRoot } from "./virtual_source_root"; // Remove limit on stack trace depth. @@ -55,19 +53,6 @@ interface LoadCommand { packageEntryPoints: [string, string][]; packageJsonFiles: [string, string][]; } -interface OpenProjectCommand extends LoadCommand { - command: "open-project"; -} -interface GetOwnFilesCommand extends LoadCommand { - command: "get-own-files"; -} -interface CloseProjectCommand { - command: "close-project"; - tsConfig: string; -} -interface GetTypeTableCommand { - command: "get-type-table"; -} interface ResetCommand { command: "reset"; } @@ -81,13 +66,11 @@ interface PrepareFilesCommand { interface GetMetadataCommand { command: "get-metadata"; } -type Command = ParseCommand | OpenProjectCommand | GetOwnFilesCommand | CloseProjectCommand - | GetTypeTableCommand | ResetCommand | QuitCommand | PrepareFilesCommand | GetMetadataCommand; +type Command = ParseCommand | ResetCommand | QuitCommand | PrepareFilesCommand | GetMetadataCommand; /** The state to be shared between commands. */ class State { public project: Project = null; - public typeTable = new TypeTable(); /** List of files that have been requested. */ public pendingFiles: string[] = []; @@ -205,22 +188,18 @@ function checkCycle(root: any) { visit(root); if (path.length > 0) { path.reverse(); - console.log(JSON.stringify({type: "error", message: "Cycle = " + path.join(".")})); + console.log(JSON.stringify({ type: "error", message: "Cycle = " + path.join(".") })); } } /** Property names to extract from the TypeScript AST. */ const astProperties: string[] = [ "$declarationKind", - "$declaredSignature", "$end", "$lineStarts", "$overloadIndex", "$pos", - "$resolvedSignature", - "$symbol", "$tokens", - "$type", "argument", "argumentExpression", "arguments", @@ -392,20 +371,12 @@ function isExtractableSourceFile(ast: ast_extractor.AugmentedSourceFile): boolea * an already-open project, or by parsing the file. */ function getAstForFile(filename: string): ts.SourceFile { - if (state.project != null) { - let ast = state.project.program.getSourceFile(filename); - if (ast != null && isExtractableSourceFile(ast)) { - ast_extractor.augmentAst(ast, ast.text, state.project); - return ast; - } - } - // Fall back to extracting without a project. - let {ast, code} = parseSingleFile(filename); + let { ast, code } = parseSingleFile(filename); ast_extractor.augmentAst(ast, code, null); return ast; } -function parseSingleFile(filename: string): {ast: ts.SourceFile, code: string} { +function parseSingleFile(filename: string): { ast: ts.SourceFile, code: string } { let code = ts.sys.readFile(filename); // create a compiler host that only allows access to `filename` @@ -436,7 +407,7 @@ function parseSingleFile(filename: string): {ast: ts.SourceFile, code: string} { let ast = program.getSourceFile(filename); - return {ast, code}; + return { ast, code }; } /** @@ -507,7 +478,7 @@ function loadTsConfig(command: LoadCommand): LoadedConfig { let virtualExclusions = excludes == null ? [] : [...excludes]; virtualExclusions.push('**/node_modules/**/*'); let virtualResults = ts.sys.readDirectory(virtualDir, extensions, virtualExclusions, includes, depth) - return [ ...originalResults, ...virtualResults ]; + return [...originalResults, ...virtualResults]; }, fileExists: (path: string) => { return ts.sys.fileExists(path) @@ -531,256 +502,6 @@ function loadTsConfig(command: LoadCommand): LoadedConfig { return { config, basePath, packageJsonFiles, packageEntryPoints, virtualSourceRoot, ownFiles }; } -/** - * Returns the list of files included in the given tsconfig.json file's include pattern, - * (not including those only references through imports). - */ -function handleGetFileListCommand(command: GetOwnFilesCommand) { - let { config, ownFiles } = loadTsConfig(command); - - console.log(JSON.stringify({ - type: "file-list", - ownFiles, - })); -} - -function handleOpenProjectCommand(command: OpenProjectCommand) { - let { config, packageEntryPoints, virtualSourceRoot, basePath, ownFiles } = loadTsConfig(command); - - let project = new Project(command.tsConfig, config, state.typeTable, packageEntryPoints, virtualSourceRoot); - project.load(); - - state.project = project; - let program = project.program; - let typeChecker = program.getTypeChecker(); - - let shouldReportDiagnostics = getEnvironmentVariable("SEMMLE_TYPESCRIPT_REPORT_DIAGNOSTICS", v => v.trim().toLowerCase() === "true", false); - let diagnostics = shouldReportDiagnostics - ? program.getSemanticDiagnostics().filter(d => d.category === ts.DiagnosticCategory.Error) - : []; - if (diagnostics.length > 0) { - console.warn('TypeScript: reported ' + diagnostics.length + ' semantic errors.'); - } - for (let diagnostic of diagnostics) { - let text = diagnostic.messageText; - if (text && typeof text !== 'string') { - text = text.messageText; - } - let locationStr = ''; - let { file } = diagnostic; - if (file != null) { - let { line, character } = file.getLineAndCharacterOfPosition(diagnostic.start); - locationStr = `${file.fileName}:${line}:${character}`; - } - console.warn(`TypeScript: ${locationStr} ${text}`); - } - - // Associate external module names with the corresponding file symbols. - // We need these mappings to identify which module a given external type comes from. - // The TypeScript API lets us resolve a module name to a source file, but there is no - // inverse mapping, nor a way to enumerate all known module names. So we discover all - // modules on the type roots (usually "node_modules/@types" but this is configurable). - let typeRoots = ts.getEffectiveTypeRoots(config.options, { - getCurrentDirectory: () => basePath, - }); - - for (let typeRoot of typeRoots || []) { - if (ts.sys.directoryExists(typeRoot)) { - traverseTypeRoot(typeRoot, ""); - } - let virtualTypeRoot = virtualSourceRoot.toVirtualPathIfDirectoryExists(typeRoot); - if (virtualTypeRoot != null) { - traverseTypeRoot(virtualTypeRoot, ""); - } - } - - for (let sourceFile of program.getSourceFiles()) { - addModuleBindingsFromModuleDeclarations(sourceFile); - addModuleBindingsFromFilePath(sourceFile); - } - - /** Concatenates two imports paths. These always use `/` as path separator. */ - function joinModulePath(prefix: string, suffix: string) { - if (prefix.length === 0) return suffix; - if (suffix.length === 0) return prefix; - return prefix + "/" + suffix; - } - - /** - * Traverses a directory that is a type root or contained in a type root, and associates - * module names (i.e. import strings) with files in this directory. - * - * `importPrefix` denotes an import string that resolves to this directory, - * or an empty string if the file itself is a type root. - * - * The `filePath` is a system file path, possibly absolute, whereas `importPrefix` - * is generally short and system-independent, typically just the name of a module. - */ - function traverseTypeRoot(filePath: string, importPrefix: string) { - for (let child of fs.readdirSync(filePath)) { - if (child[0] === ".") continue; - let childPath = pathlib.join(filePath, child); - if (fs.statSync(childPath).isDirectory()) { - traverseTypeRoot(childPath, joinModulePath(importPrefix, child)); - continue; - } - let sourceFile = program.getSourceFile(childPath); - if (sourceFile == null) { - continue; - } - let importPath = getImportPathFromFileInFolder(importPrefix, child); - addModuleBindingFromImportPath(sourceFile, importPath); - } - } - - function getImportPathFromFileInFolder(folder: string, baseName: string) { - let stem = getStem(baseName); - return (stem === "index") - ? folder - : joinModulePath(folder, stem); - } - - /** - * Emits module bindings for a module with relative path `folder/baseName`. - */ - function addModuleBindingFromImportPath(sourceFile: ts.SourceFile, importPath: string) { - let symbol = typeChecker.getSymbolAtLocation(sourceFile); - if (symbol == null) return; // Happens if the source file is not a module. - - let canonicalSymbol = getEffectiveExportTarget(symbol); // Follow `export = X` declarations. - let symbolId = state.typeTable.getSymbolId(canonicalSymbol); - - // Associate the module name with this symbol. - state.typeTable.addModuleMapping(symbolId, importPath); - - // Associate global variable names with this module. - // For each `export as X` declaration, the global X refers to this module. - // Note: the `globalExports` map is stored on the original symbol, not the target of `export=`. - if (symbol.globalExports != null) { - symbol.globalExports.forEach((global: ts.Symbol) => { - state.typeTable.addGlobalMapping(symbolId, global.name); - }); - } - } - - /** - * Returns the basename of `file` without its extension, while treating `.d.ts` as a - * single extension. - */ - function getStem(file: string) { - if (file.endsWith(".d.ts")) { - return pathlib.basename(file, ".d.ts"); - } - if (file.endsWith(".d.mts") || file.endsWith(".d.cts")) { - // We don't extract d.mts or d.cts files, but their symbol can coincide with that of a d.ts file, - // which means any module bindings we generate for it will ultimately be visible in QL. - let base = pathlib.basename(file); - return base.substring(0, base.length - '.d.mts'.length); - } - let base = pathlib.basename(file); - let dot = base.lastIndexOf('.'); - return dot === -1 || dot === 0 ? base : base.substring(0, dot); - } - - /** - * Emits module bindings for a module based on its file path. - * - * This looks for enclosing `node_modules` folders to determine the module name. - * This is needed for modules that ship their own type definitions as opposed to having - * type definitions loaded from a type root (conventionally named `@types/xxx`). - */ - function addModuleBindingsFromFilePath(sourceFile: ts.SourceFile) { - let fullPath = sourceFile.fileName; - let index = fullPath.lastIndexOf('/node_modules/'); - if (index === -1) return; - - let relativePath = fullPath.substring(index + '/node_modules/'.length); - - // Ignore node_modules/@types folders here as they are typically handled as type roots. - if (relativePath.startsWith("@types/")) return; - - // If the enclosing package has a "typings" field, only add module bindings for that file. - let packageJsonFile = getEnclosingPackageJson(fullPath); - if (packageJsonFile != null) { - let json = getPackageJson(packageJsonFile); - let typings = getPackageTypings(packageJsonFile); - if (json != null && typings != null) { - let name = json.name; - if (typings === fullPath && typeof name === 'string') { - addModuleBindingFromImportPath(sourceFile, name); - } else if (typings != null) { - return; // Typings field prevents access to other files in package. - } - } - } - - // Add module bindings relative to package directory. - let { dir, base } = pathlib.parse(relativePath); - addModuleBindingFromImportPath(sourceFile, getImportPathFromFileInFolder(dir, base)); - } - - /** - * Emit module name bindings for external module declarations, i.e: `declare module 'X' {..}` - * These can generally occur anywhere; they may or may not be on the type root path. - */ - function addModuleBindingsFromModuleDeclarations(sourceFile: ts.SourceFile) { - for (let stmt of sourceFile.statements) { - if (ts.isModuleDeclaration(stmt) && ts.isStringLiteral(stmt.name)) { - let symbol = (stmt as any).symbol; - if (symbol == null) continue; - symbol = getEffectiveExportTarget(symbol); - let symbolId = state.typeTable.getSymbolId(symbol); - let moduleName = stmt.name.text; - state.typeTable.addModuleMapping(symbolId, moduleName); - } - } - } - - /** - * If `symbol` refers to a container with an `export = X` declaration, returns - * the target of `X`, otherwise returns `symbol`. - */ - function getEffectiveExportTarget(symbol: ts.Symbol) { - if (symbol.exports != null && symbol.exports.has(ts.InternalSymbolName.ExportEquals)) { - let exportAlias = symbol.exports.get(ts.InternalSymbolName.ExportEquals); - if (exportAlias.flags & ts.SymbolFlags.Alias) { - return typeChecker.getAliasedSymbol(exportAlias); - } - } - return symbol; - } - - // Unlike in the get-own-files command, this command gets all files we can possibly - // extract type information for, including files referenced outside the tsconfig's inclusion pattern. - let allFiles = program.getSourceFiles().map(sf => pathlib.resolve(sf.fileName)); - - console.log(JSON.stringify({ - type: "project-opened", - ownFiles, - allFiles, - })); -} - -function handleCloseProjectCommand(command: CloseProjectCommand) { - if (state.project == null) { - console.log(JSON.stringify({ - type: "error", - message: "No project is open", - })); - return; - } - state.project.unload(); - state.project = null; - console.log(JSON.stringify({type: "project-closed"})); -} - -function handleGetTypeTableCommand(command: GetTypeTableCommand) { - console.log(JSON.stringify({ - type: "type-table", - typeTable: state.typeTable.getTypeTableJson(), - })); -} - function handleResetCommand(command: ResetCommand) { reset(); console.log(JSON.stringify({ @@ -807,8 +528,6 @@ function handleGetMetadataCommand(command: GetMetadataCommand) { function reset() { state = new State(); - state.typeTable.restrictedExpansion = getEnvironmentVariable("SEMMLE_TYPESCRIPT_NO_EXPANSION", v => v.trim().toLowerCase() === "true", true); - state.typeTable.skipExtractingTypes = getEnvironmentVariable("CODEQL_EXTRACTOR_JAVASCRIPT_OPTION_SKIP_TYPES", v => v.trim().toLowerCase() === "true", false); } function getEnvironmentVariable(name: string, parse: (x: string) => T, defaultValue: T) { @@ -848,35 +567,23 @@ function runReadLineInterface() { rl.on("line", (line: string) => { let req: Command = JSON.parse(line); switch (req.command) { - case "parse": - handleParseCommand(req); - break; - case "open-project": - handleOpenProjectCommand(req); - break; - case "get-own-files": - handleGetFileListCommand(req); - break; - case "close-project": - handleCloseProjectCommand(req); - break; - case "get-type-table": - handleGetTypeTableCommand(req); - break; - case "prepare-files": - handlePrepareFilesCommand(req); - break; - case "reset": - handleResetCommand(req); - break; - case "get-metadata": - handleGetMetadataCommand(req); - break; - case "quit": - rl.close(); - break; - default: - throw new Error("Unknown command " + (req as any).command + "."); + case "parse": + handleParseCommand(req); + break; + case "prepare-files": + handlePrepareFilesCommand(req); + break; + case "reset": + handleResetCommand(req); + break; + case "get-metadata": + handleGetMetadataCommand(req); + break; + case "quit": + rl.close(); + break; + default: + throw new Error("Unknown command " + (req as any).command + "."); } }); } @@ -886,23 +593,6 @@ if (process.argv.length > 2) { let argument = process.argv[2]; if (argument === "--version") { console.log("parser-wrapper with TypeScript " + ts.version); - } else if (pathlib.basename(argument) === "tsconfig.json") { - reset(); - handleOpenProjectCommand({ - command: "open-project", - tsConfig: argument, - packageEntryPoints: [], - packageJsonFiles: [], - sourceRoot: null, - virtualSourceRoot: null, - }); - for (let sf of state.project.program.getSourceFiles()) { - if (/lib\..*\.d\.ts/.test(pathlib.basename(sf.fileName)) || pathlib.basename(sf.fileName) === "lib.d.ts") continue; - handleParseCommand({ - command: "parse", - filename: sf.fileName, - }, false); - } } else if (pathlib.extname(argument) === ".ts" || pathlib.extname(argument) === ".tsx") { handleParseCommand({ command: "parse", diff --git a/javascript/extractor/lib/typescript/src/type_table.ts b/javascript/extractor/lib/typescript/src/type_table.ts deleted file mode 100644 index 4a00dfcc9c7f..000000000000 --- a/javascript/extractor/lib/typescript/src/type_table.ts +++ /dev/null @@ -1,1423 +0,0 @@ -import * as ts from "./typescript"; -import { VirtualSourceRoot } from "./virtual_source_root"; - -interface AugmentedSymbol extends ts.Symbol { - parent?: AugmentedSymbol; - - /** Cache of our own symbol ID. */ - $id?: number; -} - -interface AugmentedType extends ts.Type { - /** - * An internal property for predefined types, such as "true", "false", and "object". - */ - intrinsicName?: string; -} - -function isTypeReference(type: ts.Type): type is ts.TypeReference { - return (type.flags & ts.TypeFlags.Object) !== 0 && - ((type as ts.ObjectType).objectFlags & ts.ObjectFlags.Reference) !== 0; -} - -function isTypeVariable(type: ts.Type): type is ts.TypeVariable { - return (type.flags & ts.TypeFlags.TypeVariable) !== 0; -} - -/** - * Returns `true` if the properties of the given type can safely be extracted - * without restricting expansion depth. - * - * This predicate is very approximate, and considers all unions, intersections, - * named types, and mapped types as potentially unsafe. - */ -function isTypeAlwaysSafeToExpand(type: ts.Type): boolean { - let flags = type.flags; - if (flags & ts.TypeFlags.UnionOrIntersection) { - return false; - } - if (flags & ts.TypeFlags.Object) { - let objectType = type as ts.ObjectType; - let objectFlags = objectType.objectFlags; - if (objectFlags & (ts.ObjectFlags.Reference | ts.ObjectFlags.Mapped)) { - return false; - } - } - if (type.aliasSymbol != null) { - return false; - } - return true; -} - -/** - * If `type` is a `this` type, returns the enclosing type. - * Otherwise returns `null`. - */ -function getEnclosingTypeOfThisType(type: ts.TypeVariable): ts.TypeReference { - // A 'this' type is an implicit type parameter to a class or interface. - // The type parameter itself doesn't have any good indicator of being a 'this' type, - // but we can get it like this: - // - the upper bound of the 'this' type parameter is always the enclosing type - // - the enclosing type knows its own 'this' type. - let bound = type.getConstraint(); - if (bound == null) return null; - let target = (bound as ts.TypeReference).target; // undefined if not a TypeReference - if (target == null) return null; - return (target.thisType === type) ? target : null; -} - -const typeDefinitionSymbols = ts.SymbolFlags.Class | ts.SymbolFlags.Interface | - ts.SymbolFlags.TypeAlias | ts.SymbolFlags.EnumMember | ts.SymbolFlags.Enum; - -/** Returns true if the given symbol refers to a type definition. */ -function isTypeDefinitionSymbol(symbol: ts.Symbol) { - return (symbol.flags & typeDefinitionSymbols) !== 0; -} - -/** Gets the nearest enclosing block statement, function body, module body, or top-level. */ -function getEnclosingBlock(node: ts.Node) { - while (true) { - if (node == null) return null; - if (ts.isSourceFile(node) || ts.isFunctionLike(node) || ts.isBlock(node) || ts.isModuleBlock(node)) return node; - node = node.parent; - } -} - -const typeofSymbols = ts.SymbolFlags.Class | ts.SymbolFlags.Namespace | - ts.SymbolFlags.Module | ts.SymbolFlags.Enum | ts.SymbolFlags.EnumMember; - -/** - * Returns true if the given symbol refers to a value that we consider - * a valid target for a `typeof` type. - */ -function isTypeofCandidateSymbol(symbol: ts.Symbol) { - return (symbol.flags & typeofSymbols) !== 0; -} - -const signatureKinds = [ts.SignatureKind.Call, ts.SignatureKind.Construct]; - -/** - * Bitmask of flags set on a signature, but not exposed in the public API. - */ -const enum InternalSignatureFlags { - HasRestParameter = 1 -} - -/** - * Signature interface with some internal properties exposed. - */ -interface AugmentedSignature extends ts.Signature { - flags?: InternalSignatureFlags; -} - -/** - * Encodes property lookup tuples `(baseType, name, property)` as three - * staggered arrays. - */ -interface PropertyLookupTable { - baseTypes: number[]; - names: string[]; - propertyTypes: number[]; -} - -/** - * Encodes `(aliasType, underlyingType)` tuples as two staggered arrays. - * - * Such a tuple denotes that `aliasType` is an alias for `underlyingType`. - */ -interface TypeAliasTable { - aliasTypes: number[]; - underlyingTypes: number[]; -} - -/** - * Encodes type signature tuples `(baseType, kind, index, signature)` as four - * staggered arrays. - */ -interface SignatureTable { - baseTypes: number[]; - kinds: ts.SignatureKind[]; - indices: number[]; - signatures: number[]; -} - -/** - * Enodes `(baseType, propertyType)` tuples as two staggered arrays. - * - * The index key type is not stored in the table - there are separate tables - * for number and string index signatures. - * - * For example, the `(Foo, T)` tuple would be extracted from this sample: - * ``` - * interface Foo { - * [x: string]: T; - * } - * ``` - */ -interface IndexerTable { - baseTypes: number[]; - propertyTypes: number[]; -} - -/** - * Encodes `(symbol, name)` pairs as two staggered arrays. - * - * In general, a table may associate multiple names with a given symbol. - */ -interface SymbolNameTable { - symbols: number[]; - names: string[]; -} - -/** - * Encodes `(symbol, baseTypeSymbol)` pairs as two staggered arrays. - * - * Such a pair associates the canonical name of a type with the canonical name - * of one of its base types. - */ -interface BaseTypeTable { - symbols: number[]; - baseTypeSymbols: number[]; -} - -/** - * Encodes `(symbol, selfType)` pairs as two staggered arrays. - * - * Such a pair associates the canonical name of a type with the self-type of - * that type definition. (e.g `Array` with `Array`). - */ -interface SelfTypeTable { - symbols: number[]; - selfTypes: number[]; -} - -/** - * Denotes whether a type is currently in the worklist ("pending") and whether - * it was discovered in shallow or full context. - * - * Types can be discovered in one of two different contexts: - * - Full context: - * Any type that is the type of an AST node, or is reachable through members of - * such a type, without going through an expansive type. - * - Shallow context: - * Any type that is reachable through the members of an expansive type, - * without following any type references after that. - * - * For example: - * ``` - * interface Expansive { - * expand: Expansive<{x: T}>; - * foo: { bar: T }; - * } - * let instance: Expansive; - * ``` - * The type `Expansive` is discovered in full context, but as it is expansive, - * its members are only discovered in shallow context. - * - * This means `Expansive<{x: number}>` becomes a stub type, a type that has an entity in - * the database, but appears to have no members. - * - * The type `{ bar: number }` is also discovered in shallow context, but because it is - * an "inline type" (not a reference) its members are extracted anyway (in shallow context), - * and will thus appear to have the `bar` property of type `number`. - */ -const enum TypeExtractionState { - /** - * The type is in the worklist and was discovered in shallow context. - */ - PendingShallow, - - /** - * The type has been extracted as a shallow type. - * - * It may later transition to `PendingFull` if it is found that full extraction is warranted. - */ - DoneShallow, - - /** - * The type is in the worklist and is pending full extraction. - */ - PendingFull, - - /** - * The type has been fully extracted. - */ - DoneFull, -} - -/** - * Generates canonical IDs and serialized representations of types. - */ -export class TypeTable { - /** - * Maps type strings to type IDs. The types must be inserted in order, - * so the `n`th type has ID `n`. - * - * A type string is a `;`-separated string consisting of: - * - a tag string such as `union` or `reference`, - * - optionally a symbol ID or kind-specific data (depends on the tag), - * - IDs of child types. - * - * Type strings serve a dual purpose: - * - Canonicalizing types. Two type objects with the same type string are considered identical. - * - Extracting types. The Java-part of the extractor parses type strings to extract data about the type. - */ - private typeIds: Map = new Map(); - private typeToStringValues: string[] = []; - private typeChecker: ts.TypeChecker = null; - - /** - * Needed for TypeChecker.getTypeOfSymbolAtLocation when we don't care about the location. - * There is no way to get the type of a symbol without providing a location, though. - */ - private arbitraryAstNode: ts.Node = null; - - /** - * Maps symbol strings to to symbol IDs. The symbols must be inserted in order, - * so the `n`th symbol has ID `n`. - * - * A symbol string is a `;`-separated string consisting of: - * - a tag string, `root`, `member`, or `other`, - * - an empty string or a `file:pos` string to distinguish this from symbols with other lexical roots, - * - the ID of the parent symbol, or an empty string if this is a root symbol, - * - the unqualified name of the symbol. - * - * Symbol strings serve the same dual purpose as type strings (see `typeIds`). - */ - private symbolIds: Map = new Map(); - - /** - * Maps file names to IDs unique for that file name. - * - * Used to generate short `file:pos` strings in symbol strings. - */ - private fileIds: Map = new Map(); - - /** - * Maps signature strings to signature IDs. The signatures must be inserted in order, - * so the `n`th signature has ID `n`. - * - * A signature string is a `;`-separated string consisting of: - * - a `ts.SignatureKind` value (i.e. the value 0 or 1) - * - number of type parameters - * - number of required parameters - * - ID of the return type - * - interleaved names and bounds (type IDs) of type parameters - * - interleaved names and type IDs of parameters - */ - private signatureIds: Map = new Map(); - - private signatureToStringValues: string[] = []; - - private propertyLookups: PropertyLookupTable = { - baseTypes: [], - names: [], - propertyTypes: [], - }; - - private typeAliases: TypeAliasTable = { - aliasTypes: [], - underlyingTypes: [], - }; - - private signatureMappings: SignatureTable = { - baseTypes: [], - kinds: [], - indices: [], - signatures: [] - }; - - private numberIndexTypes: IndexerTable = { - baseTypes: [], - propertyTypes: [], - }; - - private stringIndexTypes: IndexerTable = { - baseTypes: [], - propertyTypes: [], - }; - - private buildTypeWorklist: [ts.Type, number, boolean][] = []; - - private expansiveTypes: Map = new Map(); - - private moduleMappings: SymbolNameTable = { - symbols: [], - names: [], - }; - private globalMappings: SymbolNameTable = { - symbols: [], - names: [], - }; - - private baseTypes: BaseTypeTable = { - symbols: [], - baseTypeSymbols: [], - }; - - private selfTypes: SelfTypeTable = { - symbols: [], - selfTypes: [], - }; - - /** - * When true, newly discovered types should be extracted as "shallow" types in order - * to prevent expansive types from unfolding into infinitely many types. - * - * @see TypeExtractionState - */ - private isInShallowTypeContext = false; - - /** - * Maps a type ID to the extraction state of that type. - */ - private typeExtractionState: TypeExtractionState[] = []; - - /** - * Number of types we are currently in the process of flattening to a type string. - */ - private typeRecursionDepth = 0; - - /** - * If set to true, all types are considered expansive. - */ - public restrictedExpansion = false; - - /** - * If set to true, skip extracting types. - */ - public skipExtractingTypes = false; - - private virtualSourceRoot: VirtualSourceRoot; - - /** - * Called when a new compiler instance has started. - */ - public setProgram(program: ts.Program, virtualSourceRoot: VirtualSourceRoot) { - this.typeChecker = program.getTypeChecker(); - this.arbitraryAstNode = program.getSourceFiles()[0]; - this.virtualSourceRoot = virtualSourceRoot; - } - - /** - * Called when the compiler instance should be relased from memory. - * - * This can happen because we are done with a project, or because the - * compiler instance needs to be rebooted. - */ - public releaseProgram() { - this.typeChecker = null; - this.arbitraryAstNode = null; - } - - /** - * Gets the canonical ID for the given type, generating a fresh ID if necessary. - */ - public buildType(type: ts.Type, unfoldAlias: boolean): number | null { - this.isInShallowTypeContext = false; - let id = this.getId(type, unfoldAlias); - this.iterateBuildTypeWorklist(); - if (id == null) return null; - return id; - } - - /** - * Caches the result of `getId`: `type -> [id (not unfolded), id (unfolded)]`. - * - * A value of `undefined` means the value is not yet computed, - * and `number | null` corresponds to the return value of `getId`. - */ - private idCache = new WeakMap(); - - /** - * Gets the canonical ID for the given type, generating a fresh ID if necessary. - * - * Returns `null` if we do not support extraction of this type. - */ - public getId(type: ts.Type, unfoldAlias: boolean): number | null { - if (this.skipExtractingTypes) return null; - let cached = this.idCache.get(type) ?? [undefined, undefined]; - let cachedValue = cached[unfoldAlias ? 1 : 0]; - if (cachedValue !== undefined) return cachedValue; - - let result = this.getIdRaw(type, unfoldAlias); - cached[unfoldAlias ? 1 : 0] = result; - return result; - } - - /** - * Gets the canonical ID for the given type, generating a fresh ID if necessary. - * - * Returns `null` if we do not support extraction of this type. - */ - public getIdRaw(type: ts.Type, unfoldAlias: boolean): number | null { - if (this.typeRecursionDepth > 100) { - // Ignore infinitely nested anonymous types, such as `{x: {x: {x: ... }}}`. - // Such a type can't be written directly with TypeScript syntax (as it would need to be named), - // but it can occur rarely as a result of type inference. - - // Caching this value is technically incorrect, as a type might be seen at depth 101 and then we cache the fact that it can't be extracted. - // Then later the type is seen at a lower depth and could be extracted, but then we immediately give up because of the cached failure. - return null; - } - // Replace very long string literal types with `string`. - if ((type.flags & ts.TypeFlags.StringLiteral) && ((type as ts.LiteralType).value as string).length > 30) { - type = this.typeChecker.getBaseTypeOfLiteralType(type); - } - ++this.typeRecursionDepth; - let content = this.getTypeString(type, unfoldAlias); - --this.typeRecursionDepth; - if (content == null) return null; // Type not supported. - let id = this.typeIds.get(content); - if (id == null) { - let stringValue = this.stringifyType(type, unfoldAlias); - if (stringValue == null) { - return null; // Type not supported. - } - id = this.typeIds.size; - this.typeIds.set(content, id); - this.typeToStringValues.push(stringValue); - this.buildTypeWorklist.push([type, id, unfoldAlias]); - this.typeExtractionState.push( - this.isInShallowTypeContext ? TypeExtractionState.PendingShallow : TypeExtractionState.PendingFull); - // If the type is the self-type for a named type (not a generic instantiation of it), - // emit the self-type binding for that type. - if (content.startsWith("reference;") && isTypeSelfReference(type)) { - this.selfTypes.symbols.push(this.getSymbolId(type.aliasSymbol || type.symbol)); - this.selfTypes.selfTypes.push(id); - } - } else if (!this.isInShallowTypeContext) { - // If the type was previously marked as shallow, promote it to full, - // and put it back in the worklist if necessary. - let state = this.typeExtractionState[id]; - if (state === TypeExtractionState.PendingShallow) { - this.typeExtractionState[id] = TypeExtractionState.PendingFull; - } else if (state === TypeExtractionState.DoneShallow) { - this.typeExtractionState[id] = TypeExtractionState.PendingFull; - this.buildTypeWorklist.push([type, id, unfoldAlias]); - } - } - return id; - } - - private stringifyType(type: ts.Type, unfoldAlias: boolean): string { - let formatFlags = unfoldAlias - ? ts.TypeFormatFlags.InTypeAlias - : ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope; - let toStringValue: string; - // Some types can't be stringified. Just discard the type if we can't stringify it. - try { - toStringValue = this.typeChecker.typeToString(type, undefined, formatFlags); - } catch (e) { - console.warn("Recovered from a compiler crash while stringifying a type. Discarding the type."); - console.warn(e.stack); - return null; - } - if (toStringValue.length > 50) { - return toStringValue.substring(0, 47) + "..."; - } else { - return toStringValue; - } - } - - private stringifySignature(signature: ts.Signature, kind: ts.SignatureKind) { - let toStringValue: string; - // Some types can't be stringified. Just discard the type if we can't stringify it. - try { - toStringValue = - this.typeChecker.signatureToString( - signature, - signature.declaration, - ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope, - kind); - } catch (e) { - console.warn("Recovered from a compiler crash while stringifying a signature. Discarding the signature."); - console.warn(e.stack); - return null; - } - if (toStringValue.length > 70) { - return toStringValue.substring(0, 69) + "..."; - } else { - return toStringValue; - } - } - - /** - * Gets a string representing the kind and contents of the given type. - */ - private getTypeString(type: AugmentedType, unfoldAlias: boolean): string | null { - // Reference to a type alias. - if (!unfoldAlias && type.aliasSymbol != null) { - let tag = "reference;" + this.getSymbolId(type.aliasSymbol); - return type.aliasTypeArguments == null - ? tag - : this.makeTypeStringVector(tag, type.aliasTypeArguments); - } - let flags = type.flags; - let objectFlags = (flags & ts.TypeFlags.Object) && (type as ts.ObjectType).objectFlags; - let symbol: AugmentedSymbol = type.symbol; - // Type that contains a reference to something. - if (symbol != null) { - // Possibly parameterized type. - if (isTypeReference(type)) { - let tag = "reference;" + this.getSymbolId(symbol); - return this.makeTypeStringVectorFromTypeReferenceArguments(tag, type); - } - // Reference to a type variable. - if (flags & ts.TypeFlags.TypeVariable) { - let enclosingType = getEnclosingTypeOfThisType(type); - if (enclosingType != null) { - return "this;" + this.getId(enclosingType, false); - } else if (symbol.parent == null || isFunctionTypeOrTypeAlias(symbol.declarations?.[0])) { - // The type variable is bound on a call signature. Only extract it by name. - return "lextypevar;" + symbol.name; - } else { - return "typevar;" + this.getSymbolId(symbol); - } - } - // Recognize types of form `typeof X` where `X` is a class, namespace, module, or enum. - // The TypeScript API has no explicit tag for `typeof` types. They can be recognized - // as anonymous object types that have a symbol (i.e. a "named anonymous type"). - if ((objectFlags & ts.ObjectFlags.Anonymous) && isTypeofCandidateSymbol(symbol)) { - return "typeof;" + this.getSymbolId(symbol); - } - // Reference to a named type. - // Must occur after the `typeof` case to avoid matching `typeof C` as the type `C`. - if (isTypeDefinitionSymbol(symbol)) { - return "reference;" + this.getSymbolId(type.symbol); - } - } - if (flags === ts.TypeFlags.Any) { - return "any"; - } - if (flags === ts.TypeFlags.String) { - return "string"; - } - if (flags === ts.TypeFlags.Number) { - return "number"; - } - if (flags === ts.TypeFlags.Void) { - return "void"; - } - if (flags === ts.TypeFlags.Never) { - return "never"; - } - if (flags === ts.TypeFlags.BigInt) { - return "bigint"; - } - if (flags & ts.TypeFlags.Null) { - return "null"; - } - if (flags & ts.TypeFlags.Undefined) { - return "undefined"; - } - if (flags === ts.TypeFlags.ESSymbol) { - return "plainsymbol"; - } - if (flags & ts.TypeFlags.Unknown) { - return "unknown"; - } - if (flags === ts.TypeFlags.UniqueESSymbol) { - return "uniquesymbol;" + this.getSymbolId((type as ts.UniqueESSymbolType).symbol); - } - if (flags === ts.TypeFlags.NonPrimitive && type.intrinsicName === "object") { - return "objectkeyword"; - } - // Note that TypeScript represents the `boolean` type as `true|false`. - if (flags === ts.TypeFlags.BooleanLiteral) { - // There is no public API to distinguish true and false. - // We rely on the internal property `intrinsicName`, which - // should be either "true" or "false" here. - return type.intrinsicName; - } - if (flags & ts.TypeFlags.NumberLiteral) { - return "numlit;" + (type as ts.LiteralType).value; - } - if (flags & ts.TypeFlags.StringLiteral) { - return "strlit;" + (type as ts.LiteralType).value; - } - if (flags & ts.TypeFlags.BigIntLiteral) { - let literalType = type as ts.LiteralType; - let value = literalType.value as ts.PseudoBigInt; - return "bigintlit;" + (value.negative ? "-" : "") + value.base10Value; - } - if (flags & ts.TypeFlags.Union) { - let unionType = type as ts.UnionType; - if (unionType.types.length === 0) { - // We ignore malformed types like unions and intersections without any operands. - // These trigger an assertion failure in `typeToString` - presumably because they - // cannot be written using TypeScript syntax - so we ignore them entirely. - return null; - } - return this.makeDeduplicatedTypeStringVector("union", unionType.types); - } - if (flags & ts.TypeFlags.Intersection) { - let intersectionType = type as ts.IntersectionType; - if (intersectionType.types.length === 0) { - return null; // Ignore malformed type. - } - return this.makeDeduplicatedTypeStringVector("intersection", intersectionType.types); - } - if (isTypeReference(type) && (type.target.objectFlags & ts.ObjectFlags.Tuple)) { - // Encode the minimum length and presence of rest element in the first two parts of the type string. - // Handle the absence of `minLength` and `hasRestElement` to be compatible with pre-3.0 compiler versions. - let tupleReference = type as ts.TupleTypeReference; - let tupleType = tupleReference.target; - let minLength = tupleType.minLength != null - ? tupleType.minLength - : this.typeChecker.getTypeArguments(tupleReference).length; - let hasRestElement = tupleType.hasRestElement ? 't' : 'f'; - let restIndex = -1; - for (let i = 0; i < tupleType.elementFlags.length; i++) { - if (tupleType.elementFlags[i] & ts.ElementFlags.Rest) { - restIndex = i; - break; - } - } - let prefix = `tuple;${minLength};${restIndex}`; - return this.makeTypeStringVectorFromTypeReferenceArguments(prefix, type); - } - if (objectFlags & ts.ObjectFlags.Anonymous) { - return this.makeStructuralTypeVector("object;", type as ts.ObjectType); - } - return null; - } - - /** - * Gets the canonical ID for the given symbol. - * - * Note that this may be called with symbols from different compiler instantiations, - * and it should return the same ID for symbols that logically refer to the same thing. - */ - public getSymbolId(symbol: AugmentedSymbol): number { - if (symbol.flags & ts.SymbolFlags.Alias) { - let aliasedSymbol: AugmentedSymbol = this.typeChecker.getAliasedSymbol(symbol); - if (aliasedSymbol.$id !== -1) { // Check if aliased symbol is on-stack - // Follow aliases eagerly, except in cases where this leads to cycles (for things like `import Foo = Foo.Bar`) - symbol = aliasedSymbol; - } - } - // We cache the symbol ID to avoid rebuilding long symbol strings. - let id = symbol.$id; - if (id != null) return id; - symbol.$id = -1; // Mark as on-stack while we are computing the ID - let content = this.getSymbolString(symbol); - id = this.symbolIds.get(content); - if (id != null) { - // The ID was determined in a previous compiler instantiation. - return symbol.$id = id; - } - if (id == null) { - id = this.symbolIds.size; - this.symbolIds.set(content, id); - symbol.$id = id; - - // Associate names with global symbols. - if (this.isGlobalSymbol(symbol)) { - this.addGlobalMapping(id, symbol.name); - } - - // Associate type names with their base type names. - this.extractSymbolBaseTypes(symbol, id); - } - return id; - } - - /** Returns true if the given symbol represents a name in the global scope. */ - private isGlobalSymbol(symbol: AugmentedSymbol): boolean { - let parent = symbol.parent; - if (parent != null) { - if (parent.escapedName === ts.InternalSymbolName.Global) { - return true; // Symbol declared in a global augmentation block. - } - return false; // Symbol is not a root. - } - if (symbol.declarations == null || symbol.declarations.length === 0) return false; - let declaration = symbol.declarations[0]; - let block = getEnclosingBlock(declaration); - if (ts.isSourceFile(block) && !this.isModuleSourceFile(block)) { - return true; // Symbol is declared at the top-level of a non-module file. - } - return false; - } - - /** Returns true if the given source file defines a module. */ - private isModuleSourceFile(file: ts.SourceFile) { - // This is not directly exposed, but a reliable indicator seems to be whether - // the file has a symbol. - return this.typeChecker.getSymbolAtLocation(file) != null; - } - - /** - * Gets a unique string for the given symbol. - */ - private getSymbolString(symbol: AugmentedSymbol): string { - let parent = symbol.parent; - if (parent == null || parent.escapedName === ts.InternalSymbolName.Global) { - return "root;" + this.getSymbolDeclarationString(symbol) + ";;" + this.rewriteSymbolName(symbol); - } else if (parent.exports != null && parent.exports.get(symbol.escapedName) === symbol) { - return "member;;" + this.getSymbolId(parent) + ";" + this.rewriteSymbolName(symbol); - } else { - return "other;" + this.getSymbolDeclarationString(symbol) + ";" + this.getSymbolId(parent) + ";" + this.rewriteSymbolName(symbol); - } - } - - private rewriteSymbolName(symbol: AugmentedSymbol) { - let { virtualSourceRoot, sourceRoot } = this.virtualSourceRoot; - let { name } = symbol; - if (virtualSourceRoot == null || sourceRoot == null) return name; - return name.replace(virtualSourceRoot, sourceRoot); - } - - /** - * Gets a string that distinguishes the given symbol from symbols with different - * lexical roots, or an empty string if the symbol is not a lexical root. - */ - private getSymbolDeclarationString(symbol: AugmentedSymbol): string { - if (symbol.declarations == null || symbol.declarations.length === 0) { - return ""; - } - let decl = symbol.declarations[0]; - if (ts.isSourceFile(decl)) return ""; - return this.getFileId(decl.getSourceFile().fileName) + ":" + decl.pos; - } - - /** - * Gets a number unique for the given filename. - */ - private getFileId(fileName: string): number { - let id = this.fileIds.get(fileName); - if (id == null) { - id = this.fileIds.size; - this.fileIds.set(fileName, id); - } - return id; - } - - /** - * Like `makeTypeStringVector` using the type arguments in the given type reference. - */ - private makeTypeStringVectorFromTypeReferenceArguments(tag: string, type: ts.TypeReference) { - // There can be an extra type argument at the end, denoting an explicit 'this' type argument. - // We discard the extra argument in our model. - let target = type.target; - let typeArguments = this.typeChecker.getTypeArguments(type); - if (typeArguments == null) return tag; - if (target.typeParameters != null) { - return this.makeTypeStringVector(tag, typeArguments, target.typeParameters.length); - } else { - return this.makeTypeStringVector(tag, typeArguments); - } - } - - /** - * Returns the given string with the IDs of the given types appended, - * each separated by `;`. - */ - private makeTypeStringVector(tag: string, types: ReadonlyArray, length = types.length): string | null { - let hash = tag; - for (let i = 0; i < length; ++i) { - let id = this.getId(types[i], false); - if (id == null) return null; - hash += ";" + id; - } - return hash; - } - - /** - * Returns the given string with the IDs of the given types appended, - * ignoring duplicates, and each separated by `;`. - */ - private makeDeduplicatedTypeStringVector(tag: string, types: ReadonlyArray, length = types.length): string | null { - let seenIds = new Set(); - let numberOfSeenIds = 0; - let hash = tag; - for (let i = 0; i < length; ++i) { - let id = this.getId(types[i], false); - if (id == null) return null; - seenIds.add(id); - if (seenIds.size > numberOfSeenIds) { - // This ID was not seen before - ++numberOfSeenIds; - hash += ";" + id; - } - } - return hash; - } - - /** Returns the type of `symbol` or `null` if it could not be computed. */ - private tryGetTypeOfSymbol(symbol: ts.Symbol) { - try { - return this.typeChecker.getTypeOfSymbolAtLocation(symbol, this.arbitraryAstNode) - } catch (e) { - console.warn(`Could not compute type of '${this.typeChecker.symbolToString(symbol)}'`); - return null; - } - } - - /** - * Returns a type string consisting of all the members of the given type. - * - * This must only be called for anonymous object types, as the type string for this - * type could otherwise depend on itself recursively. - */ - private makeStructuralTypeVector(tag: string, type: ts.ObjectType): string | null { - let hash = tag; - for (let property of type.getProperties()) { - let propertyType = this.tryGetTypeOfSymbol(property); - if (propertyType == null) return null; - let propertyTypeId = this.getId(propertyType, false); - if (propertyTypeId == null) return null; - hash += ";p" + this.getSymbolId(property) + ';' + propertyTypeId; - } - for (let kind of signatureKinds) { - for (let signature of this.typeChecker.getSignaturesOfType(type, kind)) { - let id = this.getSignatureId(kind, signature); - if (id == null) return null; - hash += ";c" + id; - } - } - let indexType = type.getStringIndexType(); - if (indexType != null) { - let indexTypeId = this.getId(indexType, false); - if (indexTypeId == null) return null; - hash += ";s" + indexTypeId; - } - indexType = type.getNumberIndexType(); - if (indexType != null) { - let indexTypeId = this.getId(indexType, false); - if (indexTypeId == null) return null; - hash += ";i" + indexTypeId; - } - return hash; - } - - public addModuleMapping(symbolId: number, moduleName: string) { - this.moduleMappings.symbols.push(symbolId); - this.moduleMappings.names.push(moduleName); - } - - public addGlobalMapping(symbolId: number, globalName: string) { - this.globalMappings.symbols.push(symbolId); - this.globalMappings.names.push(globalName); - } - - public getTypeTableJson(): object { - return { - typeStrings: Array.from(this.typeIds.keys()), - typeToStringValues: this.typeToStringValues, - propertyLookups: this.propertyLookups, - typeAliases: this.typeAliases, - symbolStrings: Array.from(this.symbolIds.keys()), - moduleMappings: this.moduleMappings, - globalMappings: this.globalMappings, - signatureStrings: Array.from(this.signatureIds.keys()), - signatureMappings: this.signatureMappings, - signatureToStringValues: this.signatureToStringValues, - numberIndexTypes: this.numberIndexTypes, - stringIndexTypes: this.stringIndexTypes, - baseTypes: this.baseTypes, - selfTypes: this.selfTypes, - }; - } - - /** - * Extracts the deep property and signature graph of recently discovered types. - * - * Types are added to the worklist when they are first assigned an ID, - * which happen transparently during property extraction and expansiveness checks. - */ - private iterateBuildTypeWorklist() { - let worklist = this.buildTypeWorklist; - let typeExtractionState = this.typeExtractionState; - while (worklist.length > 0) { - let [type, id, unfoldAlias] = worklist.pop(); - let isShallowContext = typeExtractionState[id] === TypeExtractionState.PendingShallow; - if (isShallowContext && !isTypeAlwaysSafeToExpand(type)) { - typeExtractionState[id] = TypeExtractionState.DoneShallow; - } else if (type.aliasSymbol != null && !unfoldAlias) { - typeExtractionState[id] = TypeExtractionState.DoneFull; - let underlyingTypeId = this.getId(type, true); - if (underlyingTypeId != null) { - this.typeAliases.aliasTypes.push(id); - this.typeAliases.underlyingTypes.push(underlyingTypeId); - } - } else { - typeExtractionState[id] = TypeExtractionState.DoneFull; - this.isInShallowTypeContext = isShallowContext || this.isExpansiveTypeReference(type); - this.extractProperties(type, id); - this.extractSignatures(type, id); - this.extractIndexers(type, id); - } - } - this.isInShallowTypeContext = false; - } - - /** - * Returns the properties to extract for the given type or `null` if nothing should be extracted. - * - * For performance reasons we only extract properties needed to recognize promise types at the QL - * level. - */ - private getPropertiesToExtract(type: ts.Type) { - if (this.getSelfType(type) === type) { - let thenSymbol = this.typeChecker.getPropertyOfType(type, "then"); - if (thenSymbol != null) { - return [thenSymbol]; - } - } - return null; - } - - private extractProperties(type: ts.Type, id: number) { - let props = this.getPropertiesToExtract(type); - if (props == null) return; - for (let symbol of props) { - let propertyType = this.tryGetTypeOfSymbol(symbol); - if (propertyType == null) continue; - let propertyTypeId = this.getId(propertyType, false); - if (propertyTypeId == null) continue; - this.propertyLookups.baseTypes.push(id); - this.propertyLookups.names.push(symbol.name); - this.propertyLookups.propertyTypes.push(propertyTypeId); - } - } - - /** - * Returns a unique ID for the given call/construct signature. - */ - public getSignatureId(kind: ts.SignatureKind, signature: ts.Signature): number { - let content = this.getSignatureString(kind, signature); - if (content == null) { - return null; - } - let id = this.signatureIds.get(content); - if (id == null) { - let stringValue = this.stringifySignature(signature, kind); - if (stringValue == null) { - return null; // Not supported. - } - id = this.signatureIds.size; - this.signatureIds.set(content, id); - this.signatureToStringValues.push(stringValue); - } - return id; - } - - /** - * Returns a unique string for the given call/constructor signature. - */ - private getSignatureString(kind: ts.SignatureKind, signature: AugmentedSignature): string { - let modifiers = signature.getDeclaration() ? ts.getModifiers(signature.getDeclaration() as ts.MethodSignature) : []; - let isAbstract = modifiers && modifiers.filter(modifier => modifier.kind == ts.SyntaxKind.AbstractKeyword).length > 0 - - let parameters = signature.getParameters(); - let numberOfTypeParameters = signature.typeParameters == null - ? 0 - : signature.typeParameters.length; - // Count the number of required parameters. - let requiredParameters = parameters.length; - for (let i = 0; i < parameters.length; ++i) { - if (parameters[i].flags & ts.SymbolFlags.Optional) { - requiredParameters = i; - break; - } - } - let hasRestParam = (signature.flags & InternalSignatureFlags.HasRestParameter) !== 0; - let restParameterTag = ''; - if (hasRestParam) { - if (requiredParameters === parameters.length) { - // Do not count the rest parameter as a required parameter - requiredParameters = parameters.length - 1; - } - if (parameters.length === 0) return null; - let restParameter = parameters[parameters.length - 1]; - let restParameterType = this.tryGetTypeOfSymbol(restParameter); - if (restParameterType == null) return null; - let restParameterTypeId = this.getId(restParameterType, false); - if (restParameterTypeId == null) return null; - restParameterTag = '' + restParameterTypeId; - } - let returnTypeId = this.getId(signature.getReturnType(), false); - if (returnTypeId == null) { - return null; - } - let tag = `${kind};${isAbstract ? "t" : "f"};${numberOfTypeParameters};${requiredParameters};${restParameterTag};${returnTypeId}`; - for (let typeParameter of signature.typeParameters || []) { - tag += ";" + typeParameter.symbol.name; - let constraint = typeParameter.getConstraint(); - let constraintId: number; - if (constraint == null || (constraintId = this.getId(constraint, false)) == null) { - tag += ";"; - } else { - tag += ";" + constraintId; - } - } - for (let paramIndex = 0; paramIndex < parameters.length; ++paramIndex) { - let parameter = parameters[paramIndex]; - let parameterType = this.tryGetTypeOfSymbol(parameter); - if (parameterType == null) { - return null; - } - let isRestParameter = hasRestParam && (paramIndex === parameters.length - 1); - if (isRestParameter) { - // The type of the rest parameter is the array type, but we wish to extract the non-array type. - if (!isTypeReference(parameterType)) return null; - let typeArguments = parameterType.typeArguments; - if (typeArguments == null || typeArguments.length === 0) return null; - parameterType = typeArguments[0]; - } - let parameterTypeId = this.getId(parameterType, false); - if (parameterTypeId == null) { - return null; - } - tag += ';' + parameter.name + ';' + parameterTypeId; - } - return tag; - } - - private extractSignatures(type: ts.Type, id: number) { - this.extractSignatureList(type, id, ts.SignatureKind.Call, type.getCallSignatures()); - this.extractSignatureList(type, id, ts.SignatureKind.Construct, type.getConstructSignatures()); - } - - private extractSignatureList(type: ts.Type, id: number, kind: ts.SignatureKind, list: ReadonlyArray) { - let index = -1; - for (let signature of list) { - ++index; - let signatureId = this.getSignatureId(kind, signature); - if (signatureId == null) continue; - this.signatureMappings.baseTypes.push(id); - this.signatureMappings.kinds.push(kind); - this.signatureMappings.indices.push(index); - this.signatureMappings.signatures.push(signatureId); - } - } - - private extractIndexers(type: ts.Type, id: number) { - this.extractIndexer(id, type.getStringIndexType(), this.stringIndexTypes); - this.extractIndexer(id, type.getNumberIndexType(), this.numberIndexTypes); - } - - private extractIndexer(baseType: number, indexType: ts.Type, table: IndexerTable) { - if (indexType == null) return; - let indexTypeId = this.getId(indexType, false); - if (indexTypeId == null) return; - table.baseTypes.push(baseType); - table.propertyTypes.push(indexTypeId); - } - - /** - * If the given symbol represents a type name, extracts its base type names. - * - * Base types are only extracted at the level of names, since the type arguments - * of a base type are not generally made available by the TypeScript API. - * - * For example, given these interfaces: - * ``` - * interface Base { x: T } - * interface Sub extends Base {} - * ``` - * a true base type of `Sub` would be `Base`, but all we can - * get from the compiler is just `Base` with no indication of what `S` should be. - */ - private extractSymbolBaseTypes(symbol: ts.Symbol, symbolId: number) { - for (let decl of symbol.declarations || []) { - if (ts.isClassLike(decl) || ts.isInterfaceDeclaration(decl)) { - for (let heritage of decl.heritageClauses || []) { - for (let typeExpr of heritage.types) { - let superType = this.typeChecker.getTypeFromTypeNode(typeExpr); - if (superType == null) continue; - let baseTypeSymbol = superType.symbol; - baseTypeSymbol = (baseTypeSymbol as any)?.type?.symbol ?? baseTypeSymbol; - if (baseTypeSymbol == null) continue; - let baseId = this.getSymbolId(baseTypeSymbol); - // Note: take care not to perform a recursive call between the two `push` calls. - this.baseTypes.symbols.push(symbolId); - this.baseTypes.baseTypeSymbols.push(baseId); - } - } - } - } - } - - /** - * If `type` is a generic instantiation of a type, returns the - * generic self-type for that type, otherwise `null`. - * - * For example, `Promise` maps to `Promise`, where - * `T` is the type parameter declared on the `Promise` interface. - */ - private getSelfType(type: ts.Type): ts.TypeReference { - if (isTypeReference(type) && this.typeChecker.getTypeArguments(type).length > 0) { - return type.target; - } - return null; - } - - /** - * True if the given type is a reference to a type that is part of an expansive cycle, which - * we simply call "expansive types". - * - * Non-expansive types may still lead into an expansive type, as long as it's not part of - * the cycle. - * - * It is guaranteed that any sequence of property reads on a type will loop back to a previously - * seen type or a reach a type that is marked as expansive. That is, this is sufficient to - * guarantee termination of recursive property traversal. - */ - private isExpansiveTypeReference(type: ts.Type): boolean { - if (this.restrictedExpansion) { - return true; - } - let selfType = this.getSelfType(type); - if (selfType != null) { - this.checkExpansiveness(selfType); - let id = this.getId(selfType, false); - return this.expansiveTypes.get(id); - } - return false; - } - - /** - * Checks if the given self-type is an expansive type. The result is stored in `expansiveTypes`. - * - * This follows a variant of Tarjan's SCC algorithm on a graph derived from the properties of types. - * - * The vertices of the graph are generic "self types", that is, types like `Foo` but not `Foo`. - * Types without type arguments are not vertices either, as such types can't be part of an expansive cycle. - * - * A property S.x with type T implies an edge from S to the self-type of every type referenced in T, whose - * type arguments contain a type parameter of S. Moreover, if such a reference contains a deeply nested - * occurence of a type parameter, e.g. `Foo>` it is classified as an "expanding" edge - * - * For example, this interface: - * - * interface Foo { - * x: Bar> - * } - * - * implies the following edges: - * - * Foo ==> Bar (expanding edge) - * Foo --> Baz (neutral edge) - * - * If an SCC contains an expanding edge, all its members are classified as expansive types. - * - * Suppose we extend the example with the interfaces: - * - * interface Bar { - * x: T; - * } - * - * interface Baz { - * x: Foo - * } - * - * The `Bar` interface implies no edges and the `Baz` interface implies the edge: - * - * Baz ==> Foo (expanding edge) - * - * This creates an expanding cycle, Foo --> Baz ==> Foo, so Foo and Baz are considered - * expansive, whereas Bar is not. - */ - private checkExpansiveness(type: ts.TypeReference) { - // `index`, `lowlink` and `stack` are from Tarjan's algorithm. - // Note that the type ID cannot be used as `index` because the index must be - // increasing with the order in which nodes are discovered in the traversal. - let indexTable = new Map(); - let lowlinkTable = new Map(); - let indexCounter = 0; - let stack: number[] = []; // IDs of types on the stack. - - // The expansion depth is the number of expanding edges that were used to - // reach the given node when it was first discovered. It is used to detect - // if the SCC contains an expanding edge. - // We also abuse this to track whether a node is currently on the stack; - // as long as the value is non-null, the node is on the stack. - let expansionDepthTable = new Map(); - - let typeTable = this; - - search(type, 0); - - function search(type: ts.TypeReference, expansionDepth: number): number | null { - let id = typeTable.getId(type, false); - if (id == null) return null; - - let index = indexTable.get(id); - if (index != null) { // Seen this node before? - let initialExpansionDepth = expansionDepthTable.get(id); - if (initialExpansionDepth == null) { - return null; // Not on the stack anymore. Its SCC is already complete. - } - if (expansionDepth > initialExpansionDepth) { - // The type has reached itself using an expansive edge. - // Mark is at expansive. The rest of the SCC will be marked when the SCC is complete. - typeTable.expansiveTypes.set(id, true); - } - return index; - } - - let previousResult = typeTable.expansiveTypes.get(id); - if (previousResult != null) { - // This node was classified by a previous call to checkExpansiveness. - return null; - } - - index = ++indexCounter; - indexTable.set(id, index); - lowlinkTable.set(id, index); - expansionDepthTable.set(id, expansionDepth); - let indexOnStack = stack.length; - stack.push(id); - - /** Indicates if a type contains no type variables, is a type variable, or strictly contains type variables. */ - const enum TypeVarDepth { - noTypeVar = 0, - isTypeVar = 1, - containsTypeVar = 2, - } - - for (let symbol of type.getProperties()) { - let propertyType = typeTable.tryGetTypeOfSymbol(symbol); - if (propertyType == null) continue; - traverseType(propertyType); - } - - if (lowlinkTable.get(id) === index) { - // We have finished an SCC. - // If any type was marked as expansive, propagate this to the entire SCC. - let isExpansive = false; - for (let i = indexOnStack; i < stack.length; ++i) { - let memberId = stack[i]; - if (typeTable.expansiveTypes.get(memberId) === true) { - isExpansive = true; - break; - } - } - for (let i = indexOnStack; i < stack.length; ++i) { - let memberId = stack[i]; - typeTable.expansiveTypes.set(memberId, isExpansive); - expansionDepthTable.set(memberId, null); // Mark as not on stack anymore. - } - stack.length = indexOnStack; // Pop all SCC nodes from stack. - } - - return lowlinkTable.get(id); - - function traverseType(type: ts.Type): TypeVarDepth { - if (isTypeVariable(type)) return TypeVarDepth.isTypeVar; - let depth = TypeVarDepth.noTypeVar; - typeTable.forEachChildType(type, child => { - depth = Math.max(depth, traverseType(child)); - }); - if (depth === TypeVarDepth.noTypeVar) { - // No need to recurse into types that do not reference a type variable. - return TypeVarDepth.noTypeVar; - } - let selfType = typeTable.getSelfType(type); - if (selfType != null) { - // A non-expanding reference such as `Foo` should preserve expansion depth, - // whereas an expanding reference `Foo` should increment it. - visitEdge(selfType, (depth === TypeVarDepth.isTypeVar) ? 0 : 1); - } - return TypeVarDepth.containsTypeVar; - } - - function visitEdge(successor: ts.TypeReference, weight: number) { - let result = search(successor, expansionDepth + weight); - if (result == null) return; - lowlinkTable.set(id, Math.min(lowlinkTable.get(id), result)); - } - } - } - - private forEachChildType(type: ts.Type, callback: (type: ts.Type) => void): void { - // Note: we deliberately do not traverse type aliases here, but the underlying type. - if (isTypeReference(type)) { - // Note that this case also handles tuple types, since a tuple type is represented as - // a reference to a synthetic generic interface. - let typeArguments = this.typeChecker.getTypeArguments(type); - if (typeArguments != null) { - typeArguments.forEach(callback); - } - } else if (type.flags & ts.TypeFlags.UnionOrIntersection) { - (type as ts.UnionOrIntersectionType).types.forEach(callback); - } else if (type.flags & ts.TypeFlags.Object) { - let objectType = type as ts.ObjectType; - let objectFlags = objectType.objectFlags; - if (objectFlags & ts.ObjectFlags.Anonymous) { - // Anonymous interface type like `{ x: number }`. - for (let symbol of type.getProperties()) { - let propertyType = this.tryGetTypeOfSymbol(symbol); - if (propertyType == null) continue; - callback(propertyType); - } - for (let signature of type.getCallSignatures()) { - this.forEachChildTypeOfSignature(signature, callback); - } - for (let signature of type.getConstructSignatures()) { - this.forEachChildTypeOfSignature(signature, callback); - } - let stringIndexType = type.getStringIndexType(); - if (stringIndexType != null) { - callback(stringIndexType); - } - let numberIndexType = type.getNumberIndexType(); - if (numberIndexType != null) { - callback(numberIndexType); - } - } - } - } - - private forEachChildTypeOfSignature(signature: ts.Signature, callback: (type: ts.Type) => void): void { - callback(signature.getReturnType()); - for (let parameter of signature.getParameters()) { - let paramType = this.tryGetTypeOfSymbol(parameter); - if (paramType == null) continue; - callback(paramType); - } - let typeParameters = signature.getTypeParameters(); - if (typeParameters != null) { - for (let typeParameter of typeParameters) { - let constraint = typeParameter.getConstraint(); - if (constraint == null) continue; - callback(constraint); - } - } - } -} - -function isFunctionTypeOrTypeAlias(declaration: ts.Declaration | undefined) { - if (declaration == null) return false; - return declaration.kind === ts.SyntaxKind.FunctionType || declaration.kind === ts.SyntaxKind.TypeAliasDeclaration; -} - -/** - * Given a `type` whose type-string is known to be a `reference`, returns true if this is the self-type for the referenced type. - * - * For example, for `type Foo = ...` this returns true if `type` is `Foo`. - */ -function isTypeSelfReference(type: ts.Type) { - if (type.aliasSymbol != null) { - const { aliasTypeArguments } = type; - if (aliasTypeArguments == null) return true; - let declaration = type.aliasSymbol.declarations?.[0]; - if (declaration == null || declaration.kind !== ts.SyntaxKind.TypeAliasDeclaration) return false; - let alias = declaration as ts.TypeAliasDeclaration; - for (let i = 0; i < aliasTypeArguments.length; ++i) { - if (aliasTypeArguments[i].symbol?.declarations?.[0] !== alias.typeParameters[i]) { - return false; - } - } - return true; - } else if (isTypeReference(type)) { - return type.target === type; - } else { - // Return true because we know we have mapped this type to kind `reference`, and in the cases - // not covered above (i.e. generic types) it is always a self-reference. - return true; - } -} diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 341313e15b53..2bdddaf99333 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -51,10 +51,8 @@ import com.semmle.js.extractor.trapcache.ITrapCache; import com.semmle.js.parser.ParseError; import com.semmle.js.parser.ParsedProject; -import com.semmle.ts.extractor.TypeExtractor; import com.semmle.ts.extractor.TypeScriptParser; import com.semmle.ts.extractor.TypeScriptWrapperOOMError; -import com.semmle.ts.extractor.TypeTable; import com.semmle.util.data.StringUtil; import com.semmle.util.diagnostic.DiagnosticLevel; import com.semmle.util.diagnostic.DiagnosticLocation; @@ -1065,75 +1063,26 @@ private Set extractTypeScript( FileExtractors extractors, List tsconfig, DependencyInstallationResult deps) { - if (hasTypeScriptFiles(files) || !tsconfig.isEmpty()) { - TypeScriptParser tsParser = state.getTypeScriptParser(); - verifyTypeScriptInstallation(state); - - // Collect all files included in a tsconfig.json inclusion pattern. - // If a given file is referenced by multiple tsconfig files, we prefer to extract it using - // one that includes it rather than just references it. - Set explicitlyIncludedFiles = new LinkedHashSet<>(); - if (tsconfig.size() > 1) { // No prioritization needed if there's only one tsconfig. - for (Path projectPath : tsconfig) { - explicitlyIncludedFiles.addAll(tsParser.getOwnFiles(projectPath.toFile(), deps, virtualSourceRoot)); - } - } - - // Extract TypeScript projects - for (Path projectPath : tsconfig) { - File projectFile = projectPath.toFile(); - long start = logBeginProcess("Opening project " + projectFile); - ParsedProject project = tsParser.openProject(projectFile, deps, virtualSourceRoot); - logEndProcess(start, "Done opening project " + projectFile); - // Extract all files belonging to this project which are also matched - // by our include/exclude filters. - List typeScriptFiles = new ArrayList(); - for (File sourceFile : project.getAllFiles()) { - Path sourcePath = sourceFile.toPath(); - Path normalizedFile = normalizePath(sourcePath); - if (!files.contains(normalizedFile) && !state.getSnippets().containsKey(normalizedFile)) { - continue; - } - if (!project.getOwnFiles().contains(sourceFile) && explicitlyIncludedFiles.contains(sourceFile)) continue; - if (extractors.fileType(sourcePath) != FileType.TYPESCRIPT) { - // For the time being, skip non-TypeScript files, even if the TypeScript - // compiler can parse them for us. - continue; - } - if (extractedFiles.contains(sourcePath)) { - continue; - } - typeScriptFiles.add(sourcePath); - } - typeScriptFiles.sort(PATH_ORDERING); - extractTypeScriptFiles(typeScriptFiles, extractedFiles, extractors); - tsParser.closeProject(projectFile); - } - // Extract all the types discovered when extracting the ASTs. - if (!tsconfig.isEmpty()) { - TypeTable typeTable = tsParser.getTypeTable(); - extractTypeTable(tsconfig.iterator().next(), typeTable); + List typeScriptFiles = new ArrayList<>(); + // Get all TypeScript files. + for (Path f : files) { + if (extractors.fileType(f) == FileType.TYPESCRIPT) { + typeScriptFiles.add(f); } - - // Extract remaining TypeScript files. - List remainingTypeScriptFiles = new ArrayList<>(); - for (Path f : files) { - if (!extractedFiles.contains(f) - && extractors.fileType(f) == FileType.TYPESCRIPT) { - remainingTypeScriptFiles.add(f); - } - } - for (Map.Entry entry : state.getSnippets().entrySet()) { - if (!extractedFiles.contains(entry.getKey()) - && FileType.forFileExtension(entry.getKey().toFile()) == FileType.TYPESCRIPT) { - remainingTypeScriptFiles.add(entry.getKey()); - } - } - if (!remainingTypeScriptFiles.isEmpty()) { - extractTypeScriptFiles(remainingTypeScriptFiles, extractedFiles, extractors); + } + // Also get TypeScript files from HTML file snippets. + for (Map.Entry entry : state.getSnippets().entrySet()) { + if (!extractedFiles.contains(entry.getKey()) + && FileType.forFileExtension(entry.getKey().toFile()) == FileType.TYPESCRIPT) { + typeScriptFiles.add(entry.getKey()); } + } + if (!typeScriptFiles.isEmpty()) { + TypeScriptParser tsParser = state.getTypeScriptParser(); + verifyTypeScriptInstallation(state); + extractTypeScriptFiles(typeScriptFiles, extractedFiles, extractors); // The TypeScript compiler instance is no longer needed. tsParser.killProcess(); } @@ -1246,18 +1195,6 @@ private Path normalizePath(Path path) { return path.toAbsolutePath().normalize(); } - private void extractTypeTable(Path fileHandle, TypeTable table) { - TrapWriter trapWriter = - outputConfig - .getTrapWriterFactory() - .mkTrapWriter(new File(fileHandle.toString() + ".codeql-typescript-typetable")); - try { - new TypeExtractor(trapWriter, table).extract(); - } finally { - FileUtil.close(trapWriter); - } - } - /** * Get the source type specified in LGTM_INDEX_SOURCE_TYPE, or the default of {@link * SourceType#AUTO}. diff --git a/javascript/extractor/src/com/semmle/js/extractor/Main.java b/javascript/extractor/src/com/semmle/js/extractor/Main.java index 59be61388e38..60dd69881165 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/Main.java +++ b/javascript/extractor/src/com/semmle/js/extractor/Main.java @@ -18,9 +18,7 @@ import com.semmle.js.extractor.FileExtractor.FileType; import com.semmle.js.extractor.trapcache.ITrapCache; import com.semmle.js.parser.ParsedProject; -import com.semmle.ts.extractor.TypeExtractor; import com.semmle.ts.extractor.TypeScriptParser; -import com.semmle.ts.extractor.TypeTable; import com.semmle.util.data.StringUtil; import com.semmle.util.data.UnitParser; import com.semmle.util.exception.ResourceError; @@ -142,53 +140,22 @@ public void run(String[] args) { tsParser.verifyInstallation(!ap.has(P_QUIET)); } - for (File projectFile : projectFiles) { - - long start = verboseLogStartTimer(ap, "Opening project " + projectFile); - ParsedProject project = tsParser.openProject(projectFile, DependencyInstallationResult.empty, extractorConfig.getVirtualSourceRoot()); - verboseLogEndTimer(ap, start); - // Extract all files belonging to this project which are also matched - // by our include/exclude filters. - List filesToExtract = new ArrayList<>(); - for (File sourceFile : project.getOwnFiles()) { - File normalizedFile = normalizeFile(sourceFile); - if ((files.contains(normalizedFile) || extractorState.getSnippets().containsKey(normalizedFile.toPath())) - && !extractedFiles.contains(sourceFile.getAbsoluteFile()) - && FileType.TYPESCRIPT.getExtensions().contains(FileUtil.extension(sourceFile))) { - filesToExtract.add(sourceFile); - } - } - tsParser.prepareFiles(filesToExtract); - for (int i = 0; i < filesToExtract.size(); ++i) { - ensureFileIsExtracted(filesToExtract.get(i), ap); - } - // Close the project to free memory. This does not need to be in a `finally` as - // the project is not a system resource. - tsParser.closeProject(projectFile); - } - - if (!projectFiles.isEmpty()) { - // Extract all the types discovered when extracting the ASTs. - TypeTable typeTable = tsParser.getTypeTable(); - extractTypeTable(projectFiles.iterator().next(), typeTable); - } - - List remainingTypescriptFiles = new ArrayList<>(); + List typeScriptFiles = new ArrayList<>(); for (File f : files) { if (!extractedFiles.contains(f.getAbsoluteFile()) && FileType.forFileExtension(f) == FileType.TYPESCRIPT) { - remainingTypescriptFiles.add(f); + typeScriptFiles.add(f); } } for (Map.Entry entry : extractorState.getSnippets().entrySet()) { if (!extractedFiles.contains(entry.getKey().toFile()) && FileType.forFileExtension(entry.getKey().toFile()) == FileType.TYPESCRIPT) { - remainingTypescriptFiles.add(entry.getKey().toFile()); + typeScriptFiles.add(entry.getKey().toFile()); } } - if (!remainingTypescriptFiles.isEmpty()) { - tsParser.prepareFiles(remainingTypescriptFiles); - for (File f : remainingTypescriptFiles) { + if (!typeScriptFiles.isEmpty()) { + tsParser.prepareFiles(typeScriptFiles); + for (File f : typeScriptFiles) { ensureFileIsExtracted(f, ap); } } @@ -225,21 +192,6 @@ private boolean isFileDerivedFromTypeScriptFile(File path) { return false; } - private void extractTypeTable(File fileHandle, TypeTable table) { - TrapWriter trapWriter = - extractorOutputConfig - .getTrapWriterFactory() - .mkTrapWriter( - new File( - fileHandle.getParentFile(), - fileHandle.getName() + ".codeql-typescript-typetable")); - try { - new TypeExtractor(trapWriter, table).extract(); - } finally { - FileUtil.close(trapWriter); - } - } - private void ensureFileIsExtracted(File f, ArgsParser ap) { if (!extractedFiles.add(f.getAbsoluteFile())) { // The file has already been extracted as part of a project. diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeExtractor.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeExtractor.java deleted file mode 100644 index de0b2558c4da..000000000000 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeExtractor.java +++ /dev/null @@ -1,330 +0,0 @@ -package com.semmle.ts.extractor; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.semmle.util.trap.TrapWriter; -import com.semmle.util.trap.TrapWriter.Label; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * Extracts type and symbol information into TRAP files. - * - *

This is closely coupled with the type_table.ts file in the parser-wrapper. Type - * strings and symbol strings generated in that file are parsed here. See that file for reference - * and documentation. - */ -public class TypeExtractor { - private final TrapWriter trapWriter; - private final TypeTable table; - - private static final Map tagToKind = new LinkedHashMap(); - - private static final int referenceKind = 6; - private static final int objectKind = 7; - private static final int typevarKind = 8; - private static final int typeofKind = 9; - private static final int uniqueSymbolKind = 15; - private static final int tupleKind = 18; - private static final int lexicalTypevarKind = 19; - private static final int thisKind = 20; - private static final int numberLiteralTypeKind = 21; - private static final int stringLiteralTypeKind = 22; - private static final int bigintLiteralTypeKind = 25; - - static { - tagToKind.put("any", 0); - tagToKind.put("string", 1); - tagToKind.put("number", 2); - tagToKind.put("union", 3); - tagToKind.put("true", 4); - tagToKind.put("false", 5); - tagToKind.put("reference", referenceKind); - tagToKind.put("object", objectKind); - tagToKind.put("typevar", typevarKind); - tagToKind.put("typeof", typeofKind); - tagToKind.put("void", 10); - tagToKind.put("undefined", 11); - tagToKind.put("null", 12); - tagToKind.put("never", 13); - tagToKind.put("plainsymbol", 14); - tagToKind.put("uniquesymbol", uniqueSymbolKind); - tagToKind.put("objectkeyword", 16); - tagToKind.put("intersection", 17); - tagToKind.put("tuple", tupleKind); - tagToKind.put("lextypevar", lexicalTypevarKind); - tagToKind.put("this", thisKind); - tagToKind.put("numlit", numberLiteralTypeKind); - tagToKind.put("strlit", stringLiteralTypeKind); - tagToKind.put("unknown", 23); - tagToKind.put("bigint", 24); - tagToKind.put("bigintlit", bigintLiteralTypeKind); - } - - private static final Map symbolKind = new LinkedHashMap(); - - static { - symbolKind.put("root", 0); - symbolKind.put("member", 1); - symbolKind.put("other", 2); - } - - public TypeExtractor(TrapWriter trapWriter, TypeTable table) { - this.trapWriter = trapWriter; - this.table = table; - } - - public void extract() { - for (int i = 0; i < table.getNumberOfTypes(); ++i) { - extractType(i); - } - extractPropertyLookups(table.getPropertyLookups()); - extractTypeAliases(table.getTypeAliases()); - for (int i = 0; i < table.getNumberOfSymbols(); ++i) { - extractSymbol(i); - } - extractSymbolNameMapping("symbol_module", table.getModuleMappings()); - extractSymbolNameMapping("symbol_global", table.getGlobalMappings()); - extractSignatureMappings(table.getSignatureMappings()); - for (int i = 0; i < table.getNumberOfSignatures(); ++i) { - extractSignature(i); - } - extractIndexTypeTable(table.getNumberIndexTypes(), "number_index_type"); - extractIndexTypeTable(table.getStringIndexTypes(), "string_index_type"); - extractBaseTypes(table.getBaseTypes()); - extractSelfTypes(table.getSelfTypes()); - } - - private void extractType(int id) { - Label lbl = trapWriter.globalID("type;" + id); - String contents = table.getTypeString(id); - String[] parts = split(contents); - int kind = tagToKind.get(parts[0]); - trapWriter.addTuple("types", lbl, kind, table.getTypeToStringValue(id)); - int firstChild = 1; - switch (kind) { - case referenceKind: - case typevarKind: - case typeofKind: - case uniqueSymbolKind: - { - // The first part of a reference is the symbol for name binding. - Label symbol = trapWriter.globalID("symbol;" + parts[1]); - trapWriter.addTuple("type_symbol", lbl, symbol); - ++firstChild; - break; - } - case tupleKind: - { - // The first two parts denote minimum length and index of rest element (or -1 if no rest element). - trapWriter.addTuple("tuple_type_min_length", lbl, Integer.parseInt(parts[1])); - int restIndex = Integer.parseInt(parts[2]); - if (restIndex != -1) { - trapWriter.addTuple("tuple_type_rest_index", lbl, restIndex); - } - firstChild += 2; - break; - } - case objectKind: - case lexicalTypevarKind: - firstChild = parts.length; // No children. - break; - - case numberLiteralTypeKind: - case stringLiteralTypeKind: - case bigintLiteralTypeKind: - firstChild = parts.length; // No children. - // The string value may contain `;` so don't use the split(). - String value = contents.substring(parts[0].length() + 1); - trapWriter.addTuple("type_literal_value", lbl, value); - break; - } - for (int i = firstChild; i < parts.length; ++i) { - Label childLabel = trapWriter.globalID("type;" + parts[i]); - trapWriter.addTuple("type_child", childLabel, lbl, i - firstChild); - } - } - - private void extractPropertyLookups(JsonObject lookups) { - JsonArray baseTypes = lookups.get("baseTypes").getAsJsonArray(); - JsonArray names = lookups.get("names").getAsJsonArray(); - JsonArray propertyTypes = lookups.get("propertyTypes").getAsJsonArray(); - for (int i = 0; i < baseTypes.size(); ++i) { - int baseType = baseTypes.get(i).getAsInt(); - String name = names.get(i).getAsString(); - int propertyType = propertyTypes.get(i).getAsInt(); - trapWriter.addTuple( - "type_property", - trapWriter.globalID("type;" + baseType), - name, - trapWriter.globalID("type;" + propertyType)); - } - } - - private void extractTypeAliases(JsonObject aliases) { - JsonArray aliasTypes = aliases.get("aliasTypes").getAsJsonArray(); - JsonArray underlyingTypes = aliases.get("underlyingTypes").getAsJsonArray(); - for (int i = 0; i < aliasTypes.size(); ++i) { - int aliasType = aliasTypes.get(i).getAsInt(); - int underlyingType = underlyingTypes.get(i).getAsInt(); - trapWriter.addTuple( - "type_alias", - trapWriter.globalID("type;" + aliasType), - trapWriter.globalID("type;" + underlyingType)); - } - } - - private void extractSymbol(int index) { - // Format is: kind;decl;parent;name - String[] parts = split(table.getSymbolString(index), 4); - int kind = symbolKind.get(parts[0]); - String name = parts[3]; - Label label = trapWriter.globalID("symbol;" + index); - trapWriter.addTuple("symbols", label, kind, name); - String parentStr = parts[2]; - if (parentStr.length() > 0) { - Label parentLabel = trapWriter.globalID("symbol;" + parentStr); - trapWriter.addTuple("symbol_parent", label, parentLabel); - } - } - - private void extractSymbolNameMapping(String relationName, JsonObject mappings) { - JsonArray symbols = mappings.get("symbols").getAsJsonArray(); - JsonArray names = mappings.get("names").getAsJsonArray(); - for (int i = 0; i < symbols.size(); ++i) { - Label symbol = trapWriter.globalID("symbol;" + symbols.get(i).getAsInt()); - String moduleName = names.get(i).getAsString(); - trapWriter.addTuple(relationName, symbol, moduleName); - } - } - - private void extractSignature(int index) { - // Format is: - // kind;isAbstract;numTypeParams;requiredParams;restParamType;returnType(;paramName;paramType)* - String[] parts = split(table.getSignatureString(index)); - Label label = trapWriter.globalID("signature;" + index); - int kind = Integer.parseInt(parts[0]); - boolean isAbstract = parts[1].equals("t"); - if (isAbstract) { - trapWriter.addTuple("is_abstract_signature", label); - } - int numberOfTypeParameters = Integer.parseInt(parts[2]); - int requiredParameters = Integer.parseInt(parts[3]); - String restParamTypeTag = parts[4]; - if (!restParamTypeTag.isEmpty()) { - trapWriter.addTuple( - "signature_rest_parameter", label, trapWriter.globalID("type;" + restParamTypeTag)); - } - Label returnType = trapWriter.globalID("type;" + parts[5]); - trapWriter.addTuple( - "signature_types", - label, - kind, - table.getSignatureToStringValue(index), - numberOfTypeParameters, - requiredParameters); - trapWriter.addTuple("signature_contains_type", returnType, label, -1); - int numberOfParameters = (parts.length - 6) / 2; // includes type parameters - for (int i = 0; i < numberOfParameters; ++i) { - int partIndex = 6 + (2 * i); - String paramName = parts[partIndex]; - String paramTypeId = parts[partIndex + 1]; - if (paramTypeId.length() > 0) { // Unconstrained type parameters have an empty type ID. - Label paramType = trapWriter.globalID("type;" + parts[partIndex + 1]); - trapWriter.addTuple("signature_contains_type", paramType, label, i); - } - trapWriter.addTuple("signature_parameter_name", label, i, paramName); - } - } - - private void extractSignatureMappings(JsonObject mappings) { - JsonArray baseTypes = mappings.get("baseTypes").getAsJsonArray(); - JsonArray kinds = mappings.get("kinds").getAsJsonArray(); - JsonArray indices = mappings.get("indices").getAsJsonArray(); - JsonArray signatures = mappings.get("signatures").getAsJsonArray(); - for (int i = 0; i < baseTypes.size(); ++i) { - int baseType = baseTypes.get(i).getAsInt(); - int kind = kinds.get(i).getAsInt(); - int index = indices.get(i).getAsInt(); - int signatureId = signatures.get(i).getAsInt(); - trapWriter.addTuple( - "type_contains_signature", - trapWriter.globalID("type;" + baseType), - kind, - index, - trapWriter.globalID("signature;" + signatureId)); - } - } - - private void extractIndexTypeTable(JsonObject table, String relationName) { - JsonArray baseTypes = table.get("baseTypes").getAsJsonArray(); - JsonArray propertyTypes = table.get("propertyTypes").getAsJsonArray(); - for (int i = 0; i < baseTypes.size(); ++i) { - int baseType = baseTypes.get(i).getAsInt(); - int propertyType = propertyTypes.get(i).getAsInt(); - trapWriter.addTuple( - relationName, - trapWriter.globalID("type;" + baseType), - trapWriter.globalID("type;" + propertyType)); - } - } - - private void extractBaseTypes(JsonObject table) { - JsonArray symbols = table.get("symbols").getAsJsonArray(); - JsonArray baseTypeSymbols = table.get("baseTypeSymbols").getAsJsonArray(); - for (int i = 0; i < symbols.size(); ++i) { - int symbolId = symbols.get(i).getAsInt(); - int baseTypeSymbolId = baseTypeSymbols.get(i).getAsInt(); - trapWriter.addTuple( - "base_type_names", - trapWriter.globalID("symbol;" + symbolId), - trapWriter.globalID("symbol;" + baseTypeSymbolId)); - } - } - - private void extractSelfTypes(JsonObject table) { - JsonArray symbols = table.get("symbols").getAsJsonArray(); - JsonArray selfTypes = table.get("selfTypes").getAsJsonArray(); - for (int i = 0; i < symbols.size(); ++i) { - int symbolId = symbols.get(i).getAsInt(); - int typeId = selfTypes.get(i).getAsInt(); - trapWriter.addTuple( - "self_types", - trapWriter.globalID("symbol;" + symbolId), - trapWriter.globalID("type;" + typeId)); - } - } - - /** Like {@link #split(String)} without a limit. */ - private static String[] split(String input) { - return split(input, -1); - } - - /** - * Splits the input around the semicolon (;) character, preserving all empty - * substrings. - * - *

At most limit substrings will be extracted. If the limit is reached, the last - * substring will extend to the end of the string, possibly itself containing semicolons. - * - *

Note that the {@link String#split(String)} method does not preserve empty substrings at the - * end of the string in case the string ends with a semicolon. - */ - private static String[] split(String input, int limit) { - List result = new ArrayList(); - int lastPos = 0; - for (int i = 0; i < input.length(); ++i) { - if (input.charAt(i) == ';') { - result.add(input.substring(lastPos, i)); - lastPos = i + 1; - if (result.size() == limit - 1) break; - } - } - result.add(input.substring(lastPos)); - return result.toArray(EMPTY_STRING_ARRAY); - } - - private static final String[] EMPTY_STRING_ARRAY = new String[0]; -} diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptParser.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptParser.java index d19490286b77..09f05b2d9e0b 100644 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptParser.java +++ b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptParser.java @@ -463,113 +463,6 @@ public void prepareFiles(List files) { checkResponseType(response, "ok"); } - /** - * Converts a map to an array of [key, value] pairs. - */ - private JsonArray mapToArray(Map map) { - JsonArray result = new JsonArray(); - map.forEach( - (key, path) -> { - JsonArray entry = new JsonArray(); - entry.add(key); - entry.add(path.toString()); - result.add(entry); - }); - return result; - } - - private static Set getFilesFromJsonArray(JsonArray array) { - Set files = new LinkedHashSet<>(); - for (JsonElement elm : array) { - files.add(new File(elm.getAsString())); - } - return files; - } - - /** - * Returns the set of files included by the inclusion pattern in the given tsconfig.json file. - */ - public Set getOwnFiles(File tsConfigFile, DependencyInstallationResult deps, VirtualSourceRoot vroot) { - JsonObject request = makeLoadCommand("get-own-files", tsConfigFile, deps, vroot); - JsonObject response = talkToParserWrapper(request); - try { - checkResponseType(response, "file-list"); - return getFilesFromJsonArray(response.get("ownFiles").getAsJsonArray()); - } catch (IllegalStateException e) { - throw new CatastrophicError( - "TypeScript parser wrapper sent unexpected response: " + response, e); - } - } - - /** - * Opens a new project based on a tsconfig.json file. The compiler will analyze all files in the - * project. - * - *

Call {@link #parse} to access individual files in the project. - * - *

Only one project should be opened at once. - */ - public ParsedProject openProject(File tsConfigFile, DependencyInstallationResult deps, VirtualSourceRoot vroot) { - JsonObject request = makeLoadCommand("open-project", tsConfigFile, deps, vroot); - JsonObject response = talkToParserWrapper(request); - try { - checkResponseType(response, "project-opened"); - ParsedProject project = new ParsedProject(tsConfigFile, - getFilesFromJsonArray(response.get("ownFiles").getAsJsonArray()), - getFilesFromJsonArray(response.get("allFiles").getAsJsonArray())); - return project; - } catch (IllegalStateException e) { - throw new CatastrophicError( - "TypeScript parser wrapper sent unexpected response: " + response, e); - } - } - - private JsonObject makeLoadCommand(String command, File tsConfigFile, DependencyInstallationResult deps, VirtualSourceRoot vroot) { - JsonObject request = new JsonObject(); - request.add("command", new JsonPrimitive(command)); - request.add("tsConfig", new JsonPrimitive(tsConfigFile.getPath())); - request.add("packageEntryPoints", mapToArray(deps.getPackageEntryPoints())); - request.add("packageJsonFiles", mapToArray(deps.getPackageJsonFiles())); - request.add("sourceRoot", vroot.getSourceRoot() == null - ? JsonNull.INSTANCE - : new JsonPrimitive(vroot.getSourceRoot().toString())); - request.add("virtualSourceRoot", vroot.getVirtualSourceRoot() == null - ? JsonNull.INSTANCE - : new JsonPrimitive(vroot.getVirtualSourceRoot().toString())); - return request; - } - - /** - * Closes a project previously opened. - * - *

This main purpose is to free heap space in the Node.js process. - */ - public void closeProject(File tsConfigFile) { - JsonObject request = new JsonObject(); - request.add("command", new JsonPrimitive("close-project")); - request.add("tsConfig", new JsonPrimitive(tsConfigFile.getPath())); - JsonObject response = talkToParserWrapper(request); - try { - checkResponseType(response, "project-closed"); - } catch (IllegalStateException e) { - throw new CatastrophicError( - "TypeScript parser wrapper sent unexpected response: " + response, e); - } - } - - public TypeTable getTypeTable() { - JsonObject request = new JsonObject(); - request.add("command", new JsonPrimitive("get-type-table")); - JsonObject response = talkToParserWrapper(request); - try { - checkResponseType(response, "type-table"); - return new TypeTable(response.get("typeTable").getAsJsonObject()); - } catch (IllegalStateException e) { - throw new CatastrophicError( - "TypeScript parser wrapper sent unexpected response: " + response, e); - } - } - /** * Closes any open project, and in general, brings the TypeScript wrapper to a fresh state as if * it had just been restarted. diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeTable.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeTable.java deleted file mode 100644 index 53d8c437d922..000000000000 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeTable.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.semmle.ts.extractor; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - -/** - * Holds the output of the get-type-table command. - * - *

See documentation in parser-wrapper/src/type_table.ts. - */ -public class TypeTable { - private final JsonArray typeStrings; - private final JsonArray typeToStringValues; - private final JsonObject propertyLookups; - private final JsonObject typeAliases; - private final JsonArray symbolStrings; - private final JsonObject moduleMappings; - private final JsonObject globalMappings; - private final JsonArray signatureStrings; - private final JsonObject signatureMappings; - private final JsonArray signatureToStringValues; - private final JsonObject stringIndexTypes; - private final JsonObject numberIndexTypes; - private final JsonObject baseTypes; - private final JsonObject selfTypes; - - public TypeTable(JsonObject typeTable) { - this.typeStrings = typeTable.get("typeStrings").getAsJsonArray(); - this.typeToStringValues = typeTable.get("typeToStringValues").getAsJsonArray(); - this.propertyLookups = typeTable.get("propertyLookups").getAsJsonObject(); - this.typeAliases = typeTable.get("typeAliases").getAsJsonObject(); - this.symbolStrings = typeTable.get("symbolStrings").getAsJsonArray(); - this.moduleMappings = typeTable.get("moduleMappings").getAsJsonObject(); - this.globalMappings = typeTable.get("globalMappings").getAsJsonObject(); - this.signatureStrings = typeTable.get("signatureStrings").getAsJsonArray(); - this.signatureMappings = typeTable.get("signatureMappings").getAsJsonObject(); - this.signatureToStringValues = typeTable.get("signatureToStringValues").getAsJsonArray(); - this.numberIndexTypes = typeTable.get("numberIndexTypes").getAsJsonObject(); - this.stringIndexTypes = typeTable.get("stringIndexTypes").getAsJsonObject(); - this.baseTypes = typeTable.get("baseTypes").getAsJsonObject(); - this.selfTypes = typeTable.get("selfTypes").getAsJsonObject(); - } - - public String getTypeString(int index) { - return typeStrings.get(index).getAsString(); - } - - public String getTypeToStringValue(int index) { - return typeToStringValues.get(index).getAsString(); - } - - public JsonObject getPropertyLookups() { - return propertyLookups; - } - - public JsonObject getTypeAliases() { - return typeAliases; - } - - public int getNumberOfTypes() { - return typeStrings.size(); - } - - public String getSymbolString(int index) { - return symbolStrings.get(index).getAsString(); - } - - public int getNumberOfSymbols() { - return symbolStrings.size(); - } - - public JsonObject getModuleMappings() { - return moduleMappings; - } - - public JsonObject getGlobalMappings() { - return globalMappings; - } - - public JsonArray getSignatureStrings() { - return signatureStrings; - } - - public int getNumberOfSignatures() { - return signatureStrings.size(); - } - - public String getSignatureString(int i) { - return signatureStrings.get(i).getAsString(); - } - - public JsonObject getSignatureMappings() { - return signatureMappings; - } - - public JsonArray getSignatureToStringValues() { - return signatureToStringValues; - } - - public String getSignatureToStringValue(int i) { - return signatureToStringValues.get(i).getAsString(); - } - - public JsonObject getNumberIndexTypes() { - return numberIndexTypes; - } - - public JsonObject getStringIndexTypes() { - return stringIndexTypes; - } - - public JsonObject getBaseTypes() { - return baseTypes; - } - - public JsonObject getSelfTypes() { - return selfTypes; - } -} From 488da145e88ed397cfcb2116a1db6eec6595147d Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 24 Jun 2025 17:46:30 +0200 Subject: [PATCH 21/32] JS: Don't try to augment invalid files This check existed on the code path for full type extraction, but not for plain single-file extraction. --- javascript/extractor/lib/typescript/src/main.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index eb888a00ea8f..aa69642e04be 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -372,7 +372,9 @@ function isExtractableSourceFile(ast: ast_extractor.AugmentedSourceFile): boolea */ function getAstForFile(filename: string): ts.SourceFile { let { ast, code } = parseSingleFile(filename); - ast_extractor.augmentAst(ast, code, null); + if (ast != null && isExtractableSourceFile(ast)) { + ast_extractor.augmentAst(ast, code, null); + } return ast; } From 92dd5bd1f414845522f11c90a3dd66a8ba1346b4 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 4 Jun 2025 14:58:41 +0200 Subject: [PATCH 22/32] JS: Add deprecation comment to qldoc --- javascript/ql/lib/semmle/javascript/Expr.qll | 6 + .../ql/lib/semmle/javascript/TypeScript.qll | 225 ++++++++++++++++++ 2 files changed, 231 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/Expr.qll b/javascript/ql/lib/semmle/javascript/Expr.qll index f1177d1a773b..ae02511ba410 100644 --- a/javascript/ql/lib/semmle/javascript/Expr.qll +++ b/javascript/ql/lib/semmle/javascript/Expr.qll @@ -171,6 +171,8 @@ class Expr extends @expr, ExprOrStmt, ExprOrType, AST::ValueNode { predicate mayReferToParameter(Parameter p) { DataFlow::parameterNode(p).flowsToExpr(this) } /** + * DEPRECATED. Use `getTypeBinding()` instead. + * * Gets the static type of this expression, as determined by the TypeScript type system. * * Has no result if the expression is in a JavaScript file or in a TypeScript @@ -988,6 +990,8 @@ class InvokeExpr extends @invokeexpr, Expr { } /** + * DEPRECATED. No longer supported. + * * Gets the call signature of the invoked function, as determined by the TypeScript * type system, with overloading resolved and type parameters substituted. * @@ -1004,6 +1008,8 @@ class InvokeExpr extends @invokeexpr, Expr { int getResolvedOverloadIndex() { invoke_expr_overload_index(this, result) } /** + * DEPRECATED. No longer directly supported, but `getResolvedCallee()` may be usable as an alternative. + * * Gets the canonical name of the static call target, as determined by the TypeScript type system. * * This predicate is only populated for files extracted with full TypeScript extraction. diff --git a/javascript/ql/lib/semmle/javascript/TypeScript.qll b/javascript/ql/lib/semmle/javascript/TypeScript.qll index 0a093dc9f039..79b71fcd8c05 100644 --- a/javascript/ql/lib/semmle/javascript/TypeScript.qll +++ b/javascript/ql/lib/semmle/javascript/TypeScript.qll @@ -1769,6 +1769,11 @@ class TypeRootFolder extends Folder { /// Types /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A static type in the TypeScript type system. * * Types are generally not associated with a specific location or AST node. @@ -1972,6 +1977,11 @@ deprecated class Type extends @type { } /** + * * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A union type or intersection type, such as `string | number` or `T & U`. */ deprecated class UnionOrIntersectionType extends Type, @union_or_intersection_type { @@ -1992,6 +2002,11 @@ deprecated class UnionOrIntersectionType extends Type, @union_or_intersection_ty } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A union type, such as `string | number`. * * Note that the `boolean` type is represented as the union `true | false`, @@ -2000,11 +2015,21 @@ deprecated class UnionOrIntersectionType extends Type, @union_or_intersection_ty deprecated class UnionType extends UnionOrIntersectionType, @union_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * An intersection type, such as `T & {x: number}`. */ deprecated class IntersectionType extends UnionOrIntersectionType, @intersection_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that describes a JavaScript `Array` object. * * Specifically, the following three kinds of types are considered array types: @@ -2029,6 +2054,11 @@ deprecated class ArrayType extends Type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * An array type such as `Array`, or equivalently, `string[]`. */ deprecated class PlainArrayType extends ArrayType, TypeReference { @@ -2038,6 +2068,11 @@ deprecated class PlainArrayType extends ArrayType, TypeReference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A read-only array type such as `ReadonlyArray`. */ deprecated class ReadonlyArrayType extends ArrayType, TypeReference { @@ -2045,6 +2080,11 @@ deprecated class ReadonlyArrayType extends ArrayType, TypeReference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A tuple type, such as `[number, string]`. */ deprecated class TupleType extends ArrayType, @tuple_type { @@ -2101,31 +2141,61 @@ deprecated class TupleType extends ArrayType, @tuple_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The predefined `any` type. */ deprecated class AnyType extends Type, @any_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The predefined `unknown` type. */ deprecated class UnknownType extends Type, @unknown_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The predefined `string` type. */ deprecated class StringType extends Type, @string_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The predefined `number` type. */ deprecated class NumberType extends Type, @number_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The predefined `bigint` type. */ deprecated class BigIntType extends Type, @bigint_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A boolean, number, or string literal type. */ deprecated class LiteralType extends Type, @literal_type { @@ -2136,6 +2206,11 @@ deprecated class LiteralType extends Type, @literal_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The boolean literal type `true` or `false`. */ deprecated class BooleanLiteralType extends LiteralType, @boolean_literal_type { @@ -2167,6 +2242,11 @@ deprecated class NumberLiteralType extends LiteralType, @number_literal_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A string literal as a static type. */ deprecated class StringLiteralType extends LiteralType, @string_literal_type { @@ -2174,6 +2254,11 @@ deprecated class StringLiteralType extends LiteralType, @string_literal_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A bigint literal as a static type. */ deprecated class BigIntLiteralType extends LiteralType { @@ -2191,6 +2276,11 @@ deprecated class BigIntLiteralType extends LiteralType { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `boolean` type, internally represented as the union type `true | false`. */ deprecated class BooleanType extends UnionType { @@ -2202,6 +2292,11 @@ deprecated class BooleanType extends UnionType { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `string` type or a string literal type. */ deprecated class StringLikeType extends Type { @@ -2212,6 +2307,11 @@ deprecated class StringLikeType extends Type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `number` type or a number literal type. */ deprecated class NumberLikeType extends Type { @@ -2222,6 +2322,11 @@ deprecated class NumberLikeType extends Type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `boolean`, `true,` or `false` type. */ deprecated class BooleanLikeType extends Type { @@ -2232,36 +2337,71 @@ deprecated class BooleanLikeType extends Type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `void` type. */ deprecated class VoidType extends Type, @void_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `undefined` type. */ deprecated class UndefinedType extends Type, @undefined_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `null` type. */ deprecated class NullType extends Type, @null_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `never` type. */ deprecated class NeverType extends Type, @never_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `symbol` type or a specific `unique symbol` type. */ deprecated class SymbolType extends Type, @symbol_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `symbol` type. */ deprecated class PlainSymbolType extends SymbolType, @plain_symbol_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A `unique symbol` type. */ deprecated class UniqueSymbolType extends SymbolType, @unique_symbol_type { @@ -2291,11 +2431,21 @@ deprecated class UniqueSymbolType extends SymbolType, @unique_symbol_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The `object` type. */ deprecated class ObjectKeywordType extends Type, @objectkeyword_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to a class, interface, enum, or enum member. */ deprecated class TypeReference extends Type, @type_reference { @@ -2349,6 +2499,11 @@ deprecated class TypeReference extends Type, @type_reference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to a class, possibly with type arguments. */ deprecated class ClassType extends TypeReference { @@ -2363,6 +2518,11 @@ deprecated class ClassType extends TypeReference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to an interface, possibly with type arguents. */ deprecated class InterfaceType extends TypeReference { @@ -2377,6 +2537,11 @@ deprecated class InterfaceType extends TypeReference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to an enum. */ deprecated class EnumType extends TypeReference { @@ -2391,6 +2556,11 @@ deprecated class EnumType extends TypeReference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to the value of an enum member. */ deprecated class EnumLiteralType extends TypeReference { @@ -2405,6 +2575,11 @@ deprecated class EnumLiteralType extends TypeReference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to a type alias. */ deprecated class TypeAliasReference extends TypeReference { @@ -2419,11 +2594,21 @@ deprecated class TypeAliasReference extends TypeReference { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * An anonymous interface type, such as `{ x: number }`. */ deprecated class AnonymousInterfaceType extends Type, @object_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to a type variable. */ deprecated class TypeVariableType extends Type, @typevariable_type { @@ -2464,6 +2649,11 @@ deprecated class TypeVariableType extends Type, @typevariable_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to a type variable declared on a class, interface or function. */ deprecated class CanonicalTypeVariableType extends TypeVariableType, @canonical_type_variable_type { @@ -2475,6 +2665,11 @@ deprecated class CanonicalTypeVariableType extends TypeVariableType, @canonical_ } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type that refers to a type variable without a canonical name. * * These arise in generic call signatures such as `(x: T) => T`. @@ -2493,6 +2688,11 @@ deprecated class LexicalTypeVariableType extends TypeVariableType, @lexical_type } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A `this` type in a specific class or interface. * * For example, the return type of `span` below is a `this` type @@ -2513,6 +2713,11 @@ deprecated class ThisType extends Type, @this_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * The type of a named value, `typeof X`, typically denoting the type of * a class constructor, namespace object, enum object, or module object. */ @@ -2589,6 +2794,11 @@ module SignatureKind { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A function or constructor signature in a TypeScript type. */ deprecated class CallSignatureType extends @signature_type { @@ -2738,11 +2948,21 @@ deprecated class CallSignatureType extends @signature_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A function call signature in a type, that is, a signature without the `new` keyword. */ deprecated class FunctionCallSignatureType extends CallSignatureType, @function_signature_type { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A constructor call signature in a type, that is, a signature with the `new` keyword. */ deprecated class ConstructorCallSignatureType extends CallSignatureType, @constructor_signature_type @@ -2775,6 +2995,11 @@ deprecated private class PromiseTypeName extends TypeName { } /** + * DEPRECATED. Static types from the TypeScript compiler are not longer available. Use one of the following alternatives instead: + * - `Expr.getTypeBinding()` + * - `Expr.getNameBinding()` + * - `TypeAnnotation.getTypeBinding()` + * * A type such as `Promise`, describing a promise or promise-like object. * * This includes types whose name and `then` method signature suggest it is a promise, From 7cc248703a1d2a22b13d3e8f749feb6659ae53e3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 10 Jun 2025 11:30:42 +0200 Subject: [PATCH 23/32] JS: Add test for dynamic imports --- .../ql/test/library-tests/UnderlyingTypes/dynamicImportLib.ts | 4 ++++ .../ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportLib.ts create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportLib.ts b/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportLib.ts new file mode 100644 index 000000000000..93324a153909 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportLib.ts @@ -0,0 +1,4 @@ +import * as express from 'express'; + +export async function getRequest(): express.Request { +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts b/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts new file mode 100644 index 000000000000..9be247701482 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts @@ -0,0 +1,4 @@ +async function t1() { + const e = await import('./dynamicImportLib'); + e.getRequest(); // $ MISSING: hasUnderlyingType='express'.Request +} From b1d4776b173d3b5e8946ccaba2843e5793e4f75e Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 10 Jun 2025 11:25:32 +0200 Subject: [PATCH 24/32] JS: Handle name resolution through dynamic imports --- .../javascript/internal/NameResolution.qll | 22 +++++++++++++++++++ .../UnderlyingTypes/dynamicImportUse.ts | 2 +- .../UnderlyingTypes/test.expected | 1 + 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index 2397716bd58a..b25c98fd693b 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -46,6 +46,9 @@ module NameResolution { this instanceof Module or this instanceof NamespaceDefinition // `module {}` or `enum {}` statement + or + // A module wrapped in a promise. We model this as a module exporting the actual module in a property called `$$promise-content`. + this instanceof DynamicImportExpr } } @@ -232,6 +235,19 @@ module NameResolution { name = expr.getName() and node2 = expr ) + or + exists(AwaitExpr await | + node1 = await.getOperand() and + name = "$$promise-content" and + node2 = await + ) + or + exists(MethodCallExpr call | + call.getMethodName() = "then" and + node1 = call.getReceiver() and + name = "$$promise-content" and + node2 = call.getArgument(0).(Function).getParameter(0) + ) } private signature module TypeResolutionInputSig { @@ -334,6 +350,12 @@ module NameResolution { ) or storeToVariable(result, name, mod.(Closure::ClosureModule).getExportsVariable()) + or + exists(DynamicImportExpr imprt | + mod = imprt and + name = "$$promise-content" and + result = imprt.getImportedPathExpr() + ) } /** diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts b/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts index 9be247701482..cca2b265f285 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts +++ b/javascript/ql/test/library-tests/UnderlyingTypes/dynamicImportUse.ts @@ -1,4 +1,4 @@ async function t1() { const e = await import('./dynamicImportLib'); - e.getRequest(); // $ MISSING: hasUnderlyingType='express'.Request + e.getRequest(); // $ hasUnderlyingType='express'.Request } diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected index 9525a32706b4..21df0c0b9210 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected @@ -15,6 +15,7 @@ | contextualTypes.ts:27:16:27:18 | req | 'express'.Request | | contextualTypes.ts:34:20:34:22 | req | 'express'.Request | | contextualTypes.ts:41:16:41:18 | req | 'express'.Request | +| dynamicImportUse.ts:3:5:3:18 | e.getRequest() | 'express'.Request | | expressBulkExport.use.ts:3:13:3:15 | req | 'express'.Request | | expressBulkExport.use.ts:6:13:6:15 | res | 'express'.Response | | expressExportAssign.use.ts:3:13:3:15 | req | 'express'.Request | From c8b267420640c1d360bea426e481b4b92ffc6f8f Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 12 Jun 2025 13:32:51 +0200 Subject: [PATCH 25/32] JS: Add support for index expressions --- .../ql/lib/semmle/javascript/internal/TypeResolution.qll | 7 +++++++ .../ql/test/library-tests/UnderlyingTypes/indexExpr.ts | 8 ++++++++ .../ql/test/library-tests/UnderlyingTypes/test.expected | 1 + 3 files changed, 16 insertions(+) create mode 100644 javascript/ql/test/library-tests/UnderlyingTypes/indexExpr.ts diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index 9829651621e4..a158ed6421a5 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -130,6 +130,13 @@ module TypeResolution { or SummaryTypeTracker::basicLoadStep(object.(AST::ValueNode).flow(), member.(AST::ValueNode).flow(), contents) + or + exists(IndexExpr index | + not exists(index.getPropertyName()) and + object = index.getBase() and + member = index and + contents = DataFlow::ContentSet::arrayElement() + ) } predicate callTarget(InvokeExpr call, Function target) { diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/indexExpr.ts b/javascript/ql/test/library-tests/UnderlyingTypes/indexExpr.ts new file mode 100644 index 000000000000..e9ced8ad9b83 --- /dev/null +++ b/javascript/ql/test/library-tests/UnderlyingTypes/indexExpr.ts @@ -0,0 +1,8 @@ +import * as express from 'express'; + +interface I { + [s: string]: express.Request; +} +function t1(obj: I, x: string) { + obj[x]; // $ hasUnderlyingType='express'.Request +} diff --git a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected index 21df0c0b9210..b49310317bee 100644 --- a/javascript/ql/test/library-tests/UnderlyingTypes/test.expected +++ b/javascript/ql/test/library-tests/UnderlyingTypes/test.expected @@ -30,6 +30,7 @@ | globals.ts:1:13:1:14 | el | HTMLElement | | globals.ts:6:13:6:14 | el | HTMLInputElement | | globals.ts:9:13:9:15 | req | Express.Request | +| indexExpr.ts:7:5:7:10 | obj[x] | 'express'.Request | | jsdoc.js:7:13:7:15 | req | 'express'.Request | | jsdoc.js:13:13:13:15 | res | 'express'.Response | | namedImport.ts:3:13:3:15 | req | 'express'.Request | From aef362152ec38ff53481a84fdbd1218a31b81326 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 24 Jun 2025 11:50:16 +0200 Subject: [PATCH 26/32] JS: Change notes --- .../2025-06-24-no-type-extraction-breaking.md | 9 +++++++++ .../ql/src/change-notes/2025-06-24-no-type-extraction.md | 6 ++++++ 2 files changed, 15 insertions(+) create mode 100644 javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md create mode 100644 javascript/ql/src/change-notes/2025-06-24-no-type-extraction.md diff --git a/javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md b/javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md new file mode 100644 index 000000000000..caa166413402 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md @@ -0,0 +1,9 @@ +--- +category: breaking +--- +* The `Type` and `Symbol` classes have been deprecated and will be empty in newly extracted databases, since the TypeScript extractor no longer populates them. + This is breaking change for custom queries that explicitly relied on these classes. + Such queries will still compile, but with deprecation warnings, and may have different query results due to type information no longer being available. + We expect most custom queries will not be affected, however. If a custom query has no deprecation warnings, it should not be affected by this change. + Uses of `getType()` should be rewritten to use the new `getTypeBinding()` or `getNameBinding()` APIs instead. + If the new API is not sufficient, please consider opening an issue in `github/codeql` describing your use-case. diff --git a/javascript/ql/src/change-notes/2025-06-24-no-type-extraction.md b/javascript/ql/src/change-notes/2025-06-24-no-type-extraction.md new file mode 100644 index 000000000000..516e167636a6 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-06-24-no-type-extraction.md @@ -0,0 +1,6 @@ +--- +category: majorAnalysis +--- +* The TypeScript extractor no longer relies on the TypeScript compiler for extracting type information. + Instead, the information we need from types is now derived by an algorithm written in QL. + This results in more robust extraction with faster extraction times, in some cases significantly faster. From 02cdde144756d2b529337111ad3054538a0c9ac6 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 25 Jun 2025 14:28:56 +0200 Subject: [PATCH 27/32] JS: Fix imprecise condition --- javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 2bdddaf99333..3945c6aafeab 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -783,7 +783,7 @@ private CompletableFuture extractSource() throws IOException { extractTypeScript(filesToExtract, extractedFiles, extractors, tsconfigFiles, dependencyInstallationResult); - boolean hasTypeScriptFiles = extractedFiles.size() > 0; + boolean hasTypeScriptFiles = hasTypeScriptFiles(filesToExtract); // extract remaining files return extractFiles( From 5289e4f424b3f2fc22d10811d721eb79e8270d47 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 25 Jun 2025 14:30:28 +0200 Subject: [PATCH 28/32] JS: Fix a bug in a unit test The 'extractTypeScriptFiles' override did not incorporate the file type and one of our unit tests was expecting this. The test was previously passing for the wrong reasons. --- .../semmle/js/extractor/test/AutoBuildTests.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java b/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java index 28c8e593dcd1..5bbb0bb292e5 100644 --- a/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java +++ b/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java @@ -111,12 +111,17 @@ private void runTest() throws IOException { try { Set actual = new LinkedHashSet<>(); new AutoBuild() { - @Override - protected CompletableFuture extract(FileExtractor extractor, Path file, boolean concurrent) { + private void markExtracted(Path file, FileExtractor extractor) { String extracted = file.toString(); - if (extractor.getConfig().hasFileType()) + if (extractor.getConfig().hasFileType()) { extracted += ":" + extractor.getFileType(file.toFile()); + } actual.add(extracted); + } + + @Override + protected CompletableFuture extract(FileExtractor extractor, Path file, boolean concurrent) { + markExtracted(file, extractor); return CompletableFuture.completedFuture(null); } @@ -134,7 +139,7 @@ public void extractTypeScriptFiles( java.util.Set extractedFiles, FileExtractors extractors) { for (Path f : files) { - actual.add(f.toString()); + markExtracted(f, extractors.forFile(f)); extractedFiles.add(f); } } From 2aad14771c14c9fcbe6c45cd25cb36ea9d5d6e39 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Jul 2025 08:39:17 +0200 Subject: [PATCH 29/32] JS: Remove TypeScriptMode --- .../com/semmle/js/extractor/AutoBuild.java | 9 ++----- .../semmle/js/extractor/ExtractorConfig.java | 17 ------------- .../semmle/js/extractor/FileExtractor.java | 2 -- .../src/com/semmle/js/extractor/Main.java | 25 ++----------------- .../semmle/js/extractor/TypeScriptMode.java | 18 ------------- 5 files changed, 4 insertions(+), 67 deletions(-) delete mode 100644 javascript/extractor/src/com/semmle/js/extractor/TypeScriptMode.java diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 3945c6aafeab..230f6da5b3d8 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -218,7 +218,6 @@ public class AutoBuild { private final Set xmlExtensions = new LinkedHashSet<>(); private ProjectLayout filters; private final Path LGTM_SRC, SEMMLE_DIST; - private final TypeScriptMode typeScriptMode; private final String defaultEncoding; private ExecutorService threadPool; private volatile boolean seenCode = false; @@ -236,8 +235,6 @@ public AutoBuild() { this.SEMMLE_DIST = Paths.get(EnvironmentVariables.getExtractorRoot()); this.outputConfig = new ExtractorOutputConfig(LegacyLanguage.JAVASCRIPT); this.trapCache = ITrapCache.fromExtractorOptions(); - this.typeScriptMode = - getEnumFromEnvVar("LGTM_INDEX_TYPESCRIPT", TypeScriptMode.class, TypeScriptMode.BASIC); this.defaultEncoding = getEnvVar("LGTM_INDEX_DEFAULT_ENCODING"); this.installDependencies = Boolean.valueOf(getEnvVar("LGTM_INDEX_TYPESCRIPT_INSTALL_DEPS")); this.virtualSourceRoot = makeVirtualSourceRoot(); @@ -393,7 +390,7 @@ private void setupFilters() { defaultExtract.add(FileType.HTML); defaultExtract.add(FileType.JS); defaultExtract.add(FileType.YAML); - if (typeScriptMode != TypeScriptMode.NONE) defaultExtract.add(FileType.TYPESCRIPT); + defaultExtract.add(FileType.TYPESCRIPT); for (FileType filetype : defaultExtract) for (String extension : filetype.getExtensions()) patterns.add("**/*" + extension); @@ -1042,7 +1039,6 @@ private Path guessPackageMainFile(Path packageJsonFile, PackageJson packageJson, private ExtractorConfig mkExtractorConfig() { ExtractorConfig config = new ExtractorConfig(true); config = config.withSourceType(getSourceType()); - config = config.withTypeScriptMode(typeScriptMode); config = config.withVirtualSourceRoot(virtualSourceRoot); if (defaultEncoding != null) config = config.withDefaultEncoding(defaultEncoding); return config; @@ -1135,8 +1131,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) } // extract TypeScript projects from 'tsconfig.json' - if (typeScriptMode != TypeScriptMode.NONE - && treatAsTSConfig(file.getFileName().toString()) + if (treatAsTSConfig(file.getFileName().toString()) && !excludes.contains(file) && isFileIncluded(file)) { tsconfigFiles.add(file); diff --git a/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java b/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java index 0104e566e35f..884d07446941 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ExtractorConfig.java @@ -221,9 +221,6 @@ public Set getPredefinedGlobals() { /** Should textual information be extracted into the lines/4 relation? */ private boolean extractLines; - /** Should TypeScript files be extracted? */ - private TypeScriptMode typescriptMode; - /** Override amount of RAM to allocate to the TypeScript compiler. */ private int typescriptRam; @@ -245,7 +242,6 @@ public ExtractorConfig(boolean experimental) { this.esnext = true; this.v8Extensions = true; } - this.typescriptMode = TypeScriptMode.NONE; this.e4x = experimental; this.defaultEncoding = StandardCharsets.UTF_8.name(); this.virtualSourceRoot = VirtualSourceRoot.none; @@ -266,7 +262,6 @@ public ExtractorConfig(ExtractorConfig that) { this.sourceType = that.sourceType; this.htmlHandling = that.htmlHandling; this.extractLines = that.extractLines; - this.typescriptMode = that.typescriptMode; this.typescriptRam = that.typescriptRam; this.defaultEncoding = that.defaultEncoding; this.virtualSourceRoot = that.virtualSourceRoot; @@ -416,20 +411,10 @@ public ExtractorConfig withExtractLines(boolean extractLines) { return res; } - public TypeScriptMode getTypeScriptMode() { - return typescriptMode; - } - public int getTypeScriptRam() { return typescriptRam; } - public ExtractorConfig withTypeScriptMode(TypeScriptMode typescriptMode) { - ExtractorConfig res = new ExtractorConfig(this); - res.typescriptMode = typescriptMode; - return res; - } - public ExtractorConfig withTypeScriptRam(int ram) { ExtractorConfig res = new ExtractorConfig(this); res.typescriptRam = ram; @@ -490,8 +475,6 @@ public String toString() { + sourceType + ", extractLines=" + extractLines - + ", typescriptMode=" - + typescriptMode + ", defaultEncoding=" + defaultEncoding + ", virtualSourceRoot=" diff --git a/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java index 207d531230ce..5ebd7374a771 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java @@ -217,8 +217,6 @@ public String toString() { TYPESCRIPT(".ts", ".tsx", ".mts", ".cts") { @Override protected boolean contains(File f, String lcExt, ExtractorConfig config) { - if (config.getTypeScriptMode() == TypeScriptMode.NONE) return false; - // Read the beginning of the file to guess the file type. if (hasBadFileHeader(f, lcExt, config)) { return false; diff --git a/javascript/extractor/src/com/semmle/js/extractor/Main.java b/javascript/extractor/src/com/semmle/js/extractor/Main.java index 60dd69881165..03ef253f357e 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/Main.java +++ b/javascript/extractor/src/com/semmle/js/extractor/Main.java @@ -77,7 +77,6 @@ public class Main { private PathMatcher includeMatcher, excludeMatcher; private FileExtractor fileExtractor; private ExtractorState extractorState; - private Set projectFiles = new LinkedHashSet<>(); private Set files = new LinkedHashSet<>(); private final Set extractedFiles = new LinkedHashSet<>(); @@ -119,10 +118,6 @@ public void run(String[] args) { } // Sort files for determinism - projectFiles = projectFiles.stream() - .sorted(AutoBuild.FILE_ORDERING) - .collect(Collectors.toCollection(() -> new LinkedHashSet<>())); - files = files.stream() .sorted(AutoBuild.FILE_ORDERING) .collect(Collectors.toCollection(() -> new LinkedHashSet<>())); @@ -256,11 +251,8 @@ public void setupMatchers(ArgsParser ap) { includes.add("**/.babelrc*.json"); - // extract TypeScript if `--typescript` or `--typescript-full` was specified - if (getTypeScriptMode(ap) != TypeScriptMode.NONE) { - addIncludesFor(includes, FileType.TYPESCRIPT); - includes.add("**/*tsconfig*.json"); - } + addIncludesFor(includes, FileType.TYPESCRIPT); + includes.add("**/*tsconfig*.json"); // add explicit include patterns for (String pattern : ap.getZeroOrMore(P_INCLUDE)) @@ -394,12 +386,6 @@ private boolean enableExperimental(ArgsParser ap) { return ap.has(P_EXPERIMENTAL) || ap.has(P_JSCRIPT) || ap.has(P_MOZ_EXTENSIONS); } - private static TypeScriptMode getTypeScriptMode(ArgsParser ap) { - if (ap.has(P_TYPESCRIPT_FULL)) return TypeScriptMode.FULL; - if (ap.has(P_TYPESCRIPT)) return TypeScriptMode.BASIC; - return TypeScriptMode.NONE; - } - private Path inferSourceRoot(ArgsParser ap) { List files = getFilesArg(ap); Path sourceRoot = files.iterator().next().toPath().toAbsolutePath().getParent(); @@ -430,7 +416,6 @@ private ExtractorConfig parseJSOptions(ArgsParser ap) { .withFileType(getFileType(ap)) .withSourceType(ap.getEnum(P_SOURCE_TYPE, SourceType.class, SourceType.AUTO)) .withExtractLines(ap.has(P_EXTRACT_PROGRAM_TEXT)) - .withTypeScriptMode(getTypeScriptMode(ap)) .withTypeScriptRam( ap.has(P_TYPESCRIPT_RAM) ? UnitParser.parseOpt(ap.getString(P_TYPESCRIPT_RAM), UnitParser.MEGABYTES) @@ -494,12 +479,6 @@ private void collectFiles(File root, boolean explicit) { && (explicit || includeMatcher.matches(path) && !excludeMatcher.matches(path))) { files.add(normalizeFile(root)); } - - if (extractorConfig.getTypeScriptMode() == TypeScriptMode.FULL - && AutoBuild.treatAsTSConfig(root.getName()) - && !excludeMatcher.matches(path)) { - projectFiles.add(root); - } } } diff --git a/javascript/extractor/src/com/semmle/js/extractor/TypeScriptMode.java b/javascript/extractor/src/com/semmle/js/extractor/TypeScriptMode.java deleted file mode 100644 index f057456b7891..000000000000 --- a/javascript/extractor/src/com/semmle/js/extractor/TypeScriptMode.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.semmle.js.extractor; - -/** The amount of information to extract from TypeScript files. */ -public enum TypeScriptMode { - /** TypeScript files will not be extracted. */ - NONE, - - /** - * Only syntactic information will be extracted from TypeScript files. - * - *

This requires Node.js and the TypeScript compiler to be installed if the project contains - * any TypeScript files. - */ - BASIC, - - /** Extract as much as possible from TypeScript files. */ - FULL; -} From 4b2025d2c41f9ee3bb29af18579889b1f9eddccb Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Jul 2025 09:54:18 +0200 Subject: [PATCH 30/32] JS: Remove obsolete unit tests --- .../js/extractor/test/AutoBuildTests.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java b/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java index 5bbb0bb292e5..b972355d91d6 100644 --- a/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java +++ b/javascript/extractor/test/com/semmle/js/extractor/test/AutoBuildTests.java @@ -195,15 +195,6 @@ public void basicTest() throws IOException { @Test public void typescript() throws IOException { - envVars.put("LGTM_INDEX_TYPESCRIPT", "basic"); - addFile(true, LGTM_SRC, "tst.ts"); - addFile(true, LGTM_SRC, "tst.tsx"); - runTest(); - } - - @Test(expected = UserError.class) - public void typescriptWrongConfig() throws IOException { - envVars.put("LGTM_INDEX_TYPESCRIPT", "true"); addFile(true, LGTM_SRC, "tst.ts"); addFile(true, LGTM_SRC, "tst.tsx"); runTest(); @@ -212,7 +203,6 @@ public void typescriptWrongConfig() throws IOException { @Test public void skipJsFilesDerivedFromTypeScriptFiles() throws IOException { // JS-derived files (.js, .cjs, .mjs, .jsx, .cjsx, .mjsx) should be skipped when TS indexing - envVars.put("LGTM_INDEX_TYPESCRIPT", "basic"); // Add TypeScript sources addFile(true, LGTM_SRC, "foo.ts"); addFile(true, LGTM_SRC, "bar.tsx"); @@ -230,7 +220,6 @@ public void skipJsFilesDerivedFromTypeScriptFiles() throws IOException { @Test public void skipFilesInTsconfigOutDir() throws IOException { - envVars.put("LGTM_INDEX_TYPESCRIPT", "basic"); // Files under outDir in tsconfig.json should be excluded // Create tsconfig.json with outDir set to "dist" addFile(true, LGTM_SRC, "tsconfig.json"); @@ -511,15 +500,6 @@ public void hiddenFiles() throws IOException { runTest(); } - @Test - public void noTypescriptExtraction() throws IOException { - envVars.put("LGTM_INDEX_TYPESCRIPT", "none"); - addFile(false, LGTM_SRC, "tst.ts"); - addFile(false, LGTM_SRC, "sub.js", "tst.ts"); - addFile(false, LGTM_SRC, "tst.js.ts"); - runTest(); - } - @Test public void includeNonExistentFile() throws IOException { envVars.put("LGTM_INDEX_INCLUDE", "tst.js"); From d85838477ea0191594a360bdc9daa4a999c2b8a3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Jul 2025 14:11:24 +0200 Subject: [PATCH 31/32] JS: Update Nest model An external contribution added more uses of the now-deprecated getType() predicate while this PR was open. --- .../lib/semmle/javascript/frameworks/Nest.qll | 32 ++++++------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll index ea7370f98339..d7474aae8ca4 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll @@ -539,46 +539,32 @@ module NestJS { ) } - private DataFlow::Node getConcreteClassFromProviderTuple(DataFlow::SourceNode tuple) { - result = tuple.getAPropertyWrite("useClass").getRhs() + private DataFlow::ClassNode getConcreteClassFromProviderTuple(DataFlow::SourceNode tuple) { + result = tuple.getAPropertyWrite("useClass").getRhs().asExpr().getNameBinding().getClassNode() or exists(DataFlow::FunctionNode f | f = tuple.getAPropertyWrite("useFactory").getRhs().getAFunctionValue() and - result.getAstNode() = f.getFunction().getAReturnedExpr().getType().(ClassType).getClass() + result = f.getFunction().getAReturnedExpr().getTypeBinding().getAnUnderlyingClass() ) or - result.getAstNode() = - tuple.getAPropertyWrite("useValue").getRhs().asExpr().getType().(ClassType).getClass() + result = + tuple.getAPropertyWrite("useValue").getRhs().asExpr().getTypeBinding().getAnUnderlyingClass() } - private predicate providerPair(DataFlow::Node interface, DataFlow::Node concreteClass) { + private predicate providerPair(DataFlow::ClassNode interface, DataFlow::ClassNode concreteClass) { exists(DataFlow::SourceNode tuple | tuple = providerTuple().getALocalSource() and - interface = tuple.getAPropertyWrite("provide").getRhs() and + interface = + tuple.getAPropertyWrite("provide").getRhs().asExpr().getNameBinding().getClassNode() and concreteClass = getConcreteClassFromProviderTuple(tuple) ) } - /** Gets the class being referenced at `node` without relying on the call graph. */ - private DataFlow::ClassNode getClassFromNode(DataFlow::Node node) { - result = node.asExpr().getNameBinding().getClassNode() - } - - private predicate providerClassPair( - DataFlow::ClassNode interface, DataFlow::ClassNode concreteClass - ) { - exists(DataFlow::Node interfaceNode, DataFlow::Node concreteClassNode | - providerPair(interfaceNode, concreteClassNode) and - interface = getClassFromNode(interfaceNode) and - concreteClass = getClassFromNode(concreteClassNode) - ) - } - private class DependencyInjectionStep extends PreCallGraphStep { override predicate classInstanceSource(DataFlow::ClassNode cls, DataFlow::Node node) { exists(DataFlow::ClassNode interfaceClass | node.asExpr().getTypeBinding().getTypeDefinition() = interfaceClass.getAstNode() and - providerClassPair(interfaceClass, cls) + providerPair(interfaceClass, cls) ) } } From 98319ce2ad369d64929f26c79efd4b7c34622639 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 3 Jul 2025 08:44:33 +0200 Subject: [PATCH 32/32] Apply suggestions from code review Co-authored-by: Taus --- .../ql/lib/semmle/javascript/internal/BindingInfo.qll | 6 +++--- .../change-notes/2025-06-24-no-type-extraction-breaking.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll index 9250e3373700..f5f8bfb2d1ef 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BindingInfo.qll @@ -26,7 +26,7 @@ class TypeNameBindingNode extends NameResolution::Node { } /** - * Holds if this refers a value exported by the given module, with the given + * Holds if this refers to a value exported by the given module, with the given * qualified name. If the `qualifiedName` is empty, this refers to the module itself. * * For example, the type annotations below have the following name bindings: @@ -151,8 +151,8 @@ class ExprNameBindingNode extends NameResolution::Node { * ```ts * import * as f from "foo"; * - * var x = f; // hasQualifiedName(f, "") - * var x = f.x.y; // hasQualifiedName(f, "x.y") + * var x = f; // hasQualifiedName("f", "") + * var x = f.x.y; // hasQualifiedName("f", "x.y") * ``` */ predicate hasQualifiedName(string moduleName, string qualifiedName) { diff --git a/javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md b/javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md index caa166413402..313b06bc366d 100644 --- a/javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md +++ b/javascript/ql/src/change-notes/2025-06-24-no-type-extraction-breaking.md @@ -2,7 +2,7 @@ category: breaking --- * The `Type` and `Symbol` classes have been deprecated and will be empty in newly extracted databases, since the TypeScript extractor no longer populates them. - This is breaking change for custom queries that explicitly relied on these classes. + This is a breaking change for custom queries that explicitly relied on these classes. Such queries will still compile, but with deprecation warnings, and may have different query results due to type information no longer being available. We expect most custom queries will not be affected, however. If a custom query has no deprecation warnings, it should not be affected by this change. Uses of `getType()` should be rewritten to use the new `getTypeBinding()` or `getNameBinding()` APIs instead.