Merge pull request #4376 from erik-krogh/simpParam

Approved by asgerf
This commit is contained in:
CodeQL CI
2020-10-06 03:24:43 -07:00
committed by GitHub
25 changed files with 86 additions and 38 deletions

View File

@@ -113,14 +113,14 @@ class AmdModuleDefinition extends CallExpr {
/**
* Gets the `i`th parameter of the factory function of this module.
*/
private SimpleParameter getFactoryParameter(int i) {
private Parameter getFactoryParameter(int i) {
getFactoryNodeInternal().asExpr().(Function).getParameter(i) = result
}
/**
* Gets the parameter corresponding to the pseudo-dependency `require`.
*/
SimpleParameter getRequireParameter() {
Parameter getRequireParameter() {
result = getDependencyParameter("require")
or
// if no dependencies are listed, the first parameter is assumed to be `require`
@@ -133,7 +133,7 @@ class AmdModuleDefinition extends CallExpr {
/**
* Gets the parameter corresponding to the pseudo-dependency `exports`.
*/
SimpleParameter getExportsParameter() {
Parameter getExportsParameter() {
result = getDependencyParameter("exports")
or
// if no dependencies are listed, the second parameter is assumed to be `exports`
@@ -143,7 +143,7 @@ class AmdModuleDefinition extends CallExpr {
/**
* Gets the parameter corresponding to the pseudo-dependency `module`.
*/
SimpleParameter getModuleParameter() {
Parameter getModuleParameter() {
result = getDependencyParameter("module")
or
// if no dependencies are listed, the third parameter is assumed to be `module`

View File

@@ -819,27 +819,27 @@ class LinkFunction extends Function {
/**
* Gets the scope parameter of this function.
*/
SimpleParameter getScopeParameter() { result = getParameter(0) }
Parameter getScopeParameter() { result = getParameter(0) }
/**
* Gets the element parameter of this function (contains a jqLite-wrapped DOM element).
*/
SimpleParameter getElementParameter() { result = getParameter(1) }
Parameter getElementParameter() { result = getParameter(1) }
/**
* Gets the attributes parameter of this function.
*/
SimpleParameter getAttributesParameter() { result = getParameter(2) }
Parameter getAttributesParameter() { result = getParameter(2) }
/**
* Gets the controller parameter of this function.
*/
SimpleParameter getControllerParameter() { result = getParameter(3) }
Parameter getControllerParameter() { result = getParameter(3) }
/**
* Gets the transclude-function parameter of this function.
*/
SimpleParameter getTranscludeFnParameter() { result = getParameter(4) }
Parameter getTranscludeFnParameter() { result = getParameter(4) }
}
/**
@@ -868,7 +868,7 @@ class AngularScope extends TAngularScope {
*/
Expr getAnAccess() {
exists(CustomDirective d | this = d.getAScope() |
exists(SimpleParameter p |
exists(Parameter p |
p = d.getController().getDependencyParameter("$scope") or
p = d.getALinkFunction().getParameter(0)
|
@@ -884,7 +884,7 @@ class AngularScope extends TAngularScope {
d.hasIsolateScope() and result = d.getMember("scope").asExpr()
)
or
exists(DirectiveController c, DOM::ElementDefinition elem, SimpleParameter p |
exists(DirectiveController c, DOM::ElementDefinition elem, Parameter p |
c.boundTo(elem) and
this.mayApplyTo(elem) and
p = c.getFactoryFunction().getDependencyParameter("$scope") and

View File

@@ -41,7 +41,7 @@ abstract class DependencyInjection extends DataFlow::ValueNode {
*/
abstract class InjectableFunction extends DataFlow::ValueNode {
/** Gets the parameter corresponding to dependency `name`. */
abstract SimpleParameter getDependencyParameter(string name);
abstract Parameter getDependencyParameter(string name);
/**
* Gets the `i`th dependency declaration, which is also named `name`.
@@ -67,7 +67,7 @@ abstract class InjectableFunction extends DataFlow::ValueNode {
/**
* Gets a service corresponding to the dependency-injected `parameter`.
*/
ServiceReference getAResolvedDependency(SimpleParameter parameter) {
ServiceReference getAResolvedDependency(Parameter parameter) {
exists(string name, InjectableFunctionServiceRequest request |
this = request.getAnInjectedFunction() and
parameter = getDependencyParameter(name) and
@@ -79,7 +79,7 @@ abstract class InjectableFunction extends DataFlow::ValueNode {
* Gets a Custom service corresponding to the dependency-injected `parameter`.
* (this is a convenience variant of `getAResolvedDependency`)
*/
DataFlow::Node getCustomServiceDependency(SimpleParameter parameter) {
DataFlow::Node getCustomServiceDependency(Parameter parameter) {
exists(CustomServiceDefinition custom |
custom.getServiceReference() = getAResolvedDependency(parameter) and
result = custom.getAService()
@@ -99,11 +99,11 @@ private class FunctionWithImplicitDependencyAnnotation extends InjectableFunctio
not exists(getAPropertyDependencyInjection(astNode))
}
override SimpleParameter getDependencyParameter(string name) {
override Parameter getDependencyParameter(string name) {
result = astNode.getParameterByName(name)
}
override SimpleParameter getDependencyDeclaration(int i, string name) {
override Parameter getDependencyDeclaration(int i, string name) {
result.getName() = name and
result = astNode.getParameter(i)
}
@@ -139,7 +139,7 @@ private class FunctionWithInjectProperty extends InjectableFunction {
)
}
override SimpleParameter getDependencyParameter(string name) {
override Parameter getDependencyParameter(string name) {
exists(int i | exists(getDependencyDeclaration(i, name)) | result = astNode.getParameter(i))
}
@@ -170,7 +170,7 @@ private class FunctionWithExplicitDependencyAnnotation extends InjectableFunctio
function.flowsToExpr(astNode.getElement(astNode.getSize() - 1))
}
override SimpleParameter getDependencyParameter(string name) {
override Parameter getDependencyParameter(string name) {
exists(int i | astNode.getElement(i).mayHaveStringValue(name) |
result = asFunction().getParameter(i)
)

View File

@@ -479,7 +479,7 @@ abstract class ServiceRequest extends Expr {
/**
* Gets the parameter of this request into which `service` is injected.
*/
abstract SimpleParameter getDependencyParameter(ServiceReference service);
abstract Parameter getDependencyParameter(ServiceReference service);
}
/**
@@ -488,7 +488,7 @@ abstract class ServiceRequest extends Expr {
private class LinkFunctionWithScopeInjection extends ServiceRequest {
LinkFunctionWithScopeInjection() { this instanceof LinkFunction }
override SimpleParameter getDependencyParameter(ServiceReference service) {
override Parameter getDependencyParameter(ServiceReference service) {
service instanceof ScopeServiceReference and
result = this.(LinkFunction).getScopeParameter()
}
@@ -521,7 +521,7 @@ class InjectableFunctionServiceRequest extends ServiceRequest {
result.isInjectable()
}
override SimpleParameter getDependencyParameter(ServiceReference service) {
override Parameter getDependencyParameter(ServiceReference service) {
service = injectedFunction.getAResolvedDependency(result)
}
}

View File

@@ -30,17 +30,17 @@ module Connect {
*
* `kind` is one of: "error", "request", "response", "next".
*/
abstract SimpleParameter getRouteHandlerParameter(string kind);
abstract Parameter getRouteHandlerParameter(string kind);
/**
* Gets the parameter of the route handler that contains the request object.
*/
SimpleParameter getRequestParameter() { result = getRouteHandlerParameter("request") }
Parameter getRequestParameter() { result = getRouteHandlerParameter("request") }
/**
* Gets the parameter of the route handler that contains the response object.
*/
SimpleParameter getResponseParameter() { result = getRouteHandlerParameter("response") }
Parameter getResponseParameter() { result = getRouteHandlerParameter("response") }
}
/**
@@ -51,7 +51,7 @@ module Connect {
StandardRouteHandler() { this = any(RouteSetup setup).getARouteHandler() }
override SimpleParameter getRouteHandlerParameter(string kind) {
override Parameter getRouteHandlerParameter(string kind) {
result = getRouteHandlerParameter(astNode, kind)
}
}
@@ -180,7 +180,7 @@ module Connect {
HTTP::Servers::StandardRouteHandler, DataFlow::FunctionNode {
TrackedRouteHandlerCandidateWithSetup() { this = any(RouteSetup s).getARouteHandler() }
override SimpleParameter getRouteHandlerParameter(string kind) {
override Parameter getRouteHandlerParameter(string kind) {
result = getRouteHandlerParameter(astNode, kind)
}
}

View File

@@ -223,7 +223,7 @@ module Firebase {
RouteHandler() { this = any(RouteSetup setup).getARouteHandler() }
override SimpleParameter getRouteHandlerParameter(string kind) {
override Parameter getRouteHandlerParameter(string kind) {
kind = "request" and result = astNode.getParameter(0)
or
kind = "response" and result = astNode.getParameter(1)

View File

@@ -30,7 +30,7 @@ module Hapi {
/**
* Gets the parameter of the route handler that contains the request object.
*/
SimpleParameter getRequestParameter() { result = function.getParameter(0) }
Parameter getRequestParameter() { result = function.getParameter(0) }
}
/**

View File

@@ -47,7 +47,7 @@ module Koa {
/**
* Gets the parameter of the route handler that contains the context object.
*/
SimpleParameter getContextParameter() { result = function.getParameter(0) }
Parameter getContextParameter() { result = function.getParameter(0) }
/**
* Gets an expression that contains the "context" object of

View File

@@ -91,12 +91,12 @@ module NodeJSLib {
/**
* Gets the parameter of the route handler that contains the request object.
*/
SimpleParameter getRequestParameter() { result = getFunction().getParameter(0) }
Parameter getRequestParameter() { result = getFunction().getParameter(0) }
/**
* Gets the parameter of the route handler that contains the response object.
*/
SimpleParameter getResponseParameter() { result = getFunction().getParameter(1) }
Parameter getResponseParameter() { result = getFunction().getParameter(1) }
}
/**

View File

@@ -30,12 +30,12 @@ module Restify {
/**
* Gets the parameter of the route handler that contains the request object.
*/
SimpleParameter getRequestParameter() { result = function.getParameter(0) }
Parameter getRequestParameter() { result = function.getParameter(0) }
/**
* Gets the parameter of the route handler that contains the response object.
*/
SimpleParameter getResponseParameter() { result = function.getParameter(1) }
Parameter getResponseParameter() { result = function.getParameter(1) }
}
/**

View File

@@ -29,7 +29,7 @@ private class PromotedExpressCandidate extends Express::RouteHandler,
HTTP::Servers::StandardRouteHandler {
PromotedExpressCandidate() { this instanceof ConnectExpressShared::RouteHandlerCandidate }
override SimpleParameter getRouteHandlerParameter(string kind) {
override Parameter getRouteHandlerParameter(string kind) {
result = ConnectExpressShared::getRouteHandlerParameter(getAstNode(), kind)
}
}
@@ -41,7 +41,7 @@ private class PromotedConnectCandidate extends Connect::RouteHandler,
HTTP::Servers::StandardRouteHandler {
PromotedConnectCandidate() { this instanceof ConnectExpressShared::RouteHandlerCandidate }
override SimpleParameter getRouteHandlerParameter(string kind) {
override Parameter getRouteHandlerParameter(string kind) {
result = ConnectExpressShared::getRouteHandlerParameter(getAstNode(), kind)
}
}

View File

@@ -6,5 +6,6 @@
| tst2.js:1:1:3:3 | <toplevel> | tst2.js:1:1:3:2 | define( ... 42;\\n}) |
| tst3.js:1:1:3:3 | <toplevel> | tst3.js:1:1:3:2 | define( ... 42;\\n}) |
| tst4.js:1:1:11:3 | <toplevel> | tst4.js:1:1:11:2 | define( ... };\\n}) |
| tst5.js:1:1:6:3 | <toplevel> | tst5.js:1:1:6:2 | define( ... };\\n}) |
| tst.js:1:1:6:3 | <toplevel> | tst.js:1:1:6:2 | define( ... };\\n}) |
| umd.js:1:1:14:4 | <toplevel> | umd.js:4:9:4:43 | define( ... actory) |

View File

@@ -1,3 +1,15 @@
getDependencyParameter
| tst2.js:1:1:3:2 | define( ... 42;\\n}) | exports | tst2.js:1:30:1:36 | exports |
| tst4.js:1:1:11:2 | define( ... };\\n}) | a.js | tst4.js:6:20:6:20 | a |
| tst4.js:1:1:11:2 | define( ... };\\n}) | foo | tst4.js:6:23:6:23 | b |
| tst4.js:1:1:11:2 | define( ... };\\n}) | nested/a | tst4.js:6:26:6:32 | exports |
| tst5.js:1:1:6:2 | define( ... };\\n}) | ./a | tst5.js:1:37:1:37 | a |
| tst5.js:1:1:6:2 | define( ... };\\n}) | ./dir/b | tst5.js:1:40:1:44 | {bar} |
| tst.js:1:1:6:2 | define( ... };\\n}) | ./a | tst.js:1:37:1:37 | a |
| tst.js:1:1:6:2 | define( ... };\\n}) | ./dir/b | tst.js:1:40:1:40 | b |
| umd.js:4:9:4:43 | define( ... actory) | ./a | umd.js:9:19:9:19 | a |
| umd.js:4:9:4:43 | define( ... actory) | ./dir/b | umd.js:9:22:9:22 | b |
#select
| a.js:1:1:3:2 | define( ... 2 };\\n}) | a.js:1:8:3:1 | functio ... 42 };\\n} |
| dir/b.js:1:1:3:2 | define( ... : 42\\n}) | dir/b.js:1:8:3:1 | {\\n bar: 42\\n} |
| lib/a.js:1:1:3:2 | define( ... 2 };\\n}) | lib/a.js:1:8:3:1 | functio ... 42 };\\n} |
@@ -6,6 +18,7 @@
| tst2.js:1:1:3:2 | define( ... 42;\\n}) | tst2.js:1:21:3:1 | functio ... = 42;\\n} |
| tst3.js:1:1:3:2 | define( ... 42;\\n}) | tst3.js:1:8:3:1 | functio ... = 42;\\n} |
| tst4.js:1:1:11:2 | define( ... };\\n}) | tst4.js:6:11:11:1 | functio ... };\\n} |
| tst5.js:1:1:6:2 | define( ... };\\n}) | tst5.js:1:28:6:1 | functio ... };\\n} |
| tst.js:1:1:6:2 | define( ... };\\n}) | tst.js:1:28:6:1 | functio ... };\\n} |
| umd.js:4:9:4:43 | define( ... actory) | umd.js:1:18:1:24 | factory |
| umd.js:4:9:4:43 | define( ... actory) | umd.js:9:9:14:1 | functio ... };\\n} |

View File

@@ -1,4 +1,8 @@
import javascript
query Parameter getDependencyParameter(AmdModuleDefinition mod, string name) {
result = mod.getDependencyParameter(name)
}
from AmdModuleDefinition d
select d, d.getFactoryNode()

View File

@@ -4,6 +4,8 @@
| tst4.js:1:1:11:2 | define( ... };\\n}) | tst4.js:3:9:3:13 | 'foo' |
| tst4.js:1:1:11:2 | define( ... };\\n}) | tst4.js:4:9:4:18 | 'nested/a' |
| tst4.js:1:1:11:2 | define( ... };\\n}) | tst4.js:5:9:5:20 | 'lib/foo.js' |
| tst5.js:1:1:6:2 | define( ... };\\n}) | tst5.js:1:9:1:13 | './a' |
| tst5.js:1:1:6:2 | define( ... };\\n}) | tst5.js:1:16:1:24 | './dir/b' |
| tst.js:1:1:6:2 | define( ... };\\n}) | tst.js:1:9:1:13 | './a' |
| tst.js:1:1:6:2 | define( ... };\\n}) | tst.js:1:16:1:24 | './dir/b' |
| umd.js:4:9:4:43 | define( ... actory) | umd.js:4:17:4:21 | './a' |

View File

@@ -7,6 +7,8 @@
| tst3.js:1:1:3:3 | <toplevel> | foo |
| tst4.js:1:1:11:3 | <toplevel> | bar |
| tst4.js:1:1:11:3 | <toplevel> | foo |
| tst5.js:1:1:6:3 | <toplevel> | bar |
| tst5.js:1:1:6:3 | <toplevel> | foo |
| tst.js:1:1:6:3 | <toplevel> | bar |
| tst.js:1:1:6:3 | <toplevel> | foo |
| umd.js:1:1:14:4 | <toplevel> | bar |

View File

@@ -4,6 +4,7 @@
| lib/foo.js:1:1:3:2 | define( ... : 23\\n}) | lib/foo.js:1:8:3:1 | {\\n foo: 23\\n} | lib/foo.js:1:8:3:1 | {\\n foo: 23\\n} |
| lib/nested/a.js:1:1:3:2 | define( ... 2 };\\n}) | lib/nested/a.js:2:12:2:22 | { foo: 42 } | lib/nested/a.js:2:12:2:22 | { foo: 42 } |
| tst4.js:1:1:11:2 | define( ... };\\n}) | tst4.js:7:12:10:5 | {\\n ... r\\n } | tst4.js:7:12:10:5 | {\\n ... r\\n } |
| tst5.js:1:1:6:2 | define( ... };\\n}) | tst5.js:2:12:5:5 | {\\n ... r\\n } | tst5.js:2:12:5:5 | {\\n ... r\\n } |
| tst.js:1:1:6:2 | define( ... };\\n}) | tst.js:2:12:5:5 | {\\n ... r\\n } | tst.js:2:12:5:5 | {\\n ... r\\n } |
| umd.js:4:9:4:43 | define( ... actory) | umd.js:1:18:1:24 | factory | umd.js:1:18:1:24 | factory |
| umd.js:4:9:4:43 | define( ... actory) | umd.js:1:18:1:24 | factory | umd.js:9:9:14:1 | functio ... };\\n} |

View File

@@ -2,6 +2,8 @@
| tst4.js:1:1:11:3 | <toplevel> | tst4.js:3:9:3:13 | 'foo' | lib/foo.js:1:1:4:0 | <toplevel> |
| tst4.js:1:1:11:3 | <toplevel> | tst4.js:4:9:4:18 | 'nested/a' | lib/nested/a.js:1:1:3:3 | <toplevel> |
| tst4.js:1:1:11:3 | <toplevel> | tst4.js:5:9:5:20 | 'lib/foo.js' | lib/foo.js:1:1:4:0 | <toplevel> |
| tst5.js:1:1:6:3 | <toplevel> | tst5.js:1:9:1:13 | './a' | a.js:1:1:3:3 | <toplevel> |
| tst5.js:1:1:6:3 | <toplevel> | tst5.js:1:16:1:24 | './dir/b' | dir/b.js:1:1:3:3 | <toplevel> |
| tst.js:1:1:6:3 | <toplevel> | tst.js:1:9:1:13 | './a' | a.js:1:1:3:3 | <toplevel> |
| tst.js:1:1:6:3 | <toplevel> | tst.js:1:16:1:24 | './dir/b' | dir/b.js:1:1:3:3 | <toplevel> |
| umd.js:1:1:14:4 | <toplevel> | umd.js:4:17:4:21 | './a' | a.js:1:1:3:3 | <toplevel> |

View File

@@ -7,6 +7,8 @@
| tst3.js:1:1:3:3 | <toplevel> | foo | tst3.js:2:29:2:39 | exports.foo |
| tst4.js:1:1:11:3 | <toplevel> | bar | tst4.js:9:9:9:18 | bar: b.bar |
| tst4.js:1:1:11:3 | <toplevel> | foo | tst4.js:8:9:8:18 | foo: a.foo |
| tst5.js:1:1:6:3 | <toplevel> | bar | tst5.js:4:9:4:16 | bar: bar |
| tst5.js:1:1:6:3 | <toplevel> | foo | tst5.js:3:9:3:18 | foo: a.foo |
| tst.js:1:1:6:3 | <toplevel> | bar | tst.js:4:9:4:18 | bar: b.bar |
| tst.js:1:1:6:3 | <toplevel> | foo | tst.js:3:9:3:18 | foo: a.foo |
| umd.js:1:1:14:4 | <toplevel> | bar | umd.js:11:9:11:18 | bar: a.foo |

View File

@@ -0,0 +1,6 @@
define(['./a', './dir/b'], function(a, {bar}, exports) {
return {
foo: a.foo,
bar: bar
};
});

View File

@@ -34,3 +34,4 @@
| dependency-kinds.js:98:33:98:63 | functio ... ency){} | animationDependency |
| dependency-kinds.js:111:17:117:9 | functio ... } | $routeProvider |
| dependency-kinds.js:114:33:115:21 | functio ... } | routeControllerDependency |
| dependency-kinds.js:121:14:123:10 | ['modul ... }] | moduleRunService |

View File

@@ -117,4 +117,8 @@
})
;
angular.module('myModule', [])
.run(['moduleRunService', function({foo, bar}) {
// ...
}])
})();

View File

@@ -1,7 +1,5 @@
import javascript
query predicate test_RouteHandler(
Express::RouteHandler rh, SimpleParameter res0, SimpleParameter res1
) {
query predicate test_RouteHandler(Express::RouteHandler rh, Parameter res0, Parameter res1) {
res0 = rh.getRequestParameter() and res1 = rh.getResponseParameter()
}

View File

@@ -24,3 +24,7 @@ app.use(function(req,res){})
app.use(function (error, req, res, next){
res.setHeader('HEADER2', '');
});
app.use(function ({url, query, cookies}, res){
cookies.get(query.foobar);
});

View File

@@ -5,6 +5,7 @@ test_RouteSetup
| src/test.js:19:1:19:28 | app.use ... res){}) |
| src/test.js:19:1:20:29 | app.use ... res){}) |
| src/test.js:24:1:26:2 | app.use ... '');\\n}) |
| src/test.js:28:1:30:2 | app.use ... ar);\\n}) |
test_RequestInputAccess
| src/test.js:8:5:8:26 | req.coo ... ('foo') | cookie | src/test.js:6:9:9:1 | functio ... oo');\\n} |
test_RouteHandler_getAResponseHeader
@@ -21,6 +22,7 @@ test_ResponseExpr
| src/test.js:20:23:20:25 | res | src/test.js:20:10:20:28 | function(req,res){} |
| src/test.js:24:31:24:33 | res | src/test.js:24:9:26:1 | functio ... '');\\n} |
| src/test.js:25:5:25:7 | res | src/test.js:24:9:26:1 | functio ... '');\\n} |
| src/test.js:28:42:28:44 | res | src/test.js:28:9:30:1 | functio ... bar);\\n} |
test_HeaderDefinition
| src/test.js:7:5:7:32 | res.set ... 1', '') | src/test.js:6:9:9:1 | functio ... oo');\\n} |
| src/test.js:25:5:25:32 | res.set ... 2', '') | src/test.js:24:9:26:1 | functio ... '');\\n} |
@@ -31,6 +33,7 @@ test_RouteSetup_getServer
| src/test.js:19:1:19:28 | app.use ... res){}) | src/test.js:4:11:4:19 | connect() |
| src/test.js:19:1:20:29 | app.use ... res){}) | src/test.js:4:11:4:19 | connect() |
| src/test.js:24:1:26:2 | app.use ... '');\\n}) | src/test.js:4:11:4:19 | connect() |
| src/test.js:28:1:30:2 | app.use ... ar);\\n}) | src/test.js:4:11:4:19 | connect() |
test_HeaderDefinition_getAHeaderName
| src/test.js:7:5:7:32 | res.set ... 1', '') | header1 |
| src/test.js:25:5:25:32 | res.set ... 2', '') | header2 |
@@ -44,6 +47,7 @@ test_RouteHandler_getAResponseExpr
| src/test.js:20:10:20:28 | function(req,res){} | src/test.js:20:23:20:25 | res |
| src/test.js:24:9:26:1 | functio ... '');\\n} | src/test.js:24:31:24:33 | res |
| src/test.js:24:9:26:1 | functio ... '');\\n} | src/test.js:25:5:25:7 | res |
| src/test.js:28:9:30:1 | functio ... bar);\\n} | src/test.js:28:42:28:44 | res |
test_RouteSetup_getARouteHandler
| src/test.js:6:1:9:2 | app.use ... o');\\n}) | src/test.js:6:9:9:1 | functio ... oo');\\n} |
| src/test.js:12:1:12:42 | app.use ... word')) | src/test.js:12:9:12:41 | basicAu ... sword') |
@@ -53,12 +57,14 @@ test_RouteSetup_getARouteHandler
| src/test.js:19:1:19:28 | app.use ... res){}) | src/test.js:19:9:19:27 | function(req,res){} |
| src/test.js:19:1:20:29 | app.use ... res){}) | src/test.js:20:10:20:28 | function(req,res){} |
| src/test.js:24:1:26:2 | app.use ... '');\\n}) | src/test.js:24:9:26:1 | functio ... '');\\n} |
| src/test.js:28:1:30:2 | app.use ... ar);\\n}) | src/test.js:28:9:30:1 | functio ... bar);\\n} |
test_RouteHandler
| src/test.js:6:9:9:1 | functio ... oo');\\n} | src/test.js:4:11:4:19 | connect() |
| src/test.js:15:12:15:32 | functio ... res){} | src/test.js:4:11:4:19 | connect() |
| src/test.js:19:9:19:27 | function(req,res){} | src/test.js:4:11:4:19 | connect() |
| src/test.js:20:10:20:28 | function(req,res){} | src/test.js:4:11:4:19 | connect() |
| src/test.js:24:9:26:1 | functio ... '');\\n} | src/test.js:4:11:4:19 | connect() |
| src/test.js:28:9:30:1 | functio ... bar);\\n} | src/test.js:4:11:4:19 | connect() |
test_RequestExpr
| src/test.js:6:27:6:29 | req | src/test.js:6:9:9:1 | functio ... oo');\\n} |
| src/test.js:8:5:8:7 | req | src/test.js:6:9:9:1 | functio ... oo');\\n} |
@@ -66,6 +72,7 @@ test_RequestExpr
| src/test.js:19:18:19:20 | req | src/test.js:19:9:19:27 | function(req,res){} |
| src/test.js:20:19:20:21 | req | src/test.js:20:10:20:28 | function(req,res){} |
| src/test.js:24:26:24:28 | req | src/test.js:24:9:26:1 | functio ... '');\\n} |
| src/test.js:28:19:28:39 | {url, q ... ookies} | src/test.js:28:9:30:1 | functio ... bar);\\n} |
test_Credentials
| src/test.js:12:19:12:28 | 'username' | user name |
| src/test.js:12:31:12:40 | 'password' | password |
@@ -76,3 +83,4 @@ test_RouteHandler_getARequestExpr
| src/test.js:19:9:19:27 | function(req,res){} | src/test.js:19:18:19:20 | req |
| src/test.js:20:10:20:28 | function(req,res){} | src/test.js:20:19:20:21 | req |
| src/test.js:24:9:26:1 | functio ... '');\\n} | src/test.js:24:26:24:28 | req |
| src/test.js:28:9:30:1 | functio ... bar);\\n} | src/test.js:28:19:28:39 | {url, q ... ookies} |