Merge branch 'main' into henrymercer/mergeback-3.8

This commit is contained in:
Henry Mercer
2022-12-13 18:40:53 +00:00
2013 changed files with 99146 additions and 101594 deletions

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
* Configures boosting for adaptive threat modeling (ATM).
@@ -6,7 +6,8 @@
private import javascript as JS
import EndpointTypes
import EndpointCharacteristics
import EndpointCharacteristics as EndpointCharacteristics
import AdaptiveThreatModeling::ATM::ResultsInfo as AtmResultsInfo
/**
* EXPERIMENTAL. This API may change in the future.
@@ -29,10 +30,23 @@ import EndpointCharacteristics
* `isAdditionalFlowStep` with a more generalised definition of additional edges. See
* `NosqlInjectionATM.qll` for an example of doing this.
*/
abstract class AtmConfig extends string {
abstract class AtmConfig extends JS::TaintTracking::Configuration {
bindingset[this]
AtmConfig() { any() }
/**
* Holds if `source` is a relevant taint source. When sources are not boosted, `isSource` is equivalent to
* `isKnownSource` (i.e there are no "effective" sources to be classified by an ML model).
*/
override predicate isSource(JS::DataFlow::Node source) { this.isKnownSource(source) }
/**
* Holds if `sink` is a known taint sink or an "effective" sink (a candidate to be classified by an ML model).
*/
override predicate isSink(JS::DataFlow::Node sink) {
this.isKnownSink(sink) or this.isEffectiveSink(sink)
}
/**
* EXPERIMENTAL. This API may change in the future.
*
@@ -48,10 +62,10 @@ abstract class AtmConfig extends string {
final predicate isKnownSink(JS::DataFlow::Node sink) {
// If the list of characteristics includes positive indicators with maximal confidence for this class, then it's a
// known sink for the class.
exists(EndpointCharacteristic characteristic |
characteristic.getEndpoints(sink) and
exists(EndpointCharacteristics::EndpointCharacteristic characteristic |
characteristic.appliesToEndpoint(sink) and
characteristic
.getImplications(this.getASinkEndpointType(), true, characteristic.maximalConfidence())
.hasImplications(this.getASinkEndpointType(), true, characteristic.maximalConfidence())
)
}
@@ -69,7 +83,38 @@ abstract class AtmConfig extends string {
* Holds if the candidate sink `candidateSink` predicted by the machine learning model should be
* an effective sink, i.e. one considered as a possible sink of flow in the boosted query.
*/
predicate isEffectiveSink(JS::DataFlow::Node candidateSink) { none() }
predicate isEffectiveSink(JS::DataFlow::Node candidateSink) {
not exists(this.getAReasonSinkExcluded(candidateSink))
}
/**
* Gets the list of characteristics that cause `candidateSink` to be excluded as an effective sink.
*/
final EndpointCharacteristics::EndpointCharacteristic getAReasonSinkExcluded(
JS::DataFlow::Node candidateSink
) {
// An endpoint is an effective sink (sink candidate) if none of its characteristics give much indication whether or
// not it is a sink. Historically, we used endpoint filters, and scored endpoints that are filtered out neither by
// a standard endpoint filter nor by an endpoint filter specific to this sink type. To replicate this behavior, we
// have given the endpoint filter characteristics medium confidence, and we exclude endpoints that have a
// medium-confidence characteristic that indicates that they are not sinks, either in general or for this sink type.
exists(EndpointCharacteristics::EndpointCharacteristic filter, float confidence |
filter.appliesToEndpoint(candidateSink) and
confidence >= filter.mediumConfidence() and
// TODO: Experiment with excluding all endpoints that have a medium- or high-confidence characteristic that
// implies they're not sinks, rather than using only medium-confidence characteristics, by deleting the following
// line.
confidence < filter.highConfidence() and
(
// Exclude endpoints that have a characteristic that implies they're not sinks for _any_ sink type.
filter.hasImplications(any(NegativeType negative), true, confidence)
or
// Exclude endpoints that have a characteristic that implies they're not sinks for _this particular_ sink type.
filter.hasImplications(this.getASinkEndpointType(), false, confidence)
) and
result = filter
)
}
/**
* EXPERIMENTAL. This API may change in the future.
@@ -85,7 +130,7 @@ abstract class AtmConfig extends string {
* Get an endpoint type for the sinks of this query. A query may have multiple applicable
* endpoint types for its sinks.
*/
EndpointType getASinkEndpointType() { none() }
abstract EndpointType getASinkEndpointType();
/**
* EXPERIMENTAL. This API may change in the future.
@@ -96,6 +141,30 @@ abstract class AtmConfig extends string {
* A cut-off value of 1 produces all alerts including those that are likely false-positives.
*/
float getScoreCutoff() { result = 0.0 }
/**
* Holds if there's an ATM alert (a flow path from `source` to `sink` with ML-determined likelihood `score`) according
* to this ML-boosted configuration, whereas the unboosted base query does not contain this source and sink
* combination.
*/
predicate hasBoostedFlowPath(
JS::DataFlow::PathNode source, JS::DataFlow::PathNode sink, float score
) {
this.hasFlowPath(source, sink) and
not AtmResultsInfo::isFlowLikelyInBaseQuery(source.getNode(), sink.getNode()) and
score = AtmResultsInfo::getScoreForFlow(source.getNode(), sink.getNode())
}
/**
* Holds if if `sink` is an effective sink with flow from `source` which gets used as a sink candidate for scoring
* with the ML model.
*/
predicate isSinkCandidateWithFlow(JS::DataFlow::PathNode sink) {
exists(JS::DataFlow::PathNode source |
this.hasFlowPath(source, sink) and
not AtmResultsInfo::isFlowLikelyInBaseQuery(source.getNode(), sink.getNode())
)
}
}
/** DEPRECATED: Alias for AtmConfig */

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
* Provides information about the results of boosted queries for use in adaptive threat modeling (ATM).

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
* Provides shared scoring functionality for use in adaptive threat modeling (ATM).

View File

@@ -1,225 +0,0 @@
/*
* For internal use only.
*
* Provides predicates that expose the knowledge of models
* in the core CodeQL JavaScript libraries.
*/
private import javascript
private import semmle.javascript.security.dataflow.XxeCustomizations
private import semmle.javascript.security.dataflow.RemotePropertyInjectionCustomizations
private import semmle.javascript.security.dataflow.TypeConfusionThroughParameterTamperingCustomizations
private import semmle.javascript.security.dataflow.ZipSlipCustomizations
private import semmle.javascript.security.dataflow.TaintedPathCustomizations
private import semmle.javascript.security.dataflow.CleartextLoggingCustomizations
private import semmle.javascript.security.dataflow.XpathInjectionCustomizations
private import semmle.javascript.security.dataflow.Xss::Shared as Xss
private import semmle.javascript.security.dataflow.StackTraceExposureCustomizations
private import semmle.javascript.security.dataflow.ClientSideUrlRedirectCustomizations
private import semmle.javascript.security.dataflow.CodeInjectionCustomizations
private import semmle.javascript.security.dataflow.RequestForgeryCustomizations
private import semmle.javascript.security.dataflow.CorsMisconfigurationForCredentialsCustomizations
private import semmle.javascript.security.dataflow.ShellCommandInjectionFromEnvironmentCustomizations
private import semmle.javascript.security.dataflow.DifferentKindsComparisonBypassCustomizations
private import semmle.javascript.security.dataflow.CommandInjectionCustomizations
private import semmle.javascript.security.dataflow.PrototypePollutionCustomizations
private import semmle.javascript.security.dataflow.UnvalidatedDynamicMethodCallCustomizations
private import semmle.javascript.security.dataflow.TaintedFormatStringCustomizations
private import semmle.javascript.security.dataflow.NosqlInjectionCustomizations
private import semmle.javascript.security.dataflow.PostMessageStarCustomizations
private import semmle.javascript.security.dataflow.RegExpInjectionCustomizations
private import semmle.javascript.security.dataflow.SqlInjectionCustomizations
private import semmle.javascript.security.dataflow.InsecureRandomnessCustomizations
private import semmle.javascript.security.dataflow.XmlBombCustomizations
private import semmle.javascript.security.dataflow.InsufficientPasswordHashCustomizations
private import semmle.javascript.security.dataflow.HardcodedCredentialsCustomizations
private import semmle.javascript.security.dataflow.FileAccessToHttpCustomizations
private import semmle.javascript.security.dataflow.UnsafeDynamicMethodAccessCustomizations
private import semmle.javascript.security.dataflow.UnsafeDeserializationCustomizations
private import semmle.javascript.security.dataflow.HardcodedDataInterpretedAsCodeCustomizations
private import semmle.javascript.security.dataflow.ServerSideUrlRedirectCustomizations
private import semmle.javascript.security.dataflow.IndirectCommandInjectionCustomizations
private import semmle.javascript.security.dataflow.ConditionalBypassCustomizations
private import semmle.javascript.security.dataflow.HttpToFileAccessCustomizations
private import semmle.javascript.security.dataflow.BrokenCryptoAlgorithmCustomizations
private import semmle.javascript.security.dataflow.LoopBoundInjectionCustomizations
private import semmle.javascript.security.dataflow.CleartextStorageCustomizations
import FilteringReasons
/**
* Holds if the node `n` is a known sink in a modeled library, or a sibling-argument of such a sink.
*/
predicate isArgumentToKnownLibrarySinkFunction(DataFlow::Node n) {
exists(DataFlow::InvokeNode invk, DataFlow::Node known |
invk.getAnArgument() = n and invk.getAnArgument() = known and isKnownLibrarySink(known)
)
}
/**
* Holds if the node `n` is a known sink for the external API security query.
*
* This corresponds to known sinks from security queries whose sources include remote flow and
* DOM-based sources.
*/
predicate isKnownExternalApiQuerySink(DataFlow::Node n) {
n instanceof Xxe::Sink or
n instanceof TaintedPath::Sink or
n instanceof XpathInjection::Sink or
n instanceof Xss::Sink or
n instanceof ClientSideUrlRedirect::Sink or
n instanceof CodeInjection::Sink or
n instanceof RequestForgery::Sink or
n instanceof CorsMisconfigurationForCredentials::Sink or
n instanceof CommandInjection::Sink or
n instanceof PrototypePollution::Sink or
n instanceof UnvalidatedDynamicMethodCall::Sink or
n instanceof TaintedFormatString::Sink or
n instanceof NosqlInjection::Sink or
n instanceof PostMessageStar::Sink or
n instanceof RegExpInjection::Sink or
n instanceof SqlInjection::Sink or
n instanceof XmlBomb::Sink or
n instanceof ZipSlip::Sink or
n instanceof UnsafeDeserialization::Sink or
n instanceof ServerSideUrlRedirect::Sink or
n instanceof CleartextStorage::Sink or
n instanceof HttpToFileAccess::Sink
}
/** DEPRECATED: Alias for isKnownExternalApiQuerySink */
deprecated predicate isKnownExternalAPIQuerySink = isKnownExternalApiQuerySink/1;
/**
* Holds if the node `n` is a known sink in a modeled library.
*/
predicate isKnownLibrarySink(DataFlow::Node n) {
isKnownExternalApiQuerySink(n) or
n instanceof CleartextLogging::Sink or
n instanceof StackTraceExposure::Sink or
n instanceof ShellCommandInjectionFromEnvironment::Sink or
n instanceof InsecureRandomness::Sink or
n instanceof FileAccessToHttp::Sink or
n instanceof IndirectCommandInjection::Sink
}
/**
* Holds if the node `n` is known as the predecessor in a modeled flow step.
*/
predicate isKnownStepSrc(DataFlow::Node n) {
TaintTracking::sharedTaintStep(n, _) or
DataFlow::SharedFlowStep::step(n, _) or
DataFlow::SharedFlowStep::step(n, _, _, _)
}
/**
* Holds if `n` is an argument to a function of a builtin object.
*/
private predicate isArgumentToBuiltinFunction(DataFlow::Node n, FilteringReason reason) {
exists(DataFlow::SourceNode builtin, DataFlow::SourceNode receiver, DataFlow::InvokeNode invk |
(
builtin instanceof DataFlow::ArrayCreationNode and
reason instanceof ArgumentToArrayReason
or
builtin =
DataFlow::globalVarRef([
"Map", "Set", "WeakMap", "WeakSet", "Number", "Object", "String", "Array", "Error",
"Math", "Boolean"
]) and
reason instanceof ArgumentToBuiltinGlobalVarRefReason
)
|
receiver = [builtin.getAnInvocation(), builtin] and
invk = [receiver, receiver.getAPropertyRead()].getAnInvocation() and
invk.getAnArgument() = n
)
or
exists(Expr primitive, MethodCallExpr c |
primitive instanceof ConstantString or
primitive instanceof NumberLiteral or
primitive instanceof BooleanLiteral
|
c.calls(primitive, _) and
c.getAnArgument() = n.asExpr() and
reason instanceof ConstantReceiverReason
)
or
exists(DataFlow::CallNode call |
call.getAnArgument() = n and
call.getCalleeName() =
[
"indexOf", "hasOwnProperty", "substring", "isDecimal", "decode", "encode", "keys", "shift",
"values", "forEach", "toString", "slice", "splice", "push", "isArray", "sort"
] and
reason instanceof BuiltinCallNameReason
)
}
predicate isOtherModeledArgument(DataFlow::Node n, FilteringReason reason) {
isArgumentToBuiltinFunction(n, reason)
or
any(LodashUnderscore::Member m).getACall().getAnArgument() = n and
reason instanceof LodashUnderscoreArgumentReason
or
any(JQuery::MethodCall m).getAnArgument() = n and
reason instanceof JQueryArgumentReason
or
exists(ClientRequest r |
r.getAnArgument() = n or n = r.getUrl() or n = r.getHost() or n = r.getADataNode()
) and
reason instanceof ClientRequestReason
or
exists(PromiseDefinition p |
n = [p.getResolveParameter(), p.getRejectParameter()].getACall().getAnArgument()
) and
reason instanceof PromiseDefinitionReason
or
n instanceof CryptographicKey and reason instanceof CryptographicKeyReason
or
any(CryptographicOperation op).getInput() = n and
reason instanceof CryptographicOperationFlowReason
or
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName() = getAStandardLoggerMethodName() and
reason instanceof LoggerMethodReason
or
call.getCalleeName() = ["setTimeout", "clearTimeout"] and
reason instanceof TimeoutReason
or
call.getReceiver() = DataFlow::globalVarRef(["localStorage", "sessionStorage"]) and
reason instanceof ReceiverStorageReason
or
call instanceof StringOps::StartsWith and reason instanceof StringStartsWithReason
or
call instanceof StringOps::EndsWith and reason instanceof StringEndsWithReason
or
call instanceof StringOps::RegExpTest and reason instanceof StringRegExpTestReason
or
call instanceof EventRegistration and reason instanceof EventRegistrationReason
or
call instanceof EventDispatch and reason instanceof EventDispatchReason
or
call = any(MembershipCandidate c).getTest() and
reason instanceof MembershipCandidateTestReason
or
call instanceof FileSystemAccess and reason instanceof FileSystemAccessReason
or
// TODO database accesses are less well defined than database query sinks, so this may cover unmodeled sinks on existing database models
[
call, call.getAMethodCall()
/* command pattern where the query is built, and then exec'ed later */ ] instanceof
DatabaseAccess and
reason instanceof DatabaseAccessReason
or
call = DOM::domValueRef() and reason instanceof DomReason
or
call.getCalleeName() = "next" and
exists(DataFlow::FunctionNode f | call = f.getLastParameter().getACall()) and
reason instanceof NextFunctionCallReason
or
call = DataFlow::globalVarRef("dojo").getAPropertyRead("require").getACall() and
reason instanceof DojoRequireReason
)
or
(exists(Base64::Decode d | n = d.getInput()) or exists(Base64::Encode d | n = d.getInput())) and
reason instanceof Base64ManipulationReason
}

View File

@@ -7,6 +7,46 @@ private import semmle.javascript.security.dataflow.SqlInjectionCustomizations
private import semmle.javascript.security.dataflow.DomBasedXssCustomizations
private import semmle.javascript.security.dataflow.NosqlInjectionCustomizations
private import semmle.javascript.security.dataflow.TaintedPathCustomizations
private import semmle.javascript.heuristics.SyntacticHeuristics as SyntacticHeuristics
private import semmle.javascript.filters.ClassifyFiles as ClassifyFiles
private import semmle.javascript.security.dataflow.XxeCustomizations
private import semmle.javascript.security.dataflow.RemotePropertyInjectionCustomizations
private import semmle.javascript.security.dataflow.TypeConfusionThroughParameterTamperingCustomizations
private import semmle.javascript.security.dataflow.ZipSlipCustomizations
private import semmle.javascript.security.dataflow.TaintedPathCustomizations
private import semmle.javascript.security.dataflow.CleartextLoggingCustomizations
private import semmle.javascript.security.dataflow.XpathInjectionCustomizations
private import semmle.javascript.security.dataflow.Xss::Shared as Xss
private import semmle.javascript.security.dataflow.StackTraceExposureCustomizations
private import semmle.javascript.security.dataflow.ClientSideUrlRedirectCustomizations
private import semmle.javascript.security.dataflow.CodeInjectionCustomizations
private import semmle.javascript.security.dataflow.RequestForgeryCustomizations
private import semmle.javascript.security.dataflow.CorsMisconfigurationForCredentialsCustomizations
private import semmle.javascript.security.dataflow.ShellCommandInjectionFromEnvironmentCustomizations
private import semmle.javascript.security.dataflow.DifferentKindsComparisonBypassCustomizations
private import semmle.javascript.security.dataflow.CommandInjectionCustomizations
private import semmle.javascript.security.dataflow.PrototypePollutionCustomizations
private import semmle.javascript.security.dataflow.UnvalidatedDynamicMethodCallCustomizations
private import semmle.javascript.security.dataflow.TaintedFormatStringCustomizations
private import semmle.javascript.security.dataflow.NosqlInjectionCustomizations
private import semmle.javascript.security.dataflow.PostMessageStarCustomizations
private import semmle.javascript.security.dataflow.RegExpInjectionCustomizations
private import semmle.javascript.security.dataflow.SqlInjectionCustomizations
private import semmle.javascript.security.dataflow.InsecureRandomnessCustomizations
private import semmle.javascript.security.dataflow.XmlBombCustomizations
private import semmle.javascript.security.dataflow.InsufficientPasswordHashCustomizations
private import semmle.javascript.security.dataflow.HardcodedCredentialsCustomizations
private import semmle.javascript.security.dataflow.FileAccessToHttpCustomizations
private import semmle.javascript.security.dataflow.UnsafeDynamicMethodAccessCustomizations
private import semmle.javascript.security.dataflow.UnsafeDeserializationCustomizations
private import semmle.javascript.security.dataflow.HardcodedDataInterpretedAsCodeCustomizations
private import semmle.javascript.security.dataflow.ServerSideUrlRedirectCustomizations
private import semmle.javascript.security.dataflow.IndirectCommandInjectionCustomizations
private import semmle.javascript.security.dataflow.ConditionalBypassCustomizations
private import semmle.javascript.security.dataflow.HttpToFileAccessCustomizations
private import semmle.javascript.security.dataflow.BrokenCryptoAlgorithmCustomizations
private import semmle.javascript.security.dataflow.LoopBoundInjectionCustomizations
private import semmle.javascript.security.dataflow.CleartextStorageCustomizations
/**
* A set of characteristics that a particular endpoint might have. This set of characteristics is used to make decisions
@@ -25,7 +65,7 @@ abstract class EndpointCharacteristic extends string {
* Holds for endpoints that have this characteristic. This predicate contains the logic that applies characteristics
* to the appropriate set of dataflow nodes.
*/
abstract predicate getEndpoints(DataFlow::Node n);
abstract predicate appliesToEndpoint(DataFlow::Node n);
/**
* This predicate describes what the characteristic tells us about an endpoint.
@@ -41,7 +81,7 @@ abstract class EndpointCharacteristic extends string {
* indicator of whether or not the endpoint belongs to the class. A confidence of 1 means that all endpoints with
* this characteristic definitively do/don't belong to the class.
*/
abstract predicate getImplications(
abstract predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
);
@@ -57,6 +97,110 @@ abstract class EndpointCharacteristic extends string {
final float mediumConfidence() { result = 0.6 }
}
/*
* Helper predicates.
*/
/**
* Holds if the node `n` is a known sink for the external API security query.
*
* This corresponds to known sinks from security queries whose sources include remote flow and
* DOM-based sources.
*/
private predicate isKnownExternalApiQuerySink(DataFlow::Node n) {
n instanceof Xxe::Sink or
n instanceof TaintedPath::Sink or
n instanceof XpathInjection::Sink or
n instanceof Xss::Sink or
n instanceof ClientSideUrlRedirect::Sink or
n instanceof CodeInjection::Sink or
n instanceof RequestForgery::Sink or
n instanceof CorsMisconfigurationForCredentials::Sink or
n instanceof CommandInjection::Sink or
n instanceof PrototypePollution::Sink or
n instanceof UnvalidatedDynamicMethodCall::Sink or
n instanceof TaintedFormatString::Sink or
n instanceof NosqlInjection::Sink or
n instanceof PostMessageStar::Sink or
n instanceof RegExpInjection::Sink or
n instanceof SqlInjection::Sink or
n instanceof XmlBomb::Sink or
n instanceof ZipSlip::Sink or
n instanceof UnsafeDeserialization::Sink or
n instanceof ServerSideUrlRedirect::Sink or
n instanceof CleartextStorage::Sink or
n instanceof HttpToFileAccess::Sink
}
/**
* Holds if the node `n` is a known sink in a modeled library.
*/
private predicate isKnownLibrarySink(DataFlow::Node n) {
isKnownExternalApiQuerySink(n) or
n instanceof CleartextLogging::Sink or
n instanceof StackTraceExposure::Sink or
n instanceof ShellCommandInjectionFromEnvironment::Sink or
n instanceof InsecureRandomness::Sink or
n instanceof FileAccessToHttp::Sink or
n instanceof IndirectCommandInjection::Sink
}
/**
* Holds if the node `n` is known as the predecessor in a modeled flow step.
*/
private predicate isKnownStepSrc(DataFlow::Node n) {
TaintTracking::sharedTaintStep(n, _) or
DataFlow::SharedFlowStep::step(n, _) or
DataFlow::SharedFlowStep::step(n, _, _, _)
}
/**
* Holds if the data flow node is a (possibly indirect) argument of a likely external library call.
*
* This includes direct arguments of likely external library calls as well as nested object
* literals within those calls.
*/
private predicate flowsToArgumentOfLikelyExternalLibraryCall(DataFlow::Node n) {
n = getACallWithoutCallee().getAnArgument()
or
exists(DataFlow::SourceNode src | flowsToArgumentOfLikelyExternalLibraryCall(src) |
n = src.getAPropertyWrite().getRhs()
)
or
exists(DataFlow::ArrayCreationNode arr | flowsToArgumentOfLikelyExternalLibraryCall(arr) |
n = arr.getAnElement()
)
}
/**
* Get calls for which we do not have the callee (i.e. the definition of the called function). This
* acts as a heuristic for identifying calls to external library functions.
*/
private DataFlow::CallNode getACallWithoutCallee() {
forall(Function callee | callee = result.getACallee() | callee.getTopLevel().isExterns()) and
not exists(DataFlow::ParameterNode param, DataFlow::FunctionNode callback |
param.flowsTo(result.getCalleeNode()) and
callback = getACallback(param, DataFlow::TypeBackTracker::end())
)
}
/**
* Gets a node that flows to callback-parameter `p`.
*/
private DataFlow::SourceNode getACallback(DataFlow::ParameterNode p, DataFlow::TypeBackTracker t) {
t.start() and
result = p and
any(DataFlow::FunctionNode f).getLastParameter() = p and
exists(p.getACall())
or
exists(DataFlow::TypeBackTracker t2 | result = getACallback(p, t2).backtrack(t2, t))
}
/**
* Get calls which are likely to be to external non-built-in libraries.
*/
DataFlow::CallNode getALikelyExternalLibraryCall() { result = getACallWithoutCallee() }
/*
* Characteristics that are indicative of a sink.
* NOTE: Initially each sink type has only one characteristic, which is that it's a sink of this type in the standard
@@ -69,9 +213,9 @@ abstract class EndpointCharacteristic extends string {
private class DomBasedXssSinkCharacteristic extends EndpointCharacteristic {
DomBasedXssSinkCharacteristic() { this = "DomBasedXssSink" }
override predicate getEndpoints(DataFlow::Node n) { n instanceof DomBasedXss::Sink }
override predicate appliesToEndpoint(DataFlow::Node n) { n instanceof DomBasedXss::Sink }
override predicate getImplications(
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof XssSinkType and
@@ -87,9 +231,9 @@ private class DomBasedXssSinkCharacteristic extends EndpointCharacteristic {
private class TaintedPathSinkCharacteristic extends EndpointCharacteristic {
TaintedPathSinkCharacteristic() { this = "TaintedPathSink" }
override predicate getEndpoints(DataFlow::Node n) { n instanceof TaintedPath::Sink }
override predicate appliesToEndpoint(DataFlow::Node n) { n instanceof TaintedPath::Sink }
override predicate getImplications(
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof TaintedPathSinkType and
@@ -105,9 +249,9 @@ private class TaintedPathSinkCharacteristic extends EndpointCharacteristic {
private class SqlInjectionSinkCharacteristic extends EndpointCharacteristic {
SqlInjectionSinkCharacteristic() { this = "SqlInjectionSink" }
override predicate getEndpoints(DataFlow::Node n) { n instanceof SqlInjection::Sink }
override predicate appliesToEndpoint(DataFlow::Node n) { n instanceof SqlInjection::Sink }
override predicate getImplications(
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof SqlInjectionSinkType and
@@ -123,9 +267,9 @@ private class SqlInjectionSinkCharacteristic extends EndpointCharacteristic {
private class NosqlInjectionSinkCharacteristic extends EndpointCharacteristic {
NosqlInjectionSinkCharacteristic() { this = "NosqlInjectionSink" }
override predicate getEndpoints(DataFlow::Node n) { n instanceof NosqlInjection::Sink }
override predicate appliesToEndpoint(DataFlow::Node n) { n instanceof NosqlInjection::Sink }
override predicate getImplications(
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof NosqlInjectionSinkType and
@@ -135,14 +279,23 @@ private class NosqlInjectionSinkCharacteristic extends EndpointCharacteristic {
}
/*
* Characteristics that are indicative of not being a sink of any type.
* Characteristics that are indicative of not being a sink of any type, and have historically been used to select
* negative samples for training.
*/
/**
* A characteristic that is an indicator of not being a sink of any type, because it's a modeled argument.
*/
abstract class OtherModeledArgumentCharacteristic extends EndpointCharacteristic {
bindingset[this]
OtherModeledArgumentCharacteristic() { any() }
}
/**
* A characteristic that is an indicator of not being a sink of any type, because it's an argument to a function of a
* builtin object.
*/
abstract private class ArgumentToBuiltinFunctionCharacteristic extends EndpointCharacteristic {
abstract private class ArgumentToBuiltinFunctionCharacteristic extends OtherModeledArgumentCharacteristic {
bindingset[this]
ArgumentToBuiltinFunctionCharacteristic() { any() }
}
@@ -154,7 +307,7 @@ abstract private class NotASinkCharacteristic extends EndpointCharacteristic {
bindingset[this]
NotASinkCharacteristic() { any() }
override predicate getImplications(
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof NegativeType and
@@ -173,7 +326,7 @@ abstract class LikelyNotASinkCharacteristic extends EndpointCharacteristic {
bindingset[this]
LikelyNotASinkCharacteristic() { any() }
override predicate getImplications(
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof NegativeType and
@@ -182,152 +335,169 @@ abstract class LikelyNotASinkCharacteristic extends EndpointCharacteristic {
}
}
private class LodashUnderscore extends NotASinkCharacteristic {
LodashUnderscore() { this = "LodashUnderscoreArgument" }
private class LodashUnderscoreCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
LodashUnderscoreCharacteristic() { this = "LodashUnderscoreArgument" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
any(LodashUnderscore::Member m).getACall().getAnArgument() = n
}
}
private class JQueryArgumentCharacteristic extends NotASinkCharacteristic {
private class JQueryArgumentCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
JQueryArgumentCharacteristic() { this = "JQueryArgument" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
any(JQuery::MethodCall m).getAnArgument() = n
}
}
private class ClientRequestCharacteristic extends NotASinkCharacteristic {
private class ClientRequestCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
ClientRequestCharacteristic() { this = "ClientRequest" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(ClientRequest r |
r.getAnArgument() = n or n = r.getUrl() or n = r.getHost() or n = r.getADataNode()
)
}
}
private class PromiseDefinitionCharacteristic extends NotASinkCharacteristic {
private class PromiseDefinitionCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
PromiseDefinitionCharacteristic() { this = "PromiseDefinition" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(PromiseDefinition p |
n = [p.getResolveParameter(), p.getRejectParameter()].getACall().getAnArgument()
)
}
}
private class CryptographicKeyCharacteristic extends NotASinkCharacteristic {
private class CryptographicKeyCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
CryptographicKeyCharacteristic() { this = "CryptographicKey" }
override predicate getEndpoints(DataFlow::Node n) { n instanceof CryptographicKey }
override predicate appliesToEndpoint(DataFlow::Node n) { n instanceof CryptographicKey }
}
private class CryptographicOperationFlowCharacteristic extends NotASinkCharacteristic {
private class CryptographicOperationFlowCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
CryptographicOperationFlowCharacteristic() { this = "CryptographicOperationFlow" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
any(CryptographicOperation op).getInput() = n
}
}
private class LoggerMethodCharacteristic extends NotASinkCharacteristic {
private class LoggerMethodCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
LoggerMethodCharacteristic() { this = "LoggerMethod" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName() = getAStandardLoggerMethodName()
)
}
}
private class TimeoutCharacteristic extends NotASinkCharacteristic {
private class TimeoutCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
TimeoutCharacteristic() { this = "Timeout" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName() = ["setTimeout", "clearTimeout"]
)
}
}
private class ReceiverStorageCharacteristic extends NotASinkCharacteristic {
private class ReceiverStorageCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
ReceiverStorageCharacteristic() { this = "ReceiverStorage" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getReceiver() = DataFlow::globalVarRef(["localStorage", "sessionStorage"])
)
}
}
private class StringStartsWithCharacteristic extends NotASinkCharacteristic {
private class StringStartsWithCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
StringStartsWithCharacteristic() { this = "StringStartsWith" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call instanceof StringOps::StartsWith
)
}
}
private class StringEndsWithCharacteristic extends NotASinkCharacteristic {
private class StringEndsWithCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
StringEndsWithCharacteristic() { this = "StringEndsWith" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() | call instanceof StringOps::EndsWith)
}
}
private class StringRegExpTestCharacteristic extends NotASinkCharacteristic {
private class StringRegExpTestCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
StringRegExpTestCharacteristic() { this = "StringRegExpTest" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call instanceof StringOps::RegExpTest
)
}
}
private class EventRegistrationCharacteristic extends NotASinkCharacteristic {
private class EventRegistrationCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
EventRegistrationCharacteristic() { this = "EventRegistration" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() | call instanceof EventRegistration)
}
}
private class EventDispatchCharacteristic extends NotASinkCharacteristic {
private class EventDispatchCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
EventDispatchCharacteristic() { this = "EventDispatch" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() | call instanceof EventDispatch)
}
}
private class MembershipCandidateTestCharacteristic extends NotASinkCharacteristic {
private class MembershipCandidateTestCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
MembershipCandidateTestCharacteristic() { this = "MembershipCandidateTest" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call = any(MembershipCandidate c).getTest()
)
}
}
private class FileSystemAccessCharacteristic extends NotASinkCharacteristic {
private class FileSystemAccessCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
FileSystemAccessCharacteristic() { this = "FileSystemAccess" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() | call instanceof FileSystemAccess)
}
}
private class DatabaseAccessCharacteristic extends NotASinkCharacteristic {
private class DatabaseAccessCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
DatabaseAccessCharacteristic() { this = "DatabaseAccess" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
// TODO database accesses are less well defined than database query sinks, so this may cover unmodeled sinks on
// existing database models
exists(DataFlow::CallNode call | n = call.getAnArgument() |
@@ -339,18 +509,19 @@ private class DatabaseAccessCharacteristic extends NotASinkCharacteristic {
}
}
private class DomCharacteristic extends NotASinkCharacteristic {
private class DomCharacteristic extends NotASinkCharacteristic, OtherModeledArgumentCharacteristic {
DomCharacteristic() { this = "DOM" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() | call = DOM::domValueRef())
}
}
private class NextFunctionCallCharacteristic extends NotASinkCharacteristic {
private class NextFunctionCallCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
NextFunctionCallCharacteristic() { this = "NextFunctionCall" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName() = "next" and
exists(DataFlow::FunctionNode f | call = f.getLastParameter().getACall())
@@ -358,20 +529,22 @@ private class NextFunctionCallCharacteristic extends NotASinkCharacteristic {
}
}
private class DojoRequireCharacteristic extends NotASinkCharacteristic {
private class DojoRequireCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
DojoRequireCharacteristic() { this = "DojoRequire" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call = DataFlow::globalVarRef("dojo").getAPropertyRead("require").getACall()
)
}
}
private class Base64ManipulationCharacteristic extends NotASinkCharacteristic {
private class Base64ManipulationCharacteristic extends NotASinkCharacteristic,
OtherModeledArgumentCharacteristic {
Base64ManipulationCharacteristic() { this = "Base64Manipulation" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(Base64::Decode d | n = d.getInput()) or
exists(Base64::Encode d | n = d.getInput())
}
@@ -381,7 +554,7 @@ private class ArgumentToArrayCharacteristic extends ArgumentToBuiltinFunctionCha
LikelyNotASinkCharacteristic {
ArgumentToArrayCharacteristic() { this = "ArgumentToArray" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::SourceNode builtin, DataFlow::SourceNode receiver, DataFlow::InvokeNode invk |
builtin instanceof DataFlow::ArrayCreationNode
|
@@ -396,7 +569,7 @@ private class ArgumentToBuiltinGlobalVarRefCharacteristic extends ArgumentToBuil
LikelyNotASinkCharacteristic {
ArgumentToBuiltinGlobalVarRefCharacteristic() { this = "ArgumentToBuiltinGlobalVarRef" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::SourceNode builtin, DataFlow::SourceNode receiver, DataFlow::InvokeNode invk |
builtin =
DataFlow::globalVarRef([
@@ -415,7 +588,7 @@ private class ConstantReceiverCharacteristic extends ArgumentToBuiltinFunctionCh
NotASinkCharacteristic {
ConstantReceiverCharacteristic() { this = "ConstantReceiver" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(Expr primitive, MethodCallExpr c |
primitive instanceof ConstantString or
primitive instanceof NumberLiteral or
@@ -431,7 +604,7 @@ private class BuiltinCallNameCharacteristic extends ArgumentToBuiltinFunctionCha
NotASinkCharacteristic {
BuiltinCallNameCharacteristic() { this = "BuiltinCallName" }
override predicate getEndpoints(DataFlow::Node n) {
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call |
call.getAnArgument() = n and
call.getCalleeName() =
@@ -442,3 +615,430 @@ private class BuiltinCallNameCharacteristic extends ArgumentToBuiltinFunctionCha
)
}
}
/*
* Characteristics that have historically acted as endpoint filters to exclude endpoints from scoring at inference time.
*/
/** A characteristic that has historically acted as an endpoint filter for inference-time scoring. */
abstract class EndpointFilterCharacteristic extends EndpointCharacteristic {
bindingset[this]
EndpointFilterCharacteristic() { any() }
}
/**
* An EndpointFilterCharacteristic that indicates that an endpoint is unlikely to be a sink of any type.
*/
abstract private class StandardEndpointFilterCharacteristic extends EndpointFilterCharacteristic {
bindingset[this]
StandardEndpointFilterCharacteristic() { any() }
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof NegativeType and
isPositiveIndicator = true and
confidence = mediumConfidence()
}
}
class IsArgumentToModeledFunctionCharacteristic extends StandardEndpointFilterCharacteristic {
IsArgumentToModeledFunctionCharacteristic() { this = "argument to modeled function" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::InvokeNode invk, DataFlow::Node known |
invk.getAnArgument() = n and
invk.getAnArgument() = known and
(
isKnownLibrarySink(known)
or
isKnownStepSrc(known)
or
exists(OtherModeledArgumentCharacteristic characteristic |
characteristic.appliesToEndpoint(known)
)
)
)
}
}
private class IsArgumentToSinklessLibraryCharacteristic extends StandardEndpointFilterCharacteristic {
IsArgumentToSinklessLibraryCharacteristic() { this = "argument to sinkless library" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::InvokeNode invk, DataFlow::SourceNode commonSafeLibrary, string libraryName |
libraryName = ["slugify", "striptags", "marked"]
|
commonSafeLibrary = DataFlow::moduleImport(libraryName) and
invk = [commonSafeLibrary, commonSafeLibrary.getAPropertyRead()].getAnInvocation() and
n = invk.getAnArgument()
)
}
}
private class IsSanitizerCharacteristic extends StandardEndpointFilterCharacteristic {
IsSanitizerCharacteristic() { this = "sanitizer" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName().regexpMatch("(?i).*(escape|valid(ate)?|sanitize|purify).*")
)
}
}
private class IsPredicateCharacteristic extends StandardEndpointFilterCharacteristic {
IsPredicateCharacteristic() { this = "predicate" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName().regexpMatch("(equals|(|is|has|can)(_|[A-Z])).*")
)
}
}
private class IsHashCharacteristic extends StandardEndpointFilterCharacteristic {
IsHashCharacteristic() { this = "hash" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName().regexpMatch("(?i)^(sha\\d*|md5|hash)$")
)
}
}
private class IsNumericCharacteristic extends StandardEndpointFilterCharacteristic {
IsNumericCharacteristic() { this = "numeric" }
override predicate appliesToEndpoint(DataFlow::Node n) {
SyntacticHeuristics::isReadFrom(n, ".*index.*")
}
}
private class InIrrelevantFileCharacteristic extends StandardEndpointFilterCharacteristic {
private string category;
InIrrelevantFileCharacteristic() {
this = "in " + category + " file" and category = ["externs", "generated", "library", "test"]
}
override predicate appliesToEndpoint(DataFlow::Node n) {
// Ignore candidate sinks within externs, generated, library, and test code
ClassifyFiles::classify(n.getFile(), category)
}
}
/** An EndpointFilterCharacteristic that indicates that an endpoint is unlikely to be a NoSQL injection sink. */
abstract private class NosqlInjectionSinkEndpointFilterCharacteristic extends EndpointFilterCharacteristic {
bindingset[this]
NosqlInjectionSinkEndpointFilterCharacteristic() { any() }
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof NosqlInjectionSinkType and
isPositiveIndicator = false and
confidence = mediumConfidence()
}
}
private class DatabaseAccessCallHeuristicCharacteristic extends NosqlInjectionSinkEndpointFilterCharacteristic {
DatabaseAccessCallHeuristicCharacteristic() { this = "matches database access call heuristic" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::MethodCallNode call | n = call.getAnArgument() |
// additional databases accesses that aren't modeled yet
call.getMethodName() = ["create", "createCollection", "createIndexes"]
)
}
}
private class ModeledSinkCharacteristic extends NosqlInjectionSinkEndpointFilterCharacteristic {
ModeledSinkCharacteristic() { this = "modeled sink" }
/**
* Holds if the node `n` is a known sink in a modeled library, or a sibling-argument of such a sink.
*/
predicate isArgumentToKnownLibrarySinkFunction(DataFlow::Node n) {
exists(DataFlow::InvokeNode invk, DataFlow::Node known |
invk.getAnArgument() = n and invk.getAnArgument() = known and isKnownLibrarySink(known)
)
}
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
// Remove modeled sinks
isArgumentToKnownLibrarySinkFunction(n)
)
}
}
private class PredecessorInModeledFlowStepCharacteristic extends NosqlInjectionSinkEndpointFilterCharacteristic {
PredecessorInModeledFlowStepCharacteristic() { this = "predecessor in a modeled flow step" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
// Remove common kinds of unlikely sinks
isKnownStepSrc(n)
)
}
}
private class ModeledDatabaseAccessCharacteristic extends NosqlInjectionSinkEndpointFilterCharacteristic {
ModeledDatabaseAccessCharacteristic() { this = "modeled database access" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
// Remove modeled database calls. Arguments to modeled calls are very likely to be modeled
// as sinks if they are true positives. Therefore arguments that are not modeled as sinks
// are unlikely to be true positives.
call instanceof DatabaseAccess
)
}
}
private class ReceiverIsHttpRequestExpressionCharacteristic extends NosqlInjectionSinkEndpointFilterCharacteristic {
ReceiverIsHttpRequestExpressionCharacteristic() { this = "receiver is a HTTP request expression" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
// Remove calls to APIs that aren't relevant to NoSQL injection
call.getReceiver() instanceof Http::RequestNode
)
}
}
private class ReceiverIsHttpResponseExpressionCharacteristic extends NosqlInjectionSinkEndpointFilterCharacteristic {
ReceiverIsHttpResponseExpressionCharacteristic() {
this = "receiver is a HTTP response expression"
}
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
// Remove calls to APIs that aren't relevant to NoSQL injection
call.getReceiver() instanceof Http::ResponseNode
)
}
}
private class NotDirectArgumentToLikelyExternalLibraryCallOrHeuristicSinkNosqlCharacteristic extends NosqlInjectionSinkEndpointFilterCharacteristic {
NotDirectArgumentToLikelyExternalLibraryCallOrHeuristicSinkNosqlCharacteristic() {
this = "not a direct argument to a likely external library call or a heuristic sink (nosql)"
}
override predicate appliesToEndpoint(DataFlow::Node n) {
// Require NoSQL injection sink candidates to be (a) direct arguments to external library calls
// or (b) heuristic sinks for NoSQL injection.
//
// ## Direct arguments to external library calls
//
// The `flowsToArgumentOfLikelyExternalLibraryCall` endpoint filter
// allows sink candidates which are within object literals or array literals, for example
// `req.sendFile(_, { path: ENDPOINT })`.
//
// However, the NoSQL injection query deals differently with these types of sinks compared to
// other security queries. Other security queries such as SQL injection tend to treat
// `ENDPOINT` as the ground truth sink, but the NoSQL injection query instead treats
// `{ path: ENDPOINT }` as the ground truth sink and defines an additional flow step to ensure
// data flows from `ENDPOINT` to the ground truth sink `{ path: ENDPOINT }`.
//
// Therefore for the NoSQL injection boosted query, we must ignore sink candidates within object
// literals or array literals, to avoid having multiple alerts for the same security
// vulnerability (one FP where the sink is `ENDPOINT` and one TP where the sink is
// `{ path: ENDPOINT }`). We accomplish this by directly testing that the sink candidate is an
// argument of a likely external library call.
//
// ## Heuristic sinks
//
// We also allow heuristic sinks in addition to direct arguments to external library calls.
// These are copied from the `HeuristicNosqlInjectionSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not n = getALikelyExternalLibraryCall().getAnArgument() and
not (
SyntacticHeuristics::isAssignedToOrConcatenatedWith(n, "(?i)(nosql|query)") or
SyntacticHeuristics::isArgTo(n, "(?i)(query)")
)
}
}
/** An EndpointFilterCharacteristic that indicates that an endpoint is unlikely to be a SQL injection sink. */
abstract private class SqlInjectionSinkEndpointFilterCharacteristic extends EndpointFilterCharacteristic {
bindingset[this]
SqlInjectionSinkEndpointFilterCharacteristic() { any() }
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof SqlInjectionSinkType and
isPositiveIndicator = false and
confidence = mediumConfidence()
}
}
private class PreparedSqlStatementCharacteristic extends SqlInjectionSinkEndpointFilterCharacteristic {
PreparedSqlStatementCharacteristic() { this = "prepared SQL statement" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
// prepared statements for SQL
any(DataFlow::CallNode cn | cn.getCalleeName() = "prepare")
.getAMethodCall("run")
.getAnArgument() = n
)
}
}
private class ArrayCreationCharacteristic extends SqlInjectionSinkEndpointFilterCharacteristic {
ArrayCreationCharacteristic() { this = "array creation" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
n instanceof DataFlow::ArrayCreationNode
)
}
}
private class HtmlOrRenderingCharacteristic extends SqlInjectionSinkEndpointFilterCharacteristic {
HtmlOrRenderingCharacteristic() { this = "HTML / rendering" }
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
// UI is unrelated to SQL
call.getCalleeName().regexpMatch("(?i).*(render|html).*")
)
}
}
private class NotAnArgumentToLikelyExternalLibraryCallOrHeuristicSinkCharacteristic extends SqlInjectionSinkEndpointFilterCharacteristic {
NotAnArgumentToLikelyExternalLibraryCallOrHeuristicSinkCharacteristic() {
this = "not an argument to a likely external library call or a heuristic sink"
}
override predicate appliesToEndpoint(DataFlow::Node n) {
// Require SQL injection sink candidates to be (a) arguments to external library calls
// (possibly indirectly), or (b) heuristic sinks.
//
// Heuristic sinks are copied from the `HeuristicSqlInjectionSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not flowsToArgumentOfLikelyExternalLibraryCall(n) and
not (
SyntacticHeuristics::isAssignedToOrConcatenatedWith(n, "(?i)(sql|query)") or
SyntacticHeuristics::isArgTo(n, "(?i)(query)") or
SyntacticHeuristics::isConcatenatedWithString(n,
"(?s).*(ALTER|COUNT|CREATE|DATABASE|DELETE|DISTINCT|DROP|FROM|GROUP|INSERT|INTO|LIMIT|ORDER|SELECT|TABLE|UPDATE|WHERE).*")
)
}
}
/** An EndpointFilterCharacteristic that indicates that an endpoint is unlikely to be a tainted path injection sink. */
abstract private class TaintedPathSinkEndpointFilterCharacteristic extends EndpointFilterCharacteristic {
bindingset[this]
TaintedPathSinkEndpointFilterCharacteristic() { any() }
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof TaintedPathSinkType and
isPositiveIndicator = false and
confidence = mediumConfidence()
}
}
private class NotDirectArgumentToLikelyExternalLibraryCallOrHeuristicSinkTaintedPathCharacteristic extends TaintedPathSinkEndpointFilterCharacteristic {
NotDirectArgumentToLikelyExternalLibraryCallOrHeuristicSinkTaintedPathCharacteristic() {
this =
"not a direct argument to a likely external library call or a heuristic sink (tainted path)"
}
override predicate appliesToEndpoint(DataFlow::Node n) {
// Require path injection sink candidates to be (a) arguments to external library calls
// (possibly indirectly), or (b) heuristic sinks.
//
// Heuristic sinks are mostly copied from the `HeuristicTaintedPathSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not flowsToArgumentOfLikelyExternalLibraryCall(n) and
not (
SyntacticHeuristics::isAssignedToOrConcatenatedWith(n, "(?i)(file|folder|dir|absolute)")
or
SyntacticHeuristics::isArgTo(n, "(?i)(get|read)file")
or
exists(string pathPattern |
// paths with at least two parts, and either a trailing or leading slash
pathPattern = "(?i)([a-z0-9_.-]+/){2,}" or
pathPattern = "(?i)(/[a-z0-9_.-]+){2,}"
|
SyntacticHeuristics::isConcatenatedWithString(n, pathPattern)
)
or
SyntacticHeuristics::isConcatenatedWithStrings(".*/", n, "/.*")
or
// In addition to the names from `HeuristicTaintedPathSink` in the
// `isAssignedToOrConcatenatedWith` predicate call above, we also allow the noisier "path"
// name.
SyntacticHeuristics::isAssignedToOrConcatenatedWith(n, "(?i)path")
)
}
}
/** An EndpointFilterCharacteristic that indicates that an endpoint is unlikely to be an XSS sink. */
abstract private class XssSinkEndpointFilterCharacteristic extends EndpointFilterCharacteristic {
bindingset[this]
XssSinkEndpointFilterCharacteristic() { any() }
override predicate hasImplications(
EndpointType endpointClass, boolean isPositiveIndicator, float confidence
) {
endpointClass instanceof XssSinkType and
isPositiveIndicator = false and
confidence = mediumConfidence()
}
}
private class SetStateCallsInReactApplicationsCharacteristic extends XssSinkEndpointFilterCharacteristic {
SetStateCallsInReactApplicationsCharacteristic() {
this = "setState calls ought to be safe in react applications"
}
override predicate appliesToEndpoint(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() | call.getCalleeName() = "setState")
}
}
private class NotDirectArgumentToLikelyExternalLibraryCallOrHeuristicSinkXssCharacteristic extends XssSinkEndpointFilterCharacteristic {
NotDirectArgumentToLikelyExternalLibraryCallOrHeuristicSinkXssCharacteristic() {
this = "not a direct argument to a likely external library call or a heuristic sink (xss)"
}
override predicate appliesToEndpoint(DataFlow::Node n) {
// Require XSS sink candidates to be (a) arguments to external library calls (possibly
// indirectly), or (b) heuristic sinks.
//
// Heuristic sinks are copied from the `HeuristicDomBasedXssSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not flowsToArgumentOfLikelyExternalLibraryCall(n) and
not (
SyntacticHeuristics::isAssignedToOrConcatenatedWith(n, "(?i)(html|innerhtml)")
or
SyntacticHeuristics::isArgTo(n, "(?i)(html|render)")
or
n instanceof StringOps::HtmlConcatenationLeaf
or
SyntacticHeuristics::isConcatenatedWithStrings("(?is).*<[a-z ]+.*", n, "(?s).*>.*")
or
// In addition to the heuristic sinks from `HeuristicDomBasedXssSink`, explicitly allow
// property writes like `elem.innerHTML = <TAINT>` that may not be picked up as HTML
// concatenation leaves.
exists(DataFlow::PropWrite pw |
pw.getPropertyName().regexpMatch("(?i).*html*") and
pw.getRhs() = n
)
)
}
}

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
* Extracts data about the database for use in adaptive threat modeling (ATM).

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
* Provides an implementation of scoring alerts for use in adaptive threat modeling (ATM).

View File

@@ -1,220 +0,0 @@
/**
* For internal use only.
*
* Defines a set of reasons why a particular endpoint was filtered out. This set of reasons
* contains both reasons why an endpoint could be `NotASink` and reasons why an endpoint could be
* `LikelyNotASink`. The `NotASinkReason`s defined here are exhaustive, but the
* `LikelyNotASinkReason`s are not exhaustive.
*/
newtype TFilteringReason =
TIsArgumentToBuiltinFunctionReason() or
TLodashUnderscoreArgumentReason() or
TClientRequestReason() or
TPromiseDefinitionReason() or
TCryptographicKeyReason() or
TCryptographicOperationFlowReason() or
TLoggerMethodReason() or
TTimeoutReason() or
TReceiverStorageReason() or
TStringStartsWithReason() or
TStringEndsWithReason() or
TStringRegExpTestReason() or
TEventRegistrationReason() or
TEventDispatchReason() or
TMembershipCandidateTestReason() or
TFileSystemAccessReason() or
TDatabaseAccessReason() or
TDomReason() or
TNextFunctionCallReason() or
TArgumentToArrayReason() or
TArgumentToBuiltinGlobalVarRefReason() or
TConstantReceiverReason() or
TBuiltinCallNameReason() or
TBase64ManipulationReason() or
TJQueryArgumentReason() or
TDojoRequireReason()
/** A reason why a particular endpoint was filtered out by the endpoint filters. */
abstract class FilteringReason extends TFilteringReason {
abstract string getDescription();
abstract int getEncoding();
string toString() { result = getDescription() }
}
/**
* A reason why a particular endpoint might be considered to be `NotASink`.
*
* An endpoint is `NotASink` if it has at least one `NotASinkReason`, it does not have any
* `LikelyNotASinkReason`s, and it is not a known sink.
*/
abstract class NotASinkReason extends FilteringReason { }
/**
* A reason why a particular endpoint might be considered to be `LikelyNotASink`.
*
* An endpoint is `LikelyNotASink` if it has at least one `LikelyNotASinkReason` and it is not a
* known sink.
*/
abstract class LikelyNotASinkReason extends FilteringReason { }
class IsArgumentToBuiltinFunctionReason extends NotASinkReason, TIsArgumentToBuiltinFunctionReason {
override string getDescription() { result = "IsArgumentToBuiltinFunction" }
override int getEncoding() { result = 5 }
}
class LodashUnderscoreArgumentReason extends NotASinkReason, TLodashUnderscoreArgumentReason {
override string getDescription() { result = "LodashUnderscoreArgument" }
override int getEncoding() { result = 6 }
}
class ClientRequestReason extends NotASinkReason, TClientRequestReason {
override string getDescription() { result = "ClientRequest" }
override int getEncoding() { result = 7 }
}
class PromiseDefinitionReason extends NotASinkReason, TPromiseDefinitionReason {
override string getDescription() { result = "PromiseDefinition" }
override int getEncoding() { result = 8 }
}
class CryptographicKeyReason extends NotASinkReason, TCryptographicKeyReason {
override string getDescription() { result = "CryptographicKey" }
override int getEncoding() { result = 9 }
}
class CryptographicOperationFlowReason extends NotASinkReason, TCryptographicOperationFlowReason {
override string getDescription() { result = "CryptographicOperationFlow" }
override int getEncoding() { result = 10 }
}
class LoggerMethodReason extends NotASinkReason, TLoggerMethodReason {
override string getDescription() { result = "LoggerMethod" }
override int getEncoding() { result = 11 }
}
class TimeoutReason extends NotASinkReason, TTimeoutReason {
override string getDescription() { result = "Timeout" }
override int getEncoding() { result = 12 }
}
class ReceiverStorageReason extends NotASinkReason, TReceiverStorageReason {
override string getDescription() { result = "ReceiverStorage" }
override int getEncoding() { result = 13 }
}
class StringStartsWithReason extends NotASinkReason, TStringStartsWithReason {
override string getDescription() { result = "StringStartsWith" }
override int getEncoding() { result = 14 }
}
class StringEndsWithReason extends NotASinkReason, TStringEndsWithReason {
override string getDescription() { result = "StringEndsWith" }
override int getEncoding() { result = 15 }
}
class StringRegExpTestReason extends NotASinkReason, TStringRegExpTestReason {
override string getDescription() { result = "StringRegExpTest" }
override int getEncoding() { result = 16 }
}
class EventRegistrationReason extends NotASinkReason, TEventRegistrationReason {
override string getDescription() { result = "EventRegistration" }
override int getEncoding() { result = 17 }
}
class EventDispatchReason extends NotASinkReason, TEventDispatchReason {
override string getDescription() { result = "EventDispatch" }
override int getEncoding() { result = 18 }
}
class MembershipCandidateTestReason extends NotASinkReason, TMembershipCandidateTestReason {
override string getDescription() { result = "MembershipCandidateTest" }
override int getEncoding() { result = 19 }
}
class FileSystemAccessReason extends NotASinkReason, TFileSystemAccessReason {
override string getDescription() { result = "FileSystemAccess" }
override int getEncoding() { result = 20 }
}
class DatabaseAccessReason extends NotASinkReason, TDatabaseAccessReason {
override string getDescription() { result = "DatabaseAccess" }
override int getEncoding() { result = 21 }
}
class DomReason extends NotASinkReason, TDomReason {
override string getDescription() { result = "DOM" }
override int getEncoding() { result = 22 }
}
/** DEPRECATED: Alias for DomReason */
deprecated class DOMReason = DomReason;
class NextFunctionCallReason extends NotASinkReason, TNextFunctionCallReason {
override string getDescription() { result = "NextFunctionCall" }
override int getEncoding() { result = 23 }
}
class ArgumentToArrayReason extends LikelyNotASinkReason, TArgumentToArrayReason {
override string getDescription() { result = "ArgumentToArray" }
override int getEncoding() { result = 24 }
}
class ArgumentToBuiltinGlobalVarRefReason extends LikelyNotASinkReason,
TArgumentToBuiltinGlobalVarRefReason {
override string getDescription() { result = "ArgumentToBuiltinGlobalVarRef" }
override int getEncoding() { result = 25 }
}
class ConstantReceiverReason extends NotASinkReason, TConstantReceiverReason {
override string getDescription() { result = "ConstantReceiver" }
override int getEncoding() { result = 26 }
}
class BuiltinCallNameReason extends NotASinkReason, TBuiltinCallNameReason {
override string getDescription() { result = "BuiltinCallName" }
override int getEncoding() { result = 27 }
}
class Base64ManipulationReason extends NotASinkReason, TBase64ManipulationReason {
override string getDescription() { result = "Base64Manipulation" }
override int getEncoding() { result = 28 }
}
class JQueryArgumentReason extends NotASinkReason, TJQueryArgumentReason {
override string getDescription() { result = "JQueryArgument" }
override int getEncoding() { result = 29 }
}
class DojoRequireReason extends NotASinkReason, TDojoRequireReason {
override string getDescription() { result = "DojoRequire" }
override int getEncoding() { result = 30 }
}

View File

@@ -1,4 +1,4 @@
/*
/**
* FunctionBodyFeatures.qll
*
* Contains logic relating to the `enclosingFunctionBody` and `enclosingFunctionName` features.

View File

@@ -1,6 +1,7 @@
/**
* For internal use only.
*
* A taint-tracking configuration for reasoning about NoSQL injection vulnerabilities.
* Defines shared code used by the NoSQL injection boosted query.
*/
@@ -8,145 +9,21 @@ import javascript
private import semmle.javascript.heuristics.SyntacticHeuristics
private import semmle.javascript.security.dataflow.NosqlInjectionCustomizations
import AdaptiveThreatModeling
private import CoreKnowledge as CoreKnowledge
private import StandardEndpointFilters as StandardEndpointFilters
module SinkEndpointFilter {
/**
* Provides a set of reasons why a given data flow node should be excluded as a sink candidate.
*
* If this predicate has no results for a sink candidate `n`, then we should treat `n` as an
* effective sink.
*/
string getAReasonSinkExcluded(DataFlow::Node sinkCandidate) {
result = StandardEndpointFilters::getAReasonSinkExcluded(sinkCandidate)
or
exists(DataFlow::CallNode call | sinkCandidate = call.getAnArgument() |
// additional databases accesses that aren't modeled yet
call.(DataFlow::MethodCallNode).getMethodName() =
["create", "createCollection", "createIndexes"] and
result = "matches database access call heuristic"
or
// Remove modeled sinks
CoreKnowledge::isArgumentToKnownLibrarySinkFunction(sinkCandidate) and
result = "modeled sink"
or
// Remove common kinds of unlikely sinks
CoreKnowledge::isKnownStepSrc(sinkCandidate) and
result = "predecessor in a modeled flow step"
or
// Remove modeled database calls. Arguments to modeled calls are very likely to be modeled
// as sinks if they are true positives. Therefore arguments that are not modeled as sinks
// are unlikely to be true positives.
call instanceof DatabaseAccess and
result = "modeled database access"
or
// Remove calls to APIs that aren't relevant to NoSQL injection
call.getReceiver() instanceof Http::RequestNode and
result = "receiver is a HTTP request expression"
or
call.getReceiver() instanceof Http::ResponseNode and
result = "receiver is a HTTP response expression"
)
or
// Require NoSQL injection sink candidates to be (a) direct arguments to external library calls
// or (b) heuristic sinks for NoSQL injection.
//
// ## Direct arguments to external library calls
//
// The `StandardEndpointFilters::flowsToArgumentOfLikelyExternalLibraryCall` endpoint filter
// allows sink candidates which are within object literals or array literals, for example
// `req.sendFile(_, { path: ENDPOINT })`.
//
// However, the NoSQL injection query deals differently with these types of sinks compared to
// other security queries. Other security queries such as SQL injection tend to treat
// `ENDPOINT` as the ground truth sink, but the NoSQL injection query instead treats
// `{ path: ENDPOINT }` as the ground truth sink and defines an additional flow step to ensure
// data flows from `ENDPOINT` to the ground truth sink `{ path: ENDPOINT }`.
//
// Therefore for the NoSQL injection boosted query, we must ignore sink candidates within object
// literals or array literals, to avoid having multiple alerts for the same security
// vulnerability (one FP where the sink is `ENDPOINT` and one TP where the sink is
// `{ path: ENDPOINT }`). We accomplish this by directly testing that the sink candidate is an
// argument of a likely external library call.
//
// ## Heuristic sinks
//
// We also allow heuristic sinks in addition to direct arguments to external library calls.
// These are copied from the `HeuristicNosqlInjectionSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not sinkCandidate = StandardEndpointFilters::getALikelyExternalLibraryCall().getAnArgument() and
not (
isAssignedToOrConcatenatedWith(sinkCandidate, "(?i)(nosql|query)") or
isArgTo(sinkCandidate, "(?i)(query)")
) and
result = "not a direct argument to a likely external library call or a heuristic sink"
}
}
class NosqlInjectionAtmConfig extends AtmConfig {
NosqlInjectionAtmConfig() { this = "NosqlInjectionATMConfig" }
NosqlInjectionAtmConfig() { this = "NosqlInjectionAtmConfig" }
override predicate isKnownSource(DataFlow::Node source) {
source instanceof NosqlInjection::Source or TaintedObject::isSource(source, _)
}
override predicate isEffectiveSink(DataFlow::Node sinkCandidate) {
not exists(SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate))
}
override EndpointType getASinkEndpointType() { result instanceof NosqlInjectionSinkType }
}
/** DEPRECATED: Alias for NosqlInjectionAtmConfig */
deprecated class NosqlInjectionATMConfig = NosqlInjectionAtmConfig;
/** Holds if src -> trg is an additional flow step in the non-boosted NoSql injection security query. */
predicate isBaseAdditionalFlowStep(
DataFlow::Node src, DataFlow::Node trg, DataFlow::FlowLabel inlbl, DataFlow::FlowLabel outlbl
) {
TaintedObject::step(src, trg, inlbl, outlbl)
or
// additional flow step to track taint through NoSQL query objects
inlbl = TaintedObject::label() and
outlbl = TaintedObject::label() and
exists(NoSql::Query query, DataFlow::SourceNode queryObj |
queryObj.flowsTo(query) and
queryObj.flowsTo(trg) and
src = queryObj.getAPropertyWrite().getRhs()
)
}
/**
* Gets a value that is (transitively) written to `query`, where `query` is a NoSQL sink.
*
* This predicate allows us to propagate data flow through property writes and array constructors
* within a query object, enabling the security query to pick up NoSQL injection vulnerabilities
* involving more complex queries.
*/
DataFlow::Node getASubexpressionWithinQuery(DataFlow::Node query) {
any(NosqlInjectionAtmConfig cfg).isEffectiveSink(query) and
exists(DataFlow::SourceNode receiver |
receiver = [getASubexpressionWithinQuery(query), query].getALocalSource()
|
result =
[receiver.getAPropertyWrite().getRhs(), receiver.(DataFlow::ArrayCreationNode).getAnElement()]
)
}
/**
* A taint-tracking configuration for reasoning about NoSQL injection vulnerabilities.
*
* This is largely a copy of the taint tracking configuration for the standard NoSQL injection
* query, except additional ATM sinks have been added and the additional flow step has been
* generalised to cover the sinks predicted by ATM.
*/
class Configuration extends TaintTracking::Configuration {
Configuration() { this = "NosqlInjectionATM" }
override predicate isSource(DataFlow::Node source) { source instanceof NosqlInjection::Source }
/*
* This is largely a copy of the taint tracking configuration for the standard NoSQL injection
* query, except additional ATM sinks have been added and the additional flow step has been
* generalised to cover the sinks predicted by ATM.
*/
override predicate isSource(DataFlow::Node source, DataFlow::FlowLabel label) {
TaintedObject::isSource(source, label)
@@ -156,7 +33,7 @@ class Configuration extends TaintTracking::Configuration {
sink.(NosqlInjection::Sink).getAFlowLabel() = label
or
// Allow effective sinks to have any taint label
any(NosqlInjectionAtmConfig cfg).isEffectiveSink(sink)
isEffectiveSink(sink)
}
override predicate isSanitizer(DataFlow::Node node) {
@@ -175,7 +52,43 @@ class Configuration extends TaintTracking::Configuration {
isBaseAdditionalFlowStep(src, trg, inlbl, outlbl)
or
// relaxed version of previous step to track taint through unmodeled NoSQL query objects
any(NosqlInjectionAtmConfig cfg).isEffectiveSink(trg) and
isEffectiveSink(trg) and
src = getASubexpressionWithinQuery(trg)
}
/** Holds if src -> trg is an additional flow step in the non-boosted NoSql injection security query. */
private predicate isBaseAdditionalFlowStep(
DataFlow::Node src, DataFlow::Node trg, DataFlow::FlowLabel inlbl, DataFlow::FlowLabel outlbl
) {
TaintedObject::step(src, trg, inlbl, outlbl)
or
// additional flow step to track taint through NoSQL query objects
inlbl = TaintedObject::label() and
outlbl = TaintedObject::label() and
exists(NoSql::Query query, DataFlow::SourceNode queryObj |
queryObj.flowsTo(query) and
queryObj.flowsTo(trg) and
src = queryObj.getAPropertyWrite().getRhs()
)
}
/**
* Gets a value that is (transitively) written to `query`, where `query` is a NoSQL sink.
*
* This predicate allows us to propagate data flow through property writes and array constructors
* within a query object, enabling the security query to pick up NoSQL injection vulnerabilities
* involving more complex queries.
*/
private DataFlow::Node getASubexpressionWithinQuery(DataFlow::Node query) {
isEffectiveSink(query) and
exists(DataFlow::SourceNode receiver |
receiver = [getASubexpressionWithinQuery(query), query].getALocalSource()
|
result =
[
receiver.getAPropertyWrite().getRhs(),
receiver.(DataFlow::ArrayCreationNode).getAnElement()
]
)
}
}

View File

@@ -1,94 +1,25 @@
/**
* For internal use only.
*
* A taint-tracking configuration for reasoning about SQL injection vulnerabilities.
* Defines shared code used by the SQL injection boosted query.
*/
import semmle.javascript.heuristics.SyntacticHeuristics
import semmle.javascript.security.dataflow.SqlInjectionCustomizations
import AdaptiveThreatModeling
import CoreKnowledge as CoreKnowledge
import StandardEndpointFilters as StandardEndpointFilters
/**
* This module provides logic to filter candidate sinks to those which are likely SQL injection
* sinks.
*/
module SinkEndpointFilter {
private import javascript
private import SQL
/**
* Provides a set of reasons why a given data flow node should be excluded as a sink candidate.
*
* If this predicate has no results for a sink candidate `n`, then we should treat `n` as an
* effective sink.
*/
string getAReasonSinkExcluded(DataFlow::Node sinkCandidate) {
result = StandardEndpointFilters::getAReasonSinkExcluded(sinkCandidate)
or
exists(DataFlow::CallNode call | sinkCandidate = call.getAnArgument() |
// prepared statements for SQL
any(DataFlow::CallNode cn | cn.getCalleeName() = "prepare")
.getAMethodCall("run")
.getAnArgument() = sinkCandidate and
result = "prepared SQL statement"
or
sinkCandidate instanceof DataFlow::ArrayCreationNode and
result = "array creation"
or
// UI is unrelated to SQL
call.getCalleeName().regexpMatch("(?i).*(render|html).*") and
result = "HTML / rendering"
)
or
// Require SQL injection sink candidates to be (a) arguments to external library calls
// (possibly indirectly), or (b) heuristic sinks.
//
// Heuristic sinks are copied from the `HeuristicSqlInjectionSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not StandardEndpointFilters::flowsToArgumentOfLikelyExternalLibraryCall(sinkCandidate) and
not (
isAssignedToOrConcatenatedWith(sinkCandidate, "(?i)(sql|query)") or
isArgTo(sinkCandidate, "(?i)(query)") or
isConcatenatedWithString(sinkCandidate,
"(?s).*(ALTER|COUNT|CREATE|DATABASE|DELETE|DISTINCT|DROP|FROM|GROUP|INSERT|INTO|LIMIT|ORDER|SELECT|TABLE|UPDATE|WHERE).*")
) and
result = "not an argument to a likely external library call or a heuristic sink"
}
}
class SqlInjectionAtmConfig extends AtmConfig {
SqlInjectionAtmConfig() { this = "SqlInjectionATMConfig" }
SqlInjectionAtmConfig() { this = "SqlInjectionAtmConfig" }
override predicate isKnownSource(DataFlow::Node source) { source instanceof SqlInjection::Source }
override predicate isEffectiveSink(DataFlow::Node sinkCandidate) {
not exists(SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate))
}
override EndpointType getASinkEndpointType() { result instanceof SqlInjectionSinkType }
}
/** DEPRECATED: Alias for SqlInjectionAtmConfig */
deprecated class SqlInjectionATMConfig = SqlInjectionAtmConfig;
/**
* A taint-tracking configuration for reasoning about SQL injection vulnerabilities.
*
* This is largely a copy of the taint tracking configuration for the standard SQL injection
* query, except additional sinks have been added using the sink endpoint filter.
*/
class Configuration extends TaintTracking::Configuration {
Configuration() { this = "SqlInjectionATM" }
override predicate isSource(DataFlow::Node source) { source instanceof SqlInjection::Source }
override predicate isSink(DataFlow::Node sink) {
sink instanceof SqlInjection::Sink or any(SqlInjectionAtmConfig cfg).isEffectiveSink(sink)
}
/*
* This is largely a copy of the taint tracking configuration for the standard SQL injection
* query, except additional sinks have been added using the sink endpoint filter.
*/
override predicate isSanitizer(DataFlow::Node node) {
super.isSanitizer(node) or

View File

@@ -1,134 +0,0 @@
/**
* For internal use only.
*
* Provides classes and predicates that are useful for endpoint filters.
*
* The standard use of this library is to make use of `isPotentialEffectiveSink/1`
*/
private import javascript
private import semmle.javascript.filters.ClassifyFiles as ClassifyFiles
private import semmle.javascript.heuristics.SyntacticHeuristics
private import CoreKnowledge as CoreKnowledge
/** Provides a set of reasons why a given data flow node should be excluded as a sink candidate. */
string getAReasonSinkExcluded(DataFlow::Node n) {
isArgumentToModeledFunction(n) and result = "argument to modeled function"
or
isArgumentToSinklessLibrary(n) and result = "argument to sinkless library"
or
isSanitizer(n) and result = "sanitizer"
or
isPredicate(n) and result = "predicate"
or
isHash(n) and result = "hash"
or
isNumeric(n) and result = "numeric"
or
// Ignore candidate sinks within externs, generated, library, and test code
exists(string category | category = ["externs", "generated", "library", "test"] |
ClassifyFiles::classify(n.getFile(), category) and
result = "in " + category + " file"
)
}
/**
* Holds if the node `n` is an argument to a function that has a manual model.
*/
predicate isArgumentToModeledFunction(DataFlow::Node n) {
exists(DataFlow::InvokeNode invk, DataFlow::Node known |
invk.getAnArgument() = n and invk.getAnArgument() = known and isSomeModeledArgument(known)
)
}
/**
* Holds if the node `n` is an argument that has a manual model.
*/
predicate isSomeModeledArgument(DataFlow::Node n) {
CoreKnowledge::isKnownLibrarySink(n) or
CoreKnowledge::isKnownStepSrc(n) or
CoreKnowledge::isOtherModeledArgument(n, _)
}
/**
* Holds if `n` appears to be a numeric value.
*/
predicate isNumeric(DataFlow::Node n) { isReadFrom(n, ".*index.*") }
/**
* Holds if `n` is an argument to a library without sinks.
*/
predicate isArgumentToSinklessLibrary(DataFlow::Node n) {
exists(DataFlow::InvokeNode invk, DataFlow::SourceNode commonSafeLibrary, string libraryName |
libraryName = ["slugify", "striptags", "marked"]
|
commonSafeLibrary = DataFlow::moduleImport(libraryName) and
invk = [commonSafeLibrary, commonSafeLibrary.getAPropertyRead()].getAnInvocation() and
n = invk.getAnArgument()
)
}
predicate isSanitizer(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName().regexpMatch("(?i).*(escape|valid(ate)?|sanitize|purify).*")
)
}
predicate isPredicate(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName().regexpMatch("(equals|(|is|has|can)(_|[A-Z])).*")
)
}
predicate isHash(DataFlow::Node n) {
exists(DataFlow::CallNode call | n = call.getAnArgument() |
call.getCalleeName().regexpMatch("(?i)^(sha\\d*|md5|hash)$")
)
}
/**
* Holds if the data flow node is a (possibly indirect) argument of a likely external library call.
*
* This includes direct arguments of likely external library calls as well as nested object
* literals within those calls.
*/
predicate flowsToArgumentOfLikelyExternalLibraryCall(DataFlow::Node n) {
n = getACallWithoutCallee().getAnArgument()
or
exists(DataFlow::SourceNode src | flowsToArgumentOfLikelyExternalLibraryCall(src) |
n = src.getAPropertyWrite().getRhs()
)
or
exists(DataFlow::ArrayCreationNode arr | flowsToArgumentOfLikelyExternalLibraryCall(arr) |
n = arr.getAnElement()
)
}
/**
* Get calls which are likely to be to external non-built-in libraries.
*/
DataFlow::CallNode getALikelyExternalLibraryCall() { result = getACallWithoutCallee() }
/**
* Gets a node that flows to callback-parameter `p`.
*/
private DataFlow::SourceNode getACallback(DataFlow::ParameterNode p, DataFlow::TypeBackTracker t) {
t.start() and
result = p and
any(DataFlow::FunctionNode f).getLastParameter() = p and
exists(p.getACall())
or
exists(DataFlow::TypeBackTracker t2 | result = getACallback(p, t2).backtrack(t2, t))
}
/**
* Get calls for which we do not have the callee (i.e. the definition of the called function). This
* acts as a heuristic for identifying calls to external library functions.
*/
private DataFlow::CallNode getACallWithoutCallee() {
forall(Function callee | callee = result.getACallee() | callee.getTopLevel().isExterns()) and
not exists(DataFlow::ParameterNode param, DataFlow::FunctionNode callback |
param.flowsTo(result.getCalleeNode()) and
callback = getACallback(param, DataFlow::TypeBackTracker::end())
)
}

View File

@@ -1,95 +1,31 @@
/**
* For internal use only.
*
* A taint-tracking configuration for reasoning about path injection vulnerabilities.
* Defines shared code used by the path injection boosted query.
*/
import semmle.javascript.heuristics.SyntacticHeuristics
import semmle.javascript.security.dataflow.TaintedPathCustomizations
import AdaptiveThreatModeling
import CoreKnowledge as CoreKnowledge
import StandardEndpointFilters as StandardEndpointFilters
/**
* This module provides logic to filter candidate sinks to those which are likely path injection
* sinks.
*/
module SinkEndpointFilter {
private import javascript
private import TaintedPath
/**
* Provides a set of reasons why a given data flow node should be excluded as a sink candidate.
*
* If this predicate has no results for a sink candidate `n`, then we should treat `n` as an
* effective sink.
*/
string getAReasonSinkExcluded(DataFlow::Node sinkCandidate) {
result = StandardEndpointFilters::getAReasonSinkExcluded(sinkCandidate)
or
// Require path injection sink candidates to be (a) arguments to external library calls
// (possibly indirectly), or (b) heuristic sinks.
//
// Heuristic sinks are mostly copied from the `HeuristicTaintedPathSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not StandardEndpointFilters::flowsToArgumentOfLikelyExternalLibraryCall(sinkCandidate) and
not (
isAssignedToOrConcatenatedWith(sinkCandidate, "(?i)(file|folder|dir|absolute)")
or
isArgTo(sinkCandidate, "(?i)(get|read)file")
or
exists(string pathPattern |
// paths with at least two parts, and either a trailing or leading slash
pathPattern = "(?i)([a-z0-9_.-]+/){2,}" or
pathPattern = "(?i)(/[a-z0-9_.-]+){2,}"
|
isConcatenatedWithString(sinkCandidate, pathPattern)
)
or
isConcatenatedWithStrings(".*/", sinkCandidate, "/.*")
or
// In addition to the names from `HeuristicTaintedPathSink` in the
// `isAssignedToOrConcatenatedWith` predicate call above, we also allow the noisier "path"
// name.
isAssignedToOrConcatenatedWith(sinkCandidate, "(?i)path")
) and
result = "not a direct argument to a likely external library call or a heuristic sink"
}
}
class TaintedPathAtmConfig extends AtmConfig {
TaintedPathAtmConfig() { this = "TaintedPathATMConfig" }
TaintedPathAtmConfig() { this = "TaintedPathAtmConfig" }
override predicate isKnownSource(DataFlow::Node source) { source instanceof TaintedPath::Source }
override predicate isEffectiveSink(DataFlow::Node sinkCandidate) {
not exists(SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate))
}
override EndpointType getASinkEndpointType() { result instanceof TaintedPathSinkType }
}
/** DEPRECATED: Alias for TaintedPathAtmConfig */
deprecated class TaintedPathATMConfig = TaintedPathAtmConfig;
/**
* A taint-tracking configuration for reasoning about path injection vulnerabilities.
*
* This is largely a copy of the taint tracking configuration for the standard path injection
* query, except additional ATM sinks have been added to the `isSink` predicate.
*/
class Configuration extends TaintTracking::Configuration {
Configuration() { this = "TaintedPathATM" }
override predicate isSource(DataFlow::Node source) { source instanceof TaintedPath::Source }
/*
* This is largely a copy of the taint tracking configuration for the standard path injection
* query, except additional ATM sinks have been added to the `isSink` predicate.
*/
override predicate isSink(DataFlow::Node sink, DataFlow::FlowLabel label) {
label = sink.(TaintedPath::Sink).getAFlowLabel()
or
// Allow effective sinks to have any taint label
any(TaintedPathAtmConfig cfg).isEffectiveSink(sink)
isEffectiveSink(sink)
}
override predicate isSanitizer(DataFlow::Node node) { node instanceof TaintedPath::Sanitizer }
@@ -115,7 +51,7 @@ class Configuration extends TaintTracking::Configuration {
* of barrier guards, we port the barrier guards for the boosted query from the standard library to
* sanitizer guards here.
*/
class BarrierGuardNodeAsSanitizerGuardNode extends TaintTracking::LabeledSanitizerGuardNode {
private class BarrierGuardNodeAsSanitizerGuardNode extends TaintTracking::LabeledSanitizerGuardNode {
BarrierGuardNodeAsSanitizerGuardNode() { this instanceof TaintedPath::BarrierGuardNode }
override predicate sanitizes(boolean outcome, Expr e) {

View File

@@ -1,95 +1,25 @@
/**
* For internal use only.
*
* A taint-tracking configuration for reasoning about XSS vulnerabilities.
* Defines shared code used by the XSS boosted query.
*/
private import semmle.javascript.heuristics.SyntacticHeuristics
private import semmle.javascript.security.dataflow.DomBasedXssCustomizations
import AdaptiveThreatModeling
import CoreKnowledge as CoreKnowledge
import StandardEndpointFilters as StandardEndpointFilters
/**
* This module provides logic to filter candidate sinks to those which are likely XSS sinks.
*/
module SinkEndpointFilter {
private import javascript
private import DomBasedXss
/**
* Provides a set of reasons why a given data flow node should be excluded as a sink candidate.
*
* If this predicate has no results for a sink candidate `n`, then we should treat `n` as an
* effective sink.
*/
string getAReasonSinkExcluded(DataFlow::Node sinkCandidate) {
result = StandardEndpointFilters::getAReasonSinkExcluded(sinkCandidate)
or
exists(DataFlow::CallNode call | sinkCandidate = call.getAnArgument() |
call.getCalleeName() = "setState"
) and
result = "setState calls ought to be safe in react applications"
or
// Require XSS sink candidates to be (a) arguments to external library calls (possibly
// indirectly), or (b) heuristic sinks.
//
// Heuristic sinks are copied from the `HeuristicDomBasedXssSink` class defined within
// `codeql/javascript/ql/src/semmle/javascript/heuristics/AdditionalSinks.qll`.
// We can't reuse the class because importing that file would cause us to treat these
// heuristic sinks as known sinks.
not StandardEndpointFilters::flowsToArgumentOfLikelyExternalLibraryCall(sinkCandidate) and
not (
isAssignedToOrConcatenatedWith(sinkCandidate, "(?i)(html|innerhtml)")
or
isArgTo(sinkCandidate, "(?i)(html|render)")
or
sinkCandidate instanceof StringOps::HtmlConcatenationLeaf
or
isConcatenatedWithStrings("(?is).*<[a-z ]+.*", sinkCandidate, "(?s).*>.*")
or
// In addition to the heuristic sinks from `HeuristicDomBasedXssSink`, explicitly allow
// property writes like `elem.innerHTML = <TAINT>` that may not be picked up as HTML
// concatenation leaves.
exists(DataFlow::PropWrite pw |
pw.getPropertyName().regexpMatch("(?i).*html*") and
pw.getRhs() = sinkCandidate
)
) and
result = "not a direct argument to a likely external library call or a heuristic sink"
}
}
class DomBasedXssAtmConfig extends AtmConfig {
DomBasedXssAtmConfig() { this = "DomBasedXssATMConfig" }
DomBasedXssAtmConfig() { this = "DomBasedXssAtmConfig" }
override predicate isKnownSource(DataFlow::Node source) { source instanceof DomBasedXss::Source }
override predicate isEffectiveSink(DataFlow::Node sinkCandidate) {
not exists(SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate))
}
override EndpointType getASinkEndpointType() { result instanceof XssSinkType }
}
/** DEPRECATED: Alias for DomBasedXssAtmConfig */
deprecated class DomBasedXssATMConfig = DomBasedXssAtmConfig;
/**
* A taint-tracking configuration for reasoning about XSS vulnerabilities.
*
* This is largely a copy of the taint tracking configuration for the standard XSSThroughDom query,
* except additional ATM sinks have been added to the `isSink` predicate.
*/
class Configuration extends TaintTracking::Configuration {
Configuration() { this = "DomBasedXssATMConfiguration" }
override predicate isSource(DataFlow::Node source) { source instanceof DomBasedXss::Source }
override predicate isSink(DataFlow::Node sink) {
sink instanceof DomBasedXss::Sink or
any(DomBasedXssAtmConfig cfg).isEffectiveSink(sink)
}
/*
* This is largely a copy of the taint tracking configuration for the standard XSSThroughDom query,
* except additional ATM sinks have been added to the `isSink` predicate.
*/
override predicate isSanitizer(DataFlow::Node node) {
super.isSanitizer(node) or

View File

@@ -0,0 +1,88 @@
/**
* For internal use only.
*
* A taint-tracking configuration for reasoning about XSS through the DOM.
* Defines shared code used by the XSS Through DOM boosted query.
*/
private import semmle.javascript.heuristics.SyntacticHeuristics
private import semmle.javascript.security.dataflow.DomBasedXssCustomizations
private import semmle.javascript.dataflow.InferredTypes
private import semmle.javascript.security.dataflow.XssThroughDomCustomizations::XssThroughDom as XssThroughDom
private import semmle.javascript.security.dataflow.UnsafeJQueryPluginCustomizations::UnsafeJQueryPlugin as UnsafeJQuery
import AdaptiveThreatModeling
class XssThroughDomAtmConfig extends AtmConfig {
XssThroughDomAtmConfig() { this = "XssThroughDomAtmConfig" }
override predicate isKnownSource(DataFlow::Node source) {
source instanceof XssThroughDom::Source
}
override EndpointType getASinkEndpointType() { result instanceof XssSinkType }
override predicate isSanitizer(DataFlow::Node node) {
super.isSanitizer(node) or
node instanceof DomBasedXss::Sanitizer
}
override predicate isSanitizerGuard(TaintTracking::SanitizerGuardNode guard) {
guard instanceof TypeTestGuard or
guard instanceof UnsafeJQuery::PropertyPresenceSanitizer or
guard instanceof UnsafeJQuery::NumberGuard or
guard instanceof PrefixStringSanitizer or
guard instanceof QuoteGuard or
guard instanceof ContainsHtmlGuard
}
override predicate isSanitizerEdge(DataFlow::Node pred, DataFlow::Node succ) {
DomBasedXss::isOptionallySanitizedEdge(pred, succ)
}
}
/**
* A test of form `typeof x === "something"`, preventing `x` from being a string in some cases.
*
* This sanitizer helps prune infeasible paths in type-overloaded functions.
*/
class TypeTestGuard extends TaintTracking::SanitizerGuardNode, DataFlow::ValueNode {
override EqualityTest astNode;
Expr operand;
boolean polarity;
TypeTestGuard() {
exists(TypeofTag tag | TaintTracking::isTypeofGuard(astNode, operand, tag) |
// typeof x === "string" sanitizes `x` when it evaluates to false
tag = "string" and
polarity = astNode.getPolarity().booleanNot()
or
// typeof x === "object" sanitizes `x` when it evaluates to true
tag != "string" and
polarity = astNode.getPolarity()
)
}
override predicate sanitizes(boolean outcome, Expr e) {
polarity = outcome and
e = operand
}
}
private import semmle.javascript.security.dataflow.Xss::Shared as Shared
private class PrefixStringSanitizer extends TaintTracking::SanitizerGuardNode,
DomBasedXss::PrefixStringSanitizer {
PrefixStringSanitizer() { this = this }
}
private class PrefixString extends DataFlow::FlowLabel, DomBasedXss::PrefixString {
PrefixString() { this = this }
}
private class QuoteGuard extends TaintTracking::SanitizerGuardNode, Shared::QuoteGuard {
QuoteGuard() { this = this }
}
private class ContainsHtmlGuard extends TaintTracking::SanitizerGuardNode, Shared::ContainsHtmlGuard {
ContainsHtmlGuard() { this = this }
}

View File

@@ -1,5 +1,6 @@
name: codeql/javascript-experimental-atm-lib
version: 0.4.2
description: CodeQL libraries for the experimental ML-powered queries
version: 0.4.4
extractor: javascript
library: true
groups:

View File

@@ -1,4 +1,5 @@
name: codeql/javascript-experimental-atm-model
description: Machine learning model supporting the experimental ML-powered queries
version: 0.3.1
groups:
- javascript

View File

@@ -12,19 +12,27 @@
import javascript
import experimental.adaptivethreatmodeling.ATMConfig
import extraction.ExtractEndpointDataTraining
private import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAtm
private import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionAtm
private import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathAtm
private import experimental.adaptivethreatmodeling.XssATM as XssAtm
private import experimental.adaptivethreatmodeling.XssThroughDomATM as XssThroughDomAtm
string getAReasonSinkExcluded(DataFlow::Node sinkCandidate, Query query) {
query instanceof NosqlInjectionQuery and
result = NosqlInjectionAtm::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate)
result = any(NosqlInjectionAtm::NosqlInjectionAtmConfig cfg).getAReasonSinkExcluded(sinkCandidate)
or
query instanceof SqlInjectionQuery and
result = SqlInjectionAtm::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate)
result = any(SqlInjectionAtm::SqlInjectionAtmConfig cfg).getAReasonSinkExcluded(sinkCandidate)
or
query instanceof TaintedPathQuery and
result = TaintedPathAtm::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate)
result = any(TaintedPathAtm::TaintedPathAtmConfig cfg).getAReasonSinkExcluded(sinkCandidate)
or
query instanceof XssQuery and
result = XssAtm::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate)
result = any(XssAtm::DomBasedXssAtmConfig cfg).getAReasonSinkExcluded(sinkCandidate)
or
query instanceof XssThroughDomQuery and
result = any(XssThroughDomAtm::XssThroughDomAtmConfig cfg).getAReasonSinkExcluded(sinkCandidate)
}
pragma[inline]

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
*

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
* Defines files that should be excluded from the evaluation of ML models.

View File

@@ -1,4 +1,4 @@
/*
/**
* For internal use only.
*
* Extracts training data we can use to train ML models for ML-powered queries.
@@ -10,10 +10,11 @@ import experimental.adaptivethreatmodeling.EndpointFeatures as EndpointFeatures
import NoFeaturizationRestrictionsConfig
private import Exclusions as Exclusions
import Queries
import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAtm
import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionAtm
import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathAtm
import experimental.adaptivethreatmodeling.XssATM as XssAtm
private import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAtm
private import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionAtm
private import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathAtm
private import experimental.adaptivethreatmodeling.XssATM as XssAtm
private import experimental.adaptivethreatmodeling.XssThroughDomATM as XssThroughDomAtm
/**
* Gets the set of featureName-featureValue pairs for each endpoint in the training set.
@@ -53,7 +54,7 @@ predicate tokenFeatures(DataFlow::Node endpoint, string featureName, string feat
query predicate trainingEndpoints(
DataFlow::Node endpoint, EndpointType endpointClass, EndpointCharacteristic characteristic
) {
characteristic.getEndpoints(endpoint) and
characteristic.appliesToEndpoint(endpoint) and
// Only consider the source code for the project being analyzed.
exists(endpoint.getFile().getRelativePath()) and
// Only select endpoints that can be part of a tainted flow: Constant expressions always evaluate to a constant
@@ -69,16 +70,20 @@ query predicate trainingEndpoints(
not (
endpointClass instanceof NegativeType and
exists(EndpointCharacteristic c |
c.getEndpoints(endpoint) and
c.appliesToEndpoint(endpoint) and
c instanceof LikelyNotASinkCharacteristic
)
) and
// Don't surface endpoint filters as characteristics, because they were previously not surfaced.
// TODO: Experiment with surfacing these to the modeling code by removing the following line (and then make
// EndpointFilterCharacteristic private).
not characteristic instanceof EndpointFilterCharacteristic and
(
// If the list of characteristics includes positive indicators with high confidence for this class, select this as a
// training sample belonging to the class.
exists(EndpointCharacteristic characteristic2, float confidence |
characteristic2.getEndpoints(endpoint) and
characteristic2.getImplications(endpointClass, true, confidence) and
characteristic2.appliesToEndpoint(endpoint) and
characteristic2.hasImplications(endpointClass, true, confidence) and
confidence >= characteristic2.getHighConfidenceThreshold()
) and
(
@@ -89,8 +94,8 @@ query predicate trainingEndpoints(
not endpointClass instanceof NegativeType
or
not exists(EndpointCharacteristic characteristic3, float confidence3, EndpointType posClass |
characteristic3.getEndpoints(endpoint) and
characteristic3.getImplications(posClass, true, confidence3) and
characteristic3.appliesToEndpoint(endpoint) and
characteristic3.hasImplications(posClass, true, confidence3) and
confidence3 >= characteristic3.getHighConfidenceThreshold() and
not posClass instanceof NegativeType
)
@@ -102,8 +107,8 @@ query predicate trainingEndpoints(
endpointClass instanceof NegativeType and
forall(EndpointType otherClass | not otherClass instanceof NegativeType |
exists(EndpointCharacteristic characteristic2, float confidence |
characteristic2.getEndpoints(endpoint) and
characteristic2.getImplications(otherClass, false, confidence) and
characteristic2.appliesToEndpoint(endpoint) and
characteristic2.hasImplications(otherClass, false, confidence) and
confidence >= characteristic2.getHighConfidenceThreshold()
)
)
@@ -176,18 +181,22 @@ query predicate reformattedTrainingEndpoints(
// The reason, or reasons, why the endpoint was labeled NotASink for this query, only for negative examples.
key = "notASinkReason" and
exists(EndpointCharacteristic characteristic, EndpointType endpointClass |
characteristic.getEndpoints(endpoint) and
characteristic.getImplications(endpointClass, true, _) and
characteristic.appliesToEndpoint(endpoint) and
characteristic.hasImplications(endpointClass, true, _) and
endpointClass instanceof NegativeType and
value = characteristic
) and
// Don't include a notASinkReason for endpoints that are also known sinks.
not exists(EndpointCharacteristic characteristic3, float confidence3, EndpointType posClass |
characteristic3.getEndpoints(endpoint) and
characteristic3.getImplications(posClass, true, confidence3) and
characteristic3.appliesToEndpoint(endpoint) and
characteristic3.hasImplications(posClass, true, confidence3) and
confidence3 >= characteristic3.getHighConfidenceThreshold() and
not posClass instanceof NegativeType
) and
// Don't surface endpoint filters as notASinkReasons, because they were previously not surfaced.
// TODO: Experiment with surfacing these to the modeling code by removing the following line (and then make
// EndpointFilterCharacteristic private).
not value instanceof EndpointFilterCharacteristic and
valueType = "string"
)
)
@@ -198,13 +207,16 @@ query predicate reformattedTrainingEndpoints(
* TODO: Delete this once we are no longer surfacing `hasFlowFromSource`.
*/
DataFlow::Configuration getDataFlowCfg(Query query) {
query instanceof NosqlInjectionQuery and result instanceof NosqlInjectionAtm::Configuration
query instanceof NosqlInjectionQuery and
result instanceof NosqlInjectionAtm::NosqlInjectionAtmConfig
or
query instanceof SqlInjectionQuery and result instanceof SqlInjectionAtm::Configuration
query instanceof SqlInjectionQuery and result instanceof SqlInjectionAtm::SqlInjectionAtmConfig
or
query instanceof TaintedPathQuery and result instanceof TaintedPathAtm::Configuration
query instanceof TaintedPathQuery and result instanceof TaintedPathAtm::TaintedPathAtmConfig
or
query instanceof XssQuery and result instanceof XssAtm::Configuration
query instanceof XssQuery and result instanceof XssAtm::DomBasedXssAtmConfig
or
query instanceof XssThroughDomQuery and result instanceof XssThroughDomAtm::XssThroughDomAtmConfig
}
// TODO: Delete this once we are no longer surfacing `hasFlowFromSource`.

View File

@@ -8,6 +8,7 @@ import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionAtm
import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAtm
import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathAtm
import experimental.adaptivethreatmodeling.XssATM as XssAtm
import experimental.adaptivethreatmodeling.XssThroughDomATM as XssThroughDomAtm
import experimental.adaptivethreatmodeling.AdaptiveThreatModeling
from string queryName, AtmConfig c, EndpointType e
@@ -23,6 +24,8 @@ where
c instanceof TaintedPathAtm::TaintedPathAtmConfig
or
queryName = "Xss" and c instanceof XssAtm::DomBasedXssAtmConfig
or
queryName = "XssThroughDom" and c instanceof XssThroughDomAtm::XssThroughDomAtmConfig
) and
e = c.getASinkEndpointType()
select queryName, e.getEncoding() as label

View File

@@ -8,7 +8,8 @@ newtype TQuery =
TNosqlInjectionQuery() or
TSqlInjectionQuery() or
TTaintedPathQuery() or
TXssQuery()
TXssQuery() or
TXssThroughDomQuery()
abstract class Query extends TQuery {
abstract string getName();
@@ -31,3 +32,7 @@ class TaintedPathQuery extends Query, TTaintedPathQuery {
class XssQuery extends Query, TXssQuery {
override string getName() { result = "Xss" }
}
class XssThroughDomQuery extends Query, TXssThroughDomQuery {
override string getName() { result = "XssThroughDom" }
}

View File

@@ -1,4 +1,5 @@
name: codeql/javascript-experimental-atm-model-building
description: CodeQL libraries for building machine learning models for the experimental ML-powered queries
extractor: javascript
library: false
groups:

View File

@@ -17,11 +17,8 @@ import ATM::ResultsInfo
import DataFlow::PathGraph
import experimental.adaptivethreatmodeling.NosqlInjectionATM
from DataFlow::Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where
cfg.hasFlowPath(source, sink) and
not isFlowLikelyInBaseQuery(source.getNode(), sink.getNode()) and
score = getScoreForFlow(source.getNode(), sink.getNode())
from AtmConfig cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where cfg.hasBoostedFlowPath(source, sink, score)
select sink.getNode(), source, sink,
"(Experimental) This may be a database query that depends on $@. Identified using machine learning.",
source.getNode(), "a user-provided value", score

View File

@@ -17,11 +17,8 @@ import experimental.adaptivethreatmodeling.SqlInjectionATM
import ATM::ResultsInfo
import DataFlow::PathGraph
from DataFlow::Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where
cfg.hasFlowPath(source, sink) and
not isFlowLikelyInBaseQuery(source.getNode(), sink.getNode()) and
score = getScoreForFlow(source.getNode(), sink.getNode())
from AtmConfig cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where cfg.hasBoostedFlowPath(source, sink, score)
select sink.getNode(), source, sink,
"(Experimental) This may be a database query that depends on $@. Identified using machine learning.",
source.getNode(), "a user-provided value", score

View File

@@ -21,11 +21,8 @@ import ATM::ResultsInfo
import DataFlow::PathGraph
import experimental.adaptivethreatmodeling.TaintedPathATM
from DataFlow::Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where
cfg.hasFlowPath(source, sink) and
not isFlowLikelyInBaseQuery(source.getNode(), sink.getNode()) and
score = getScoreForFlow(source.getNode(), sink.getNode())
from AtmConfig cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where cfg.hasBoostedFlowPath(source, sink, score)
select sink.getNode(), source, sink,
"(Experimental) This may be a path that depends on $@. Identified using machine learning.",
source.getNode(), "a user-provided value", score

View File

@@ -18,11 +18,8 @@ import ATM::ResultsInfo
import DataFlow::PathGraph
import experimental.adaptivethreatmodeling.XssATM
from DataFlow::Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where
cfg.hasFlowPath(source, sink) and
not isFlowLikelyInBaseQuery(source.getNode(), sink.getNode()) and
score = getScoreForFlow(source.getNode(), sink.getNode())
from AtmConfig cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where cfg.hasBoostedFlowPath(source, sink, score)
select sink.getNode(), source, sink,
"(Experimental) This may be a cross-site scripting vulnerability due to $@. Identified using machine learning.",
source.getNode(), "a user-provided value", score

View File

@@ -0,0 +1,25 @@
/**
* For internal use only.
*
* @name DOM text reinterpreted as HTML (experimental)
* @description Reinterpreting text from the DOM as HTML can lead
* to a cross-site scripting vulnerability.
* @kind path-problem
* @scored
* @problem.severity error
* @security-severity 6.1
* @id js/ml-powered/xss-through-dom
* @tags experimental security
* external/cwe/cwe-079 external/cwe/cwe-116
*/
import javascript
import ATM::ResultsInfo
import DataFlow::PathGraph
import experimental.adaptivethreatmodeling.XssThroughDomATM
from AtmConfig cfg, DataFlow::PathNode source, DataFlow::PathNode sink, float score
where cfg.hasBoostedFlowPath(source, sink, score)
select sink.getNode(), source, sink,
"(Experimental) $@ may be reinterpreted as HTML without escaping meta-characters. Identified using machine learning.",
source.getNode(), "DOM text", score

View File

@@ -1,6 +1,7 @@
name: codeql/javascript-experimental-atm-queries
description: Experimental ML-powered queries for JavaScript
language: javascript
version: 0.4.2
version: 0.4.4
suites: codeql-suites
defaultSuiteFile: codeql-suites/javascript-atm-code-scanning.qls
groups:

View File

@@ -0,0 +1,2 @@
erroneousEndpoints
erroneousConfidences

View File

@@ -0,0 +1,90 @@
/**
* ContradictoryEndpointCharacteristics.ql
*
* This tests surfaces endpoints that have a set of characteristics are logically incompatible with one another (e.g one
* high-confidence characteristic that implies a non-sink and another that implies a sink). If the test surfaces any
* such endpoints, this is a hint that some of our endpoint characteristics may be need to be adjusted.
*/
import javascript
private import experimental.adaptivethreatmodeling.EndpointCharacteristics as EndpointCharacteristics
private import experimental.adaptivethreatmodeling.EndpointTypes as EndpointTypes
/**
* Holds if `characteristic1` and `characteristic2` are among the several pairs of currently known high-confidence
* negative characteristics that apply to some known sinks.
*
* TODO: Experiment with lowering the confidence of `"FileSystemAccess"`, `"DOM"`, `"DatabaseAccess"`, and
* `"JQueryArgument"`.
*/
private predicate knownContradictoryCharacteristics(
EndpointCharacteristics::EndpointCharacteristic characteristic1,
EndpointCharacteristics::EndpointCharacteristic characteristic2
) {
characteristic1 != characteristic2 and
(
characteristic1 = ["TaintedPathSink", "FileSystemAccess"] and
characteristic2 = ["TaintedPathSink", "FileSystemAccess"]
or
characteristic1 = ["DomBasedXssSink", "DOM"] and
characteristic2 = ["DomBasedXssSink", "DOM"]
or
characteristic1 = ["DomBasedXssSink", "JQueryArgument"] and
characteristic2 = ["DomBasedXssSink", "JQueryArgument"]
or
characteristic1 = ["NosqlInjectionSink", "DatabaseAccess"] and
characteristic2 = ["NosqlInjectionSink", "DatabaseAccess"]
or
characteristic1 = ["SqlInjectionSink", "DatabaseAccess"] and
characteristic2 = ["SqlInjectionSink", "DatabaseAccess"]
)
}
/**
* Holds if the given endpoint has a self-contradictory combination of characteristics. Detects errors in our endpoint
* characteristics. Lists the problematic characterisitics and their implications for all such endpoints, together with
* an error message indicating why this combination is problematic.
*/
query predicate erroneousEndpoints(
DataFlow::Node endpoint, EndpointCharacteristics::EndpointCharacteristic characteristic,
EndpointTypes::EndpointType endpointClass, float confidence, string errorMessage
) {
// An endpoint's characteristics should not include positive indicators with medium/high confidence for more than one
// class.
exists(
EndpointCharacteristics::EndpointCharacteristic characteristic2,
EndpointTypes::EndpointType endpointClass2, float confidence2
|
endpointClass.getEncoding() != endpointClass2.getEncoding() and
characteristic.appliesToEndpoint(endpoint) and
characteristic2.appliesToEndpoint(endpoint) and
characteristic.hasImplications(endpointClass, true, confidence) and
characteristic2.hasImplications(endpointClass2, true, confidence2) and
confidence > characteristic.mediumConfidence() and
confidence2 > characteristic2.mediumConfidence() and
// We currently know of several high-confidence negative characteristics that apply to some known sinks.
not knownContradictoryCharacteristics(characteristic, characteristic2)
) and
errorMessage = "Endpoint has high-confidence positive indicators for multiple classes"
or
// An enpoint's characteristics should not include positive indicators with medium/high confidence for some class and
// also include negative indicators with medium/high confidence for this same class.
exists(EndpointCharacteristics::EndpointCharacteristic characteristic2, float confidence2 |
characteristic.appliesToEndpoint(endpoint) and
characteristic2.appliesToEndpoint(endpoint) and
characteristic.hasImplications(endpointClass, true, confidence) and
characteristic2.hasImplications(endpointClass, false, confidence2) and
confidence > characteristic.mediumConfidence() and
confidence2 > characteristic2.mediumConfidence()
) and
errorMessage = "Endpoint has high-confidence positive and negative indicators for the same class"
}
query predicate erroneousConfidences(
EndpointCharacteristics::EndpointCharacteristic characteristic, float confidence,
string errorMessage
) {
characteristic.hasImplications(_, _, confidence) and
(confidence < 0 or confidence > 1) and
errorMessage = "Characteristic has an indicator with confidence outside of [0, 1]"
}

View File

@@ -11,17 +11,20 @@ import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAt
import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionAtm
import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathAtm
import experimental.adaptivethreatmodeling.XssATM as XssAtm
import experimental.adaptivethreatmodeling.XssThroughDomATM as XssThroughDomAtm
import experimental.adaptivethreatmodeling.EndpointFeatures as EndpointFeatures
import experimental.adaptivethreatmodeling.StandardEndpointFilters as StandardEndpointFilters
import extraction.NoFeaturizationRestrictionsConfig
private import experimental.adaptivethreatmodeling.EndpointCharacteristics as EndpointCharacteristics
query predicate tokenFeatures(DataFlow::Node endpoint, string featureName, string featureValue) {
(
not exists(NosqlInjectionAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint)) or
not exists(SqlInjectionAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint)) or
not exists(TaintedPathAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint)) or
not exists(XssAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint)) or
StandardEndpointFilters::isArgumentToModeledFunction(endpoint)
not exists(any(NosqlInjectionAtm::NosqlInjectionAtmConfig cfg).getAReasonSinkExcluded(endpoint)) or
not exists(any(SqlInjectionAtm::SqlInjectionAtmConfig cfg).getAReasonSinkExcluded(endpoint)) or
not exists(any(TaintedPathAtm::TaintedPathAtmConfig cfg).getAReasonSinkExcluded(endpoint)) or
not exists(any(XssAtm::DomBasedXssAtmConfig cfg).getAReasonSinkExcluded(endpoint)) or
not exists(any(XssThroughDomAtm::XssThroughDomAtmConfig cfg).getAReasonSinkExcluded(endpoint)) or
any(EndpointCharacteristics::IsArgumentToModeledFunctionCharacteristic characteristic)
.appliesToEndpoint(endpoint)
) and
EndpointFeatures::tokenFeatures(endpoint, featureName, featureValue)
}

View File

@@ -0,0 +1,278 @@
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:30:14:30 | v |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:33:22:33 | v |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:33:23:33 | v |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:22:77:24 | tag |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:20:85:22 | tag |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:23:130:24 | id |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:30:131:31 | id |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:22:11:22 | v |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:22:12:32 | req.body.id |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:22:13:37 | `${req.body.id}` |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:26:13:26:25 | req.params.id |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:41:7:41:20 | req.params.foo |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:48:13:48:27 | req.params.name |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:55:13:55:27 | req.params.name |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key |
| DomBasedXssAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:23:16:41 | req.params.category |
| DomBasedXssAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path |
| DomBasedXssAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath |
| DomBasedXssAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:7:47:7:69 | classNa ... w.name) |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:8:47:8:70 | classNa ... w.name) |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:9:47:9:70 | classNa ... w.name) |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:10:45:10:55 | window.name |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:11:47:11:64 | unsafeStyle('foo') |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:13:47:13:68 | safeSty ... w.name) |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:15:47:15:63 | clsx(window.name) |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:49:2:61 | location.href |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/jquery.js:7:20:7:26 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/jquery.js:10:13:10:31 | location.toString() |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:12:11:12:69 | `Hi, yo ... sage}.` |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/sanitiser.js:23:29:23:35 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/sanitiser.js:30:29:30:35 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/sanitiser.js:33:29:33:35 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/sanitiser.js:38:29:38:35 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/sanitiser.js:45:29:45:35 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/stored-xss.js:12:35:12:38 | href |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:8:37:8:114 | documen ... t=")+8) |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:12:28:12:33 | target |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:15:37:15:42 | target |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:43:20:43:20 | s |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:83:29:83:52 | documen ... .search |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:86:31:86:54 | documen ... .search |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:87:28:87:51 | documen ... .search |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:357:20:357:25 | target |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:361:14:361:19 | target |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/various-concat-obfuscations.js:4:14:4:20 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/various-concat-obfuscations.js:5:12:5:18 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/various-concat-obfuscations.js:7:14:7:20 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/various-concat-obfuscations.js:9:19:9:25 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/various-concat-obfuscations.js:10:16:10:22 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/various-concat-obfuscations.js:12:19:12:25 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/DomBasedXss/various-concat-obfuscations.js:15:27:15:55 | (attrs. ... 'left') |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:5:11:5:11 | x |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:9:11:9:13 | foo |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:21:11:21:21 | foo + "bar" |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:27:19:27:21 | foo |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:33:11:33:22 | ["bar", foo] |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:33:19:33:21 | foo |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:68:19:68:21 | foo |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:89:11:89:26 | foo.match(/foo/) |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:95:11:95:22 | [foo, "bar"] |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:95:12:95:14 | foo |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:102:12:102:14 | foo |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:117:11:117:23 | req.params.id |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:128:11:128:52 | session ... ssion') |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:136:10:136:22 | req.params.id |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:148:33:148:35 | foo |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:171:11:171:17 | tainted |
| DomBasedXssAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:180:10:180:22 | req.params.id |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:32:5:32:22 | ['body', req.body] |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:32:14:32:21 | req.body |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:70:47:70:54 | req.body |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:99:31:99:38 | req.body |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:102:68:102:75 | req.body |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXssGood.js:19:45:19:57 | req.params.id |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:13:42:13:48 | req.url |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:40:42:40:50 | [req.url] |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:40:43:40:49 | req.url |
| DomBasedXssAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:49:38:49:44 | req.url |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:24:14:32 | { id: v } |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:27:22:35 | { id: v } |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:27:23:35 | { id: v } |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:10:17:10:18 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:12:17:12:18 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:14:17:14:18 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:12:19:12:20 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:48:19:48:20 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:59:16:59:17 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:106:17:106:18 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:12:19:12:20 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:23:19:23:20 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:20:19:20:20 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:76:12:76:16 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:37:81:41 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:49:90:53 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:46:97:50 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:19:19:19:20 | {} |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:55 | "SELECT ... PRICE" |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query |
| NosqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key |
| NosqlInjectionAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path |
| NosqlInjectionAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath |
| NosqlInjectionAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath |
| NosqlInjectionAtmConfig | autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } |
| NosqlInjectionAtmConfig | autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:15:37:15:42 | target |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:83:29:83:52 | documen ... .search |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:86:31:86:54 | documen ... .search |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:87:28:87:51 | documen ... .search |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:199:32:199:75 | {danger ... inted}} |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:200:32:200:75 | {danger ... inted}} |
| NosqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:361:14:361:19 | target |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:5:11:5:11 | x |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:9:11:9:13 | foo |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:21:11:21:21 | foo + "bar" |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:27:11:27:23 | { prop: foo } |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:33:11:33:22 | ["bar", foo] |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:68:19:68:21 | foo |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:89:11:89:26 | foo.match(/foo/) |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:95:11:95:22 | [foo, "bar"] |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:102:12:102:14 | foo |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:117:11:117:23 | req.params.id |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:128:11:128:52 | session ... ssion') |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:136:10:136:22 | req.params.id |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:148:33:148:35 | foo |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:171:11:171:17 | tainted |
| NosqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:180:10:180:22 | req.params.id |
| NosqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:70:47:70:54 | req.body |
| NosqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:99:31:99:38 | req.body |
| NosqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:102:68:102:75 | req.body |
| NosqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:13:42:13:48 | req.url |
| NosqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:40:42:40:50 | [req.url] |
| NosqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:49:38:49:44 | req.url |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:30:14:30 | v |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:33:22:33 | v |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:33:23:33 | v |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:22:77:24 | tag |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:20:85:22 | tag |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:23:130:24 | id |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:30:131:31 | id |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:22:11:22 | v |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:22:12:32 | req.body.id |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:22:13:37 | `${req.body.id}` |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:34 | "SELECT ... ategory |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:55 | "SELECT ... PRICE" |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:26:13:26:25 | req.params.id |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:41:7:41:20 | req.params.foo |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:48:13:48:27 | req.params.name |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:55:13:55:27 | req.params.name |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:34 | "SELECT ... ategory |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:55 | "SELECT ... PRICE" |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:23:16:41 | req.params.category |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:60 | 'SELECT ... rams.id |
| SqlInjectionAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:58 | 'SELECT ... rams.id |
| SqlInjectionAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path |
| SqlInjectionAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath |
| SqlInjectionAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/classnames.js:10:45:10:55 | window.name |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:12:11:12:69 | `Hi, yo ... sage}.` |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:15:37:15:42 | target |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:83:29:83:52 | documen ... .search |
| SqlInjectionAtmConfig | autogenerated/Xss/DomBasedXss/tst.js:86:31:86:54 | documen ... .search |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:5:11:5:11 | x |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:9:11:9:13 | foo |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:21:11:21:21 | foo + "bar" |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:27:19:27:21 | foo |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:33:19:33:21 | foo |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:68:19:68:21 | foo |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:89:11:89:26 | foo.match(/foo/) |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:95:12:95:14 | foo |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:102:12:102:14 | foo |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:117:11:117:23 | req.params.id |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:128:11:128:52 | session ... ssion') |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:136:10:136:22 | req.params.id |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:148:33:148:35 | foo |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:171:11:171:17 | tainted |
| SqlInjectionAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:180:10:180:22 | req.params.id |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:32:5:32:22 | ['body', req.body] |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:32:14:32:21 | req.body |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:70:47:70:54 | req.body |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXssGood.js:19:45:19:57 | req.params.id |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXssGood.js:49:34:49:43 | msg.length |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:13:42:13:48 | req.url |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:40:43:40:49 | req.url |
| SqlInjectionAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:49:38:49:44 | req.url |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:30:14:30 | v |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:33:22:33 | v |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:33:23:33 | v |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:25:21:45 | '' + qu ... y.title |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:25:24:50 | query.b ... bstr(1) |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:22:77:24 | tag |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:20:85:22 | tag |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:23:130:24 | id |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:30:131:31 | id |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:22:11:22 | v |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:22:12:32 | req.body.id |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:22:13:37 | `${req.body.id}` |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:26:13:26:25 | req.params.id |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:41:7:41:20 | req.params.foo |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:48:13:48:27 | req.params.name |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:55:13:55:27 | req.params.name |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key |
| TaintedPathAtmConfig | autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:23:16:41 | req.params.category |
| TaintedPathAtmConfig | autogenerated/TaintedPath/TaintedPath.js:115:12:115:51 | path.re ... /g, '') |
| TaintedPathAtmConfig | autogenerated/TaintedPath/TaintedPath.js:116:12:116:36 | path.re ... /g, '') |
| TaintedPathAtmConfig | autogenerated/TaintedPath/TaintedPath.js:128:11:128:50 | path.re ... /g, '') |
| TaintedPathAtmConfig | autogenerated/TaintedPath/TaintedPath.js:129:12:129:36 | path.re ... /g, '') |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:21:14:21:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:31:14:31:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:54:14:54:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:73:14:73:56 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:94:14:94:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:106:14:106:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:117:14:117:44 | fs.real ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:130:14:130:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:139:14:139:62 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:160:14:160:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:214:14:214:49 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:219:10:219:33 | decodeU ... t(path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:230:12:230:36 | path.re ... /g, '') |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:236:14:236:47 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:254:14:254:47 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath |
| TaintedPathAtmConfig | autogenerated/TaintedPath/normalizedPaths.js:339:13:339:46 | pathMod ... y.path) |
| TaintedPathAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver |
| TaintedPathAtmConfig | autogenerated/Xss/DomBasedXss/nodemailer.js:12:11:12:69 | `Hi, yo ... sage}.` |
| TaintedPathAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:117:11:117:23 | req.params.id |
| TaintedPathAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:136:10:136:22 | req.params.id |
| TaintedPathAtmConfig | autogenerated/Xss/ExceptionXss/exception-xss.js:180:10:180:22 | req.params.id |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:32:5:32:22 | ['body', req.body] |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:32:14:32:21 | req.body |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:70:47:70:54 | req.body |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:99:31:99:38 | req.body |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXss.js:102:68:102:75 | req.body |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXssGood.js:19:45:19:57 | req.params.id |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/ReflectedXssGood.js:49:34:49:43 | msg.length |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:13:42:13:48 | req.url |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:40:42:40:50 | [req.url] |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:40:43:40:49 | req.url |
| TaintedPathAtmConfig | autogenerated/Xss/ReflectedXss/partial.js:49:38:49:44 | req.url |

View File

@@ -0,0 +1,27 @@
/*
* ExtractEndpointDataInference.ql
*
* This test surfaces the endpoints that pass the endpoint filters and have flow from a source for each query config,
* and are therefore used as candidates for scoring at inference time.
*
* This is equivalent to ExtractEndpointDataTraining.qlref, but testing the inference endpoints rather than the training
* endpoints. It detects CodeQL changes that impact the endpoints that get scored at inference time.
*
* This test does not actually score the endpoints and test for changes in the model predictions: that gets done in the
* integration tests.
*/
private import javascript as JS
import extraction.NoFeaturizationRestrictionsConfig
private import experimental.adaptivethreatmodeling.ATMConfig as AtmConfig
private import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAtm
private import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionAtm
private import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathAtm
private import experimental.adaptivethreatmodeling.XssATM as XssAtm
private import experimental.adaptivethreatmodeling.XssThroughDomATM as XssThroughDomAtm
query predicate isSinkCandidateForQuery(
AtmConfig::AtmConfig queryConfig, JS::DataFlow::PathNode sink
) {
queryConfig.isSinkCandidateWithFlow(sink)
}

View File

@@ -1,16 +1,24 @@
nosqlFilteredTruePositives
| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:14:111:18 | query | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:14:111:18 | query | not a direct argument to a likely external library call or a heuristic sink (nosql) |
sqlFilteredTruePositives
| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:7:13:7:45 | select ... e id = | not an argument to a likely external library call or a heuristic sink |
| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:7:48:7:60 | req.params.id | not an argument to a likely external library call or a heuristic sink |
taintedPathFilteredTruePositives
| autogenerated/TaintedPath/TaintedPath.js:66:26:66:31 | "SAFE" | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/TaintedPath/TaintedPath.js:71:26:71:45 | Cookie.get("unsafe") | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/TaintedPath/TaintedPath.js:66:26:66:31 | "SAFE" | not a direct argument to a likely external library call or a heuristic sink (tainted path) |
| autogenerated/TaintedPath/TaintedPath.js:71:26:71:45 | Cookie.get("unsafe") | not a direct argument to a likely external library call or a heuristic sink (tainted path) |
xssFilteredTruePositives
| autogenerated/Xss/DomBasedXss/d3.js:12:20:12:29 | getTaint() | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/Xss/DomBasedXss/d3.js:14:20:14:29 | getTaint() | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/Xss/DomBasedXss/express.js:7:15:7:33 | req.param("wobble") | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/Xss/DomBasedXss/jwt-server.js:11:19:11:29 | decoded.foo | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/Xss/DomBasedXss/tst.js:316:35:316:42 | location | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/Xss/DomBasedXss/typeahead.js:10:16:10:18 | loc | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/Xss/DomBasedXss/typeahead.js:25:18:25:20 | val | not a direct argument to a likely external library call or a heuristic sink |
| autogenerated/Xss/DomBasedXss/d3.js:12:20:12:29 | getTaint() | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/d3.js:14:20:14:29 | getTaint() | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/express.js:7:15:7:33 | req.param("wobble") | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/jwt-server.js:11:19:11:29 | decoded.foo | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/tst.js:316:35:316:42 | location | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/typeahead.js:10:16:10:18 | loc | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/typeahead.js:25:18:25:20 | val | not a direct argument to a likely external library call or a heuristic sink (xss) |
xssThroughDomFilteredTruePositives
| autogenerated/Xss/DomBasedXss/d3.js:12:20:12:29 | getTaint() | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/d3.js:14:20:14:29 | getTaint() | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/express.js:7:15:7:33 | req.param("wobble") | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/jwt-server.js:11:19:11:29 | decoded.foo | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/tst.js:316:35:316:42 | location | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/typeahead.js:10:16:10:18 | loc | not a direct argument to a likely external library call or a heuristic sink (xss) |
| autogenerated/Xss/DomBasedXss/typeahead.js:25:18:25:20 | val | not a direct argument to a likely external library call or a heuristic sink (xss) |

View File

@@ -16,32 +16,38 @@ import semmle.javascript.security.dataflow.NosqlInjectionCustomizations
import semmle.javascript.security.dataflow.SqlInjectionCustomizations
import semmle.javascript.security.dataflow.TaintedPathCustomizations
import semmle.javascript.security.dataflow.DomBasedXssCustomizations
import experimental.adaptivethreatmodeling.StandardEndpointFilters as StandardEndpointFilters
import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAtm
import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionAtm
import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathAtm
import experimental.adaptivethreatmodeling.XssATM as XssAtm
import experimental.adaptivethreatmodeling.XssThroughDomATM as XssThroughDomAtm
query predicate nosqlFilteredTruePositives(DataFlow::Node endpoint, string reason) {
endpoint instanceof NosqlInjection::Sink and
reason = NosqlInjectionAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint) and
reason = any(NosqlInjectionAtm::NosqlInjectionAtmConfig cfg).getAReasonSinkExcluded(endpoint) and
not reason = ["argument to modeled function", "modeled sink", "modeled database access"]
}
query predicate sqlFilteredTruePositives(DataFlow::Node endpoint, string reason) {
endpoint instanceof SqlInjection::Sink and
reason = SqlInjectionAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint) and
reason = any(SqlInjectionAtm::SqlInjectionAtmConfig cfg).getAReasonSinkExcluded(endpoint) and
reason != "argument to modeled function"
}
query predicate taintedPathFilteredTruePositives(DataFlow::Node endpoint, string reason) {
endpoint instanceof TaintedPath::Sink and
reason = TaintedPathAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint) and
reason = any(TaintedPathAtm::TaintedPathAtmConfig cfg).getAReasonSinkExcluded(endpoint) and
reason != "argument to modeled function"
}
query predicate xssFilteredTruePositives(DataFlow::Node endpoint, string reason) {
endpoint instanceof DomBasedXss::Sink and
reason = XssAtm::SinkEndpointFilter::getAReasonSinkExcluded(endpoint) and
reason = any(XssAtm::DomBasedXssAtmConfig cfg).getAReasonSinkExcluded(endpoint) and
reason != "argument to modeled function"
}
query predicate xssThroughDomFilteredTruePositives(DataFlow::Node endpoint, string reason) {
endpoint instanceof DomBasedXss::Sink and
reason = any(XssThroughDomAtm::XssThroughDomAtmConfig cfg).getAReasonSinkExcluded(endpoint) and
reason != "argument to modeled function"
}

View File

@@ -1,3 +1,3 @@
import experimental.adaptivethreatmodeling.StandardEndpointFilters
import experimental.adaptivethreatmodeling.EndpointCharacteristics as EndpointCharacteristics
select getALikelyExternalLibraryCall()
select EndpointCharacteristics::getALikelyExternalLibraryCall()

View File

@@ -23,6 +23,11 @@ endpoints
| index.js:15:17:15:32 | req.body.isAdmin | Xss | isExcludedFromEndToEndEvaluation | false | boolean |
| index.js:15:17:15:32 | req.body.isAdmin | Xss | notASinkReason | LoggerMethod | string |
| index.js:15:17:15:32 | req.body.isAdmin | Xss | sinkLabel | NotASink | string |
| index.js:15:17:15:32 | req.body.isAdmin | XssThroughDom | hasFlowFromSource | false | boolean |
| index.js:15:17:15:32 | req.body.isAdmin | XssThroughDom | isConstantExpression | false | boolean |
| index.js:15:17:15:32 | req.body.isAdmin | XssThroughDom | isExcludedFromEndToEndEvaluation | false | boolean |
| index.js:15:17:15:32 | req.body.isAdmin | XssThroughDom | notASinkReason | LoggerMethod | string |
| index.js:15:17:15:32 | req.body.isAdmin | XssThroughDom | sinkLabel | NotASink | string |
| index.js:20:13:20:31 | { 'isAdmin': true } | NosqlInjection | hasFlowFromSource | false | boolean |
| index.js:20:13:20:31 | { 'isAdmin': true } | NosqlInjection | isConstantExpression | false | boolean |
| index.js:20:13:20:31 | { 'isAdmin': true } | NosqlInjection | isExcludedFromEndToEndEvaluation | false | boolean |
@@ -55,6 +60,12 @@ endpoints
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | Xss | notASinkReason | ClientRequest | string |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | Xss | notASinkReason | JQueryArgument | string |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | Xss | sinkLabel | NotASink | string |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | XssThroughDom | hasFlowFromSource | false | boolean |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | XssThroughDom | isConstantExpression | false | boolean |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | XssThroughDom | isExcludedFromEndToEndEvaluation | false | boolean |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | XssThroughDom | notASinkReason | ClientRequest | string |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | XssThroughDom | notASinkReason | JQueryArgument | string |
| index.js:83:10:85:3 | {\\n " ... ar,\\n } | XssThroughDom | sinkLabel | NotASink | string |
| index.js:84:12:84:18 | foo.bar | NosqlInjection | hasFlowFromSource | false | boolean |
| index.js:84:12:84:18 | foo.bar | NosqlInjection | isConstantExpression | false | boolean |
| index.js:84:12:84:18 | foo.bar | NosqlInjection | isExcludedFromEndToEndEvaluation | false | boolean |
@@ -75,6 +86,11 @@ endpoints
| index.js:84:12:84:18 | foo.bar | Xss | isExcludedFromEndToEndEvaluation | false | boolean |
| index.js:84:12:84:18 | foo.bar | Xss | notASinkReason | ClientRequest | string |
| index.js:84:12:84:18 | foo.bar | Xss | sinkLabel | NotASink | string |
| index.js:84:12:84:18 | foo.bar | XssThroughDom | hasFlowFromSource | false | boolean |
| index.js:84:12:84:18 | foo.bar | XssThroughDom | isConstantExpression | false | boolean |
| index.js:84:12:84:18 | foo.bar | XssThroughDom | isExcludedFromEndToEndEvaluation | false | boolean |
| index.js:84:12:84:18 | foo.bar | XssThroughDom | notASinkReason | ClientRequest | string |
| index.js:84:12:84:18 | foo.bar | XssThroughDom | sinkLabel | NotASink | string |
tokenFeatures
| index.js:9:15:9:45 | { 'isAd ... Admin } | CalleeFlexibleAccessPath | User.find |
| index.js:9:15:9:45 | { 'isAd ... Admin } | InputAccessPathFromCallee | |

View File

@@ -2,5 +2,5 @@ import javascript
import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionAtm
query predicate effectiveSinks(DataFlow::Node node) {
not exists(NosqlInjectionAtm::SinkEndpointFilter::getAReasonSinkExcluded(node))
not exists(any(NosqlInjectionAtm::NosqlInjectionAtmConfig cfg).getAReasonSinkExcluded(node))
}

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* The ReDoS libraries in `semmle.code.javascript.security.regexp` has been moved to a shared pack inside the `shared/` folder, and the previous location has been deprecated.

View File

@@ -0,0 +1,6 @@
---
category: minorAnalysis
---
* Deleted the deprecated `Instance` class from the `Vue` module.
* Deleted the deprecated `VHtmlSourceWrite` class from `DomBasedXssQuery.qll`.
* Deleted all the deprecated `[QueryName].qll` files from the `javascript/ql/lib/semmle/javascript/security/dataflow` folder, use the corresponding `[QueryName]Query.qll` files instead.

View File

@@ -99,7 +99,6 @@ import semmle.javascript.frameworks.JWT
import semmle.javascript.frameworks.Handlebars
import semmle.javascript.frameworks.History
import semmle.javascript.frameworks.Immutable
import semmle.javascript.frameworks.ImportGeneratedModels
import semmle.javascript.frameworks.Knex
import semmle.javascript.frameworks.LazyCache
import semmle.javascript.frameworks.LdapJS

View File

@@ -5,3 +5,7 @@ dbscheme: semmlecode.javascript.dbscheme
extractor: javascript
library: true
upgrades: upgrades
dependencies:
codeql/regex: ${workspace}
dataExtensions:
- semmle/javascript/frameworks/**/model.yml

View File

@@ -460,7 +460,6 @@ module API {
this = Impl::MkClassInstance(result) or
this = Impl::MkUse(result) or
this = Impl::MkDef(result) or
this = Impl::MkAsyncFuncResult(result) or
this = Impl::MkSyntheticCallbackArg(_, _, result)
}
@@ -562,6 +561,9 @@ module API {
/** Gets a node whose type has the given qualified name, not including types from models. */
Node getANodeOfTypeRaw(string moduleName, string exportedName) {
result = Impl::MkTypeUse(moduleName, exportedName).(Node).getInstance()
or
exportedName = "" and
result = getAModuleImportRaw(moduleName)
}
}
@@ -671,9 +673,6 @@ module API {
cls.getAnInstanceReference() = trackDefNode(_)
)
} or
MkAsyncFuncResult(DataFlow::FunctionNode f) {
f = trackDefNode(_) and f.getFunction().isAsync() and hasSemantics(f)
} or
MkDef(DataFlow::Node nd) { rhs(_, _, nd) } or
MkUse(DataFlow::Node nd) { use(_, _, nd) } or
/** A use of a TypeScript type. */
@@ -688,8 +687,7 @@ module API {
class TDef = MkModuleDef or TNonModuleDef;
class TNonModuleDef =
MkModuleExport or MkClassInstance or MkAsyncFuncResult or MkDef or MkSyntheticCallbackArg;
class TNonModuleDef = MkModuleExport or MkClassInstance or MkDef or MkSyntheticCallbackArg;
class TUse = MkModuleUse or MkModuleImport or MkUse or MkTypeUse;
@@ -740,10 +738,11 @@ module API {
rhs = m.getAnExportedValue(prop)
)
or
exists(DataFlow::FunctionNode fn | fn = pred |
not fn.getFunction().isAsync() and
lbl = Label::return() and
rhs = fn.getAReturn()
exists(DataFlow::FunctionNode fn |
fn = pred and
lbl = Label::return()
|
if fn.getFunction().isAsync() then rhs = fn.getReturnNode() else rhs = fn.getAReturn()
)
or
lbl = Label::promised() and
@@ -774,13 +773,12 @@ module API {
)
or
exists(DataFlow::FunctionNode f |
base = MkAsyncFuncResult(f) and
f.getFunction().isAsync() and
base = MkDef(f.getReturnNode())
|
lbl = Label::promised() and
rhs = f.getAReturn()
)
or
exists(DataFlow::FunctionNode f |
base = MkAsyncFuncResult(f) and
or
lbl = Label::promisedError() and
rhs = f.getExceptionalReturn()
)
@@ -1272,10 +1270,11 @@ module API {
)
or
exists(DataFlow::Node nd, DataFlow::FunctionNode f |
f.getFunction().isAsync() and
pred = MkDef(nd) and
f = trackDefNode(nd) and
lbl = Label::return() and
succ = MkAsyncFuncResult(f)
succ = MkDef(f.getReturnNode())
)
or
exists(int bound, DataFlow::InvokeNode call |

View File

@@ -176,6 +176,13 @@ class RegExpTerm extends Locatable, @regexpterm {
* Gets a string that is matched by this regular-expression term.
*/
string getAMatchedString() { result = this.getConstantValue() }
/** Holds if this term has the specified location. */
predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
}
/**

View File

@@ -45,6 +45,8 @@ private PropAccess namedPropAccess(AccessPath base, PropertyName name, BasicBloc
private SsaVariable getRefinedVariable(SsaVariable variable) {
result = variable.getDefinition().(SsaRefinementNode).getAnInput()
or
result = variable.getDefinition().(SsaPhiNode).getRephinedVariable()
}
private SsaVariable getARefinementOf(SsaVariable variable) { variable = getRefinedVariable(result) }

View File

@@ -1,12 +0,0 @@
/**
* Imports all generated models.
*/
private import minimongo.Model
private import mongodb.Model
private import mssql.Model
private import mysql.Model
private import pg.Model
private import sequelize.Model
private import spanner.Model
private import sqlite3.Model

View File

@@ -11,6 +11,10 @@ module NoSql {
/** Gets an expression that is interpreted as a code operator in this query. */
DataFlow::Node getACodeOperator() { none() }
}
private class QueryFromModel extends Query {
QueryFromModel() { this = ModelOutput::getASinkNode("nosql-injection").asSink() }
}
}
/** DEPRECATED: Alias for NoSql */
@@ -24,7 +28,7 @@ private module MongoDB {
override predicate row(string row) {
// In Mongo version 2.x, a client and a database handle were the same concept, but in 3.x
// they were separated. To handle everything with a single model, we treat them as the same here.
row = "mongodb;Db;mongodb;MongoClient;"
row = "mongodb.Db;mongodb.MongoClient;"
}
}
@@ -42,11 +46,11 @@ private module MongoDB {
/** A call to a MongoDB query method. */
private class QueryCall extends DatabaseAccess, API::CallNode {
QueryCall() {
this = ModelOutput::getATypeNode("mongodb", "Collection").getAMember().getACall() and
this = ModelOutput::getATypeNode("mongodb.Collection").getAMember().getACall() and
not this.getCalleeName() = ["toString", "valueOf", "getLogger"]
or
this =
ModelOutput::getATypeNode("mongodb", ["Db", "MongoClient"])
ModelOutput::getATypeNode(["mongodb.Db", "mongodb.MongoClient"])
.getMember(["watch", "aggregate"])
.getACall()
}
@@ -63,7 +67,7 @@ private module MongoDB {
private class Insertion extends DatabaseAccess, API::CallNode {
Insertion() {
this = ModelOutput::getATypeNode("mongodb", "Collection").getAMember().getACall() and
this = ModelOutput::getATypeNode("mongodb.Collection").getAMember().getACall() and
this.getCalleeName().matches("insert%")
}
@@ -105,9 +109,7 @@ private module Mongoose {
private class QueryCall extends DatabaseAccess, API::CallNode {
QueryCall() {
this =
ModelOutput::getATypeNode("mongoose", "Query")
.getMember(["exec", "then", "catch"])
.getACall()
ModelOutput::getATypeNode("mongoose.Query").getMember(["exec", "then", "catch"]).getACall()
}
override DataFlow::Node getAQueryArgument() { result = this.getReceiver() }
@@ -132,10 +134,10 @@ private module Mongoose {
private class QueryWithCallback extends DatabaseAccess, API::CallNode {
QueryWithCallback() {
this =
ModelOutput::getATypeNode("mongoose", ["Document", "Model", "Query"])
ModelOutput::getATypeNode(["mongoose.Document", "mongoose.Model", "mongoose.Query"])
.getAMember()
.getACall() and
this.getReturn() = ModelOutput::getATypeNode("mongoose", "Query") and
this.getReturn() = ModelOutput::getATypeNode("mongoose.Query") and
exists(this.getLastArgument().getABoundFunctionValue(_))
}
@@ -152,7 +154,7 @@ private module Mongoose {
QueryAwait() {
astNode.getOperand().flow() =
ModelOutput::getATypeNode("mongoose", "Query").getAValueReachableFromSource()
ModelOutput::getATypeNode("mongoose.Query").getAValueReachableFromSource()
}
override DataFlow::Node getAQueryArgument() { result = astNode.getOperand().flow() }
@@ -162,7 +164,7 @@ private module Mongoose {
class Insertion extends DatabaseAccess, API::CallNode {
Insertion() {
this = ModelOutput::getATypeNode("mongoose", "Model").getAMember().getACall() and
this = ModelOutput::getATypeNode("mongoose.Model").getAMember().getACall() and
this.getCalleeName().matches("insert%")
}
@@ -180,9 +182,9 @@ private module MarsDB {
override predicate row(string row) {
row =
[
"mongoose;Query;marsdb;;Member[Collection].Instance",
"mongoose;Model;marsdb;;Member[Collection].Instance",
"mongoose;Query;mongoose;Query;Member[sortFunc].ReturnValue",
"mongoose.Query;marsdb;Member[Collection].Instance",
"mongoose.Model;marsdb;Member[Collection].Instance",
"mongoose.Query;mongoose.Query;Member[sortFunc].ReturnValue",
]
}
}
@@ -251,7 +253,7 @@ private module Redis {
"set", "publish", "append", "bitfield", "decrby", "getset", "hincrby", "hincrbyfloat",
"hset", "hsetnx", "incrby", "incrbyfloat", "linsert", "lpush", "lpushx", "lset", "ltrim",
"rename", "renamenx", "rpushx", "setbit", "setex", "smove", "zincrby", "zinterstore",
"hdel", "lpush", "pfadd", "rpush", "sadd", "sdiffstore", "srem"
"hdel", "pfadd", "rpush", "sadd", "sdiffstore", "srem"
] and
argIndex = 0
or

View File

@@ -357,7 +357,7 @@ private module Sequelize {
// Note: the sinks are specified directly in the MaD model
class SequelizeSource extends ModelInput::SourceModelCsv {
override predicate row(string row) {
row = "sequelize;Sequelize;Member[query].ReturnValue.Awaited;database-access-result"
row = "sequelize.Sequelize;Member[query].ReturnValue.Awaited;database-access-result"
}
}
}
@@ -365,13 +365,13 @@ private module Sequelize {
private module SpannerCsv {
class SpannerSinks extends ModelInput::SinkModelCsv {
override predicate row(string row) {
// package; type; path; kind
// type; path; kind
row =
[
"@google-cloud/spanner;~SqlExecutorDirect;Argument[0];sql-injection",
"@google-cloud/spanner;~SqlExecutorDirect;Argument[0].Member[sql];sql-injection",
"@google-cloud/spanner;Transaction;Member[batchUpdate].Argument[0];sql-injection",
"@google-cloud/spanner;Transaction;Member[batchUpdate].Argument[0].ArrayElement.Member[sql];sql-injection",
"@google-cloud/spanner.~SqlExecutorDirect;Argument[0];sql-injection",
"@google-cloud/spanner.~SqlExecutorDirect;Argument[0].Member[sql];sql-injection",
"@google-cloud/spanner.Transaction;Member[batchUpdate].Argument[0];sql-injection",
"@google-cloud/spanner.Transaction;Member[batchUpdate].Argument[0].ArrayElement.Member[sql];sql-injection",
]
}
}
@@ -380,10 +380,10 @@ private module SpannerCsv {
override predicate row(string row) {
row =
[
"@google-cloud/spanner;~SpannerObject;Member[executeSql].Argument[0..].Parameter[1];database-access-result",
"@google-cloud/spanner;~SpannerObject;Member[executeSql].ReturnValue.Awaited.Member[0];database-access-result",
"@google-cloud/spanner;~SpannerObject;Member[run].ReturnValue.Awaited;database-access-result",
"@google-cloud/spanner;~SpannerObject;Member[run].Argument[0..].Parameter[1];database-access-result",
"@google-cloud/spanner.~SpannerObject;Member[executeSql].Argument[0..].Parameter[1];database-access-result",
"@google-cloud/spanner.~SpannerObject;Member[executeSql].ReturnValue.Awaited.Member[0];database-access-result",
"@google-cloud/spanner.~SpannerObject;Member[run].ReturnValue.Awaited;database-access-result",
"@google-cloud/spanner.~SpannerObject;Member[run].Argument[0..].Parameter[1];database-access-result",
]
}
}

View File

@@ -115,11 +115,6 @@ module Vue {
kind = DataFlow::MemberKind::setter() and result = "set"
}
/**
* DEPRECATED. This class has been renamed to `Vue::Component`.
*/
deprecated class Instance = Component;
/**
* A Vue component, such as a `new Vue({ ... })` call or a `.vue` file.
*
@@ -383,23 +378,6 @@ module Vue {
}
}
/**
* DEPRECATED. Use `Vue::Component` instead.
*
* A Vue component from `new Vue({...})`.
*/
deprecated class VueInstance extends Component {
VueInstance() {
// restrict charpred to match original behavior
this = MkComponentInstantiation(vueLibrary().getAnInstantiation())
}
}
/**
* DEPRECATED. Use `Vue::ComponentExtension` or `Vue::Component` instead.
*/
deprecated class ExtendedVue = ComponentExtension;
/**
* A component created via an explicit call to `Vue.extend({...})` or `CustomComponent.extend({...})`.
*/
@@ -429,19 +407,6 @@ module Vue {
}
}
/**
* DEPRECATED. Use `Vue::Component` instead.
*
* An instance of an extended Vue, for example `instance` of `var Ext = Vue.extend({...}); var instance = new Ext({...})`.
*/
deprecated class ExtendedInstance extends Component {
ExtendedInstance() {
// restrict charpred to match original behavior
this =
MkComponentInstantiation(vueLibrary().getMember("extend").getReturn().getAnInstantiation())
}
}
/**
* A Vue component from `Vue.component("my-component", { ... })`.
*/
@@ -568,9 +533,6 @@ module Vue {
}
}
/** DEPRECATED. Do not use. */
deprecated class InstanceHeapStep = PropStep;
/**
* A Vue `v-html` attribute.
*/
@@ -609,11 +571,6 @@ module Vue {
}
}
/**
* DEPRECATED. Do not use.
*/
deprecated class VHtmlSourceWrite = VHtmlAttributeStep;
/*
* Provides classes for working with Vue templates.
*/

View File

@@ -5,23 +5,20 @@
*
* The CSV specification has the following columns:
* - Sources:
* `package; type; path; kind`
* `type; path; kind`
* - Sinks:
* `package; type; path; kind`
* `type; path; kind`
* - Summaries:
* `package; type; path; input; output; kind`
* `type; path; input; output; kind`
* - Types:
* `package1; type1; package2; type2; path`
* `type1; type2; path`
*
* The interpretation of a row is similar to API-graphs with a left-to-right
* reading.
* 1. The `package` column selects a package name, as it would be referenced in the source code,
* such as an NPM package, PIP package, or Ruby gem. (See `ModelsAsData.qll` for language-specific details).
* It may also be a synthetic package used for a type definition (see type definitions below).
* 2. The `type` column selects all instances of a named type originating from that package,
* or the empty string if referring to the package itself.
* 1. The `type` column selects all instances of a named type. The syntax of this column is language-specific.
* The language defines some type names that the analysis knows how to identify without models.
* It can also be a synthetic type name defined by a type definition (see type definitions below).
* 3. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `package` and `type`.
* 2. The `path` column is a `.`-separated list of "access path tokens" to resolve, starting at the node selected by `type`.
*
* Every language supports the following tokens:
* - Argument[n]: the n-th argument to a call. May be a range of form `x..y` (inclusive) and/or a comma-separated list.
@@ -42,10 +39,10 @@
*
* For the time being, please consult `ApiGraphModelsSpecific.qll` to see which language-specific tokens are currently supported.
*
* 4. The `input` and `output` columns specify how data enters and leaves the element selected by the
* first `(package, type, path)` tuple. Both strings are `.`-separated access paths
* 3. The `input` and `output` columns specify how data enters and leaves the element selected by the
* first `(type, path)` tuple. Both strings are `.`-separated access paths
* of the same syntax as the `path` column.
* 5. The `kind` column is a tag that can be referenced from QL to determine to
* 4. The `kind` column is a tag that can be referenced from QL to determine to
* which classes the interpreted elements should be added. For example, for
* sources `"remote"` indicates a default remote flow source, and for summaries
* `"taint"` indicates a default additional taint step and `"value"` indicates a
@@ -53,17 +50,17 @@
*
* ### Types
*
* A type row of form `package1; type1; package2; type2; path` indicates that `package2; type2; path`
* should be seen as an instance of the type `package1; type1`.
* A type row of form `type1; type2; path` indicates that `type2; path`
* should be seen as an instance of the type `type1`.
*
* A `(package,type)` pair may refer to a static type or a synthetic type name used internally in the model.
* A type may refer to a static type or a synthetic type name used internally in the model.
* Synthetic type names can be used to reuse intermediate sub-paths, when there are multiple ways to access the same
* element.
* See `ModelsAsData.qll` for the language-specific interpretation of packages and static type names.
* See `ModelsAsData.qll` for the language-specific interpretation of type names.
*
* By convention, if one wants to avoid clashes with static types from the package, the type name
* should be prefixed with a tilde character (`~`). For example, `(foo, ~Bar)` can be used to indicate that
* the type is related to the `foo` package but is not intended to match a static type.
* By convention, if one wants to avoid clashes with static types, the type name
* should be prefixed with a tilde character (`~`). For example, `~Bar` can be used to indicate that
* the type is not intended to match a static type.
*/
private import ApiGraphModelsSpecific as Specific
@@ -75,6 +72,7 @@ private module API = Specific::API;
private module DataFlow = Specific::DataFlow;
private import Specific::AccessPathSyntax
private import ApiGraphModelsExtensions as Extensions
/** Module containing hooks for providing input data to be interpreted as a model. */
module ModelInput {
@@ -89,9 +87,9 @@ module ModelInput {
*
* A row of form
* ```
* package;type;path;kind
* type;path;kind
* ```
* indicates that the value at `(package, type, path)` should be seen as a flow
* indicates that the value at `(type, path)` should be seen as a flow
* source of the given `kind`.
*
* The kind `remote` represents a general remote flow source.
@@ -110,9 +108,9 @@ module ModelInput {
*
* A row of form
* ```
* package;type;path;kind
* type;path;kind
* ```
* indicates that the value at `(package, type, path)` should be seen as a sink
* indicates that the value at `(type, path)` should be seen as a sink
* of the given `kind`.
*/
abstract predicate row(string row);
@@ -129,9 +127,9 @@ module ModelInput {
*
* A row of form
* ```
* package;type;path;input;output;kind
* type;path;input;output;kind
* ```
* indicates that for each call to `(package, type, path)`, the value referred to by `input`
* indicates that for each call to `(type, path)`, the value referred to by `input`
* can flow to the value referred to by `output`.
*
* `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps,
@@ -151,9 +149,9 @@ module ModelInput {
*
* A row of form,
* ```
* package1;type1;package2;type2;path
* type1;type2;path
* ```
* indicates that `(package2, type2, path)` should be seen as an instance of `(package1, type1)`.
* indicates that `(type2, path)` should be seen as an instance of `type1`.
*/
abstract predicate row(string row);
}
@@ -163,28 +161,28 @@ module ModelInput {
*/
class TypeModel extends Unit {
/**
* Gets a data-flow node that is a source of the type `package;type`.
* Gets a data-flow node that is a source of the given `type`.
*
* This must not depend on API graphs, but ensures that an API node is generated for
* the source.
*/
DataFlow::Node getASource(string package, string type) { none() }
DataFlow::Node getASource(string type) { none() }
/**
* Gets a data-flow node that is a sink of the type `package;type`,
* Gets a data-flow node that is a sink of the given `type`,
* usually because it is an argument passed to a parameter of that type.
*
* This must not depend on API graphs, but ensures that an API node is generated for
* the sink.
*/
DataFlow::Node getASink(string package, string type) { none() }
DataFlow::Node getASink(string type) { none() }
/**
* Gets an API node that is a source or sink of the type `package;type`.
* Gets an API node that is a source or sink of the given `type`.
*
* Unlike `getASource` and `getASink`, this may depend on API graphs.
*/
API::Node getAnApiNode(string package, string type) { none() }
API::Node getAnApiNode(string type) { none() }
}
/**
@@ -209,7 +207,7 @@ private import ModelInput
/**
* An empty class, except in specific tests.
*
* If this is non-empty, all models are parsed even if the package is not
* If this is non-empty, all models are parsed even if the type name is not
* considered relevant for the current database.
*/
abstract class TestAllModels extends Unit { }
@@ -232,54 +230,53 @@ private predicate typeModel(string row) { any(TypeModelCsv s).row(inversePad(row
private predicate typeVariableModel(string row) { any(TypeVariableModelCsv s).row(inversePad(row)) }
/** Holds if a source model exists for the given parameters. */
predicate sourceModel(string package, string type, string path, string kind) {
predicate sourceModel(string type, string path, string kind) {
exists(string row |
sourceModel(row) and
row.splitAt(";", 0) = package and
row.splitAt(";", 1) = type and
row.splitAt(";", 2) = path and
row.splitAt(";", 3) = kind
row.splitAt(";", 0) = type and
row.splitAt(";", 1) = path and
row.splitAt(";", 2) = kind
)
or
Extensions::sourceModel(type, path, kind)
}
/** Holds if a sink model exists for the given parameters. */
private predicate sinkModel(string package, string type, string path, string kind) {
private predicate sinkModel(string type, string path, string kind) {
exists(string row |
sinkModel(row) and
row.splitAt(";", 0) = package and
row.splitAt(";", 1) = type and
row.splitAt(";", 2) = path and
row.splitAt(";", 3) = kind
row.splitAt(";", 0) = type and
row.splitAt(";", 1) = path and
row.splitAt(";", 2) = kind
)
or
Extensions::sinkModel(type, path, kind)
}
/** Holds if a summary model `row` exists for the given parameters. */
private predicate summaryModel(
string package, string type, string path, string input, string output, string kind
) {
private predicate summaryModel(string type, string path, string input, string output, string kind) {
exists(string row |
summaryModel(row) and
row.splitAt(";", 0) = package and
row.splitAt(";", 1) = type and
row.splitAt(";", 2) = path and
row.splitAt(";", 3) = input and
row.splitAt(";", 4) = output and
row.splitAt(";", 5) = kind
row.splitAt(";", 0) = type and
row.splitAt(";", 1) = path and
row.splitAt(";", 2) = input and
row.splitAt(";", 3) = output and
row.splitAt(";", 4) = kind
)
or
Extensions::summaryModel(type, path, input, output, kind)
}
/** Holds if a type model exists for the given parameters. */
private predicate typeModel(
string package1, string type1, string package2, string type2, string path
) {
private predicate typeModel(string type1, string type2, string path) {
exists(string row |
typeModel(row) and
row.splitAt(";", 0) = package1 and
row.splitAt(";", 1) = type1 and
row.splitAt(";", 2) = package2 and
row.splitAt(";", 3) = type2 and
row.splitAt(";", 4) = path
row.splitAt(";", 0) = type1 and
row.splitAt(";", 1) = type2 and
row.splitAt(";", 2) = path
)
or
Extensions::typeModel(type1, type2, path)
}
/** Holds if a type variable model exists for the given parameters. */
@@ -289,64 +286,55 @@ private predicate typeVariableModel(string name, string path) {
row.splitAt(";", 0) = name and
row.splitAt(";", 1) = path
)
}
/**
* Gets a package that should be seen as an alias for the given other `package`,
* or the `package` itself.
*/
bindingset[package]
bindingset[result]
string getAPackageAlias(string package) {
typeModel(package, "", result, "", "")
or
result = package
Extensions::typeVariableModel(name, path)
}
/**
* Holds if CSV rows involving `package` might be relevant for the analysis of this database.
* Holds if CSV rows involving `type` might be relevant for the analysis of this database.
*/
private predicate isRelevantPackage(string package) {
predicate isRelevantType(string type) {
(
sourceModel(package, _, _, _) or
sinkModel(package, _, _, _) or
summaryModel(package, _, _, _, _, _) or
typeModel(_, _, package, _, _)
sourceModel(type, _, _) or
sinkModel(type, _, _) or
summaryModel(type, _, _, _, _) or
typeModel(_, type, _)
) and
(
Specific::isPackageUsed(package)
Specific::isTypeUsed(type)
or
exists(TestAllModels t)
)
or
exists(string other |
isRelevantPackage(other) and
typeModel(package, _, other, _, _)
exists(string other | isRelevantType(other) |
typeModel(type, other, _)
or
Specific::hasImplicitTypeModel(type, other)
)
}
/**
* Holds if `package,type,path` is used in some CSV row.
* Holds if `type,path` is used in some CSV row.
*/
pragma[nomagic]
predicate isRelevantFullPath(string package, string type, string path) {
isRelevantPackage(package) and
predicate isRelevantFullPath(string type, string path) {
isRelevantType(type) and
(
sourceModel(package, type, path, _) or
sinkModel(package, type, path, _) or
summaryModel(package, type, path, _, _, _) or
typeModel(_, _, package, type, path)
sourceModel(type, path, _) or
sinkModel(type, path, _) or
summaryModel(type, path, _, _, _) or
typeModel(_, type, path)
)
}
/** A string from a CSV row that should be parsed as an access path. */
private class AccessPathRange extends AccessPath::Range {
AccessPathRange() {
isRelevantFullPath(_, _, this)
isRelevantFullPath(_, this)
or
exists(string package | isRelevantPackage(package) |
summaryModel(package, _, _, this, _, _) or
summaryModel(package, _, _, _, this, _)
exists(string type | isRelevantType(type) |
summaryModel(type, _, this, _, _) or
summaryModel(type, _, _, this, _)
)
or
typeVariableModel(_, this)
@@ -400,83 +388,73 @@ private predicate invocationMatchesCallSiteFilter(Specific::InvokeNode invoke, A
}
private class TypeModelUseEntry extends API::EntryPoint {
private string package;
private string type;
TypeModelUseEntry() {
exists(any(TypeModel tm).getASource(package, type)) and
this = "TypeModelUseEntry;" + package + ";" + type
exists(any(TypeModel tm).getASource(type)) and
this = "TypeModelUseEntry;" + type
}
override DataFlow::LocalSourceNode getASource() {
result = any(TypeModel tm).getASource(package, type)
}
override DataFlow::LocalSourceNode getASource() { result = any(TypeModel tm).getASource(type) }
API::Node getNodeForType(string package_, string type_) {
package = package_ and type = type_ and result = this.getANode()
}
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
}
private class TypeModelDefEntry extends API::EntryPoint {
private string package;
private string type;
TypeModelDefEntry() {
exists(any(TypeModel tm).getASink(package, type)) and
this = "TypeModelDefEntry;" + package + ";" + type
exists(any(TypeModel tm).getASink(type)) and
this = "TypeModelDefEntry;" + type
}
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(package, type) }
override DataFlow::Node getASink() { result = any(TypeModel tm).getASink(type) }
API::Node getNodeForType(string package_, string type_) {
package = package_ and type = type_ and result = this.getANode()
}
API::Node getNodeForType(string type_) { type = type_ and result = this.getANode() }
}
/**
* Gets an API node identified by the given `(package,type)` pair.
* Gets an API node identified by the given `type`.
*/
pragma[nomagic]
private API::Node getNodeFromType(string package, string type) {
exists(string package2, string type2, AccessPath path2 |
typeModel(package, type, package2, type2, path2) and
result = getNodeFromPath(package2, type2, path2)
private API::Node getNodeFromType(string type) {
exists(string type2, AccessPath path2 |
typeModel(type, type2, path2) and
result = getNodeFromPath(type2, path2)
)
or
result = any(TypeModelUseEntry e).getNodeForType(package, type)
result = any(TypeModelUseEntry e).getNodeForType(type)
or
result = any(TypeModelDefEntry e).getNodeForType(package, type)
result = any(TypeModelDefEntry e).getNodeForType(type)
or
result = any(TypeModel t).getAnApiNode(package, type)
result = any(TypeModel t).getAnApiNode(type)
or
result = Specific::getExtraNodeFromType(package, type)
result = Specific::getExtraNodeFromType(type)
}
/**
* Gets the API node identified by the first `n` tokens of `path` in the given `(package, type, path)` tuple.
* Gets the API node identified by the first `n` tokens of `path` in the given `(type, path)` tuple.
*/
pragma[nomagic]
private API::Node getNodeFromPath(string package, string type, AccessPath path, int n) {
isRelevantFullPath(package, type, path) and
private API::Node getNodeFromPath(string type, AccessPath path, int n) {
isRelevantFullPath(type, path) and
(
n = 0 and
result = getNodeFromType(package, type)
result = getNodeFromType(type)
or
result = Specific::getExtraNodeFromPath(package, type, path, n)
result = Specific::getExtraNodeFromPath(type, path, n)
)
or
result = getSuccessorFromNode(getNodeFromPath(package, type, path, n - 1), path.getToken(n - 1))
result = getSuccessorFromNode(getNodeFromPath(type, path, n - 1), path.getToken(n - 1))
or
// Similar to the other recursive case, but where the path may have stepped through one or more call-site filters
result =
getSuccessorFromInvoke(getInvocationFromPath(package, type, path, n - 1), path.getToken(n - 1))
result = getSuccessorFromInvoke(getInvocationFromPath(type, path, n - 1), path.getToken(n - 1))
or
// Apply a subpath
result =
getNodeFromSubPath(getNodeFromPath(package, type, path, n - 1), getSubPathAt(path, n - 1))
result = getNodeFromSubPath(getNodeFromPath(type, path, n - 1), getSubPathAt(path, n - 1))
or
// Apply a type step
typeStep(getNodeFromPath(package, type, path, n), result)
typeStep(getNodeFromPath(type, path, n), result)
}
/**
@@ -496,15 +474,15 @@ private AccessPath getSubPathAt(AccessPath path, int n) {
pragma[nomagic]
private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath, int n) {
exists(AccessPath path, int k |
base = [getNodeFromPath(_, _, path, k), getNodeFromSubPath(_, path, k)] and
base = [getNodeFromPath(_, path, k), getNodeFromSubPath(_, path, k)] and
subPath = getSubPathAt(path, k) and
result = base and
n = 0
)
or
exists(string package, string type, AccessPath basePath |
typeStepModel(package, type, basePath, subPath) and
base = getNodeFromPath(package, type, basePath) and
exists(string type, AccessPath basePath |
typeStepModel(type, basePath, subPath) and
base = getNodeFromPath(type, basePath) and
result = base and
n = 0
)
@@ -543,42 +521,40 @@ private API::Node getNodeFromSubPath(API::Node base, AccessPath subPath) {
result = getNodeFromSubPath(base, subPath, subPath.getNumToken())
}
/** Gets the node identified by the given `(package, type, path)` tuple. */
private API::Node getNodeFromPath(string package, string type, AccessPath path) {
result = getNodeFromPath(package, type, path, path.getNumToken())
/** Gets the node identified by the given `(type, path)` tuple. */
private API::Node getNodeFromPath(string type, AccessPath path) {
result = getNodeFromPath(type, path, path.getNumToken())
}
pragma[nomagic]
private predicate typeStepModel(string package, string type, AccessPath basePath, AccessPath output) {
summaryModel(package, type, basePath, "", output, "type")
private predicate typeStepModel(string type, AccessPath basePath, AccessPath output) {
summaryModel(type, basePath, "", output, "type")
}
pragma[nomagic]
private predicate typeStep(API::Node pred, API::Node succ) {
exists(string package, string type, AccessPath basePath, AccessPath output |
typeStepModel(package, type, basePath, output) and
pred = getNodeFromPath(package, type, basePath) and
exists(string type, AccessPath basePath, AccessPath output |
typeStepModel(type, basePath, output) and
pred = getNodeFromPath(type, basePath) and
succ = getNodeFromSubPath(pred, output)
)
}
/**
* Gets an invocation identified by the given `(package, type, path)` tuple.
* Gets an invocation identified by the given `(type, path)` tuple.
*
* Unlike `getNodeFromPath`, the `path` may end with one or more call-site filters.
*/
private Specific::InvokeNode getInvocationFromPath(
string package, string type, AccessPath path, int n
) {
result = Specific::getAnInvocationOf(getNodeFromPath(package, type, path, n))
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path, int n) {
result = Specific::getAnInvocationOf(getNodeFromPath(type, path, n))
or
result = getInvocationFromPath(package, type, path, n - 1) and
result = getInvocationFromPath(type, path, n - 1) and
invocationMatchesCallSiteFilter(result, path.getToken(n - 1))
}
/** Gets an invocation identified by the given `(package, type, path)` tuple. */
private Specific::InvokeNode getInvocationFromPath(string package, string type, AccessPath path) {
result = getInvocationFromPath(package, type, path, path.getNumToken())
/** Gets an invocation identified by the given `(type, path)` tuple. */
private Specific::InvokeNode getInvocationFromPath(string type, AccessPath path) {
result = getInvocationFromPath(type, path, path.getNumToken())
}
/**
@@ -631,9 +607,9 @@ module ModelOutput {
*/
cached
API::Node getASourceNode(string kind) {
exists(string package, string type, string path |
sourceModel(package, type, path, kind) and
result = getNodeFromPath(package, type, path)
exists(string type, string path |
sourceModel(type, path, kind) and
result = getNodeFromPath(type, path)
)
}
@@ -642,9 +618,9 @@ module ModelOutput {
*/
cached
API::Node getASinkNode(string kind) {
exists(string package, string type, string path |
sinkModel(package, type, path, kind) and
result = getNodeFromPath(package, type, path)
exists(string type, string path |
sinkModel(type, path, kind) and
result = getNodeFromPath(type, path)
)
}
@@ -653,32 +629,31 @@ module ModelOutput {
*/
cached
predicate relevantSummaryModel(
string package, string type, string path, string input, string output, string kind
string type, string path, string input, string output, string kind
) {
isRelevantPackage(package) and
summaryModel(package, type, path, input, output, kind)
isRelevantType(type) and
summaryModel(type, path, input, output, kind)
}
/**
* Holds if a `baseNode` is an invocation identified by the `package,type,path` part of a summary row.
* Holds if a `baseNode` is an invocation identified by the `type,path` part of a summary row.
*/
cached
predicate resolvedSummaryBase(
string package, string type, string path, Specific::InvokeNode baseNode
) {
summaryModel(package, type, path, _, _, _) and
baseNode = getInvocationFromPath(package, type, path)
predicate resolvedSummaryBase(string type, string path, Specific::InvokeNode baseNode) {
summaryModel(type, path, _, _, _) and
baseNode = getInvocationFromPath(type, path)
}
/**
* Holds if `node` is seen as an instance of `(package,type)` due to a type definition
* Holds if `node` is seen as an instance of `type` due to a type definition
* contributed by a CSV model.
*/
cached
API::Node getATypeNode(string package, string type) { result = getNodeFromType(package, type) }
API::Node getATypeNode(string type) { result = getNodeFromType(type) }
}
import Cached
import Specific::ModelOutputSpecific
/**
* Gets an error message relating to an invalid CSV row in a model.
@@ -686,13 +661,13 @@ module ModelOutput {
string getAWarning() {
// Check number of columns
exists(string row, string kind, int expectedArity, int actualArity |
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 4
any(SourceModelCsv csv).row(row) and kind = "source" and expectedArity = 3
or
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 4
any(SinkModelCsv csv).row(row) and kind = "sink" and expectedArity = 3
or
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 6
any(SummaryModelCsv csv).row(row) and kind = "summary" and expectedArity = 5
or
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 5
any(TypeModelCsv csv).row(row) and kind = "type" and expectedArity = 3
or
any(TypeVariableModelCsv csv).row(row) and kind = "type-variable" and expectedArity = 2
|
@@ -705,7 +680,7 @@ module ModelOutput {
or
// Check names and arguments of access path tokens
exists(AccessPath path, AccessPathToken token |
(isRelevantFullPath(_, _, path) or typeVariableModel(_, path)) and
(isRelevantFullPath(_, path) or typeVariableModel(_, path)) and
token = path.getToken(_)
|
not isValidTokenNameInIdentifyingAccessPath(token.getName()) and

View File

@@ -0,0 +1,36 @@
/**
* Defines extensible predicates for contributing library models from data extensions.
*/
/**
* Holds if the value at `(type, path)` should be seen as a flow
* source of the given `kind`.
*
* The kind `remote` represents a general remote flow source.
*/
extensible predicate sourceModel(string type, string path, string kind);
/**
* Holds if the value at `(type, path)` should be seen as a sink
* of the given `kind`.
*/
extensible predicate sinkModel(string type, string path, string kind);
/**
* Holds if calls to `(type, path)`, the value referred to by `input`
* can flow to the value referred to by `output`.
*
* `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps,
* respectively.
*/
extensible predicate summaryModel(string type, string path, string input, string output, string kind);
/**
* Holds if `(type2, path)` should be seen as an instance of `type1`.
*/
extensible predicate typeModel(string type1, string type2, string path);
/**
* Holds if `path` can be substituted for a token `TypeVar[name]`.
*/
extensible predicate typeVariableModel(string name, string path);

View File

@@ -31,6 +31,21 @@ import semmle.javascript.frameworks.data.internal.AccessPathSyntax as AccessPath
import JS::DataFlow as DataFlow
private import AccessPathSyntax
/**
* Holds if `rawType` represents the JavaScript type `qualifiedName` from the given NPM `package`.
*
* Type names have form `package.type` or just `package` if referring to the package export
* object. If `package` contains a `.` character it must be enclosed in single quotes, such as `'package'.type`.
*/
bindingset[rawType]
predicate parseTypeString(string rawType, string package, string qualifiedName) {
exists(string regexp |
regexp = "('[^']+'|[^.]+)(.*)" and
package = rawType.regexpCapture(regexp, 1).regexpReplaceAll("^'|'$", "") and
qualifiedName = rawType.regexpCapture(regexp, 2).regexpReplaceAll("^\\.", "")
)
}
/**
* Holds if models describing `package` may be relevant for the analysis of this database.
*/
@@ -42,10 +57,30 @@ predicate isPackageUsed(string package) {
any(DataFlow::SourceNode sn).hasUnderlyingType(package, _)
}
bindingset[type]
predicate isTypeUsed(string type) {
exists(string package |
parseTypeString(type, package, _) and
isPackageUsed(package)
)
}
/**
* Holds if `type` can be obtained from an instance of `otherType` due to
* language semantics modeled by `getExtraNodeFromType`.
*/
predicate hasImplicitTypeModel(string type, string otherType) { none() }
pragma[nomagic]
private predicate parseRelevantTypeString(string rawType, string package, string qualifiedName) {
isRelevantFullPath(rawType, _) and
parseTypeString(rawType, package, qualifiedName)
}
/** Holds if `global` is a global variable referenced via a the `global` package in a CSV row. */
private predicate isRelevantGlobal(string global) {
exists(AccessPath path, AccessPathToken token |
isRelevantFullPath("global", "", path) and
isRelevantFullPath("global", path) and
token = path.getToken(0) and
token.getName() = "Member" and
global = token.getAnArgument()
@@ -74,13 +109,12 @@ private API::Node getGlobalNode(string globalName) {
result = any(GlobalApiEntryPoint e | e.getGlobal() = globalName).getANode()
}
/** Gets a JavaScript-specific interpretation of the `(package, type, path)` tuple after resolving the first `n` access path tokens. */
bindingset[package, type, path]
API::Node getExtraNodeFromPath(string package, string type, AccessPath path, int n) {
/** Gets a JavaScript-specific interpretation of the `(type, path)` tuple after resolving the first `n` access path tokens. */
bindingset[type, path]
API::Node getExtraNodeFromPath(string type, AccessPath path, int n) {
// Global variable accesses is via the 'global' package
exists(AccessPathToken token |
package = getAPackageAlias("global") and
type = "" and
type = "global" and
token = path.getToken(0) and
token.getName() = "Member" and
result = getGlobalNode(token.getAnArgument()) and
@@ -89,12 +123,16 @@ API::Node getExtraNodeFromPath(string package, string type, AccessPath path, int
}
/** Gets a JavaScript-specific interpretation of the `(package, type)` tuple. */
API::Node getExtraNodeFromType(string package, string type) {
type = "" and
result = API::moduleImport(package)
or
// Access instance of a type based on type annotations
result = API::Internal::getANodeOfTypeRaw(getAPackageAlias(package), type)
API::Node getExtraNodeFromType(string type) {
exists(string package, string qualifiedName |
parseRelevantTypeString(type, package, qualifiedName)
|
qualifiedName = "" and
result = API::moduleImport(package)
or
// Access instance of a type based on type annotations
result = API::Internal::getANodeOfTypeRaw(package, qualifiedName)
)
}
/**
@@ -184,9 +222,9 @@ predicate invocationMatchesExtraCallSiteFilter(API::InvokeNode invoke, AccessPat
*/
pragma[nomagic]
private predicate relevantInputOutputPath(API::InvokeNode base, AccessPath inputOrOutput) {
exists(string package, string type, string input, string output, string path |
ModelOutput::relevantSummaryModel(package, type, path, input, output, _) and
ModelOutput::resolvedSummaryBase(package, type, path, base) and
exists(string type, string input, string output, string path |
ModelOutput::relevantSummaryModel(type, path, input, output, _) and
ModelOutput::resolvedSummaryBase(type, path, base) and
inputOrOutput = [input, output]
)
}
@@ -216,12 +254,9 @@ private API::Node getNodeFromInputOutputPath(API::InvokeNode baseNode, AccessPat
* Holds if a CSV summary contributed the step `pred -> succ` of the given `kind`.
*/
predicate summaryStep(API::Node pred, API::Node succ, string kind) {
exists(
string package, string type, string path, API::InvokeNode base, AccessPath input,
AccessPath output
|
ModelOutput::relevantSummaryModel(package, type, path, input, output, kind) and
ModelOutput::resolvedSummaryBase(package, type, path, base) and
exists(string type, string path, API::InvokeNode base, AccessPath input, AccessPath output |
ModelOutput::relevantSummaryModel(type, path, input, output, kind) and
ModelOutput::resolvedSummaryBase(type, path, base) and
pred = getNodeFromInputOutputPath(base, input) and
succ = getNodeFromInputOutputPath(base, output)
)
@@ -270,3 +305,17 @@ predicate isExtraValidTokenArgumentInIdentifyingAccessPath(string name, string a
exists(argument.indexOf("=")) and
exists(AccessPath::parseIntWithArity(argument.splitAt("=", 0), 10))
}
module ModelOutputSpecific {
/**
* Gets a node that should be seen as an instance of `package,type` due to a type definition
* contributed by a CSV model.
*/
cached
API::Node getATypeNode(string package, string qualifiedName) {
exists(string rawType |
result = ModelOutput::getATypeNode(rawType) and
parseTypeString(rawType, package, qualifiedName)
)
}
}

View File

@@ -0,0 +1,26 @@
extensions:
# Contribute empty data sets to avoid errors about an undefined extensionals
- addsTo:
pack: codeql/javascript-all
extensible: sourceModel
data: []
- addsTo:
pack: codeql/javascript-all
extensible: sinkModel
data: []
- addsTo:
pack: codeql/javascript-all
extensible: summaryModel
data: []
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data: []
- addsTo:
pack: codeql/javascript-all
extensible: typeVariableModel
data: []

View File

@@ -1,86 +0,0 @@
/** Generated model file */
private import javascript
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"minimongo/IndexedDb;IndexedDbCollection;minimongo/IndexedDb;IndexedDbCollectionStatic;Instance", //
"minimongo/IndexedDb;IndexedDbCollection;minimongo/lib/IndexedDb;default;Member[collections].AnyMember", //
"minimongo/MemoryDb;Collection;minimongo/MemoryDb;CollectionStatic;Instance", //
"minimongo/MemoryDb;Collection;minimongo/lib/MemoryDb;default;Member[collections].AnyMember", //
"minimongo/RemoteDb;Collection;minimongo/RemoteDb;CollectionStatic;Instance", //
"minimongo/RemoteDb;Collection;minimongo/lib/RemoteDb;default;Member[collections].AnyMember", //
"minimongo/ReplicatingDb;Collection;minimongo/ReplicatingDb;CollectionStatic;Instance", //
"minimongo/ReplicatingDb;Collection;minimongo/lib/ReplicatingDb;default;Member[collections].AnyMember", //
"minimongo/lib/HybridDb;default;minimongo/lib/HybridDb;defaultStatic;Instance", //
"minimongo/lib/HybridDb;defaultStatic;minimongo/lib/HybridDb;;Member[default]", //
"minimongo/lib/HybridDb;defaultStatic;minimongo;;Member[HybridDb]", //
"minimongo/lib/IndexedDb;default;minimongo/lib/IndexedDb;defaultStatic;Instance", //
"minimongo/lib/IndexedDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
"minimongo/lib/IndexedDb;defaultStatic;minimongo/lib/IndexedDb;;Member[default]", //
"minimongo/lib/IndexedDb;defaultStatic;minimongo;;Member[IndexedDb]", //
"minimongo/lib/LocalStorageDb;default;minimongo/lib/LocalStorageDb;defaultStatic;Instance", //
"minimongo/lib/LocalStorageDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo/lib/LocalStorageDb;;Member[default]", //
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo;;Member[LocalStorageDb]", //
"minimongo/lib/MemoryDb;default;minimongo/lib/MemoryDb;defaultStatic;Instance", //
"minimongo/lib/MemoryDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
"minimongo/lib/MemoryDb;defaultStatic;minimongo/lib/MemoryDb;;Member[default]", //
"minimongo/lib/MemoryDb;defaultStatic;minimongo;;Member[MemoryDb]", //
"minimongo/lib/RemoteDb;default;minimongo/lib/RemoteDb;defaultStatic;Instance", //
"minimongo/lib/RemoteDb;defaultStatic;minimongo/lib/RemoteDb;;Member[default]", //
"minimongo/lib/RemoteDb;defaultStatic;minimongo;;Member[RemoteDb]", //
"minimongo/lib/ReplicatingDb;default;minimongo/lib/ReplicatingDb;defaultStatic;Instance", //
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo/lib/ReplicatingDb;;Member[default]", //
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo;;Member[ReplicatingDb]", //
"minimongo/lib/WebSQLDb;default;minimongo/lib/WebSQLDb;defaultStatic;Instance", //
"minimongo/lib/WebSQLDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue", //
"minimongo/lib/WebSQLDb;defaultStatic;minimongo/lib/WebSQLDb;;Member[default]", //
"minimongo/lib/WebSQLDb;defaultStatic;minimongo;;Member[WebSQLDb]", //
"minimongo;HybridCollection;minimongo/lib/HybridDb;HybridCollection;", //
"minimongo;HybridCollection;minimongo/lib/HybridDb;default;Member[collections].AnyMember", //
"minimongo;HybridCollection;minimongo;HybridCollectionStatic;Instance", //
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;;Member[HybridCollection]", //
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;HybridCollectionStatic;", //
"minimongo;HybridCollectionStatic;minimongo;;Member[HybridCollection]", //
"minimongo;MinimongoBaseCollection;minimongo/RemoteDb;Collection;", //
"minimongo;MinimongoBaseCollection;minimongo/lib/types;MinimongoBaseCollection;", //
"minimongo;MinimongoBaseCollection;minimongo;HybridCollection;", //
"minimongo;MinimongoBaseCollection;minimongo;MinimongoCollection;", //
"minimongo;MinimongoBaseCollection;minimongo;MinimongoDb;AnyMember", //
"minimongo;MinimongoBaseCollection;minimongo;MinimongoLocalCollection;", //
"minimongo;MinimongoCollection;minimongo/lib/LocalStorageDb;default;Member[collections].AnyMember", //
"minimongo;MinimongoCollection;minimongo/lib/WebSQLDb;default;Member[collections].AnyMember", //
"minimongo;MinimongoCollection;minimongo/lib/types;MinimongoCollection;", //
"minimongo;MinimongoCollection;minimongo;HybridCollection;Member[remoteCol]", //
"minimongo;MinimongoCollection;minimongo;MinimongoDb;Member[collections].AnyMember", //
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;", //
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;Member[remoteDb]", //
"minimongo;MinimongoDb;minimongo/lib/LocalStorageDb;default;", //
"minimongo;MinimongoDb;minimongo/lib/MemoryDb;default;", //
"minimongo;MinimongoDb;minimongo/lib/RemoteDb;default;", //
"minimongo;MinimongoDb;minimongo/lib/ReplicatingDb;default;Member[masterDb,replicaDb]", //
"minimongo;MinimongoDb;minimongo/lib/WebSQLDb;default;", //
"minimongo;MinimongoDb;minimongo/lib/types;MinimongoDb;", //
"minimongo;MinimongoDb;minimongo;MinimongoDb;Member[remoteDb]", //
"minimongo;MinimongoDb;minimongo;MinimongoLocalDb;", //
"minimongo;MinimongoLocalCollection;minimongo/IndexedDb;IndexedDbCollection;", //
"minimongo;MinimongoLocalCollection;minimongo/MemoryDb;Collection;", //
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;", //
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;Member[masterCol,replicaCol]", //
"minimongo;MinimongoLocalCollection;minimongo/lib/types;MinimongoLocalCollection;", //
"minimongo;MinimongoLocalCollection;minimongo;HybridCollection;Member[localCol]", //
"minimongo;MinimongoLocalCollection;minimongo;MinimongoCollection;", //
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[addCollection].Argument[2].Argument[0]", //
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[collections].AnyMember", //
"minimongo;MinimongoLocalDb;minimongo/lib/HybridDb;default;Member[localDb]", //
"minimongo;MinimongoLocalDb;minimongo/lib/IndexedDb;default;", //
"minimongo;MinimongoLocalDb;minimongo/lib/ReplicatingDb;default;", //
"minimongo;MinimongoLocalDb;minimongo/lib/types;MinimongoLocalDb;", //
"minimongo;MinimongoLocalDb;minimongo;MinimongoDb;Member[localDb]", //
"mongodb;Collection;minimongo;MinimongoBaseCollection;", //
]
}
}

View File

@@ -6,87 +6,87 @@
"language": "javascript",
"model": {
"typeDefinitions": [
"mongodb;Collection;minimongo;MinimongoBaseCollection;",
"minimongo;MinimongoBaseCollection;minimongo;MinimongoDb;AnyMember"
"mongodb.Collection;minimongo.MinimongoBaseCollection;",
"minimongo.MinimongoBaseCollection;minimongo.MinimongoDb;AnyMember"
],
"sinks": []
},
"generatedModel": {
"//": "Autogenerated section. Manual edits in here will be lost.",
"typeDefinitions": [
"minimongo/IndexedDb;IndexedDbCollection;minimongo/IndexedDb;IndexedDbCollectionStatic;Instance",
"minimongo/IndexedDb;IndexedDbCollection;minimongo/lib/IndexedDb;default;Member[collections].AnyMember",
"minimongo/MemoryDb;Collection;minimongo/MemoryDb;CollectionStatic;Instance",
"minimongo/MemoryDb;Collection;minimongo/lib/MemoryDb;default;Member[collections].AnyMember",
"minimongo/RemoteDb;Collection;minimongo/RemoteDb;CollectionStatic;Instance",
"minimongo/RemoteDb;Collection;minimongo/lib/RemoteDb;default;Member[collections].AnyMember",
"minimongo/ReplicatingDb;Collection;minimongo/ReplicatingDb;CollectionStatic;Instance",
"minimongo/ReplicatingDb;Collection;minimongo/lib/ReplicatingDb;default;Member[collections].AnyMember",
"minimongo/lib/HybridDb;default;minimongo/lib/HybridDb;defaultStatic;Instance",
"minimongo/lib/HybridDb;defaultStatic;minimongo/lib/HybridDb;;Member[default]",
"minimongo/lib/HybridDb;defaultStatic;minimongo;;Member[HybridDb]",
"minimongo/lib/IndexedDb;default;minimongo/lib/IndexedDb;defaultStatic;Instance",
"minimongo/lib/IndexedDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/IndexedDb;defaultStatic;minimongo/lib/IndexedDb;;Member[default]",
"minimongo/lib/IndexedDb;defaultStatic;minimongo;;Member[IndexedDb]",
"minimongo/lib/LocalStorageDb;default;minimongo/lib/LocalStorageDb;defaultStatic;Instance",
"minimongo/lib/LocalStorageDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo/lib/LocalStorageDb;;Member[default]",
"minimongo/lib/LocalStorageDb;defaultStatic;minimongo;;Member[LocalStorageDb]",
"minimongo/lib/MemoryDb;default;minimongo/lib/MemoryDb;defaultStatic;Instance",
"minimongo/lib/MemoryDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/MemoryDb;defaultStatic;minimongo/lib/MemoryDb;;Member[default]",
"minimongo/lib/MemoryDb;defaultStatic;minimongo;;Member[MemoryDb]",
"minimongo/lib/RemoteDb;default;minimongo/lib/RemoteDb;defaultStatic;Instance",
"minimongo/lib/RemoteDb;defaultStatic;minimongo/lib/RemoteDb;;Member[default]",
"minimongo/lib/RemoteDb;defaultStatic;minimongo;;Member[RemoteDb]",
"minimongo/lib/ReplicatingDb;default;minimongo/lib/ReplicatingDb;defaultStatic;Instance",
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo/lib/ReplicatingDb;;Member[default]",
"minimongo/lib/ReplicatingDb;defaultStatic;minimongo;;Member[ReplicatingDb]",
"minimongo/lib/WebSQLDb;default;minimongo/lib/WebSQLDb;defaultStatic;Instance",
"minimongo/lib/WebSQLDb;default;minimongo;;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/WebSQLDb;defaultStatic;minimongo/lib/WebSQLDb;;Member[default]",
"minimongo/lib/WebSQLDb;defaultStatic;minimongo;;Member[WebSQLDb]",
"minimongo;HybridCollection;minimongo/lib/HybridDb;HybridCollection;",
"minimongo;HybridCollection;minimongo/lib/HybridDb;default;Member[collections].AnyMember",
"minimongo;HybridCollection;minimongo;HybridCollectionStatic;Instance",
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;;Member[HybridCollection]",
"minimongo;HybridCollectionStatic;minimongo/lib/HybridDb;HybridCollectionStatic;",
"minimongo;HybridCollectionStatic;minimongo;;Member[HybridCollection]",
"minimongo;MinimongoBaseCollection;minimongo/RemoteDb;Collection;",
"minimongo;MinimongoBaseCollection;minimongo/lib/types;MinimongoBaseCollection;",
"minimongo;MinimongoBaseCollection;minimongo;HybridCollection;",
"minimongo;MinimongoBaseCollection;minimongo;MinimongoCollection;",
"minimongo;MinimongoBaseCollection;minimongo;MinimongoLocalCollection;",
"minimongo;MinimongoCollection;minimongo/lib/LocalStorageDb;default;Member[collections].AnyMember",
"minimongo;MinimongoCollection;minimongo/lib/WebSQLDb;default;Member[collections].AnyMember",
"minimongo;MinimongoCollection;minimongo/lib/types;MinimongoCollection;",
"minimongo;MinimongoCollection;minimongo;HybridCollection;Member[remoteCol]",
"minimongo;MinimongoCollection;minimongo;MinimongoDb;Member[collections].AnyMember",
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;",
"minimongo;MinimongoDb;minimongo/lib/HybridDb;default;Member[remoteDb]",
"minimongo;MinimongoDb;minimongo/lib/LocalStorageDb;default;",
"minimongo;MinimongoDb;minimongo/lib/MemoryDb;default;",
"minimongo;MinimongoDb;minimongo/lib/RemoteDb;default;",
"minimongo;MinimongoDb;minimongo/lib/ReplicatingDb;default;Member[masterDb,replicaDb]",
"minimongo;MinimongoDb;minimongo/lib/WebSQLDb;default;",
"minimongo;MinimongoDb;minimongo/lib/types;MinimongoDb;",
"minimongo;MinimongoDb;minimongo;MinimongoDb;Member[remoteDb]",
"minimongo;MinimongoDb;minimongo;MinimongoLocalDb;",
"minimongo;MinimongoLocalCollection;minimongo/IndexedDb;IndexedDbCollection;",
"minimongo;MinimongoLocalCollection;minimongo/MemoryDb;Collection;",
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;",
"minimongo;MinimongoLocalCollection;minimongo/ReplicatingDb;Collection;Member[masterCol,replicaCol]",
"minimongo;MinimongoLocalCollection;minimongo/lib/types;MinimongoLocalCollection;",
"minimongo;MinimongoLocalCollection;minimongo;HybridCollection;Member[localCol]",
"minimongo;MinimongoLocalCollection;minimongo;MinimongoCollection;",
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[addCollection].Argument[2].Argument[0]",
"minimongo;MinimongoLocalCollection;minimongo;MinimongoLocalDb;Member[collections].AnyMember",
"minimongo;MinimongoLocalDb;minimongo/lib/HybridDb;default;Member[localDb]",
"minimongo;MinimongoLocalDb;minimongo/lib/IndexedDb;default;",
"minimongo;MinimongoLocalDb;minimongo/lib/ReplicatingDb;default;",
"minimongo;MinimongoLocalDb;minimongo/lib/types;MinimongoLocalDb;",
"minimongo;MinimongoLocalDb;minimongo;MinimongoDb;Member[localDb]"
"minimongo.HybridCollection;minimongo.HybridCollectionStatic;Instance",
"minimongo.HybridCollection;minimongo/lib/HybridDb.HybridCollection;",
"minimongo.HybridCollection;minimongo/lib/HybridDb.default;Member[collections].AnyMember",
"minimongo.HybridCollectionStatic;minimongo/lib/HybridDb.HybridCollectionStatic;",
"minimongo.HybridCollectionStatic;minimongo/lib/HybridDb;Member[HybridCollection]",
"minimongo.HybridCollectionStatic;minimongo;Member[HybridCollection]",
"minimongo.MinimongoBaseCollection;minimongo.HybridCollection;",
"minimongo.MinimongoBaseCollection;minimongo.MinimongoCollection;",
"minimongo.MinimongoBaseCollection;minimongo.MinimongoLocalCollection;",
"minimongo.MinimongoBaseCollection;minimongo/RemoteDb.Collection;",
"minimongo.MinimongoBaseCollection;minimongo/lib/types.MinimongoBaseCollection;",
"minimongo.MinimongoCollection;minimongo.HybridCollection;Member[remoteCol]",
"minimongo.MinimongoCollection;minimongo.MinimongoDb;Member[collections].AnyMember",
"minimongo.MinimongoCollection;minimongo/lib/LocalStorageDb.default;Member[collections].AnyMember",
"minimongo.MinimongoCollection;minimongo/lib/WebSQLDb.default;Member[collections].AnyMember",
"minimongo.MinimongoCollection;minimongo/lib/types.MinimongoCollection;",
"minimongo.MinimongoDb;minimongo.MinimongoDb;Member[remoteDb]",
"minimongo.MinimongoDb;minimongo.MinimongoLocalDb;",
"minimongo.MinimongoDb;minimongo/lib/HybridDb.default;",
"minimongo.MinimongoDb;minimongo/lib/HybridDb.default;Member[remoteDb]",
"minimongo.MinimongoDb;minimongo/lib/LocalStorageDb.default;",
"minimongo.MinimongoDb;minimongo/lib/MemoryDb.default;",
"minimongo.MinimongoDb;minimongo/lib/RemoteDb.default;",
"minimongo.MinimongoDb;minimongo/lib/ReplicatingDb.default;Member[masterDb,replicaDb]",
"minimongo.MinimongoDb;minimongo/lib/WebSQLDb.default;",
"minimongo.MinimongoDb;minimongo/lib/types.MinimongoDb;",
"minimongo.MinimongoLocalCollection;minimongo.HybridCollection;Member[localCol]",
"minimongo.MinimongoLocalCollection;minimongo.MinimongoCollection;",
"minimongo.MinimongoLocalCollection;minimongo.MinimongoLocalDb;Member[addCollection].Argument[2].Argument[0]",
"minimongo.MinimongoLocalCollection;minimongo.MinimongoLocalDb;Member[collections].AnyMember",
"minimongo.MinimongoLocalCollection;minimongo/IndexedDb.IndexedDbCollection;",
"minimongo.MinimongoLocalCollection;minimongo/MemoryDb.Collection;",
"minimongo.MinimongoLocalCollection;minimongo/ReplicatingDb.Collection;",
"minimongo.MinimongoLocalCollection;minimongo/ReplicatingDb.Collection;Member[masterCol,replicaCol]",
"minimongo.MinimongoLocalCollection;minimongo/lib/types.MinimongoLocalCollection;",
"minimongo.MinimongoLocalDb;minimongo.MinimongoDb;Member[localDb]",
"minimongo.MinimongoLocalDb;minimongo/lib/HybridDb.default;Member[localDb]",
"minimongo.MinimongoLocalDb;minimongo/lib/IndexedDb.default;",
"minimongo.MinimongoLocalDb;minimongo/lib/ReplicatingDb.default;",
"minimongo.MinimongoLocalDb;minimongo/lib/types.MinimongoLocalDb;",
"minimongo/IndexedDb.IndexedDbCollection;minimongo/IndexedDb.IndexedDbCollectionStatic;Instance",
"minimongo/IndexedDb.IndexedDbCollection;minimongo/lib/IndexedDb.default;Member[collections].AnyMember",
"minimongo/MemoryDb.Collection;minimongo/MemoryDb.CollectionStatic;Instance",
"minimongo/MemoryDb.Collection;minimongo/lib/MemoryDb.default;Member[collections].AnyMember",
"minimongo/RemoteDb.Collection;minimongo/RemoteDb.CollectionStatic;Instance",
"minimongo/RemoteDb.Collection;minimongo/lib/RemoteDb.default;Member[collections].AnyMember",
"minimongo/ReplicatingDb.Collection;minimongo/ReplicatingDb.CollectionStatic;Instance",
"minimongo/ReplicatingDb.Collection;minimongo/lib/ReplicatingDb.default;Member[collections].AnyMember",
"minimongo/lib/HybridDb.default;minimongo/lib/HybridDb.defaultStatic;Instance",
"minimongo/lib/HybridDb.defaultStatic;minimongo/lib/HybridDb;Member[default]",
"minimongo/lib/HybridDb.defaultStatic;minimongo;Member[HybridDb]",
"minimongo/lib/IndexedDb.default;minimongo/lib/IndexedDb.defaultStatic;Instance",
"minimongo/lib/IndexedDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/IndexedDb.defaultStatic;minimongo/lib/IndexedDb;Member[default]",
"minimongo/lib/IndexedDb.defaultStatic;minimongo;Member[IndexedDb]",
"minimongo/lib/LocalStorageDb.default;minimongo/lib/LocalStorageDb.defaultStatic;Instance",
"minimongo/lib/LocalStorageDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/LocalStorageDb.defaultStatic;minimongo/lib/LocalStorageDb;Member[default]",
"minimongo/lib/LocalStorageDb.defaultStatic;minimongo;Member[LocalStorageDb]",
"minimongo/lib/MemoryDb.default;minimongo/lib/MemoryDb.defaultStatic;Instance",
"minimongo/lib/MemoryDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/MemoryDb.defaultStatic;minimongo/lib/MemoryDb;Member[default]",
"minimongo/lib/MemoryDb.defaultStatic;minimongo;Member[MemoryDb]",
"minimongo/lib/RemoteDb.default;minimongo/lib/RemoteDb.defaultStatic;Instance",
"minimongo/lib/RemoteDb.defaultStatic;minimongo/lib/RemoteDb;Member[default]",
"minimongo/lib/RemoteDb.defaultStatic;minimongo;Member[RemoteDb]",
"minimongo/lib/ReplicatingDb.default;minimongo/lib/ReplicatingDb.defaultStatic;Instance",
"minimongo/lib/ReplicatingDb.defaultStatic;minimongo/lib/ReplicatingDb;Member[default]",
"minimongo/lib/ReplicatingDb.defaultStatic;minimongo;Member[ReplicatingDb]",
"minimongo/lib/WebSQLDb.default;minimongo/lib/WebSQLDb.defaultStatic;Instance",
"minimongo/lib/WebSQLDb.default;minimongo;Member[utils].Member[autoselectLocalDb].ReturnValue",
"minimongo/lib/WebSQLDb.defaultStatic;minimongo/lib/WebSQLDb;Member[default]",
"minimongo/lib/WebSQLDb.defaultStatic;minimongo;Member[WebSQLDb]"
],
"summaries": [],
"typeVariables": []

View File

@@ -0,0 +1,80 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- [minimongo.HybridCollection, minimongo.HybridCollectionStatic, Instance]
- [minimongo.HybridCollection, "minimongo/lib/HybridDb.HybridCollection", ""]
- [minimongo.HybridCollection, "minimongo/lib/HybridDb.default", "Member[collections].AnyMember"]
- [minimongo.HybridCollectionStatic, "minimongo/lib/HybridDb.HybridCollectionStatic", ""]
- [minimongo.HybridCollectionStatic, "minimongo/lib/HybridDb", "Member[HybridCollection]"]
- [minimongo.HybridCollectionStatic, minimongo, "Member[HybridCollection]"]
- [minimongo.MinimongoBaseCollection, minimongo.HybridCollection, ""]
- [minimongo.MinimongoBaseCollection, minimongo.MinimongoCollection, ""]
- [minimongo.MinimongoBaseCollection, minimongo.MinimongoDb, AnyMember]
- [minimongo.MinimongoBaseCollection, minimongo.MinimongoLocalCollection, ""]
- [minimongo.MinimongoBaseCollection, "minimongo/RemoteDb.Collection", ""]
- [minimongo.MinimongoBaseCollection, "minimongo/lib/types.MinimongoBaseCollection", ""]
- [minimongo.MinimongoCollection, minimongo.HybridCollection, "Member[remoteCol]"]
- [minimongo.MinimongoCollection, minimongo.MinimongoDb, "Member[collections].AnyMember"]
- [minimongo.MinimongoCollection, "minimongo/lib/LocalStorageDb.default", "Member[collections].AnyMember"]
- [minimongo.MinimongoCollection, "minimongo/lib/WebSQLDb.default", "Member[collections].AnyMember"]
- [minimongo.MinimongoCollection, "minimongo/lib/types.MinimongoCollection", ""]
- [minimongo.MinimongoDb, minimongo.MinimongoDb, "Member[remoteDb]"]
- [minimongo.MinimongoDb, minimongo.MinimongoLocalDb, ""]
- [minimongo.MinimongoDb, "minimongo/lib/HybridDb.default", ""]
- [minimongo.MinimongoDb, "minimongo/lib/HybridDb.default", "Member[remoteDb]"]
- [minimongo.MinimongoDb, "minimongo/lib/LocalStorageDb.default", ""]
- [minimongo.MinimongoDb, "minimongo/lib/MemoryDb.default", ""]
- [minimongo.MinimongoDb, "minimongo/lib/RemoteDb.default", ""]
- [minimongo.MinimongoDb, "minimongo/lib/ReplicatingDb.default", "Member[masterDb,replicaDb]"]
- [minimongo.MinimongoDb, "minimongo/lib/WebSQLDb.default", ""]
- [minimongo.MinimongoDb, "minimongo/lib/types.MinimongoDb", ""]
- [minimongo.MinimongoLocalCollection, minimongo.HybridCollection, "Member[localCol]"]
- [minimongo.MinimongoLocalCollection, minimongo.MinimongoCollection, ""]
- [minimongo.MinimongoLocalCollection, minimongo.MinimongoLocalDb, "Member[addCollection].Argument[2].Argument[0]"]
- [minimongo.MinimongoLocalCollection, minimongo.MinimongoLocalDb, "Member[collections].AnyMember"]
- [minimongo.MinimongoLocalCollection, "minimongo/IndexedDb.IndexedDbCollection", ""]
- [minimongo.MinimongoLocalCollection, "minimongo/MemoryDb.Collection", ""]
- [minimongo.MinimongoLocalCollection, "minimongo/ReplicatingDb.Collection", ""]
- [minimongo.MinimongoLocalCollection, "minimongo/ReplicatingDb.Collection", "Member[masterCol,replicaCol]"]
- [minimongo.MinimongoLocalCollection, "minimongo/lib/types.MinimongoLocalCollection", ""]
- [minimongo.MinimongoLocalDb, minimongo.MinimongoDb, "Member[localDb]"]
- [minimongo.MinimongoLocalDb, "minimongo/lib/HybridDb.default", "Member[localDb]"]
- [minimongo.MinimongoLocalDb, "minimongo/lib/IndexedDb.default", ""]
- [minimongo.MinimongoLocalDb, "minimongo/lib/ReplicatingDb.default", ""]
- [minimongo.MinimongoLocalDb, "minimongo/lib/types.MinimongoLocalDb", ""]
- ["minimongo/IndexedDb.IndexedDbCollection", "minimongo/IndexedDb.IndexedDbCollectionStatic", Instance]
- ["minimongo/IndexedDb.IndexedDbCollection", "minimongo/lib/IndexedDb.default", "Member[collections].AnyMember"]
- ["minimongo/MemoryDb.Collection", "minimongo/MemoryDb.CollectionStatic", Instance]
- ["minimongo/MemoryDb.Collection", "minimongo/lib/MemoryDb.default", "Member[collections].AnyMember"]
- ["minimongo/RemoteDb.Collection", "minimongo/RemoteDb.CollectionStatic", Instance]
- ["minimongo/RemoteDb.Collection", "minimongo/lib/RemoteDb.default", "Member[collections].AnyMember"]
- ["minimongo/ReplicatingDb.Collection", "minimongo/ReplicatingDb.CollectionStatic", Instance]
- ["minimongo/ReplicatingDb.Collection", "minimongo/lib/ReplicatingDb.default", "Member[collections].AnyMember"]
- ["minimongo/lib/HybridDb.default", "minimongo/lib/HybridDb.defaultStatic", Instance]
- ["minimongo/lib/HybridDb.defaultStatic", "minimongo/lib/HybridDb", "Member[default]"]
- ["minimongo/lib/HybridDb.defaultStatic", minimongo, "Member[HybridDb]"]
- ["minimongo/lib/IndexedDb.default", "minimongo/lib/IndexedDb.defaultStatic", Instance]
- ["minimongo/lib/IndexedDb.default", minimongo, "Member[utils].Member[autoselectLocalDb].ReturnValue"]
- ["minimongo/lib/IndexedDb.defaultStatic", "minimongo/lib/IndexedDb", "Member[default]"]
- ["minimongo/lib/IndexedDb.defaultStatic", minimongo, "Member[IndexedDb]"]
- ["minimongo/lib/LocalStorageDb.default", "minimongo/lib/LocalStorageDb.defaultStatic", Instance]
- ["minimongo/lib/LocalStorageDb.default", minimongo, "Member[utils].Member[autoselectLocalDb].ReturnValue"]
- ["minimongo/lib/LocalStorageDb.defaultStatic", "minimongo/lib/LocalStorageDb", "Member[default]"]
- ["minimongo/lib/LocalStorageDb.defaultStatic", minimongo, "Member[LocalStorageDb]"]
- ["minimongo/lib/MemoryDb.default", "minimongo/lib/MemoryDb.defaultStatic", Instance]
- ["minimongo/lib/MemoryDb.default", minimongo, "Member[utils].Member[autoselectLocalDb].ReturnValue"]
- ["minimongo/lib/MemoryDb.defaultStatic", "minimongo/lib/MemoryDb", "Member[default]"]
- ["minimongo/lib/MemoryDb.defaultStatic", minimongo, "Member[MemoryDb]"]
- ["minimongo/lib/RemoteDb.default", "minimongo/lib/RemoteDb.defaultStatic", Instance]
- ["minimongo/lib/RemoteDb.defaultStatic", "minimongo/lib/RemoteDb", "Member[default]"]
- ["minimongo/lib/RemoteDb.defaultStatic", minimongo, "Member[RemoteDb]"]
- ["minimongo/lib/ReplicatingDb.default", "minimongo/lib/ReplicatingDb.defaultStatic", Instance]
- ["minimongo/lib/ReplicatingDb.defaultStatic", "minimongo/lib/ReplicatingDb", "Member[default]"]
- ["minimongo/lib/ReplicatingDb.defaultStatic", minimongo, "Member[ReplicatingDb]"]
- ["minimongo/lib/WebSQLDb.default", "minimongo/lib/WebSQLDb.defaultStatic", Instance]
- ["minimongo/lib/WebSQLDb.default", minimongo, "Member[utils].Member[autoselectLocalDb].ReturnValue"]
- ["minimongo/lib/WebSQLDb.defaultStatic", "minimongo/lib/WebSQLDb", "Member[default]"]
- ["minimongo/lib/WebSQLDb.defaultStatic", minimongo, "Member[WebSQLDb]"]
- [mongodb.Collection, minimongo.MinimongoBaseCollection, ""]

View File

@@ -1,806 +0,0 @@
/** Generated model file */
private import javascript
private class Sinks extends ModelInput::SinkModelCsv {
override predicate row(string row) {
row =
[
"mongodb;Collection;Member[aggregate,count,countDocuments,deleteMany,deleteOne,find,findOne,findOneAndDelete,findOneAndReplace,remove,replaceOne,watch].Argument[0];mongodb.sink", //
"mongodb;Collection;Member[distinct].Argument[1];mongodb.sink", //
"mongodb;Collection;Member[findOneAndUpdate,update,updateMany,updateOne].Argument[0,1];mongodb.sink", //
"mongodb;Db;Member[aggregate,watch].Argument[0];mongodb.sink", //
"mongodb;DeleteManyModel;Member[filter];mongodb.sink", //
"mongodb;DeleteOneModel;Member[filter];mongodb.sink", //
"mongodb;MongoClient;Member[watch].Argument[0];mongodb.sink", //
"mongodb;UpdateManyModel;Member[filter,update];mongodb.sink", //
"mongodb;UpdateOneModel;Member[filter,update];mongodb.sink", //
"mongoose;CollectionBase;Member[findAndModify].Argument[0];mongodb.sink", //
"mongoose;Connection;Member[watch].Argument[0];mongodb.sink", //
"mongoose;Document;Member[update,updateOne].Argument[0];mongodb.sink", //
"mongoose;Model;Member[$where,aggregate,exists,find,findById,findByIdAndDelete,findByIdAndRemove,findOne,findOneAndDelete,findOneAndRemove,findOneAndReplace,geoSearch,remove,replaceOne,watch].Argument[0];mongodb.sink", //
"mongoose;Model;Member[count,where].WithArity[1,2].Argument[0];mongodb.sink", //
"mongoose;Model;Member[countDocuments].WithArity[1,2,3].Argument[0];mongodb.sink", //
"mongoose;Model;Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[0];mongodb.sink", //
"mongoose;Model;Member[distinct,where].Argument[1];mongodb.sink", //
"mongoose;Model;Member[findByIdAndUpdate,findOneAndUpdate,update,updateMany,updateOne].Argument[0,1];mongodb.sink", //
"mongoose;Model;Member[find].WithArity[1,2,3,4].Argument[0];mongodb.sink", //
"mongoose;Query;Member[$where,and,find,findByIdAndDelete,findOne,findOneAndDelete,findOneAndRemove,nor,or,remove,replaceOne,setUpdate].Argument[0];mongodb.sink", //
"mongoose;Query;Member[count,where].WithArity[1,2].Argument[0];mongodb.sink", //
"mongoose;Query;Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[0];mongodb.sink", //
"mongoose;Query;Member[distinct,where].Argument[1];mongodb.sink", //
"mongoose;Query;Member[findByIdAndUpdate,findOneAndUpdate,update,updateMany,updateOne].Argument[0,1];mongodb.sink", //
"mongoose;Query;Member[find].WithArity[1,2,3,4].Argument[0];mongodb.sink", //
"mongoose;QueryStatic;Argument[2];mongodb.sink", //
]
}
}
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"mongodb;;mongoose;;Member[mongodb]", //
"mongodb;AbstractCursor;mongodb;FindCursor;", //
"mongodb;AbstractCursor;mongodb;ListCollectionsCursor;", //
"mongodb;AbstractCursor;mongodb;ListIndexesCursor;", //
"mongodb;AbstractCursorOptions;mongodb/mongodb;AbstractCursorOptions;", //
"mongodb;AbstractCursorOptions;mongodb;AggregationCursorOptions;", //
"mongodb;AbstractCursorOptions;mongoose;mongodb.AbstractCursorOptions;", //
"mongodb;AddUserOptions;mongodb/mongodb;AddUserOptions;", //
"mongodb;AddUserOptions;mongodb;Admin;Member[addUser].Argument[1,2]", //
"mongodb;AddUserOptions;mongodb;Db;Member[addUser].Argument[1,2]", //
"mongodb;AddUserOptions;mongoose;mongodb.AddUserOptions;", //
"mongodb;Admin;mongodb/mongodb;Admin;", //
"mongodb;Admin;mongodb;AdminStatic;Instance", //
"mongodb;Admin;mongodb;Db;Member[admin].ReturnValue", //
"mongodb;Admin;mongoose;mongodb.Admin;", //
"mongodb;AdminStatic;mongodb/mongodb;AdminStatic;", //
"mongodb;AdminStatic;mongodb;;Member[Admin]", //
"mongodb;AdminStatic;mongoose;mongodb.AdminStatic;", //
"mongodb;AggregateOptions;mongodb/mongodb;AggregateOptions;", //
"mongodb;AggregateOptions;mongodb;AggregationCursorOptions;", //
"mongodb;AggregateOptions;mongodb;ChangeStreamOptions;", //
"mongodb;AggregateOptions;mongodb;Collection;Member[aggregate].Argument[1]", //
"mongodb;AggregateOptions;mongodb;CountDocumentsOptions;", //
"mongodb;AggregateOptions;mongodb;Db;Member[aggregate].Argument[1]", //
"mongodb;AggregateOptions;mongoose;mongodb.AggregateOptions;", //
"mongodb;AggregationCursorOptions;mongodb/mongodb;AggregationCursorOptions;", //
"mongodb;AggregationCursorOptions;mongoose;mongodb.AggregationCursorOptions;", //
"mongodb;AnyBulkWriteOperation;mongodb/mongodb;AnyBulkWriteOperation;", //
"mongodb;AnyBulkWriteOperation;mongodb;BulkOperationBase;Member[raw].Argument[0]", //
"mongodb;AnyBulkWriteOperation;mongodb;Collection;Member[bulkWrite].Argument[0].ArrayElement", //
"mongodb;AnyBulkWriteOperation;mongoose;mongodb.AnyBulkWriteOperation;", //
"mongodb;Auth;mongodb/mongodb;Auth;", //
"mongodb;Auth;mongodb;MongoClientOptions;Member[auth]", //
"mongodb;Auth;mongoose;mongodb.Auth;", //
"mongodb;AutoEncrypter;mongodb/mongodb;AutoEncrypter;", //
"mongodb;AutoEncrypter;mongodb;AutoEncrypter;Instance", //
"mongodb;AutoEncrypter;mongodb;ConnectionOptions;Member[autoEncrypter]", //
"mongodb;AutoEncrypter;mongodb;MongoClient;Member[autoEncrypter]", //
"mongodb;AutoEncrypter;mongodb;MongoOptions;Member[autoEncrypter]", //
"mongodb;AutoEncrypter;mongoose;mongodb.AutoEncrypter;", //
"mongodb;AutoEncryptionOptions;mongodb/mongodb;AutoEncryptionOptions;", //
"mongodb;AutoEncryptionOptions;mongodb;AutoEncrypter;Argument[1]", //
"mongodb;AutoEncryptionOptions;mongodb;MongoClientOptions;Member[autoEncryption]", //
"mongodb;AutoEncryptionOptions;mongoose;mongodb.AutoEncryptionOptions;", //
"mongodb;BulkOperationBase;mongodb/mongodb;BulkOperationBase;", //
"mongodb;BulkOperationBase;mongodb;BulkOperationBase;Member[addToOperationsList,insert,raw].ReturnValue", //
"mongodb;BulkOperationBase;mongodb;BulkOperationBaseStatic;Instance", //
"mongodb;BulkOperationBase;mongodb;FindOperators;Member[bulkOperation]", //
"mongodb;BulkOperationBase;mongodb;FindOperators;Member[delete,deleteOne,replaceOne,update,updateOne].ReturnValue", //
"mongodb;BulkOperationBase;mongodb;OrderedBulkOperation;", //
"mongodb;BulkOperationBase;mongodb;UnorderedBulkOperation;", //
"mongodb;BulkOperationBase;mongoose;mongodb.BulkOperationBase;", //
"mongodb;BulkOperationBaseStatic;mongodb/mongodb;BulkOperationBaseStatic;", //
"mongodb;BulkOperationBaseStatic;mongodb;;Member[BulkOperationBase]", //
"mongodb;BulkOperationBaseStatic;mongoose;mongodb.BulkOperationBaseStatic;", //
"mongodb;BulkWriteOptions;mongodb/mongodb;BulkWriteOptions;", //
"mongodb;BulkWriteOptions;mongodb;BulkOperationBase;Member[execute].WithArity[0,1,2].Argument[0]", //
"mongodb;BulkWriteOptions;mongodb;Collection;Member[bulkWrite,insert,insertMany].Argument[1]", //
"mongodb;BulkWriteOptions;mongodb;Collection;Member[initializeOrderedBulkOp,initializeUnorderedBulkOp].Argument[0]", //
"mongodb;BulkWriteOptions;mongodb;OrderedBulkOperationStatic;Argument[1]", //
"mongodb;BulkWriteOptions;mongodb;UnorderedBulkOperationStatic;Argument[1]", //
"mongodb;BulkWriteOptions;mongoose;mongodb.BulkWriteOptions;", //
"mongodb;ChangeStream;mongodb/mongodb;ChangeStream;", //
"mongodb;ChangeStream;mongodb;ChangeStreamStatic;Instance", //
"mongodb;ChangeStream;mongodb;Collection;Member[watch].ReturnValue", //
"mongodb;ChangeStream;mongodb;Db;Member[watch].ReturnValue", //
"mongodb;ChangeStream;mongodb;MongoClient;Member[watch].ReturnValue", //
"mongodb;ChangeStream;mongoose;mongodb.ChangeStream;", //
"mongodb;ChangeStreamOptions;mongodb/mongodb;ChangeStreamOptions;", //
"mongodb;ChangeStreamOptions;mongodb;ChangeStream;Member[options]", //
"mongodb;ChangeStreamOptions;mongodb;Collection;Member[watch].Argument[1]", //
"mongodb;ChangeStreamOptions;mongodb;Db;Member[watch].Argument[1]", //
"mongodb;ChangeStreamOptions;mongodb;MongoClient;Member[watch].Argument[1]", //
"mongodb;ChangeStreamOptions;mongoose;mongodb.ChangeStreamOptions;", //
"mongodb;ChangeStreamStatic;mongodb/mongodb;ChangeStreamStatic;", //
"mongodb;ChangeStreamStatic;mongodb;;Member[ChangeStream]", //
"mongodb;ChangeStreamStatic;mongoose;mongodb.ChangeStreamStatic;", //
"mongodb;ClientSession;mongodb/mongodb;ClientSession;", //
"mongodb;ClientSession;mongodb;AbstractCursorOptions;Member[session]", //
"mongodb;ClientSession;mongodb;ClientSession;Member[equals].Argument[0]", //
"mongodb;ClientSession;mongodb;ClientSessionEvents;Member[ended].Argument[0]", //
"mongodb;ClientSession;mongodb;ClientSessionStatic;Instance", //
"mongodb;ClientSession;mongodb;IndexInformationOptions;Member[session]", //
"mongodb;ClientSession;mongodb;MongoClient;Member[startSession].ReturnValue", //
"mongodb;ClientSession;mongodb;OperationOptions;Member[session]", //
"mongodb;ClientSession;mongodb;ReadPreferenceFromOptions;Member[session]", //
"mongodb;ClientSession;mongodb;SelectServerOptions;Member[session]", //
"mongodb;ClientSession;mongodb;WithSessionCallback;Argument[0]", //
"mongodb;ClientSession;mongodb;WithTransactionCallback;Argument[0]", //
"mongodb;ClientSession;mongoose;mongodb.ClientSession;", //
"mongodb;ClientSessionEvents;mongodb/mongodb;ClientSessionEvents;", //
"mongodb;ClientSessionEvents;mongoose;mongodb.ClientSessionEvents;", //
"mongodb;ClientSessionOptions;mongodb/mongodb;ClientSessionOptions;", //
"mongodb;ClientSessionOptions;mongodb;MongoClient;Member[startSession].Argument[0]", //
"mongodb;ClientSessionOptions;mongodb;MongoClient;Member[withSession].WithArity[2].Argument[0]", //
"mongodb;ClientSessionOptions;mongoose;mongodb.ClientSessionOptions;", //
"mongodb;ClientSessionStatic;mongodb/mongodb;ClientSessionStatic;", //
"mongodb;ClientSessionStatic;mongodb;;Member[ClientSession]", //
"mongodb;ClientSessionStatic;mongoose;mongodb.ClientSessionStatic;", //
"mongodb;CollStatsOptions;mongodb/mongodb;CollStatsOptions;", //
"mongodb;CollStatsOptions;mongodb;Collection;Member[stats].Argument[0]", //
"mongodb;CollStatsOptions;mongoose;mongodb.CollStatsOptions;", //
"mongodb;Collection;mongodb/mongodb;Collection;", //
"mongodb;Collection;mongodb;ChangeStream;Member[parent]", //
"mongodb;Collection;mongodb;Collection;Member[rename].Argument[1,2].TypeVar[mongodb.Callback.0]", //
"mongodb;Collection;mongodb;Collection;Member[rename].WithArity[1,2].ReturnValue.Awaited", //
"mongodb;Collection;mongodb;CollectionStatic;Instance", //
"mongodb;Collection;mongodb;Db;Member[collection].ReturnValue", //
"mongodb;Collection;mongodb;Db;Member[collections].Argument[0,1].TypeVar[mongodb.Callback.0].ArrayElement", //
"mongodb;Collection;mongodb;Db;Member[collections].WithArity[0,1].ReturnValue.Awaited.ArrayElement", //
"mongodb;Collection;mongodb;Db;Member[createCollection].Argument[2].TypeVar[mongodb.Callback.0]", //
"mongodb;Collection;mongodb;Db;Member[createCollection].WithArity[1,2].ReturnValue.Awaited", //
"mongodb;Collection;mongodb;Db;Member[createCollection].WithArity[2].Argument[1].TypeVar[mongodb.Callback.0]", //
"mongodb;Collection;mongodb;Db;Member[renameCollection].Argument[2,3].TypeVar[mongodb.Callback.0]", //
"mongodb;Collection;mongodb;Db;Member[renameCollection].WithArity[2,3].ReturnValue.Awaited", //
"mongodb;Collection;mongodb;GridFSBucketWriteStream;Member[chunks,files]", //
"mongodb;Collection;mongodb;ListIndexesCursor;Member[parent]", //
"mongodb;Collection;mongodb;ListIndexesCursorStatic;Argument[0]", //
"mongodb;Collection;mongodb;OrderedBulkOperationStatic;Argument[0]", //
"mongodb;Collection;mongodb;UnorderedBulkOperationStatic;Argument[0]", //
"mongodb;Collection;mongoose;mongodb.Collection;", //
"mongodb;CollectionStatic;mongodb/mongodb;CollectionStatic;", //
"mongodb;CollectionStatic;mongodb;;Member[Collection]", //
"mongodb;CollectionStatic;mongoose;mongodb.CollectionStatic;", //
"mongodb;CommandOperationOptions;mongodb/mongodb;CommandOperationOptions;", //
"mongodb;CommandOperationOptions;mongodb;AddUserOptions;", //
"mongodb;CommandOperationOptions;mongodb;Admin;Member[buildInfo,ping,replSetGetStatus,serverInfo,serverStatus].Argument[0]", //
"mongodb;CommandOperationOptions;mongodb;AggregateOptions;", //
"mongodb;CommandOperationOptions;mongodb;BulkWriteOptions;", //
"mongodb;CommandOperationOptions;mongodb;CollStatsOptions;", //
"mongodb;CommandOperationOptions;mongodb;CountOptions;", //
"mongodb;CommandOperationOptions;mongodb;CreateCollectionOptions;", //
"mongodb;CommandOperationOptions;mongodb;CreateIndexesOptions;", //
"mongodb;CommandOperationOptions;mongodb;DbStatsOptions;", //
"mongodb;CommandOperationOptions;mongodb;DeleteOptions;", //
"mongodb;CommandOperationOptions;mongodb;DistinctOptions;", //
"mongodb;CommandOperationOptions;mongodb;DropCollectionOptions;", //
"mongodb;CommandOperationOptions;mongodb;DropDatabaseOptions;", //
"mongodb;CommandOperationOptions;mongodb;DropIndexesOptions;", //
"mongodb;CommandOperationOptions;mongodb;EstimatedDocumentCountOptions;", //
"mongodb;CommandOperationOptions;mongodb;EvalOptions;", //
"mongodb;CommandOperationOptions;mongodb;FindOneAndDeleteOptions;", //
"mongodb;CommandOperationOptions;mongodb;FindOneAndReplaceOptions;", //
"mongodb;CommandOperationOptions;mongodb;FindOneAndUpdateOptions;", //
"mongodb;CommandOperationOptions;mongodb;FindOptions;", //
"mongodb;CommandOperationOptions;mongodb;InsertOneOptions;", //
"mongodb;CommandOperationOptions;mongodb;ListCollectionsOptions;", //
"mongodb;CommandOperationOptions;mongodb;ListDatabasesOptions;", //
"mongodb;CommandOperationOptions;mongodb;ListIndexesOptions;", //
"mongodb;CommandOperationOptions;mongodb;MapReduceOptions;", //
"mongodb;CommandOperationOptions;mongodb;ProfilingLevelOptions;", //
"mongodb;CommandOperationOptions;mongodb;RemoveUserOptions;", //
"mongodb;CommandOperationOptions;mongodb;RenameOptions;", //
"mongodb;CommandOperationOptions;mongodb;ReplaceOptions;", //
"mongodb;CommandOperationOptions;mongodb;RunCommandOptions;", //
"mongodb;CommandOperationOptions;mongodb;SetProfilingLevelOptions;", //
"mongodb;CommandOperationOptions;mongodb;TransactionOptions;", //
"mongodb;CommandOperationOptions;mongodb;UpdateOptions;", //
"mongodb;CommandOperationOptions;mongodb;ValidateCollectionOptions;", //
"mongodb;CommandOperationOptions;mongoose;mongodb.CommandOperationOptions;", //
"mongodb;ConnectionOptions;mongodb/mongodb;ConnectionOptions;", //
"mongodb;ConnectionOptions;mongoose;mongodb.ConnectionOptions;", //
"mongodb;CountDocumentsOptions;mongodb/mongodb;CountDocumentsOptions;", //
"mongodb;CountDocumentsOptions;mongodb;Collection;Member[countDocuments].Argument[1]", //
"mongodb;CountDocumentsOptions;mongoose;mongodb.CountDocumentsOptions;", //
"mongodb;CountOptions;mongodb/mongodb;CountOptions;", //
"mongodb;CountOptions;mongodb;Collection;Member[count].Argument[1]", //
"mongodb;CountOptions;mongodb;FindCursor;Member[count].Argument[0]", //
"mongodb;CountOptions;mongoose;mongodb.CountOptions;", //
"mongodb;CreateCollectionOptions;mongodb/mongodb;CreateCollectionOptions;", //
"mongodb;CreateCollectionOptions;mongodb;Db;Member[createCollection].WithArity[1,2,3].Argument[1]", //
"mongodb;CreateCollectionOptions;mongoose;mongodb.CreateCollectionOptions;", //
"mongodb;CreateIndexesOptions;mongodb/mongodb;CreateIndexesOptions;", //
"mongodb;CreateIndexesOptions;mongodb;Collection;Member[createIndex,createIndexes].Argument[1]", //
"mongodb;CreateIndexesOptions;mongodb;Db;Member[createIndex].Argument[2]", //
"mongodb;CreateIndexesOptions;mongoose;mongodb.CreateIndexesOptions;", //
"mongodb;Db;mongodb/mongodb;Db;", //
"mongodb;Db;mongodb;ChangeStream;Member[parent]", //
"mongodb;Db;mongodb;DbStatic;Instance", //
"mongodb;Db;mongodb;GridFSBucketStatic;Argument[0]", //
"mongodb;Db;mongodb;ListCollectionsCursor;Member[parent]", //
"mongodb;Db;mongodb;ListCollectionsCursorStatic;Argument[0]", //
"mongodb;Db;mongodb;MongoClient;Member[db].ReturnValue", //
"mongodb;Db;mongoose;mongodb.Db;", //
"mongodb;DbStatic;mongodb/mongodb;DbStatic;", //
"mongodb;DbStatic;mongodb;;Member[Db]", //
"mongodb;DbStatic;mongoose;mongodb.DbStatic;", //
"mongodb;DbStatsOptions;mongodb/mongodb;DbStatsOptions;", //
"mongodb;DbStatsOptions;mongodb;Db;Member[stats].Argument[0]", //
"mongodb;DbStatsOptions;mongoose;mongodb.DbStatsOptions;", //
"mongodb;DeleteManyModel;mongodb/mongodb;DeleteManyModel;", //
"mongodb;DeleteManyModel;mongodb;AnyBulkWriteOperation;Member[deleteMany]", //
"mongodb;DeleteManyModel;mongoose;mongodb.DeleteManyModel;", //
"mongodb;DeleteOneModel;mongodb/mongodb;DeleteOneModel;", //
"mongodb;DeleteOneModel;mongodb;AnyBulkWriteOperation;Member[deleteOne]", //
"mongodb;DeleteOneModel;mongoose;mongodb.DeleteOneModel;", //
"mongodb;DeleteOptions;mongodb/mongodb;DeleteOptions;", //
"mongodb;DeleteOptions;mongodb;Collection;Member[deleteMany,deleteOne,remove].Argument[1]", //
"mongodb;DeleteOptions;mongoose;mongodb.DeleteOptions;", //
"mongodb;DistinctOptions;mongodb/mongodb;DistinctOptions;", //
"mongodb;DistinctOptions;mongodb;Collection;Member[distinct].Argument[2]", //
"mongodb;DistinctOptions;mongoose;mongodb.DistinctOptions;", //
"mongodb;DropCollectionOptions;mongodb/mongodb;DropCollectionOptions;", //
"mongodb;DropCollectionOptions;mongodb;Collection;Member[drop].Argument[0]", //
"mongodb;DropCollectionOptions;mongodb;Db;Member[dropCollection].Argument[1]", //
"mongodb;DropCollectionOptions;mongoose;mongodb.DropCollectionOptions;", //
"mongodb;DropDatabaseOptions;mongodb/mongodb;DropDatabaseOptions;", //
"mongodb;DropDatabaseOptions;mongodb;Db;Member[dropDatabase].Argument[0]", //
"mongodb;DropDatabaseOptions;mongoose;mongodb.DropDatabaseOptions;", //
"mongodb;DropIndexesOptions;mongodb/mongodb;DropIndexesOptions;", //
"mongodb;DropIndexesOptions;mongodb;Collection;Member[dropIndex].Argument[1]", //
"mongodb;DropIndexesOptions;mongodb;Collection;Member[dropIndexes].Argument[0]", //
"mongodb;DropIndexesOptions;mongoose;mongodb.DropIndexesOptions;", //
"mongodb;EstimatedDocumentCountOptions;mongodb/mongodb;EstimatedDocumentCountOptions;", //
"mongodb;EstimatedDocumentCountOptions;mongodb;Collection;Member[estimatedDocumentCount].Argument[0]", //
"mongodb;EstimatedDocumentCountOptions;mongoose;mongodb.EstimatedDocumentCountOptions;", //
"mongodb;EvalOptions;mongodb/mongodb;EvalOptions;", //
"mongodb;EvalOptions;mongoose;mongodb.EvalOptions;", //
"mongodb;FindCursor;mongodb/mongodb;FindCursor;", //
"mongodb;FindCursor;mongodb;Collection;Member[find].WithArity[0,1,2].ReturnValue", //
"mongodb;FindCursor;mongodb;FindCursor;Member[addQueryModifier,allowDiskUse,clone,collation,comment,filter,hint,limit,map,max,maxAwaitTimeMS,maxTimeMS,min,project,returnKey,showRecordId,skip,sort].ReturnValue", //
"mongodb;FindCursor;mongodb;FindCursorStatic;Instance", //
"mongodb;FindCursor;mongodb;GridFSBucket;Member[find].ReturnValue", //
"mongodb;FindCursor;mongoose;mongodb.FindCursor;", //
"mongodb;FindCursorStatic;mongodb/mongodb;FindCursorStatic;", //
"mongodb;FindCursorStatic;mongodb;;Member[FindCursor]", //
"mongodb;FindCursorStatic;mongoose;mongodb.FindCursorStatic;", //
"mongodb;FindOneAndDeleteOptions;mongodb/mongodb;FindOneAndDeleteOptions;", //
"mongodb;FindOneAndDeleteOptions;mongodb;Collection;Member[findOneAndDelete].Argument[1]", //
"mongodb;FindOneAndDeleteOptions;mongoose;mongodb.FindOneAndDeleteOptions;", //
"mongodb;FindOneAndReplaceOptions;mongodb/mongodb;FindOneAndReplaceOptions;", //
"mongodb;FindOneAndReplaceOptions;mongodb;Collection;Member[findOneAndReplace].Argument[2]", //
"mongodb;FindOneAndReplaceOptions;mongoose;mongodb.FindOneAndReplaceOptions;", //
"mongodb;FindOneAndUpdateOptions;mongodb/mongodb;FindOneAndUpdateOptions;", //
"mongodb;FindOneAndUpdateOptions;mongodb;Collection;Member[findOneAndUpdate].Argument[2]", //
"mongodb;FindOneAndUpdateOptions;mongoose;mongodb.FindOneAndUpdateOptions;", //
"mongodb;FindOperators;mongodb/mongodb;FindOperators;", //
"mongodb;FindOperators;mongodb;BulkOperationBase;Member[find].ReturnValue", //
"mongodb;FindOperators;mongodb;FindOperators;Member[arrayFilters,collation,upsert].ReturnValue", //
"mongodb;FindOperators;mongodb;FindOperatorsStatic;Instance", //
"mongodb;FindOperators;mongoose;mongodb.FindOperators;", //
"mongodb;FindOperatorsStatic;mongodb/mongodb;FindOperatorsStatic;", //
"mongodb;FindOperatorsStatic;mongodb;;Member[FindOperators]", //
"mongodb;FindOperatorsStatic;mongoose;mongodb.FindOperatorsStatic;", //
"mongodb;FindOptions;mongodb/mongodb;FindOptions;", //
"mongodb;FindOptions;mongodb;Collection;Member[find,findOne].Argument[1]", //
"mongodb;FindOptions;mongodb;GridFSBucket;Member[find].Argument[1]", //
"mongodb;FindOptions;mongoose;mongodb.FindOptions;", //
"mongodb;GridFSBucket;mongodb/mongodb;GridFSBucket;", //
"mongodb;GridFSBucket;mongodb;GridFSBucketStatic;Instance", //
"mongodb;GridFSBucket;mongodb;GridFSBucketWriteStream;Member[bucket]", //
"mongodb;GridFSBucket;mongoose;mongodb.GridFSBucket;", //
"mongodb;GridFSBucketStatic;mongodb/mongodb;GridFSBucketStatic;", //
"mongodb;GridFSBucketStatic;mongodb;;Member[GridFSBucket]", //
"mongodb;GridFSBucketStatic;mongoose;mongodb.GridFSBucketStatic;", //
"mongodb;GridFSBucketWriteStream;mongodb/mongodb;GridFSBucketWriteStream;", //
"mongodb;GridFSBucketWriteStream;mongodb;GridFSBucket;Member[openUploadStream,openUploadStreamWithId].ReturnValue", //
"mongodb;GridFSBucketWriteStream;mongodb;GridFSBucketWriteStream;Member[end].ReturnValue", //
"mongodb;GridFSBucketWriteStream;mongodb;GridFSBucketWriteStreamStatic;Instance", //
"mongodb;GridFSBucketWriteStream;mongoose;mongodb.GridFSBucketWriteStream;", //
"mongodb;GridFSBucketWriteStreamStatic;mongodb/mongodb;GridFSBucketWriteStreamStatic;", //
"mongodb;GridFSBucketWriteStreamStatic;mongodb;;Member[GridFSBucketWriteStream]", //
"mongodb;GridFSBucketWriteStreamStatic;mongoose;mongodb.GridFSBucketWriteStreamStatic;", //
"mongodb;IndexInformationOptions;mongodb/mongodb;IndexInformationOptions;", //
"mongodb;IndexInformationOptions;mongodb;Collection;Member[indexExists].Argument[1]", //
"mongodb;IndexInformationOptions;mongodb;Collection;Member[indexInformation,indexes].Argument[0]", //
"mongodb;IndexInformationOptions;mongodb;Db;Member[indexInformation].Argument[1]", //
"mongodb;IndexInformationOptions;mongoose;mongodb.IndexInformationOptions;", //
"mongodb;InsertOneOptions;mongodb/mongodb;InsertOneOptions;", //
"mongodb;InsertOneOptions;mongodb;Collection;Member[insertOne].Argument[1]", //
"mongodb;InsertOneOptions;mongoose;mongodb.InsertOneOptions;", //
"mongodb;ListCollectionsCursor;mongodb/mongodb;ListCollectionsCursor;", //
"mongodb;ListCollectionsCursor;mongodb;Db;Member[listCollections].WithArity[0,1,2].ReturnValue", //
"mongodb;ListCollectionsCursor;mongodb;ListCollectionsCursor;Member[clone].ReturnValue", //
"mongodb;ListCollectionsCursor;mongodb;ListCollectionsCursorStatic;Instance", //
"mongodb;ListCollectionsCursor;mongoose;mongodb.ListCollectionsCursor;", //
"mongodb;ListCollectionsCursorStatic;mongodb/mongodb;ListCollectionsCursorStatic;", //
"mongodb;ListCollectionsCursorStatic;mongodb;;Member[ListCollectionsCursor]", //
"mongodb;ListCollectionsCursorStatic;mongoose;mongodb.ListCollectionsCursorStatic;", //
"mongodb;ListCollectionsOptions;mongodb/mongodb;ListCollectionsOptions;", //
"mongodb;ListCollectionsOptions;mongodb;Db;Member[collections].Argument[0]", //
"mongodb;ListCollectionsOptions;mongodb;Db;Member[listCollections].WithArity[0,1,2].Argument[1]", //
"mongodb;ListCollectionsOptions;mongodb;ListCollectionsCursor;Member[options]", //
"mongodb;ListCollectionsOptions;mongodb;ListCollectionsCursorStatic;Argument[2]", //
"mongodb;ListCollectionsOptions;mongoose;mongodb.ListCollectionsOptions;", //
"mongodb;ListDatabasesOptions;mongodb/mongodb;ListDatabasesOptions;", //
"mongodb;ListDatabasesOptions;mongodb;Admin;Member[listDatabases].Argument[0]", //
"mongodb;ListDatabasesOptions;mongoose;mongodb.ListDatabasesOptions;", //
"mongodb;ListIndexesCursor;mongodb/mongodb;ListIndexesCursor;", //
"mongodb;ListIndexesCursor;mongodb;Collection;Member[listIndexes].ReturnValue", //
"mongodb;ListIndexesCursor;mongodb;ListIndexesCursor;Member[clone].ReturnValue", //
"mongodb;ListIndexesCursor;mongodb;ListIndexesCursorStatic;Instance", //
"mongodb;ListIndexesCursor;mongoose;mongodb.ListIndexesCursor;", //
"mongodb;ListIndexesCursorStatic;mongodb/mongodb;ListIndexesCursorStatic;", //
"mongodb;ListIndexesCursorStatic;mongodb;;Member[ListIndexesCursor]", //
"mongodb;ListIndexesCursorStatic;mongoose;mongodb.ListIndexesCursorStatic;", //
"mongodb;ListIndexesOptions;mongodb/mongodb;ListIndexesOptions;", //
"mongodb;ListIndexesOptions;mongodb;Collection;Member[listIndexes].Argument[0]", //
"mongodb;ListIndexesOptions;mongodb;ListIndexesCursor;Member[options]", //
"mongodb;ListIndexesOptions;mongodb;ListIndexesCursorStatic;Argument[1]", //
"mongodb;ListIndexesOptions;mongoose;mongodb.ListIndexesOptions;", //
"mongodb;MapReduceOptions;mongodb/mongodb;MapReduceOptions;", //
"mongodb;MapReduceOptions;mongodb;Collection;Member[mapReduce].Argument[2]", //
"mongodb;MapReduceOptions;mongoose;mongodb.MapReduceOptions;", //
"mongodb;MongoClient;mongodb/mongodb;MongoClient;", //
"mongodb;MongoClient;mongodb;AutoEncrypter;Argument[0]", //
"mongodb;MongoClient;mongodb;AutoEncryptionOptions;Member[keyVaultClient]", //
"mongodb;MongoClient;mongodb;ChangeStream;Member[parent]", //
"mongodb;MongoClient;mongodb;DbStatic;Argument[0]", //
"mongodb;MongoClient;mongodb;MongoClient;Member[connect].Argument[0].TypeVar[mongodb.Callback.0]", //
"mongodb;MongoClient;mongodb;MongoClient;Member[connect].WithArity[0].ReturnValue.Awaited", //
"mongodb;MongoClient;mongodb;MongoClientEvents;Member[open].Argument[0]", //
"mongodb;MongoClient;mongodb;MongoClientStatic;Instance", //
"mongodb;MongoClient;mongodb;MongoClientStatic;Member[connect].Argument[1,2].TypeVar[mongodb.Callback.0]", //
"mongodb;MongoClient;mongodb;MongoClientStatic;Member[connect].WithArity[1,2].ReturnValue.Awaited", //
"mongodb;MongoClient;mongoose;mongodb.MongoClient;", //
"mongodb;MongoClientEvents;mongodb/mongodb;MongoClientEvents;", //
"mongodb;MongoClientEvents;mongoose;mongodb.MongoClientEvents;", //
"mongodb;MongoClientOptions;mongodb/mongodb;MongoClientOptions;", //
"mongodb;MongoClientOptions;mongodb;MongoClientStatic;Argument[1]", //
"mongodb;MongoClientOptions;mongodb;MongoClientStatic;Member[connect].Argument[1]", //
"mongodb;MongoClientOptions;mongoose;mongodb.MongoClientOptions;", //
"mongodb;MongoClientStatic;mongodb/mongodb;MongoClientStatic;", //
"mongodb;MongoClientStatic;mongodb;;Member[MongoClient]", //
"mongodb;MongoClientStatic;mongoose;mongodb.MongoClientStatic;", //
"mongodb;MongoOptions;mongodb/mongodb;MongoOptions;", //
"mongodb;MongoOptions;mongodb;ClientSession;Member[clientOptions]", //
"mongodb;MongoOptions;mongodb;MongoClient;Member[options]", //
"mongodb;MongoOptions;mongoose;mongodb.MongoOptions;", //
"mongodb;OperationOptions;mongodb/mongodb;OperationOptions;", //
"mongodb;OperationOptions;mongodb;Collection;Member[isCapped,options].Argument[0]", //
"mongodb;OperationOptions;mongodb;CommandOperationOptions;", //
"mongodb;OperationOptions;mongoose;mongodb.OperationOptions;", //
"mongodb;OrderedBulkOperation;mongodb/mongodb;OrderedBulkOperation;", //
"mongodb;OrderedBulkOperation;mongodb;Collection;Member[initializeOrderedBulkOp].ReturnValue", //
"mongodb;OrderedBulkOperation;mongodb;OrderedBulkOperation;Member[addToOperationsList].ReturnValue", //
"mongodb;OrderedBulkOperation;mongodb;OrderedBulkOperationStatic;Instance", //
"mongodb;OrderedBulkOperation;mongoose;mongodb.OrderedBulkOperation;", //
"mongodb;OrderedBulkOperationStatic;mongodb/mongodb;OrderedBulkOperationStatic;", //
"mongodb;OrderedBulkOperationStatic;mongodb;;Member[OrderedBulkOperation]", //
"mongodb;OrderedBulkOperationStatic;mongoose;mongodb.OrderedBulkOperationStatic;", //
"mongodb;ProfilingLevelOptions;mongodb/mongodb;ProfilingLevelOptions;", //
"mongodb;ProfilingLevelOptions;mongodb;Db;Member[profilingLevel].Argument[0]", //
"mongodb;ProfilingLevelOptions;mongoose;mongodb.ProfilingLevelOptions;", //
"mongodb;ReadPreferenceFromOptions;mongodb/mongodb;ReadPreferenceFromOptions;", //
"mongodb;ReadPreferenceFromOptions;mongodb;ReadPreferenceStatic;Member[fromOptions].Argument[0]", //
"mongodb;ReadPreferenceFromOptions;mongoose;mongodb.ReadPreferenceFromOptions;", //
"mongodb;ReadPreferenceStatic;mongodb/mongodb;ReadPreferenceStatic;", //
"mongodb;ReadPreferenceStatic;mongodb;;Member[ReadPreference]", //
"mongodb;ReadPreferenceStatic;mongoose;mongodb.ReadPreferenceStatic;", //
"mongodb;RemoveUserOptions;mongodb/mongodb;RemoveUserOptions;", //
"mongodb;RemoveUserOptions;mongodb;Admin;Member[removeUser].Argument[1]", //
"mongodb;RemoveUserOptions;mongodb;Db;Member[removeUser].Argument[1]", //
"mongodb;RemoveUserOptions;mongoose;mongodb.RemoveUserOptions;", //
"mongodb;RenameOptions;mongodb/mongodb;RenameOptions;", //
"mongodb;RenameOptions;mongodb;Collection;Member[rename].Argument[1]", //
"mongodb;RenameOptions;mongodb;Db;Member[renameCollection].Argument[2]", //
"mongodb;RenameOptions;mongoose;mongodb.RenameOptions;", //
"mongodb;ReplaceOptions;mongodb/mongodb;ReplaceOptions;", //
"mongodb;ReplaceOptions;mongodb;Collection;Member[replaceOne].Argument[2]", //
"mongodb;ReplaceOptions;mongoose;mongodb.ReplaceOptions;", //
"mongodb;RunCommandOptions;mongodb/mongodb;RunCommandOptions;", //
"mongodb;RunCommandOptions;mongodb;Admin;Member[command].Argument[1]", //
"mongodb;RunCommandOptions;mongodb;Db;Member[command].Argument[1]", //
"mongodb;RunCommandOptions;mongoose;mongodb.RunCommandOptions;", //
"mongodb;SelectServerOptions;mongodb/mongodb;SelectServerOptions;", //
"mongodb;SelectServerOptions;mongoose;mongodb.SelectServerOptions;", //
"mongodb;SetProfilingLevelOptions;mongodb/mongodb;SetProfilingLevelOptions;", //
"mongodb;SetProfilingLevelOptions;mongodb;Db;Member[setProfilingLevel].Argument[1]", //
"mongodb;SetProfilingLevelOptions;mongoose;mongodb.SetProfilingLevelOptions;", //
"mongodb;Transaction;mongodb/mongodb;Transaction;", //
"mongodb;Transaction;mongodb;ClientSession;Member[transaction]", //
"mongodb;Transaction;mongodb;TransactionStatic;Instance", //
"mongodb;Transaction;mongoose;mongodb.Transaction;", //
"mongodb;TransactionOptions;mongodb/mongodb;TransactionOptions;", //
"mongodb;TransactionOptions;mongodb;ClientSession;Member[defaultTransactionOptions]", //
"mongodb;TransactionOptions;mongodb;ClientSession;Member[startTransaction].Argument[0]", //
"mongodb;TransactionOptions;mongodb;ClientSession;Member[withTransaction].Argument[1]", //
"mongodb;TransactionOptions;mongodb;ClientSessionOptions;Member[defaultTransactionOptions]", //
"mongodb;TransactionOptions;mongodb;Transaction;Member[options]", //
"mongodb;TransactionOptions;mongoose;mongodb.TransactionOptions;", //
"mongodb;TransactionStatic;mongodb/mongodb;TransactionStatic;", //
"mongodb;TransactionStatic;mongodb;;Member[Transaction]", //
"mongodb;TransactionStatic;mongoose;mongodb.TransactionStatic;", //
"mongodb;TypedEventEmitter;mongodb;AbstractCursor;", //
"mongodb;TypedEventEmitter;mongodb;ChangeStream;", //
"mongodb;TypedEventEmitter;mongodb;ClientSession;", //
"mongodb;TypedEventEmitter;mongodb;GridFSBucket;", //
"mongodb;TypedEventEmitter;mongodb;MongoClient;", //
"mongodb;UnorderedBulkOperation;mongodb/mongodb;UnorderedBulkOperation;", //
"mongodb;UnorderedBulkOperation;mongodb;Collection;Member[initializeUnorderedBulkOp].ReturnValue", //
"mongodb;UnorderedBulkOperation;mongodb;UnorderedBulkOperation;Member[addToOperationsList].ReturnValue", //
"mongodb;UnorderedBulkOperation;mongodb;UnorderedBulkOperationStatic;Instance", //
"mongodb;UnorderedBulkOperation;mongoose;mongodb.UnorderedBulkOperation;", //
"mongodb;UnorderedBulkOperationStatic;mongodb/mongodb;UnorderedBulkOperationStatic;", //
"mongodb;UnorderedBulkOperationStatic;mongodb;;Member[UnorderedBulkOperation]", //
"mongodb;UnorderedBulkOperationStatic;mongoose;mongodb.UnorderedBulkOperationStatic;", //
"mongodb;UpdateManyModel;mongodb/mongodb;UpdateManyModel;", //
"mongodb;UpdateManyModel;mongodb;AnyBulkWriteOperation;Member[updateMany]", //
"mongodb;UpdateManyModel;mongoose;mongodb.UpdateManyModel;", //
"mongodb;UpdateOneModel;mongodb/mongodb;UpdateOneModel;", //
"mongodb;UpdateOneModel;mongodb;AnyBulkWriteOperation;Member[updateOne]", //
"mongodb;UpdateOneModel;mongoose;mongodb.UpdateOneModel;", //
"mongodb;UpdateOptions;mongodb/mongodb;UpdateOptions;", //
"mongodb;UpdateOptions;mongodb;Collection;Member[update,updateMany,updateOne].Argument[2]", //
"mongodb;UpdateOptions;mongoose;mongodb.UpdateOptions;", //
"mongodb;ValidateCollectionOptions;mongodb/mongodb;ValidateCollectionOptions;", //
"mongodb;ValidateCollectionOptions;mongodb;Admin;Member[validateCollection].Argument[1]", //
"mongodb;ValidateCollectionOptions;mongoose;mongodb.ValidateCollectionOptions;", //
"mongodb;WithSessionCallback;mongodb/mongodb;WithSessionCallback;", //
"mongodb;WithSessionCallback;mongodb;MongoClient;Member[withSession].Argument[1]", //
"mongodb;WithSessionCallback;mongodb;MongoClient;Member[withSession].WithArity[1].Argument[0]", //
"mongodb;WithSessionCallback;mongoose;mongodb.WithSessionCallback;", //
"mongodb;WithTransactionCallback;mongodb/mongodb;WithTransactionCallback;", //
"mongodb;WithTransactionCallback;mongodb;ClientSession;Member[withTransaction].Argument[0]", //
"mongodb;WithTransactionCallback;mongoose;mongodb.WithTransactionCallback;", //
"mongoose/inferschematype;ResolvePathType;mongoose/inferschematype;ObtainDocumentPathType;", //
"mongoose/inferschematype;ResolvePathType;mongoose/inferschematype;ResolvePathType;TypeVar[mongoose.IfEquals.3].ArrayElement", //
"mongoose/inferschematype;ResolvePathType;mongoose/inferschematype;ResolvePathType;TypeVar[mongoose.IfEquals.3].TypeVar[mongoose.Types.DocumentArray.0]", //
"mongoose;;mongoose;;Member[mongoose]", //
"mongoose;AcceptsDiscriminator;mongoose;Model;", //
"mongoose;AcceptsDiscriminator;mongoose;Schema.Types.Array;", //
"mongoose;AcceptsDiscriminator;mongoose;Schema.Types.DocumentArray;", //
"mongoose;AcceptsDiscriminator;mongoose;Schema.Types.Subdocument;", //
"mongoose;Aggregate;mongoose;Aggregate;Member[addCursorFlag,addFields,allowDiskUse,append,collation,count,facet,graphLookup,group,hint,limit,lookup,match,model,near,option,project,read,readConcern,redact,replaceRoot,sample,search,session,skip,sort,sortByCount,unionWith,unwind].ReturnValue", //
"mongoose;Aggregate;mongoose;AggregateStatic;Instance", //
"mongoose;Aggregate;mongoose;Model;Member[aggregate].ReturnValue", //
"mongoose;AggregateStatic;mongoose;;Member[Aggregate]", //
"mongoose;Collection;mongoose;;Member[Collection]", //
"mongoose;Collection;mongoose;Collection;Instance", //
"mongoose;Collection;mongoose;Connection;Member[collection].ReturnValue", //
"mongoose;Collection;mongoose;Connection;Member[collections].AnyMember", //
"mongoose;Collection;mongoose;Document;Member[collection]", //
"mongoose;Collection;mongoose;Model;Member[collection]", //
"mongoose;CollectionBase;mongoose;Collection;", //
"mongoose;CompileModelOptions;mongoose;;Member[model].Argument[3]", //
"mongoose;CompileModelOptions;mongoose;Connection;Member[model].Argument[3]", //
"mongoose;ConnectOptions;mongoose;;Member[connect,createConnection].WithArity[1,2,3].Argument[1]", //
"mongoose;ConnectOptions;mongoose;Connection;Member[openUri].WithArity[1,2,3].Argument[1]", //
"mongoose;Connection;mongoose;;Member[connection]", //
"mongoose;Connection;mongoose;;Member[connections].ArrayElement", //
"mongoose;Connection;mongoose;;Member[createConnection].Argument[2].TypeVar[mongoose.Callback.0]", //
"mongoose;Connection;mongoose;;Member[createConnection].WithArity[0,1,2].ReturnValue", //
"mongoose;Connection;mongoose;;Member[createConnection].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0]", //
"mongoose;Connection;mongoose;Collection;Argument[1]", //
"mongoose;Connection;mongoose;CollectionBase;Member[conn]", //
"mongoose;Connection;mongoose;CompileModelOptions;Member[connection]", //
"mongoose;Connection;mongoose;Connection;Member[asPromise].ReturnValue.Awaited", //
"mongoose;Connection;mongoose;Connection;Member[deleteModel,plugin,setClient,useDb].ReturnValue", //
"mongoose;Connection;mongoose;Connection;Member[openUri].Argument[2].TypeVar[mongoose.Callback.0]", //
"mongoose;Connection;mongoose;Connection;Member[openUri].WithArity[1,2].ReturnValue.Awaited", //
"mongoose;Connection;mongoose;Connection;Member[openUri].WithArity[2,3].ReturnValue", //
"mongoose;Connection;mongoose;Connection;Member[openUri].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0]", //
"mongoose;Connection;mongoose;ConnectionStatic;Instance", //
"mongoose;Connection;mongoose;Document;Member[db]", //
"mongoose;Connection;mongoose;Model;Member[db]", //
"mongoose;ConnectionStatic;mongoose;;Member[Connection]", //
"mongoose;Cursor;mongoose;Query;Member[cursor].ReturnValue", //
"mongoose;DiscriminatorModel;mongoose;DiscriminatorSchema;TypeVar[mongoose.Schema.1]", //
"mongoose;Document;mongoose;Document;Member[$getAllSubdocs,$getPopulatedDocs].ReturnValue.ArrayElement", //
"mongoose;Document;mongoose;Document;Member[$inc,$parent,$set,depopulate,increment,init,overwrite,set].ReturnValue", //
"mongoose;Document;mongoose;Document;Member[delete,deleteOne].WithArity[0,1].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]", //
"mongoose;Document;mongoose;Document;Member[equals].Argument[0]", //
"mongoose;Document;mongoose;Document;Member[init].Argument[2].TypeVar[mongoose.Callback.0]", //
"mongoose;Document;mongoose;Document;Member[remove,save].WithArity[0,1].ReturnValue.Awaited", //
"mongoose;Document;mongoose;Document;Member[replaceOne,update,updateOne].ReturnValue.TypeVar[mongoose.Query.1]", //
"mongoose;Document;mongoose;Document;Member[save].Argument[1].TypeVar[mongoose.Callback.0]", //
"mongoose;Document;mongoose;Document;Member[save].WithArity[1].Argument[0].TypeVar[mongoose.Callback.0]", //
"mongoose;Document;mongoose;DocumentStatic;Instance", //
"mongoose;Document;mongoose;Error.VersionErrorStatic;Argument[0]", //
"mongoose;Document;mongoose;HydratedDocument;", //
"mongoose;Document;mongoose;HydratedDocument;TypeVar[mongoose.Require_id.0]", //
"mongoose;Document;mongoose;Model;Member[bulkSave].Argument[0].ArrayElement", //
"mongoose;Document;mongoose;TVirtualPathFN;Argument[2]", //
"mongoose;Document;mongoose;Types.Subdocument;", //
"mongoose;Document;mongoose;Types.Subdocument;Member[$parent,ownerDocument,parent].ReturnValue", //
"mongoose;Document;mongoose;VirtualType;Member[applyGetters,applySetters].Argument[1]", //
"mongoose;DocumentStatic;mongoose;;Member[Document]", //
"mongoose;Error.VersionErrorStatic;mongoose;;Member[Error].Member[VersionError]", //
"mongoose;HydratedDocument;mongoose;Model;Instance", //
"mongoose;HydratedDocument;mongoose;Model;Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,geoSearch,remove,replaceOne,update,updateMany,updateOne,where].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[$where,find,geoSearch,where].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[create,insertMany].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[create].WithArity[0..,1,2].ReturnValue.Awaited.ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[create].WithArity[1].ReturnValue.Awaited", //
"mongoose;HydratedDocument;mongoose;Model;Member[create].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0]", //
"mongoose;HydratedDocument;mongoose;Model;Member[exists].WithArity[1,2].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[find,insertMany].WithArity[3].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[findById,findByIdAndDelete,findByIdAndRemove,findOne,findOneAndDelete,findOneAndRemove].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findById,findOne].Argument[3].TypeVar[mongoose.Callback.0]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findByIdAndDelete,findByIdAndRemove,findOneAndDelete,findOneAndRemove].Argument[2].Argument[1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findByIdAndUpdate,findOneAndReplace,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findByIdAndUpdate,findOneAndReplace,findOneAndUpdate].WithArity[3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.ModifyResult.0]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findByIdAndUpdate].WithArity[0,1,2,4].Argument[3].Argument[1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findByIdAndUpdate].WithArity[3].Argument[2,3].Argument[1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findById].WithArity[1,2,3].Argument[2].TypeVar[mongoose.Callback.0]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findOneAndReplace].WithArity[0,1,2,3,4].Argument[3].Argument[1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findOneAndUpdate].WithArity[3,4].Argument[3].Argument[1]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findOne].WithArity[0,1,2].Argument[1,2].TypeVar[mongoose.Callback.0]", //
"mongoose;HydratedDocument;mongoose;Model;Member[findOne].WithArity[3].Argument[2].TypeVar[mongoose.Callback.0]", //
"mongoose;HydratedDocument;mongoose;Model;Member[find].Argument[3].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[find].WithArity[0].Argument[0].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[find].WithArity[1].Argument[0,1,2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[find].WithArity[2].Argument[1,2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[geoSearch].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[hydrate].ReturnValue", //
"mongoose;HydratedDocument;mongoose;Model;Member[init].ReturnValue.Awaited", //
"mongoose;HydratedDocument;mongoose;Model;Member[insertMany].WithArity[1,2].ReturnValue.Awaited.ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[populate].WithArity[2,3].Argument[2].TypeVar[mongoose.Callback.0]", //
"mongoose;HydratedDocument;mongoose;Model;Member[populate].WithArity[2,3].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose;HydratedDocument;mongoose;Model;Member[populate].WithArity[2,3].ReturnValue.Awaited", //
"mongoose;HydratedDocument;mongoose;Model;Member[populate].WithArity[2,3].ReturnValue.Awaited.ArrayElement", //
"mongoose;HydratedDocument;mongoose;TVirtualPathFN;Argument[1].TypeVar[mongoose.VirtualType.0]", //
"mongoose;HydratedDocument;mongoose;VirtualPathFunctions;Member[options].TypeVar[mongoose.VirtualTypeOptions.0]", //
"mongoose;InsertManyOptions;mongoose;Model;Member[insertMany].WithArity[2,3].Argument[1]", //
"mongoose;Model;mongoose;;Member[Model]", //
"mongoose;Model;mongoose;;Member[model].ReturnValue", //
"mongoose;Model;mongoose;AcceptsDiscriminator;Member[discriminator].WithArity[2,3].ReturnValue", //
"mongoose;Model;mongoose;Aggregate;Member[model].Argument[0]", //
"mongoose;Model;mongoose;Connection;Member[model].WithArity[1,2,3,4].ReturnValue", //
"mongoose;Model;mongoose;Connection;Member[models].AnyMember", //
"mongoose;Model;mongoose;DiscriminatorModel;", //
"mongoose;Model;mongoose;Document;Member[$model].ReturnValue", //
"mongoose;Model;mongoose;Document;Member[populate].Argument[2]", //
"mongoose;Model;mongoose;Model;Member[discriminators].AnyMember", //
"mongoose;Model;mongoose;Models;AnyMember", //
"mongoose;Model;mongoose;PopulateOptions;Member[model]", //
"mongoose;Model;mongoose;Query;Member[cast].Argument[0]", //
"mongoose;Model;mongoose;Query;Member[populate].Argument[2]", //
"mongoose;Model;mongoose;Schema.Types.Array;Member[discriminator].WithArity[2,3].ReturnValue", //
"mongoose;Model;mongoose;Schema.Types.DocumentArray;Member[discriminator].WithArity[2,3].ReturnValue", //
"mongoose;Model;mongoose;Schema.Types.Subdocument;Member[discriminator].WithArity[2,3].ReturnValue", //
"mongoose;Model;mongoose;SchemaStatic;Instance.TypeVar[mongoose.Schema.1]", //
"mongoose;Models;mongoose;;Member[models]", //
"mongoose;PopulateOption;mongoose;InsertManyOptions;", //
"mongoose;PopulateOption;mongoose;QueryOptions;", //
"mongoose;PopulateOptions;mongoose;Document;Member[populate].Argument[4]", //
"mongoose;PopulateOptions;mongoose;Document;Member[populate].WithArity[1,2].Argument[0]", //
"mongoose;PopulateOptions;mongoose;Document;Member[populate].WithArity[1,2].Argument[0].ArrayElement", //
"mongoose;PopulateOptions;mongoose;Model;Member[populate].Argument[1]", //
"mongoose;PopulateOptions;mongoose;Model;Member[populate].Argument[1].ArrayElement", //
"mongoose;PopulateOptions;mongoose;PopulateOption;Member[populate]", //
"mongoose;PopulateOptions;mongoose;PopulateOption;Member[populate].ArrayElement", //
"mongoose;PopulateOptions;mongoose;PopulateOptions;Member[populate]", //
"mongoose;PopulateOptions;mongoose;PopulateOptions;Member[populate].ArrayElement", //
"mongoose;PopulateOptions;mongoose;Query;Member[populate].WithArity[1].Argument[0]", //
"mongoose;PopulateOptions;mongoose;Query;Member[populate].WithArity[1].Argument[0].ArrayElement", //
"mongoose;Query;mongoose;Document;Member[replaceOne,update,updateOne].ReturnValue", //
"mongoose;Query;mongoose;HydratedDocument;TypeVar[mongoose.Require_id.0]", //
"mongoose;Query;mongoose;Query;Member[all,allowDiskUse,and,batchSize,box,circle,clone,collation,comment,elemMatch,equals,exists,explain,geometry,gt,gte,hint,in,intersects,j,limit,lt,lte,maxDistance,maxScan,maxTimeMS,merge,mod,ne,near,nin,nor,or,polygon,read,readConcern,regex,remove,select,session,set,setOptions,size,skip,slice,snapshot,sort,tailable,w,where,within,wtimeout].ReturnValue", //
"mongoose;Query;mongoose;Query;Member[error].WithArity[1].ReturnValue", //
"mongoose;Query;mongoose;Query;Member[merge].Argument[0]", //
"mongoose;Query;mongoose;QueryStatic;Instance", //
"mongoose;Query;mongoose;QueryWithHelpers;", //
"mongoose;QueryOptions;mongoose;Document;Member[delete,deleteOne,remove].WithArity[0,1,2].Argument[0]", //
"mongoose;QueryOptions;mongoose;Document;Member[replaceOne,update,updateOne].Argument[1]", //
"mongoose;QueryOptions;mongoose;Model;Member[countDocuments,findByIdAndDelete,findByIdAndRemove,findOneAndDelete,findOneAndRemove].Argument[1]", //
"mongoose;QueryOptions;mongoose;Model;Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[1]", //
"mongoose;QueryOptions;mongoose;Model;Member[estimatedDocumentCount].Argument[0]", //
"mongoose;QueryOptions;mongoose;Model;Member[find,findById].WithArity[1,2,3,4].Argument[2]", //
"mongoose;QueryOptions;mongoose;Model;Member[findByIdAndUpdate,findOne,findOneAndReplace,findOneAndUpdate].WithArity[0,1,2,3,4].Argument[2]", //
"mongoose;QueryOptions;mongoose;Model;Member[replaceOne,update,updateMany,updateOne].Argument[2]", //
"mongoose;QueryOptions;mongoose;PopulateOptions;Member[options]", //
"mongoose;QueryOptions;mongoose;Query;Member[countDocuments,findByIdAndDelete,findOneAndDelete,findOneAndRemove].Argument[1]", //
"mongoose;QueryOptions;mongoose;Query;Member[cursor,estimatedDocumentCount,setOptions].Argument[0]", //
"mongoose;QueryOptions;mongoose;Query;Member[cursor].ReturnValue.TypeVar[mongoose.Cursor.1]", //
"mongoose;QueryOptions;mongoose;Query;Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[1]", //
"mongoose;QueryOptions;mongoose;Query;Member[findByIdAndUpdate,findOne,findOneAndUpdate].WithArity[0,1,2,3,4].Argument[2]", //
"mongoose;QueryOptions;mongoose;Query;Member[find].WithArity[1,2,3,4].Argument[2]", //
"mongoose;QueryOptions;mongoose;Query;Member[getOptions].ReturnValue", //
"mongoose;QueryOptions;mongoose;Query;Member[replaceOne,update,updateMany,updateOne].Argument[2]", //
"mongoose;QueryOptions;mongoose;VirtualTypeOptions;Member[options]", //
"mongoose;QueryStatic;mongoose;;Member[Query]", //
"mongoose;QueryWithHelpers;mongoose;Document;Member[delete,deleteOne].WithArity[0,1].ReturnValue", //
"mongoose;QueryWithHelpers;mongoose;Model;Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,findById,findByIdAndDelete,findByIdAndRemove,findOne,findOneAndDelete,findOneAndRemove,geoSearch,remove,replaceOne,update,updateMany,updateOne,where].ReturnValue", //
"mongoose;QueryWithHelpers;mongoose;Model;Member[exists].WithArity[1,2].ReturnValue", //
"mongoose;QueryWithHelpers;mongoose;Model;Member[findByIdAndUpdate,findOneAndReplace,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue", //
"mongoose;QueryWithHelpers;mongoose;Query;Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,findByIdAndDelete,findOne,findOneAndDelete,findOneAndRemove,lean,orFail,populate,replaceOne,transform,update,updateMany,updateOne].ReturnValue", //
"mongoose;QueryWithHelpers;mongoose;Query;Member[findByIdAndUpdate,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue", //
"mongoose;QueryWithHelpers;mongoose;Query;Member[toConstructor].ReturnValue.Instance", //
"mongoose;Schema.Types.Array;mongoose;Schema.Types.Array;Member[enum].ReturnValue", //
"mongoose;Schema.Types.Array;mongoose;Schema.Types.ArrayStatic;Instance", //
"mongoose;Schema.Types.ArrayStatic;mongoose;;Member[Schema].Member[Types].Member[Array]", //
"mongoose;Schema.Types.DocumentArray;mongoose;Schema.Types.DocumentArrayStatic;Instance", //
"mongoose;Schema.Types.DocumentArrayStatic;mongoose;;Member[Schema].Member[Types].Member[DocumentArray]", //
"mongoose;Schema.Types.Subdocument;mongoose;Schema.Types.SubdocumentStatic;Instance", //
"mongoose;Schema.Types.SubdocumentStatic;mongoose;;Member[Schema].Member[Types].Member[Subdocument]", //
"mongoose;Schema.Types.SubdocumentStatic;mongoose;Schema.Types.DocumentArray;Member[caster]", //
"mongoose;SchemaStatic;mongoose;;Member[Schema]", //
"mongoose;SessionOperation;mongoose;Aggregate;", //
"mongoose;SessionOperation;mongoose;Query;", //
"mongoose;TVirtualPathFN;mongoose;VirtualPathFunctions;Member[get,set]", //
"mongoose;Types.Array;mongoose;Types.DocumentArray;", //
"mongoose;Types.ArraySubdocument;mongoose;Types.ArraySubdocumentStatic;Instance", //
"mongoose;Types.ArraySubdocumentStatic;mongoose;;Member[Types].Member[ArraySubdocument]", //
"mongoose;Types.DocumentArray;mongoose/inferschematype;ResolvePathType;TypeVar[mongoose.IfEquals.3]", //
"mongoose;Types.DocumentArray;mongoose;Types.ArraySubdocument;Member[parentArray].ReturnValue", //
"mongoose;Types.DocumentArray;mongoose;Types.DocumentArrayStatic;Instance", //
"mongoose;Types.DocumentArrayStatic;mongoose;;Member[Types].Member[DocumentArray]", //
"mongoose;Types.ObjectId;mongoose/inferschematype;ResolvePathType;", //
"mongoose;Types.Subdocument;mongoose;Types.ArraySubdocument;", //
"mongoose;Types.Subdocument;mongoose;Types.DocumentArray;Member[create,id].ReturnValue", //
"mongoose;Types.Subdocument;mongoose;Types.DocumentArray;TypeVar[mongoose.Types.Array.0]", //
"mongoose;Types.Subdocument;mongoose;Types.SubdocumentStatic;Instance", //
"mongoose;Types.SubdocumentStatic;mongoose;;Member[Types].Member[Subdocument]", //
"mongoose;VirtualType;mongoose;TVirtualPathFN;Argument[1]", //
"mongoose;VirtualType;mongoose;VirtualType;Member[get,set].Argument[0].Argument[1]", //
"mongoose;VirtualType;mongoose;VirtualType;Member[get,set].ReturnValue", //
"mongoose;VirtualType;mongoose;VirtualTypeStatic;Instance", //
"mongoose;VirtualTypeOptions;mongoose;VirtualPathFunctions;Member[options]", //
"mongoose;VirtualTypeStatic;mongoose;;Member[VirtualType]", //
]
}
}
private class Summaries extends ModelInput::SummaryModelCsv {
override predicate row(string row) {
row =
[
"mongodb;AbstractCursor;;;Member[addCursorFlag,batchSize,maxTimeMS,withReadConcern,withReadPreference].ReturnValue;type", //
"mongodb;BulkOperationBase;;;Member[addToOperationsList,raw].ReturnValue;type", //
"mongodb;FindCursor;;;Member[addQueryModifier,allowDiskUse,collation,comment,filter,hint,limit,max,maxAwaitTimeMS,maxTimeMS,min,returnKey,showRecordId,skip,sort].ReturnValue;type", //
"mongodb;FindOperators;;;Member[arrayFilters,collation,upsert].ReturnValue;type", //
"mongodb;GridFSBucketWriteStream;;;Member[end].ReturnValue;type", //
"mongodb;MongoClient;;;Member[connect].Argument[0].TypeVar[mongodb.Callback.0];type", //
"mongodb;MongoClient;;;Member[connect].WithArity[0].ReturnValue.Awaited;type", //
"mongodb;OrderedBulkOperation;;;Member[addToOperationsList].ReturnValue;type", //
"mongodb;TypedEventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type", //
"mongodb;UnorderedBulkOperation;;;Member[addToOperationsList].ReturnValue;type", //
"mongoose;Aggregate;;;Member[addCursorFlag,addFields,allowDiskUse,append,collation,count,facet,graphLookup,group,hint,limit,lookup,match,model,near,option,project,read,readConcern,redact,replaceRoot,sample,search,session,skip,sort,sortByCount,unionWith,unwind].ReturnValue;type", //
"mongoose;Connection;;;Member[asPromise].ReturnValue.Awaited;type", //
"mongoose;Connection;;;Member[deleteModel,setClient].ReturnValue;type", //
"mongoose;Cursor;;;Member[addCursorFlag].ReturnValue;type", //
"mongoose;Document;;;Member[$inc,$set,depopulate,increment,init,overwrite,set].ReturnValue;type", //
"mongoose;Document;;;Member[delete,deleteOne].WithArity[0,1].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1];type", //
"mongoose;Document;;;Member[getChanges].ReturnValue.TypeVar[mongoose.UpdateQuery.0];type", //
"mongoose;Document;;;Member[init].Argument[2].TypeVar[mongoose.Callback.0];type", //
"mongoose;Document;;;Member[populate].Argument[1,5].TypeVar[mongoose.Callback.0].TypeVar[mongoose.MergeType.0];type", //
"mongoose;Document;;;Member[populate].WithArity[1,2,3,4,5].ReturnValue.Awaited.TypeVar[mongoose.MergeType.0];type", //
"mongoose;Document;;;Member[remove,save].WithArity[0,1].ReturnValue.Awaited;type", //
"mongoose;Document;;;Member[replaceOne,update,updateOne].ReturnValue.TypeVar[mongoose.Query.1];type", //
"mongoose;Document;;;Member[save].Argument[1].TypeVar[mongoose.Callback.0];type", //
"mongoose;Document;;;Member[save].WithArity[1].Argument[0].TypeVar[mongoose.Callback.0];type", //
"mongoose;Document;;;Member[update,updateOne].Argument[0].TypeVar[mongoose.UpdateQuery.0];type", //
"mongoose;Query;;;Member[all,allowDiskUse,and,batchSize,box,circle,clone,collation,comment,elemMatch,equals,exists,explain,geometry,gt,gte,hint,in,intersects,j,limit,lt,lte,maxDistance,maxScan,maxTimeMS,merge,mod,ne,near,nin,nor,or,polygon,read,readConcern,regex,select,session,set,setOptions,size,skip,slice,snapshot,sort,tailable,w,where,within,wtimeout].ReturnValue;type", //
"mongoose;Query;;;Member[error].WithArity[1].ReturnValue;type", //
"mongoose;Schema.Types.Array;;;Member[enum].ReturnValue;type", //
"mongoose;SessionOperation;;;Member[session].ReturnValue;type", //
"mongoose;Types.Array;;;Member[pull,remove,set].ReturnValue;type", //
"mongoose;Types.ObjectId;;;Member[_id];type", //
"mongoose;VirtualType;;;Member[get,set].ReturnValue;type", //
]
}
}
private class TypeVariables extends ModelInput::TypeVariableModelCsv {
override predicate row(string row) {
row =
[
"mongodb.Callback.0;Argument[1]", //
"mongoose.Callback.0;Argument[1]", //
"mongoose.Cursor.0;Member[eachAsync].WithArity[1,2,3].Argument[0].Argument[0]", //
"mongoose.Cursor.0;Member[eachAsync].WithArity[2,3].Argument[0].Argument[0].ArrayElement", //
"mongoose.Cursor.0;Member[map].Argument[0].Argument[0]", //
"mongoose.Cursor.0;Member[next].Argument[0].TypeVar[mongoose.Callback.0]", //
"mongoose.Cursor.0;Member[next].WithArity[0].ReturnValue.Awaited", //
"mongoose.Cursor.1;Member[map].ReturnValue.TypeVar[mongoose.Cursor.1]", //
"mongoose.Cursor.1;Member[options]", //
"mongoose.DiscriminatorSchema.1;TypeVar[mongoose.Schema.1]", //
"mongoose.DiscriminatorSchema.1;TypeVar[mongoose.Schema.1].TypeVar[mongoose.DiscriminatorModel.1]", //
"mongoose.Document.0;Member[_id]", //
"mongoose.Document.0;Member[equals].Argument[0].TypeVar[mongoose.Document.0]", //
"mongoose.FilterQuery.0;TypeVar[mongoose._FilterQuery.0]", //
"mongoose.IfAny.1;", //
"mongoose.IfAny.2;", //
"mongoose.IfEquals.3;", //
"mongoose.LeanDocumentOrArray.0;", //
"mongoose.LeanDocumentOrArray.0;TypeVar[mongoose.LeanDocument.0]", //
"mongoose.LeanDocumentOrArrayWithRawType.0;", //
"mongoose.ModifyResult.0;Member[value].TypeVar[mongoose.Require_id.0]", //
"mongoose.PluginFunction.1;Argument[0].TypeVar[mongoose.Schema.1]", //
"mongoose.PostMiddlewareFunction.1;Argument[0]", //
"mongoose.Query.0;Member[exec].Argument[0].TypeVar[mongoose.Callback.0]", //
"mongoose.Query.0;Member[exec].WithArity[0].ReturnValue.Awaited", //
"mongoose.Query.0;Member[lean].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.LeanDocumentOrArray.0,mongoose.LeanDocumentOrArrayWithRawType.0]", //
"mongoose.Query.0;Member[orFail].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0]", //
"mongoose.Query.0;Member[populate].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.UnpackedIntersection.0]", //
"mongoose.Query.0;Member[then,transform].Argument[0].Argument[0]", //
"mongoose.Query.0;Member[toConstructor].ReturnValue.Instance.TypeVar[mongoose.QueryWithHelpers.0]", //
"mongoose.Query.1;Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,lean,orFail,populate,replaceOne,transform,update,updateMany,updateOne].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]", //
"mongoose.Query.1;Member[$where,find].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].ArrayElement", //
"mongoose.Query.1;Member[_mongooseOptions].TypeVar[mongoose.MongooseQueryOptions.0]", //
"mongoose.Query.1;Member[and,nor,or].Argument[0].ArrayElement.TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[countDocuments,findByIdAndDelete,findOneAndDelete,findOneAndRemove].Argument[1].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[countDocuments].WithArity[1,2,3].Argument[0].TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[count].WithArity[1,2].Argument[0].TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[cursor,estimatedDocumentCount,setOptions].Argument[0].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[cursor].ReturnValue.TypeVar[mongoose.Cursor.0]", //
"mongoose.Query.1;Member[cursor].ReturnValue.TypeVar[mongoose.Cursor.1].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[0].TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[1].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[distinct].Argument[1].TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[findByIdAndDelete,findOne,findOneAndDelete,findOneAndRemove].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]", //
"mongoose.Query.1;Member[findByIdAndDelete,findOneAndDelete,findOneAndRemove].Argument[2].Argument[1]", //
"mongoose.Query.1;Member[findByIdAndUpdate,findOneAndUpdate,update,updateMany,updateOne].Argument[1].TypeVar[mongoose.UpdateQuery.0]", //
"mongoose.Query.1;Member[findByIdAndUpdate,findOneAndUpdate].WithArity[0,1,2,3,4].Argument[2].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[findByIdAndUpdate,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]", //
"mongoose.Query.1;Member[findByIdAndUpdate].WithArity[0,1,2,4].Argument[3].Argument[1]", //
"mongoose.Query.1;Member[findByIdAndUpdate].WithArity[3].Argument[2,3].Argument[1]", //
"mongoose.Query.1;Member[findOne,findOneAndDelete,findOneAndRemove,findOneAndUpdate,merge,remove,replaceOne,setQuery,update,updateMany,updateOne].Argument[0].TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[findOneAndUpdate].Argument[3].Argument[1]", //
"mongoose.Query.1;Member[findOneAndUpdate].Argument[3].Argument[2].TypeVar[mongoose.ModifyResult.0]", //
"mongoose.Query.1;Member[findOneAndUpdate].WithArity[3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.ModifyResult.0]", //
"mongoose.Query.1;Member[findOne].Argument[3].TypeVar[mongoose.Callback.0]", //
"mongoose.Query.1;Member[findOne].WithArity[0,1,2,3].Argument[2].TypeVar[mongoose.Callback.0,mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[findOne].WithArity[0,1,2].Argument[1].TypeVar[mongoose.Callback.0,mongoose.ProjectionType.0]", //
"mongoose.Query.1;Member[findOne].WithArity[3,4].Argument[1].TypeVar[mongoose.ProjectionType.0]", //
"mongoose.Query.1;Member[findOne].WithArity[4].Argument[2].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[find].Argument[3].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose.Query.1;Member[find].WithArity[0].Argument[0].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose.Query.1;Member[find].WithArity[1,2,3,4].Argument[0].TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[find].WithArity[1,2,3,4].Argument[1].TypeVar[mongoose.ProjectionType.0]", //
"mongoose.Query.1;Member[find].WithArity[1,2,3,4].Argument[2].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[find].WithArity[1].Argument[0,1,2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose.Query.1;Member[find].WithArity[2].Argument[1,2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose.Query.1;Member[find].WithArity[3].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement", //
"mongoose.Query.1;Member[getFilter,getQuery].ReturnValue.TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Query.1;Member[getOptions].ReturnValue.TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[getUpdate].ReturnValue.TypeVar[mongoose.UpdateQuery.0]", //
"mongoose.Query.1;Member[projection].WithArity[0,1].Argument[0].TypeVar[mongoose.ProjectionFields.0]", //
"mongoose.Query.1;Member[projection].WithArity[0,1].ReturnValue.TypeVar[mongoose.ProjectionFields.0]", //
"mongoose.Query.1;Member[remove].ReturnValue.TypeVar[mongoose.Query.1]", //
"mongoose.Query.1;Member[replaceOne,update,updateMany,updateOne].Argument[2].TypeVar[mongoose.QueryOptions.0]", //
"mongoose.Query.1;Member[replaceOne].Argument[1]", //
"mongoose.Query.1;Member[setUpdate].Argument[0].TypeVar[mongoose.UpdateQuery.0]", //
"mongoose.Query.1;Member[toConstructor].ReturnValue.Instance.TypeVar[mongoose.QueryWithHelpers.1]", //
"mongoose.QueryOptions.0;Member[projection].TypeVar[mongoose.ProjectionType.0]", //
"mongoose.QueryWithHelpers.0;TypeVar[mongoose.Query.0]", //
"mongoose.QueryWithHelpers.1;TypeVar[mongoose.Query.1]", //
"mongoose.Require_id.0;", //
"mongoose.Require_id.0;TypeVar[mongoose.IfAny.1,mongoose.IfAny.2]", //
"mongoose.RootQuerySelector.0;Member[$and,$nor,$or].ArrayElement.TypeVar[mongoose.FilterQuery.0]", //
"mongoose.Schema.1;Member[discriminator].ReturnValue.TypeVar[mongoose.DiscriminatorSchema.1]", //
"mongoose.Schema.1;Member[plugin].Argument[0].TypeVar[mongoose.PluginFunction.1]", //
"mongoose.Schema.1;Member[post].Argument[2].TypeVar[mongoose.ErrorHandlingMiddlewareFunction.0,mongoose.PostMiddlewareFunction.0,mongoose.PostMiddlewareFunction.1]", //
"mongoose.Schema.1;Member[post].WithArity[2].WithStringArgument[0=insertMany].Argument[1].TypeVar[mongoose.ErrorHandlingMiddlewareFunction.0,mongoose.PostMiddlewareFunction.0,mongoose.PostMiddlewareFunction.1]", //
"mongoose.Types.Array.0;Member[$pop,$shift,shift].ReturnValue", //
"mongoose.Types.Array.0;Member[set].Argument[1]", //
"mongoose.Types.DocumentArray.0;Member[create,id].ReturnValue", //
"mongoose.Types.DocumentArray.0;Member[create,id].ReturnValue.TypeVar[mongoose.Types.Subdocument.0].TypeVar[mongoose.InferId.0]", //
"mongoose.Types.DocumentArray.0;Member[push].Argument[0].ArrayElement.TypeVar[mongoose.AnyKeys.0]", //
"mongoose.Types.DocumentArray.0;TypeVar[mongoose.Types.Array.0]", //
"mongoose.Types.DocumentArray.0;TypeVar[mongoose.Types.Array.0].TypeVar[mongoose.Types.Subdocument.0].TypeVar[mongoose.InferId.0]", //
"mongoose.Types.Subdocument.0;TypeVar[mongoose.Document.0]", //
"mongoose.UnpackedIntersection.0;", //
"mongoose.UpdateQuery.0;TypeVar[mongoose._UpdateQuery.0].TypeVar[mongoose._UpdateQueryDef.0]", //
"mongoose.VirtualType.0;Member[get,set].Argument[0].Argument[1].TypeVar[mongoose.VirtualType.0]", //
"mongoose.VirtualType.0;Member[get,set].Argument[0].Argument[2]", //
"mongoose.VirtualTypeOptions.0;Member[foreignField,localField].Argument[0]", //
"mongoose._FilterQuery.0;TypeVar[mongoose.RootQuerySelector.0]", //
"mongoose._UpdateQuery.0;Member[$currentDate,$inc,$max,$min,$mul,$pop,$pull,$pullAll,$push,$set,$setOnInsert,$unset].TypeVar[mongoose.AnyKeys.0]", //
]
}
}

View File

@@ -0,0 +1,791 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: sinkModel
data:
- [mongodb.Collection, "Member[aggregate,count,countDocuments,deleteMany,deleteOne,find,findOne,findOneAndDelete,findOneAndReplace,remove,replaceOne,watch].Argument[0]", mongodb.sink]
- [mongodb.Collection, "Member[distinct].Argument[1]", mongodb.sink]
- [mongodb.Collection, "Member[findOneAndUpdate,update,updateMany,updateOne].Argument[0,1]", mongodb.sink]
- [mongodb.Db, "Member[aggregate,watch].Argument[0]", mongodb.sink]
- [mongodb.DeleteManyModel, "Member[filter]", mongodb.sink]
- [mongodb.DeleteOneModel, "Member[filter]", mongodb.sink]
- [mongodb.MongoClient, "Member[watch].Argument[0]", mongodb.sink]
- [mongodb.UpdateManyModel, "Member[filter,update]", mongodb.sink]
- [mongodb.UpdateOneModel, "Member[filter,update]", mongodb.sink]
- [mongoose.CollectionBase, "Member[findAndModify].Argument[0]", mongodb.sink]
- [mongoose.Connection, "Member[watch].Argument[0]", mongodb.sink]
- [mongoose.Document, "Member[update,updateOne].Argument[0]", mongodb.sink]
- [mongoose.Model, "Member[$where,aggregate,exists,find,findById,findByIdAndDelete,findByIdAndRemove,findOne,findOneAndDelete,findOneAndRemove,findOneAndReplace,geoSearch,remove,replaceOne,watch].Argument[0]", mongodb.sink]
- [mongoose.Model, "Member[count,where].WithArity[1,2].Argument[0]", mongodb.sink]
- [mongoose.Model, "Member[countDocuments].WithArity[1,2,3].Argument[0]", mongodb.sink]
- [mongoose.Model, "Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[0]", mongodb.sink]
- [mongoose.Model, "Member[distinct,where].Argument[1]", mongodb.sink]
- [mongoose.Model, "Member[findByIdAndUpdate,findOneAndUpdate,update,updateMany,updateOne].Argument[0,1]", mongodb.sink]
- [mongoose.Model, "Member[find].WithArity[1,2,3,4].Argument[0]", mongodb.sink]
- [mongoose.Query, "Member[$where,and,find,findByIdAndDelete,findOne,findOneAndDelete,findOneAndRemove,nor,or,remove,replaceOne,setUpdate].Argument[0]", mongodb.sink]
- [mongoose.Query, "Member[count,where].WithArity[1,2].Argument[0]", mongodb.sink]
- [mongoose.Query, "Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[0]", mongodb.sink]
- [mongoose.Query, "Member[distinct,where].Argument[1]", mongodb.sink]
- [mongoose.Query, "Member[findByIdAndUpdate,findOneAndUpdate,update,updateMany,updateOne].Argument[0,1]", mongodb.sink]
- [mongoose.Query, "Member[find].WithArity[1,2,3,4].Argument[0]", mongodb.sink]
- [mongoose.QueryStatic, "Argument[2]", mongodb.sink]
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- [mongodb.AbstractCursor, mongodb.FindCursor, ""]
- [mongodb.AbstractCursor, mongodb.ListCollectionsCursor, ""]
- [mongodb.AbstractCursor, mongodb.ListIndexesCursor, ""]
- [mongodb.AbstractCursorOptions, mongodb.AggregationCursorOptions, ""]
- [mongodb.AbstractCursorOptions, "mongodb/mongodb.AbstractCursorOptions", ""]
- [mongodb.AbstractCursorOptions, mongoose.mongodb.AbstractCursorOptions, ""]
- [mongodb.AddUserOptions, mongodb.Admin, "Member[addUser].Argument[1,2]"]
- [mongodb.AddUserOptions, mongodb.Db, "Member[addUser].Argument[1,2]"]
- [mongodb.AddUserOptions, "mongodb/mongodb.AddUserOptions", ""]
- [mongodb.AddUserOptions, mongoose.mongodb.AddUserOptions, ""]
- [mongodb.Admin, mongodb.AdminStatic, Instance]
- [mongodb.Admin, mongodb.Db, "Member[admin].ReturnValue"]
- [mongodb.Admin, "mongodb/mongodb.Admin", ""]
- [mongodb.Admin, mongoose.mongodb.Admin, ""]
- [mongodb.AdminStatic, "mongodb/mongodb.AdminStatic", ""]
- [mongodb.AdminStatic, mongodb, "Member[Admin]"]
- [mongodb.AdminStatic, mongoose.mongodb.AdminStatic, ""]
- [mongodb.AggregateOptions, mongodb.AggregationCursorOptions, ""]
- [mongodb.AggregateOptions, mongodb.ChangeStreamOptions, ""]
- [mongodb.AggregateOptions, mongodb.Collection, "Member[aggregate].Argument[1]"]
- [mongodb.AggregateOptions, mongodb.CountDocumentsOptions, ""]
- [mongodb.AggregateOptions, mongodb.Db, "Member[aggregate].Argument[1]"]
- [mongodb.AggregateOptions, "mongodb/mongodb.AggregateOptions", ""]
- [mongodb.AggregateOptions, mongoose.mongodb.AggregateOptions, ""]
- [mongodb.AggregationCursorOptions, "mongodb/mongodb.AggregationCursorOptions", ""]
- [mongodb.AggregationCursorOptions, mongoose.mongodb.AggregationCursorOptions, ""]
- [mongodb.AnyBulkWriteOperation, mongodb.BulkOperationBase, "Member[raw].Argument[0]"]
- [mongodb.AnyBulkWriteOperation, mongodb.Collection, "Member[bulkWrite].Argument[0].ArrayElement"]
- [mongodb.AnyBulkWriteOperation, "mongodb/mongodb.AnyBulkWriteOperation", ""]
- [mongodb.AnyBulkWriteOperation, mongoose.mongodb.AnyBulkWriteOperation, ""]
- [mongodb.Auth, mongodb.MongoClientOptions, "Member[auth]"]
- [mongodb.Auth, "mongodb/mongodb.Auth", ""]
- [mongodb.Auth, mongoose.mongodb.Auth, ""]
- [mongodb.AutoEncrypter, mongodb.AutoEncrypter, Instance]
- [mongodb.AutoEncrypter, mongodb.ConnectionOptions, "Member[autoEncrypter]"]
- [mongodb.AutoEncrypter, mongodb.MongoClient, "Member[autoEncrypter]"]
- [mongodb.AutoEncrypter, mongodb.MongoOptions, "Member[autoEncrypter]"]
- [mongodb.AutoEncrypter, "mongodb/mongodb.AutoEncrypter", ""]
- [mongodb.AutoEncrypter, mongoose.mongodb.AutoEncrypter, ""]
- [mongodb.AutoEncryptionOptions, mongodb.AutoEncrypter, "Argument[1]"]
- [mongodb.AutoEncryptionOptions, mongodb.MongoClientOptions, "Member[autoEncryption]"]
- [mongodb.AutoEncryptionOptions, "mongodb/mongodb.AutoEncryptionOptions", ""]
- [mongodb.AutoEncryptionOptions, mongoose.mongodb.AutoEncryptionOptions, ""]
- [mongodb.BulkOperationBase, mongodb.BulkOperationBase, "Member[addToOperationsList,insert,raw].ReturnValue"]
- [mongodb.BulkOperationBase, mongodb.BulkOperationBaseStatic, Instance]
- [mongodb.BulkOperationBase, mongodb.FindOperators, "Member[bulkOperation]"]
- [mongodb.BulkOperationBase, mongodb.FindOperators, "Member[delete,deleteOne,replaceOne,update,updateOne].ReturnValue"]
- [mongodb.BulkOperationBase, mongodb.OrderedBulkOperation, ""]
- [mongodb.BulkOperationBase, mongodb.UnorderedBulkOperation, ""]
- [mongodb.BulkOperationBase, "mongodb/mongodb.BulkOperationBase", ""]
- [mongodb.BulkOperationBase, mongoose.mongodb.BulkOperationBase, ""]
- [mongodb.BulkOperationBaseStatic, "mongodb/mongodb.BulkOperationBaseStatic", ""]
- [mongodb.BulkOperationBaseStatic, mongodb, "Member[BulkOperationBase]"]
- [mongodb.BulkOperationBaseStatic, mongoose.mongodb.BulkOperationBaseStatic, ""]
- [mongodb.BulkWriteOptions, mongodb.BulkOperationBase, "Member[execute].WithArity[0,1,2].Argument[0]"]
- [mongodb.BulkWriteOptions, mongodb.Collection, "Member[bulkWrite,insert,insertMany].Argument[1]"]
- [mongodb.BulkWriteOptions, mongodb.Collection, "Member[initializeOrderedBulkOp,initializeUnorderedBulkOp].Argument[0]"]
- [mongodb.BulkWriteOptions, mongodb.OrderedBulkOperationStatic, "Argument[1]"]
- [mongodb.BulkWriteOptions, mongodb.UnorderedBulkOperationStatic, "Argument[1]"]
- [mongodb.BulkWriteOptions, "mongodb/mongodb.BulkWriteOptions", ""]
- [mongodb.BulkWriteOptions, mongoose.mongodb.BulkWriteOptions, ""]
- [mongodb.ChangeStream, mongodb.ChangeStreamStatic, Instance]
- [mongodb.ChangeStream, mongodb.Collection, "Member[watch].ReturnValue"]
- [mongodb.ChangeStream, mongodb.Db, "Member[watch].ReturnValue"]
- [mongodb.ChangeStream, mongodb.MongoClient, "Member[watch].ReturnValue"]
- [mongodb.ChangeStream, "mongodb/mongodb.ChangeStream", ""]
- [mongodb.ChangeStream, mongoose.mongodb.ChangeStream, ""]
- [mongodb.ChangeStreamOptions, mongodb.ChangeStream, "Member[options]"]
- [mongodb.ChangeStreamOptions, mongodb.Collection, "Member[watch].Argument[1]"]
- [mongodb.ChangeStreamOptions, mongodb.Db, "Member[watch].Argument[1]"]
- [mongodb.ChangeStreamOptions, mongodb.MongoClient, "Member[watch].Argument[1]"]
- [mongodb.ChangeStreamOptions, "mongodb/mongodb.ChangeStreamOptions", ""]
- [mongodb.ChangeStreamOptions, mongoose.mongodb.ChangeStreamOptions, ""]
- [mongodb.ChangeStreamStatic, "mongodb/mongodb.ChangeStreamStatic", ""]
- [mongodb.ChangeStreamStatic, mongodb, "Member[ChangeStream]"]
- [mongodb.ChangeStreamStatic, mongoose.mongodb.ChangeStreamStatic, ""]
- [mongodb.ClientSession, mongodb.AbstractCursorOptions, "Member[session]"]
- [mongodb.ClientSession, mongodb.ClientSession, "Member[equals].Argument[0]"]
- [mongodb.ClientSession, mongodb.ClientSessionEvents, "Member[ended].Argument[0]"]
- [mongodb.ClientSession, mongodb.ClientSessionStatic, Instance]
- [mongodb.ClientSession, mongodb.IndexInformationOptions, "Member[session]"]
- [mongodb.ClientSession, mongodb.MongoClient, "Member[startSession].ReturnValue"]
- [mongodb.ClientSession, mongodb.OperationOptions, "Member[session]"]
- [mongodb.ClientSession, mongodb.ReadPreferenceFromOptions, "Member[session]"]
- [mongodb.ClientSession, mongodb.SelectServerOptions, "Member[session]"]
- [mongodb.ClientSession, mongodb.WithSessionCallback, "Argument[0]"]
- [mongodb.ClientSession, mongodb.WithTransactionCallback, "Argument[0]"]
- [mongodb.ClientSession, "mongodb/mongodb.ClientSession", ""]
- [mongodb.ClientSession, mongoose.mongodb.ClientSession, ""]
- [mongodb.ClientSessionEvents, "mongodb/mongodb.ClientSessionEvents", ""]
- [mongodb.ClientSessionEvents, mongoose.mongodb.ClientSessionEvents, ""]
- [mongodb.ClientSessionOptions, mongodb.MongoClient, "Member[startSession].Argument[0]"]
- [mongodb.ClientSessionOptions, mongodb.MongoClient, "Member[withSession].WithArity[2].Argument[0]"]
- [mongodb.ClientSessionOptions, "mongodb/mongodb.ClientSessionOptions", ""]
- [mongodb.ClientSessionOptions, mongoose.mongodb.ClientSessionOptions, ""]
- [mongodb.ClientSessionStatic, "mongodb/mongodb.ClientSessionStatic", ""]
- [mongodb.ClientSessionStatic, mongodb, "Member[ClientSession]"]
- [mongodb.ClientSessionStatic, mongoose.mongodb.ClientSessionStatic, ""]
- [mongodb.CollStatsOptions, mongodb.Collection, "Member[stats].Argument[0]"]
- [mongodb.CollStatsOptions, "mongodb/mongodb.CollStatsOptions", ""]
- [mongodb.CollStatsOptions, mongoose.mongodb.CollStatsOptions, ""]
- [mongodb.Collection, mongodb.ChangeStream, "Member[parent]"]
- [mongodb.Collection, mongodb.Collection, "Member[rename].Argument[1,2].TypeVar[mongodb.Callback.0]"]
- [mongodb.Collection, mongodb.Collection, "Member[rename].WithArity[1,2].ReturnValue.Awaited"]
- [mongodb.Collection, mongodb.CollectionStatic, Instance]
- [mongodb.Collection, mongodb.Db, "Member[collection].ReturnValue"]
- [mongodb.Collection, mongodb.Db, "Member[collections].Argument[0,1].TypeVar[mongodb.Callback.0].ArrayElement"]
- [mongodb.Collection, mongodb.Db, "Member[collections].WithArity[0,1].ReturnValue.Awaited.ArrayElement"]
- [mongodb.Collection, mongodb.Db, "Member[createCollection].Argument[2].TypeVar[mongodb.Callback.0]"]
- [mongodb.Collection, mongodb.Db, "Member[createCollection].WithArity[1,2].ReturnValue.Awaited"]
- [mongodb.Collection, mongodb.Db, "Member[createCollection].WithArity[2].Argument[1].TypeVar[mongodb.Callback.0]"]
- [mongodb.Collection, mongodb.Db, "Member[renameCollection].Argument[2,3].TypeVar[mongodb.Callback.0]"]
- [mongodb.Collection, mongodb.Db, "Member[renameCollection].WithArity[2,3].ReturnValue.Awaited"]
- [mongodb.Collection, mongodb.GridFSBucketWriteStream, "Member[chunks,files]"]
- [mongodb.Collection, mongodb.ListIndexesCursor, "Member[parent]"]
- [mongodb.Collection, mongodb.ListIndexesCursorStatic, "Argument[0]"]
- [mongodb.Collection, mongodb.OrderedBulkOperationStatic, "Argument[0]"]
- [mongodb.Collection, mongodb.UnorderedBulkOperationStatic, "Argument[0]"]
- [mongodb.Collection, "mongodb/mongodb.Collection", ""]
- [mongodb.Collection, mongoose.mongodb.Collection, ""]
- [mongodb.CollectionStatic, "mongodb/mongodb.CollectionStatic", ""]
- [mongodb.CollectionStatic, mongodb, "Member[Collection]"]
- [mongodb.CollectionStatic, mongoose.mongodb.CollectionStatic, ""]
- [mongodb.CommandOperationOptions, mongodb.AddUserOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.Admin, "Member[buildInfo,ping,replSetGetStatus,serverInfo,serverStatus].Argument[0]"]
- [mongodb.CommandOperationOptions, mongodb.AggregateOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.BulkWriteOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.CollStatsOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.CountOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.CreateCollectionOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.CreateIndexesOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.DbStatsOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.DeleteOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.DistinctOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.DropCollectionOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.DropDatabaseOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.DropIndexesOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.EstimatedDocumentCountOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.EvalOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.FindOneAndDeleteOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.FindOneAndReplaceOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.FindOneAndUpdateOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.FindOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.InsertOneOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.ListCollectionsOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.ListDatabasesOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.ListIndexesOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.MapReduceOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.ProfilingLevelOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.RemoveUserOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.RenameOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.ReplaceOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.RunCommandOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.SetProfilingLevelOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.TransactionOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.UpdateOptions, ""]
- [mongodb.CommandOperationOptions, mongodb.ValidateCollectionOptions, ""]
- [mongodb.CommandOperationOptions, "mongodb/mongodb.CommandOperationOptions", ""]
- [mongodb.CommandOperationOptions, mongoose.mongodb.CommandOperationOptions, ""]
- [mongodb.ConnectionOptions, "mongodb/mongodb.ConnectionOptions", ""]
- [mongodb.ConnectionOptions, mongoose.mongodb.ConnectionOptions, ""]
- [mongodb.CountDocumentsOptions, mongodb.Collection, "Member[countDocuments].Argument[1]"]
- [mongodb.CountDocumentsOptions, "mongodb/mongodb.CountDocumentsOptions", ""]
- [mongodb.CountDocumentsOptions, mongoose.mongodb.CountDocumentsOptions, ""]
- [mongodb.CountOptions, mongodb.Collection, "Member[count].Argument[1]"]
- [mongodb.CountOptions, mongodb.FindCursor, "Member[count].Argument[0]"]
- [mongodb.CountOptions, "mongodb/mongodb.CountOptions", ""]
- [mongodb.CountOptions, mongoose.mongodb.CountOptions, ""]
- [mongodb.CreateCollectionOptions, mongodb.Db, "Member[createCollection].WithArity[1,2,3].Argument[1]"]
- [mongodb.CreateCollectionOptions, "mongodb/mongodb.CreateCollectionOptions", ""]
- [mongodb.CreateCollectionOptions, mongoose.mongodb.CreateCollectionOptions, ""]
- [mongodb.CreateIndexesOptions, mongodb.Collection, "Member[createIndex,createIndexes].Argument[1]"]
- [mongodb.CreateIndexesOptions, mongodb.Db, "Member[createIndex].Argument[2]"]
- [mongodb.CreateIndexesOptions, "mongodb/mongodb.CreateIndexesOptions", ""]
- [mongodb.CreateIndexesOptions, mongoose.mongodb.CreateIndexesOptions, ""]
- [mongodb.Db, mongodb.ChangeStream, "Member[parent]"]
- [mongodb.Db, mongodb.DbStatic, Instance]
- [mongodb.Db, mongodb.GridFSBucketStatic, "Argument[0]"]
- [mongodb.Db, mongodb.ListCollectionsCursor, "Member[parent]"]
- [mongodb.Db, mongodb.ListCollectionsCursorStatic, "Argument[0]"]
- [mongodb.Db, mongodb.MongoClient, "Member[db].ReturnValue"]
- [mongodb.Db, "mongodb/mongodb.Db", ""]
- [mongodb.Db, mongoose.mongodb.Db, ""]
- [mongodb.DbStatic, "mongodb/mongodb.DbStatic", ""]
- [mongodb.DbStatic, mongodb, "Member[Db]"]
- [mongodb.DbStatic, mongoose.mongodb.DbStatic, ""]
- [mongodb.DbStatsOptions, mongodb.Db, "Member[stats].Argument[0]"]
- [mongodb.DbStatsOptions, "mongodb/mongodb.DbStatsOptions", ""]
- [mongodb.DbStatsOptions, mongoose.mongodb.DbStatsOptions, ""]
- [mongodb.DeleteManyModel, mongodb.AnyBulkWriteOperation, "Member[deleteMany]"]
- [mongodb.DeleteManyModel, "mongodb/mongodb.DeleteManyModel", ""]
- [mongodb.DeleteManyModel, mongoose.mongodb.DeleteManyModel, ""]
- [mongodb.DeleteOneModel, mongodb.AnyBulkWriteOperation, "Member[deleteOne]"]
- [mongodb.DeleteOneModel, "mongodb/mongodb.DeleteOneModel", ""]
- [mongodb.DeleteOneModel, mongoose.mongodb.DeleteOneModel, ""]
- [mongodb.DeleteOptions, mongodb.Collection, "Member[deleteMany,deleteOne,remove].Argument[1]"]
- [mongodb.DeleteOptions, "mongodb/mongodb.DeleteOptions", ""]
- [mongodb.DeleteOptions, mongoose.mongodb.DeleteOptions, ""]
- [mongodb.DistinctOptions, mongodb.Collection, "Member[distinct].Argument[2]"]
- [mongodb.DistinctOptions, "mongodb/mongodb.DistinctOptions", ""]
- [mongodb.DistinctOptions, mongoose.mongodb.DistinctOptions, ""]
- [mongodb.DropCollectionOptions, mongodb.Collection, "Member[drop].Argument[0]"]
- [mongodb.DropCollectionOptions, mongodb.Db, "Member[dropCollection].Argument[1]"]
- [mongodb.DropCollectionOptions, "mongodb/mongodb.DropCollectionOptions", ""]
- [mongodb.DropCollectionOptions, mongoose.mongodb.DropCollectionOptions, ""]
- [mongodb.DropDatabaseOptions, mongodb.Db, "Member[dropDatabase].Argument[0]"]
- [mongodb.DropDatabaseOptions, "mongodb/mongodb.DropDatabaseOptions", ""]
- [mongodb.DropDatabaseOptions, mongoose.mongodb.DropDatabaseOptions, ""]
- [mongodb.DropIndexesOptions, mongodb.Collection, "Member[dropIndex].Argument[1]"]
- [mongodb.DropIndexesOptions, mongodb.Collection, "Member[dropIndexes].Argument[0]"]
- [mongodb.DropIndexesOptions, "mongodb/mongodb.DropIndexesOptions", ""]
- [mongodb.DropIndexesOptions, mongoose.mongodb.DropIndexesOptions, ""]
- [mongodb.EstimatedDocumentCountOptions, mongodb.Collection, "Member[estimatedDocumentCount].Argument[0]"]
- [mongodb.EstimatedDocumentCountOptions, "mongodb/mongodb.EstimatedDocumentCountOptions", ""]
- [mongodb.EstimatedDocumentCountOptions, mongoose.mongodb.EstimatedDocumentCountOptions, ""]
- [mongodb.EvalOptions, "mongodb/mongodb.EvalOptions", ""]
- [mongodb.EvalOptions, mongoose.mongodb.EvalOptions, ""]
- [mongodb.FindCursor, mongodb.Collection, "Member[find].WithArity[0,1,2].ReturnValue"]
- [mongodb.FindCursor, mongodb.FindCursor, "Member[addQueryModifier,allowDiskUse,clone,collation,comment,filter,hint,limit,map,max,maxAwaitTimeMS,maxTimeMS,min,project,returnKey,showRecordId,skip,sort].ReturnValue"]
- [mongodb.FindCursor, mongodb.FindCursorStatic, Instance]
- [mongodb.FindCursor, mongodb.GridFSBucket, "Member[find].ReturnValue"]
- [mongodb.FindCursor, "mongodb/mongodb.FindCursor", ""]
- [mongodb.FindCursor, mongoose.mongodb.FindCursor, ""]
- [mongodb.FindCursorStatic, "mongodb/mongodb.FindCursorStatic", ""]
- [mongodb.FindCursorStatic, mongodb, "Member[FindCursor]"]
- [mongodb.FindCursorStatic, mongoose.mongodb.FindCursorStatic, ""]
- [mongodb.FindOneAndDeleteOptions, mongodb.Collection, "Member[findOneAndDelete].Argument[1]"]
- [mongodb.FindOneAndDeleteOptions, "mongodb/mongodb.FindOneAndDeleteOptions", ""]
- [mongodb.FindOneAndDeleteOptions, mongoose.mongodb.FindOneAndDeleteOptions, ""]
- [mongodb.FindOneAndReplaceOptions, mongodb.Collection, "Member[findOneAndReplace].Argument[2]"]
- [mongodb.FindOneAndReplaceOptions, "mongodb/mongodb.FindOneAndReplaceOptions", ""]
- [mongodb.FindOneAndReplaceOptions, mongoose.mongodb.FindOneAndReplaceOptions, ""]
- [mongodb.FindOneAndUpdateOptions, mongodb.Collection, "Member[findOneAndUpdate].Argument[2]"]
- [mongodb.FindOneAndUpdateOptions, "mongodb/mongodb.FindOneAndUpdateOptions", ""]
- [mongodb.FindOneAndUpdateOptions, mongoose.mongodb.FindOneAndUpdateOptions, ""]
- [mongodb.FindOperators, mongodb.BulkOperationBase, "Member[find].ReturnValue"]
- [mongodb.FindOperators, mongodb.FindOperators, "Member[arrayFilters,collation,upsert].ReturnValue"]
- [mongodb.FindOperators, mongodb.FindOperatorsStatic, Instance]
- [mongodb.FindOperators, "mongodb/mongodb.FindOperators", ""]
- [mongodb.FindOperators, mongoose.mongodb.FindOperators, ""]
- [mongodb.FindOperatorsStatic, "mongodb/mongodb.FindOperatorsStatic", ""]
- [mongodb.FindOperatorsStatic, mongodb, "Member[FindOperators]"]
- [mongodb.FindOperatorsStatic, mongoose.mongodb.FindOperatorsStatic, ""]
- [mongodb.FindOptions, mongodb.Collection, "Member[find,findOne].Argument[1]"]
- [mongodb.FindOptions, mongodb.GridFSBucket, "Member[find].Argument[1]"]
- [mongodb.FindOptions, "mongodb/mongodb.FindOptions", ""]
- [mongodb.FindOptions, mongoose.mongodb.FindOptions, ""]
- [mongodb.GridFSBucket, mongodb.GridFSBucketStatic, Instance]
- [mongodb.GridFSBucket, mongodb.GridFSBucketWriteStream, "Member[bucket]"]
- [mongodb.GridFSBucket, "mongodb/mongodb.GridFSBucket", ""]
- [mongodb.GridFSBucket, mongoose.mongodb.GridFSBucket, ""]
- [mongodb.GridFSBucketStatic, "mongodb/mongodb.GridFSBucketStatic", ""]
- [mongodb.GridFSBucketStatic, mongodb, "Member[GridFSBucket]"]
- [mongodb.GridFSBucketStatic, mongoose.mongodb.GridFSBucketStatic, ""]
- [mongodb.GridFSBucketWriteStream, mongodb.GridFSBucket, "Member[openUploadStream,openUploadStreamWithId].ReturnValue"]
- [mongodb.GridFSBucketWriteStream, mongodb.GridFSBucketWriteStream, "Member[end].ReturnValue"]
- [mongodb.GridFSBucketWriteStream, mongodb.GridFSBucketWriteStreamStatic, Instance]
- [mongodb.GridFSBucketWriteStream, "mongodb/mongodb.GridFSBucketWriteStream", ""]
- [mongodb.GridFSBucketWriteStream, mongoose.mongodb.GridFSBucketWriteStream, ""]
- [mongodb.GridFSBucketWriteStreamStatic, "mongodb/mongodb.GridFSBucketWriteStreamStatic", ""]
- [mongodb.GridFSBucketWriteStreamStatic, mongodb, "Member[GridFSBucketWriteStream]"]
- [mongodb.GridFSBucketWriteStreamStatic, mongoose.mongodb.GridFSBucketWriteStreamStatic, ""]
- [mongodb.IndexInformationOptions, mongodb.Collection, "Member[indexExists].Argument[1]"]
- [mongodb.IndexInformationOptions, mongodb.Collection, "Member[indexInformation,indexes].Argument[0]"]
- [mongodb.IndexInformationOptions, mongodb.Db, "Member[indexInformation].Argument[1]"]
- [mongodb.IndexInformationOptions, "mongodb/mongodb.IndexInformationOptions", ""]
- [mongodb.IndexInformationOptions, mongoose.mongodb.IndexInformationOptions, ""]
- [mongodb.InsertOneOptions, mongodb.Collection, "Member[insertOne].Argument[1]"]
- [mongodb.InsertOneOptions, "mongodb/mongodb.InsertOneOptions", ""]
- [mongodb.InsertOneOptions, mongoose.mongodb.InsertOneOptions, ""]
- [mongodb.ListCollectionsCursor, mongodb.Db, "Member[listCollections].WithArity[0,1,2].ReturnValue"]
- [mongodb.ListCollectionsCursor, mongodb.ListCollectionsCursor, "Member[clone].ReturnValue"]
- [mongodb.ListCollectionsCursor, mongodb.ListCollectionsCursorStatic, Instance]
- [mongodb.ListCollectionsCursor, "mongodb/mongodb.ListCollectionsCursor", ""]
- [mongodb.ListCollectionsCursor, mongoose.mongodb.ListCollectionsCursor, ""]
- [mongodb.ListCollectionsCursorStatic, "mongodb/mongodb.ListCollectionsCursorStatic", ""]
- [mongodb.ListCollectionsCursorStatic, mongodb, "Member[ListCollectionsCursor]"]
- [mongodb.ListCollectionsCursorStatic, mongoose.mongodb.ListCollectionsCursorStatic, ""]
- [mongodb.ListCollectionsOptions, mongodb.Db, "Member[collections].Argument[0]"]
- [mongodb.ListCollectionsOptions, mongodb.Db, "Member[listCollections].WithArity[0,1,2].Argument[1]"]
- [mongodb.ListCollectionsOptions, mongodb.ListCollectionsCursor, "Member[options]"]
- [mongodb.ListCollectionsOptions, mongodb.ListCollectionsCursorStatic, "Argument[2]"]
- [mongodb.ListCollectionsOptions, "mongodb/mongodb.ListCollectionsOptions", ""]
- [mongodb.ListCollectionsOptions, mongoose.mongodb.ListCollectionsOptions, ""]
- [mongodb.ListDatabasesOptions, mongodb.Admin, "Member[listDatabases].Argument[0]"]
- [mongodb.ListDatabasesOptions, "mongodb/mongodb.ListDatabasesOptions", ""]
- [mongodb.ListDatabasesOptions, mongoose.mongodb.ListDatabasesOptions, ""]
- [mongodb.ListIndexesCursor, mongodb.Collection, "Member[listIndexes].ReturnValue"]
- [mongodb.ListIndexesCursor, mongodb.ListIndexesCursor, "Member[clone].ReturnValue"]
- [mongodb.ListIndexesCursor, mongodb.ListIndexesCursorStatic, Instance]
- [mongodb.ListIndexesCursor, "mongodb/mongodb.ListIndexesCursor", ""]
- [mongodb.ListIndexesCursor, mongoose.mongodb.ListIndexesCursor, ""]
- [mongodb.ListIndexesCursorStatic, "mongodb/mongodb.ListIndexesCursorStatic", ""]
- [mongodb.ListIndexesCursorStatic, mongodb, "Member[ListIndexesCursor]"]
- [mongodb.ListIndexesCursorStatic, mongoose.mongodb.ListIndexesCursorStatic, ""]
- [mongodb.ListIndexesOptions, mongodb.Collection, "Member[listIndexes].Argument[0]"]
- [mongodb.ListIndexesOptions, mongodb.ListIndexesCursor, "Member[options]"]
- [mongodb.ListIndexesOptions, mongodb.ListIndexesCursorStatic, "Argument[1]"]
- [mongodb.ListIndexesOptions, "mongodb/mongodb.ListIndexesOptions", ""]
- [mongodb.ListIndexesOptions, mongoose.mongodb.ListIndexesOptions, ""]
- [mongodb.MapReduceOptions, mongodb.Collection, "Member[mapReduce].Argument[2]"]
- [mongodb.MapReduceOptions, "mongodb/mongodb.MapReduceOptions", ""]
- [mongodb.MapReduceOptions, mongoose.mongodb.MapReduceOptions, ""]
- [mongodb.MongoClient, mongodb.AutoEncrypter, "Argument[0]"]
- [mongodb.MongoClient, mongodb.AutoEncryptionOptions, "Member[keyVaultClient]"]
- [mongodb.MongoClient, mongodb.ChangeStream, "Member[parent]"]
- [mongodb.MongoClient, mongodb.DbStatic, "Argument[0]"]
- [mongodb.MongoClient, mongodb.MongoClient, "Member[connect].Argument[0].TypeVar[mongodb.Callback.0]"]
- [mongodb.MongoClient, mongodb.MongoClient, "Member[connect].WithArity[0].ReturnValue.Awaited"]
- [mongodb.MongoClient, mongodb.MongoClientEvents, "Member[open].Argument[0]"]
- [mongodb.MongoClient, mongodb.MongoClientStatic, Instance]
- [mongodb.MongoClient, mongodb.MongoClientStatic, "Member[connect].Argument[1,2].TypeVar[mongodb.Callback.0]"]
- [mongodb.MongoClient, mongodb.MongoClientStatic, "Member[connect].WithArity[1,2].ReturnValue.Awaited"]
- [mongodb.MongoClient, "mongodb/mongodb.MongoClient", ""]
- [mongodb.MongoClient, mongoose.mongodb.MongoClient, ""]
- [mongodb.MongoClientEvents, "mongodb/mongodb.MongoClientEvents", ""]
- [mongodb.MongoClientEvents, mongoose.mongodb.MongoClientEvents, ""]
- [mongodb.MongoClientOptions, mongodb.MongoClientStatic, "Argument[1]"]
- [mongodb.MongoClientOptions, mongodb.MongoClientStatic, "Member[connect].Argument[1]"]
- [mongodb.MongoClientOptions, "mongodb/mongodb.MongoClientOptions", ""]
- [mongodb.MongoClientOptions, mongoose.mongodb.MongoClientOptions, ""]
- [mongodb.MongoClientStatic, "mongodb/mongodb.MongoClientStatic", ""]
- [mongodb.MongoClientStatic, mongodb, "Member[MongoClient]"]
- [mongodb.MongoClientStatic, mongoose.mongodb.MongoClientStatic, ""]
- [mongodb.MongoOptions, mongodb.ClientSession, "Member[clientOptions]"]
- [mongodb.MongoOptions, mongodb.MongoClient, "Member[options]"]
- [mongodb.MongoOptions, "mongodb/mongodb.MongoOptions", ""]
- [mongodb.MongoOptions, mongoose.mongodb.MongoOptions, ""]
- [mongodb.OperationOptions, mongodb.Collection, "Member[isCapped,options].Argument[0]"]
- [mongodb.OperationOptions, mongodb.CommandOperationOptions, ""]
- [mongodb.OperationOptions, "mongodb/mongodb.OperationOptions", ""]
- [mongodb.OperationOptions, mongoose.mongodb.OperationOptions, ""]
- [mongodb.OrderedBulkOperation, mongodb.Collection, "Member[initializeOrderedBulkOp].ReturnValue"]
- [mongodb.OrderedBulkOperation, mongodb.OrderedBulkOperation, "Member[addToOperationsList].ReturnValue"]
- [mongodb.OrderedBulkOperation, mongodb.OrderedBulkOperationStatic, Instance]
- [mongodb.OrderedBulkOperation, "mongodb/mongodb.OrderedBulkOperation", ""]
- [mongodb.OrderedBulkOperation, mongoose.mongodb.OrderedBulkOperation, ""]
- [mongodb.OrderedBulkOperationStatic, "mongodb/mongodb.OrderedBulkOperationStatic", ""]
- [mongodb.OrderedBulkOperationStatic, mongodb, "Member[OrderedBulkOperation]"]
- [mongodb.OrderedBulkOperationStatic, mongoose.mongodb.OrderedBulkOperationStatic, ""]
- [mongodb.ProfilingLevelOptions, mongodb.Db, "Member[profilingLevel].Argument[0]"]
- [mongodb.ProfilingLevelOptions, "mongodb/mongodb.ProfilingLevelOptions", ""]
- [mongodb.ProfilingLevelOptions, mongoose.mongodb.ProfilingLevelOptions, ""]
- [mongodb.ReadPreferenceFromOptions, mongodb.ReadPreferenceStatic, "Member[fromOptions].Argument[0]"]
- [mongodb.ReadPreferenceFromOptions, "mongodb/mongodb.ReadPreferenceFromOptions", ""]
- [mongodb.ReadPreferenceFromOptions, mongoose.mongodb.ReadPreferenceFromOptions, ""]
- [mongodb.ReadPreferenceStatic, "mongodb/mongodb.ReadPreferenceStatic", ""]
- [mongodb.ReadPreferenceStatic, mongodb, "Member[ReadPreference]"]
- [mongodb.ReadPreferenceStatic, mongoose.mongodb.ReadPreferenceStatic, ""]
- [mongodb.RemoveUserOptions, mongodb.Admin, "Member[removeUser].Argument[1]"]
- [mongodb.RemoveUserOptions, mongodb.Db, "Member[removeUser].Argument[1]"]
- [mongodb.RemoveUserOptions, "mongodb/mongodb.RemoveUserOptions", ""]
- [mongodb.RemoveUserOptions, mongoose.mongodb.RemoveUserOptions, ""]
- [mongodb.RenameOptions, mongodb.Collection, "Member[rename].Argument[1]"]
- [mongodb.RenameOptions, mongodb.Db, "Member[renameCollection].Argument[2]"]
- [mongodb.RenameOptions, "mongodb/mongodb.RenameOptions", ""]
- [mongodb.RenameOptions, mongoose.mongodb.RenameOptions, ""]
- [mongodb.ReplaceOptions, mongodb.Collection, "Member[replaceOne].Argument[2]"]
- [mongodb.ReplaceOptions, "mongodb/mongodb.ReplaceOptions", ""]
- [mongodb.ReplaceOptions, mongoose.mongodb.ReplaceOptions, ""]
- [mongodb.RunCommandOptions, mongodb.Admin, "Member[command].Argument[1]"]
- [mongodb.RunCommandOptions, mongodb.Db, "Member[command].Argument[1]"]
- [mongodb.RunCommandOptions, "mongodb/mongodb.RunCommandOptions", ""]
- [mongodb.RunCommandOptions, mongoose.mongodb.RunCommandOptions, ""]
- [mongodb.SelectServerOptions, "mongodb/mongodb.SelectServerOptions", ""]
- [mongodb.SelectServerOptions, mongoose.mongodb.SelectServerOptions, ""]
- [mongodb.SetProfilingLevelOptions, mongodb.Db, "Member[setProfilingLevel].Argument[1]"]
- [mongodb.SetProfilingLevelOptions, "mongodb/mongodb.SetProfilingLevelOptions", ""]
- [mongodb.SetProfilingLevelOptions, mongoose.mongodb.SetProfilingLevelOptions, ""]
- [mongodb.Transaction, mongodb.ClientSession, "Member[transaction]"]
- [mongodb.Transaction, mongodb.TransactionStatic, Instance]
- [mongodb.Transaction, "mongodb/mongodb.Transaction", ""]
- [mongodb.Transaction, mongoose.mongodb.Transaction, ""]
- [mongodb.TransactionOptions, mongodb.ClientSession, "Member[defaultTransactionOptions]"]
- [mongodb.TransactionOptions, mongodb.ClientSession, "Member[startTransaction].Argument[0]"]
- [mongodb.TransactionOptions, mongodb.ClientSession, "Member[withTransaction].Argument[1]"]
- [mongodb.TransactionOptions, mongodb.ClientSessionOptions, "Member[defaultTransactionOptions]"]
- [mongodb.TransactionOptions, mongodb.Transaction, "Member[options]"]
- [mongodb.TransactionOptions, "mongodb/mongodb.TransactionOptions", ""]
- [mongodb.TransactionOptions, mongoose.mongodb.TransactionOptions, ""]
- [mongodb.TransactionStatic, "mongodb/mongodb.TransactionStatic", ""]
- [mongodb.TransactionStatic, mongodb, "Member[Transaction]"]
- [mongodb.TransactionStatic, mongoose.mongodb.TransactionStatic, ""]
- [mongodb.TypedEventEmitter, mongodb.AbstractCursor, ""]
- [mongodb.TypedEventEmitter, mongodb.ChangeStream, ""]
- [mongodb.TypedEventEmitter, mongodb.ClientSession, ""]
- [mongodb.TypedEventEmitter, mongodb.GridFSBucket, ""]
- [mongodb.TypedEventEmitter, mongodb.MongoClient, ""]
- [mongodb.UnorderedBulkOperation, mongodb.Collection, "Member[initializeUnorderedBulkOp].ReturnValue"]
- [mongodb.UnorderedBulkOperation, mongodb.UnorderedBulkOperation, "Member[addToOperationsList].ReturnValue"]
- [mongodb.UnorderedBulkOperation, mongodb.UnorderedBulkOperationStatic, Instance]
- [mongodb.UnorderedBulkOperation, "mongodb/mongodb.UnorderedBulkOperation", ""]
- [mongodb.UnorderedBulkOperation, mongoose.mongodb.UnorderedBulkOperation, ""]
- [mongodb.UnorderedBulkOperationStatic, "mongodb/mongodb.UnorderedBulkOperationStatic", ""]
- [mongodb.UnorderedBulkOperationStatic, mongodb, "Member[UnorderedBulkOperation]"]
- [mongodb.UnorderedBulkOperationStatic, mongoose.mongodb.UnorderedBulkOperationStatic, ""]
- [mongodb.UpdateManyModel, mongodb.AnyBulkWriteOperation, "Member[updateMany]"]
- [mongodb.UpdateManyModel, "mongodb/mongodb.UpdateManyModel", ""]
- [mongodb.UpdateManyModel, mongoose.mongodb.UpdateManyModel, ""]
- [mongodb.UpdateOneModel, mongodb.AnyBulkWriteOperation, "Member[updateOne]"]
- [mongodb.UpdateOneModel, "mongodb/mongodb.UpdateOneModel", ""]
- [mongodb.UpdateOneModel, mongoose.mongodb.UpdateOneModel, ""]
- [mongodb.UpdateOptions, mongodb.Collection, "Member[update,updateMany,updateOne].Argument[2]"]
- [mongodb.UpdateOptions, "mongodb/mongodb.UpdateOptions", ""]
- [mongodb.UpdateOptions, mongoose.mongodb.UpdateOptions, ""]
- [mongodb.ValidateCollectionOptions, mongodb.Admin, "Member[validateCollection].Argument[1]"]
- [mongodb.ValidateCollectionOptions, "mongodb/mongodb.ValidateCollectionOptions", ""]
- [mongodb.ValidateCollectionOptions, mongoose.mongodb.ValidateCollectionOptions, ""]
- [mongodb.WithSessionCallback, mongodb.MongoClient, "Member[withSession].Argument[1]"]
- [mongodb.WithSessionCallback, mongodb.MongoClient, "Member[withSession].WithArity[1].Argument[0]"]
- [mongodb.WithSessionCallback, "mongodb/mongodb.WithSessionCallback", ""]
- [mongodb.WithSessionCallback, mongoose.mongodb.WithSessionCallback, ""]
- [mongodb.WithTransactionCallback, mongodb.ClientSession, "Member[withTransaction].Argument[0]"]
- [mongodb.WithTransactionCallback, "mongodb/mongodb.WithTransactionCallback", ""]
- [mongodb.WithTransactionCallback, mongoose.mongodb.WithTransactionCallback, ""]
- [mongodb, mongoose, "Member[mongodb]"]
- [mongoose.AcceptsDiscriminator, mongoose.Model, ""]
- [mongoose.AcceptsDiscriminator, mongoose.Schema.Types.Array, ""]
- [mongoose.AcceptsDiscriminator, mongoose.Schema.Types.DocumentArray, ""]
- [mongoose.AcceptsDiscriminator, mongoose.Schema.Types.Subdocument, ""]
- [mongoose.Aggregate, mongoose.Aggregate, "Member[addCursorFlag,addFields,allowDiskUse,append,collation,count,facet,graphLookup,group,hint,limit,lookup,match,model,near,option,project,read,readConcern,redact,replaceRoot,sample,search,session,skip,sort,sortByCount,unionWith,unwind].ReturnValue"]
- [mongoose.Aggregate, mongoose.AggregateStatic, Instance]
- [mongoose.Aggregate, mongoose.Model, "Member[aggregate].ReturnValue"]
- [mongoose.AggregateStatic, mongoose, "Member[Aggregate]"]
- [mongoose.Collection, mongoose.Collection, Instance]
- [mongoose.Collection, mongoose.Connection, "Member[collection].ReturnValue"]
- [mongoose.Collection, mongoose.Connection, "Member[collections].AnyMember"]
- [mongoose.Collection, mongoose.Document, "Member[collection]"]
- [mongoose.Collection, mongoose.Model, "Member[collection]"]
- [mongoose.Collection, mongoose, "Member[Collection]"]
- [mongoose.CollectionBase, mongoose.Collection, ""]
- [mongoose.CompileModelOptions, mongoose.Connection, "Member[model].Argument[3]"]
- [mongoose.CompileModelOptions, mongoose, "Member[model].Argument[3]"]
- [mongoose.ConnectOptions, mongoose.Connection, "Member[openUri].WithArity[1,2,3].Argument[1]"]
- [mongoose.ConnectOptions, mongoose, "Member[connect,createConnection].WithArity[1,2,3].Argument[1]"]
- [mongoose.Connection, mongoose.Collection, "Argument[1]"]
- [mongoose.Connection, mongoose.CollectionBase, "Member[conn]"]
- [mongoose.Connection, mongoose.CompileModelOptions, "Member[connection]"]
- [mongoose.Connection, mongoose.Connection, "Member[asPromise].ReturnValue.Awaited"]
- [mongoose.Connection, mongoose.Connection, "Member[deleteModel,plugin,setClient,useDb].ReturnValue"]
- [mongoose.Connection, mongoose.Connection, "Member[openUri].Argument[2].TypeVar[mongoose.Callback.0]"]
- [mongoose.Connection, mongoose.Connection, "Member[openUri].WithArity[1,2].ReturnValue.Awaited"]
- [mongoose.Connection, mongoose.Connection, "Member[openUri].WithArity[2,3].ReturnValue"]
- [mongoose.Connection, mongoose.Connection, "Member[openUri].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0]"]
- [mongoose.Connection, mongoose.ConnectionStatic, Instance]
- [mongoose.Connection, mongoose.Document, "Member[db]"]
- [mongoose.Connection, mongoose.Model, "Member[db]"]
- [mongoose.Connection, mongoose, "Member[connection]"]
- [mongoose.Connection, mongoose, "Member[connections].ArrayElement"]
- [mongoose.Connection, mongoose, "Member[createConnection].Argument[2].TypeVar[mongoose.Callback.0]"]
- [mongoose.Connection, mongoose, "Member[createConnection].WithArity[0,1,2].ReturnValue"]
- [mongoose.Connection, mongoose, "Member[createConnection].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0]"]
- [mongoose.ConnectionStatic, mongoose, "Member[Connection]"]
- [mongoose.Cursor, mongoose.Query, "Member[cursor].ReturnValue"]
- [mongoose.DiscriminatorModel, mongoose.DiscriminatorSchema, "TypeVar[mongoose.Schema.1]"]
- [mongoose.Document, mongoose.Document, "Member[$getAllSubdocs,$getPopulatedDocs].ReturnValue.ArrayElement"]
- [mongoose.Document, mongoose.Document, "Member[$inc,$parent,$set,depopulate,increment,init,overwrite,set].ReturnValue"]
- [mongoose.Document, mongoose.Document, "Member[delete,deleteOne].WithArity[0,1].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]"]
- [mongoose.Document, mongoose.Document, "Member[equals].Argument[0]"]
- [mongoose.Document, mongoose.Document, "Member[init].Argument[2].TypeVar[mongoose.Callback.0]"]
- [mongoose.Document, mongoose.Document, "Member[remove,save].WithArity[0,1].ReturnValue.Awaited"]
- [mongoose.Document, mongoose.Document, "Member[replaceOne,update,updateOne].ReturnValue.TypeVar[mongoose.Query.1]"]
- [mongoose.Document, mongoose.Document, "Member[save].Argument[1].TypeVar[mongoose.Callback.0]"]
- [mongoose.Document, mongoose.Document, "Member[save].WithArity[1].Argument[0].TypeVar[mongoose.Callback.0]"]
- [mongoose.Document, mongoose.DocumentStatic, Instance]
- [mongoose.Document, mongoose.Error.VersionErrorStatic, "Argument[0]"]
- [mongoose.Document, mongoose.HydratedDocument, ""]
- [mongoose.Document, mongoose.HydratedDocument, "TypeVar[mongoose.Require_id.0]"]
- [mongoose.Document, mongoose.Model, "Member[bulkSave].Argument[0].ArrayElement"]
- [mongoose.Document, mongoose.TVirtualPathFN, "Argument[2]"]
- [mongoose.Document, mongoose.Types.Subdocument, ""]
- [mongoose.Document, mongoose.Types.Subdocument, "Member[$parent,ownerDocument,parent].ReturnValue"]
- [mongoose.Document, mongoose.VirtualType, "Member[applyGetters,applySetters].Argument[1]"]
- [mongoose.DocumentStatic, mongoose, "Member[Document]"]
- [mongoose.Error.VersionErrorStatic, mongoose, "Member[Error].Member[VersionError]"]
- [mongoose.HydratedDocument, mongoose.Model, Instance]
- [mongoose.HydratedDocument, mongoose.Model, "Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,geoSearch,remove,replaceOne,update,updateMany,updateOne,where].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[$where,find,geoSearch,where].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[create,insertMany].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[create].WithArity[0..,1,2].ReturnValue.Awaited.ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[create].WithArity[1].ReturnValue.Awaited"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[create].WithArity[2].Argument[1].TypeVar[mongoose.Callback.0]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[exists].WithArity[1,2].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[find,insertMany].WithArity[3].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findById,findByIdAndDelete,findByIdAndRemove,findOne,findOneAndDelete,findOneAndRemove].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findById,findOne].Argument[3].TypeVar[mongoose.Callback.0]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findByIdAndDelete,findByIdAndRemove,findOneAndDelete,findOneAndRemove].Argument[2].Argument[1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findByIdAndUpdate,findOneAndReplace,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findByIdAndUpdate,findOneAndReplace,findOneAndUpdate].WithArity[3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.ModifyResult.0]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findByIdAndUpdate].WithArity[0,1,2,4].Argument[3].Argument[1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findByIdAndUpdate].WithArity[3].Argument[2,3].Argument[1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findById].WithArity[1,2,3].Argument[2].TypeVar[mongoose.Callback.0]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findOneAndReplace].WithArity[0,1,2,3,4].Argument[3].Argument[1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findOneAndUpdate].WithArity[3,4].Argument[3].Argument[1]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findOne].WithArity[0,1,2].Argument[1,2].TypeVar[mongoose.Callback.0]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[findOne].WithArity[3].Argument[2].TypeVar[mongoose.Callback.0]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[find].Argument[3].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[find].WithArity[0].Argument[0].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[find].WithArity[1].Argument[0,1,2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[find].WithArity[2].Argument[1,2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[geoSearch].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[hydrate].ReturnValue"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[init].ReturnValue.Awaited"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[insertMany].WithArity[1,2].ReturnValue.Awaited.ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[populate].WithArity[2,3].Argument[2].TypeVar[mongoose.Callback.0]"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[populate].WithArity[2,3].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[populate].WithArity[2,3].ReturnValue.Awaited"]
- [mongoose.HydratedDocument, mongoose.Model, "Member[populate].WithArity[2,3].ReturnValue.Awaited.ArrayElement"]
- [mongoose.HydratedDocument, mongoose.TVirtualPathFN, "Argument[1].TypeVar[mongoose.VirtualType.0]"]
- [mongoose.HydratedDocument, mongoose.VirtualPathFunctions, "Member[options].TypeVar[mongoose.VirtualTypeOptions.0]"]
- [mongoose.InsertManyOptions, mongoose.Model, "Member[insertMany].WithArity[2,3].Argument[1]"]
- [mongoose.Model, mongoose.AcceptsDiscriminator, "Member[discriminator].WithArity[2,3].ReturnValue"]
- [mongoose.Model, mongoose.Aggregate, "Member[model].Argument[0]"]
- [mongoose.Model, mongoose.Connection, "Member[model].WithArity[1,2,3,4].ReturnValue"]
- [mongoose.Model, mongoose.Connection, "Member[models].AnyMember"]
- [mongoose.Model, mongoose.DiscriminatorModel, ""]
- [mongoose.Model, mongoose.Document, "Member[$model].ReturnValue"]
- [mongoose.Model, mongoose.Document, "Member[populate].Argument[2]"]
- [mongoose.Model, mongoose.Model, "Member[discriminators].AnyMember"]
- [mongoose.Model, mongoose.Models, AnyMember]
- [mongoose.Model, mongoose.PopulateOptions, "Member[model]"]
- [mongoose.Model, mongoose.Query, "Member[cast].Argument[0]"]
- [mongoose.Model, mongoose.Query, "Member[populate].Argument[2]"]
- [mongoose.Model, mongoose.Schema.Types.Array, "Member[discriminator].WithArity[2,3].ReturnValue"]
- [mongoose.Model, mongoose.Schema.Types.DocumentArray, "Member[discriminator].WithArity[2,3].ReturnValue"]
- [mongoose.Model, mongoose.Schema.Types.Subdocument, "Member[discriminator].WithArity[2,3].ReturnValue"]
- [mongoose.Model, mongoose.SchemaStatic, "Instance.TypeVar[mongoose.Schema.1]"]
- [mongoose.Model, mongoose, "Member[Model]"]
- [mongoose.Model, mongoose, "Member[model].ReturnValue"]
- [mongoose.Models, mongoose, "Member[models]"]
- [mongoose.PopulateOption, mongoose.InsertManyOptions, ""]
- [mongoose.PopulateOption, mongoose.QueryOptions, ""]
- [mongoose.PopulateOptions, mongoose.Document, "Member[populate].Argument[4]"]
- [mongoose.PopulateOptions, mongoose.Document, "Member[populate].WithArity[1,2].Argument[0]"]
- [mongoose.PopulateOptions, mongoose.Document, "Member[populate].WithArity[1,2].Argument[0].ArrayElement"]
- [mongoose.PopulateOptions, mongoose.Model, "Member[populate].Argument[1]"]
- [mongoose.PopulateOptions, mongoose.Model, "Member[populate].Argument[1].ArrayElement"]
- [mongoose.PopulateOptions, mongoose.PopulateOption, "Member[populate]"]
- [mongoose.PopulateOptions, mongoose.PopulateOption, "Member[populate].ArrayElement"]
- [mongoose.PopulateOptions, mongoose.PopulateOptions, "Member[populate]"]
- [mongoose.PopulateOptions, mongoose.PopulateOptions, "Member[populate].ArrayElement"]
- [mongoose.PopulateOptions, mongoose.Query, "Member[populate].WithArity[1].Argument[0]"]
- [mongoose.PopulateOptions, mongoose.Query, "Member[populate].WithArity[1].Argument[0].ArrayElement"]
- [mongoose.Query, mongoose.Document, "Member[replaceOne,update,updateOne].ReturnValue"]
- [mongoose.Query, mongoose.HydratedDocument, "TypeVar[mongoose.Require_id.0]"]
- [mongoose.Query, mongoose.Query, "Member[all,allowDiskUse,and,batchSize,box,circle,clone,collation,comment,elemMatch,equals,exists,explain,geometry,gt,gte,hint,in,intersects,j,limit,lt,lte,maxDistance,maxScan,maxTimeMS,merge,mod,ne,near,nin,nor,or,polygon,read,readConcern,regex,remove,select,session,set,setOptions,size,skip,slice,snapshot,sort,tailable,w,where,within,wtimeout].ReturnValue"]
- [mongoose.Query, mongoose.Query, "Member[error].WithArity[1].ReturnValue"]
- [mongoose.Query, mongoose.Query, "Member[merge].Argument[0]"]
- [mongoose.Query, mongoose.QueryStatic, Instance]
- [mongoose.Query, mongoose.QueryWithHelpers, ""]
- [mongoose.QueryOptions, mongoose.Document, "Member[delete,deleteOne,remove].WithArity[0,1,2].Argument[0]"]
- [mongoose.QueryOptions, mongoose.Document, "Member[replaceOne,update,updateOne].Argument[1]"]
- [mongoose.QueryOptions, mongoose.Model, "Member[countDocuments,findByIdAndDelete,findByIdAndRemove,findOneAndDelete,findOneAndRemove].Argument[1]"]
- [mongoose.QueryOptions, mongoose.Model, "Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[1]"]
- [mongoose.QueryOptions, mongoose.Model, "Member[estimatedDocumentCount].Argument[0]"]
- [mongoose.QueryOptions, mongoose.Model, "Member[find,findById].WithArity[1,2,3,4].Argument[2]"]
- [mongoose.QueryOptions, mongoose.Model, "Member[findByIdAndUpdate,findOne,findOneAndReplace,findOneAndUpdate].WithArity[0,1,2,3,4].Argument[2]"]
- [mongoose.QueryOptions, mongoose.Model, "Member[replaceOne,update,updateMany,updateOne].Argument[2]"]
- [mongoose.QueryOptions, mongoose.PopulateOptions, "Member[options]"]
- [mongoose.QueryOptions, mongoose.Query, "Member[countDocuments,findByIdAndDelete,findOneAndDelete,findOneAndRemove].Argument[1]"]
- [mongoose.QueryOptions, mongoose.Query, "Member[cursor,estimatedDocumentCount,setOptions].Argument[0]"]
- [mongoose.QueryOptions, mongoose.Query, "Member[cursor].ReturnValue.TypeVar[mongoose.Cursor.1]"]
- [mongoose.QueryOptions, mongoose.Query, "Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[1]"]
- [mongoose.QueryOptions, mongoose.Query, "Member[findByIdAndUpdate,findOne,findOneAndUpdate].WithArity[0,1,2,3,4].Argument[2]"]
- [mongoose.QueryOptions, mongoose.Query, "Member[find].WithArity[1,2,3,4].Argument[2]"]
- [mongoose.QueryOptions, mongoose.Query, "Member[getOptions].ReturnValue"]
- [mongoose.QueryOptions, mongoose.Query, "Member[replaceOne,update,updateMany,updateOne].Argument[2]"]
- [mongoose.QueryOptions, mongoose.VirtualTypeOptions, "Member[options]"]
- [mongoose.QueryStatic, mongoose, "Member[Query]"]
- [mongoose.QueryWithHelpers, mongoose.Document, "Member[delete,deleteOne].WithArity[0,1].ReturnValue"]
- [mongoose.QueryWithHelpers, mongoose.Model, "Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,findById,findByIdAndDelete,findByIdAndRemove,findOne,findOneAndDelete,findOneAndRemove,geoSearch,remove,replaceOne,update,updateMany,updateOne,where].ReturnValue"]
- [mongoose.QueryWithHelpers, mongoose.Model, "Member[exists].WithArity[1,2].ReturnValue"]
- [mongoose.QueryWithHelpers, mongoose.Model, "Member[findByIdAndUpdate,findOneAndReplace,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue"]
- [mongoose.QueryWithHelpers, mongoose.Query, "Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,findByIdAndDelete,findOne,findOneAndDelete,findOneAndRemove,lean,orFail,populate,replaceOne,transform,update,updateMany,updateOne].ReturnValue"]
- [mongoose.QueryWithHelpers, mongoose.Query, "Member[findByIdAndUpdate,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue"]
- [mongoose.QueryWithHelpers, mongoose.Query, "Member[toConstructor].ReturnValue.Instance"]
- [mongoose.Schema.Types.Array, mongoose.Schema.Types.Array, "Member[enum].ReturnValue"]
- [mongoose.Schema.Types.Array, mongoose.Schema.Types.ArrayStatic, Instance]
- [mongoose.Schema.Types.ArrayStatic, mongoose, "Member[Schema].Member[Types].Member[Array]"]
- [mongoose.Schema.Types.DocumentArray, mongoose.Schema.Types.DocumentArrayStatic, Instance]
- [mongoose.Schema.Types.DocumentArrayStatic, mongoose, "Member[Schema].Member[Types].Member[DocumentArray]"]
- [mongoose.Schema.Types.Subdocument, mongoose.Schema.Types.SubdocumentStatic, Instance]
- [mongoose.Schema.Types.SubdocumentStatic, mongoose.Schema.Types.DocumentArray, "Member[caster]"]
- [mongoose.Schema.Types.SubdocumentStatic, mongoose, "Member[Schema].Member[Types].Member[Subdocument]"]
- [mongoose.SchemaStatic, mongoose, "Member[Schema]"]
- [mongoose.SessionOperation, mongoose.Aggregate, ""]
- [mongoose.SessionOperation, mongoose.Query, ""]
- [mongoose.TVirtualPathFN, mongoose.VirtualPathFunctions, "Member[get,set]"]
- [mongoose.Types.Array, mongoose.Types.DocumentArray, ""]
- [mongoose.Types.ArraySubdocument, mongoose.Types.ArraySubdocumentStatic, Instance]
- [mongoose.Types.ArraySubdocumentStatic, mongoose, "Member[Types].Member[ArraySubdocument]"]
- [mongoose.Types.DocumentArray, mongoose.Types.ArraySubdocument, "Member[parentArray].ReturnValue"]
- [mongoose.Types.DocumentArray, mongoose.Types.DocumentArrayStatic, Instance]
- [mongoose.Types.DocumentArray, "mongoose/inferschematype.ResolvePathType", "TypeVar[mongoose.IfEquals.3]"]
- [mongoose.Types.DocumentArrayStatic, mongoose, "Member[Types].Member[DocumentArray]"]
- [mongoose.Types.ObjectId, "mongoose/inferschematype.ResolvePathType", ""]
- [mongoose.Types.Subdocument, mongoose.Types.ArraySubdocument, ""]
- [mongoose.Types.Subdocument, mongoose.Types.DocumentArray, "Member[create,id].ReturnValue"]
- [mongoose.Types.Subdocument, mongoose.Types.DocumentArray, "TypeVar[mongoose.Types.Array.0]"]
- [mongoose.Types.Subdocument, mongoose.Types.SubdocumentStatic, Instance]
- [mongoose.Types.SubdocumentStatic, mongoose, "Member[Types].Member[Subdocument]"]
- [mongoose.VirtualType, mongoose.TVirtualPathFN, "Argument[1]"]
- [mongoose.VirtualType, mongoose.VirtualType, "Member[get,set].Argument[0].Argument[1]"]
- [mongoose.VirtualType, mongoose.VirtualType, "Member[get,set].ReturnValue"]
- [mongoose.VirtualType, mongoose.VirtualTypeStatic, Instance]
- [mongoose.VirtualTypeOptions, mongoose.VirtualPathFunctions, "Member[options]"]
- [mongoose.VirtualTypeStatic, mongoose, "Member[VirtualType]"]
- ["mongoose/inferschematype.ResolvePathType", "mongoose/inferschematype.ObtainDocumentPathType", ""]
- ["mongoose/inferschematype.ResolvePathType", "mongoose/inferschematype.ResolvePathType", "TypeVar[mongoose.IfEquals.3].ArrayElement"]
- ["mongoose/inferschematype.ResolvePathType", "mongoose/inferschematype.ResolvePathType", "TypeVar[mongoose.IfEquals.3].TypeVar[mongoose.Types.DocumentArray.0]"]
- [mongoose, mongoose, "Member[mongoose]"]
- addsTo:
pack: codeql/javascript-all
extensible: summaryModel
data:
- [mongodb.AbstractCursor, "", "", "Member[addCursorFlag,batchSize,maxTimeMS,withReadConcern,withReadPreference].ReturnValue", type]
- [mongodb.BulkOperationBase, "", "", "Member[addToOperationsList,raw].ReturnValue", type]
- [mongodb.FindCursor, "", "", "Member[addQueryModifier,allowDiskUse,collation,comment,filter,hint,limit,max,maxAwaitTimeMS,maxTimeMS,min,returnKey,showRecordId,skip,sort].ReturnValue", type]
- [mongodb.FindOperators, "", "", "Member[arrayFilters,collation,upsert].ReturnValue", type]
- [mongodb.GridFSBucketWriteStream, "", "", "Member[end].ReturnValue", type]
- [mongodb.MongoClient, "", "", "Member[connect].Argument[0].TypeVar[mongodb.Callback.0]", type]
- [mongodb.MongoClient, "", "", "Member[connect].WithArity[0].ReturnValue.Awaited", type]
- [mongodb.OrderedBulkOperation, "", "", "Member[addToOperationsList].ReturnValue", type]
- [mongodb.TypedEventEmitter, "", "", "Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue", type]
- [mongodb.UnorderedBulkOperation, "", "", "Member[addToOperationsList].ReturnValue", type]
- [mongoose.Aggregate, "", "", "Member[addCursorFlag,addFields,allowDiskUse,append,collation,count,facet,graphLookup,group,hint,limit,lookup,match,model,near,option,project,read,readConcern,redact,replaceRoot,sample,search,session,skip,sort,sortByCount,unionWith,unwind].ReturnValue", type]
- [mongoose.Connection, "", "", "Member[asPromise].ReturnValue.Awaited", type]
- [mongoose.Connection, "", "", "Member[deleteModel,setClient].ReturnValue", type]
- [mongoose.Cursor, "", "", "Member[addCursorFlag].ReturnValue", type]
- [mongoose.Document, "", "", "Member[$inc,$set,depopulate,increment,init,overwrite,set].ReturnValue", type]
- [mongoose.Document, "", "", "Member[delete,deleteOne].WithArity[0,1].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]", type]
- [mongoose.Document, "", "", "Member[getChanges].ReturnValue.TypeVar[mongoose.UpdateQuery.0]", type]
- [mongoose.Document, "", "", "Member[init].Argument[2].TypeVar[mongoose.Callback.0]", type]
- [mongoose.Document, "", "", "Member[populate].Argument[1,5].TypeVar[mongoose.Callback.0].TypeVar[mongoose.MergeType.0]", type]
- [mongoose.Document, "", "", "Member[populate].WithArity[1,2,3,4,5].ReturnValue.Awaited.TypeVar[mongoose.MergeType.0]", type]
- [mongoose.Document, "", "", "Member[remove,save].WithArity[0,1].ReturnValue.Awaited", type]
- [mongoose.Document, "", "", "Member[replaceOne,update,updateOne].ReturnValue.TypeVar[mongoose.Query.1]", type]
- [mongoose.Document, "", "", "Member[save].Argument[1].TypeVar[mongoose.Callback.0]", type]
- [mongoose.Document, "", "", "Member[save].WithArity[1].Argument[0].TypeVar[mongoose.Callback.0]", type]
- [mongoose.Document, "", "", "Member[update,updateOne].Argument[0].TypeVar[mongoose.UpdateQuery.0]", type]
- [mongoose.Query, "", "", "Member[all,allowDiskUse,and,batchSize,box,circle,clone,collation,comment,elemMatch,equals,exists,explain,geometry,gt,gte,hint,in,intersects,j,limit,lt,lte,maxDistance,maxScan,maxTimeMS,merge,mod,ne,near,nin,nor,or,polygon,read,readConcern,regex,select,session,set,setOptions,size,skip,slice,snapshot,sort,tailable,w,where,within,wtimeout].ReturnValue", type]
- [mongoose.Query, "", "", "Member[error].WithArity[1].ReturnValue", type]
- [mongoose.Schema.Types.Array, "", "", "Member[enum].ReturnValue", type]
- [mongoose.SessionOperation, "", "", "Member[session].ReturnValue", type]
- [mongoose.Types.Array, "", "", "Member[pull,remove,set].ReturnValue", type]
- [mongoose.Types.ObjectId, "", "", "Member[_id]", type]
- [mongoose.VirtualType, "", "", "Member[get,set].ReturnValue", type]
- addsTo:
pack: codeql/javascript-all
extensible: typeVariableModel
data:
- [mongodb.Callback.0, "Argument[1]"]
- [mongoose.Callback.0, "Argument[1]"]
- [mongoose.Cursor.0, "Member[eachAsync].WithArity[1,2,3].Argument[0].Argument[0]"]
- [mongoose.Cursor.0, "Member[eachAsync].WithArity[2,3].Argument[0].Argument[0].ArrayElement"]
- [mongoose.Cursor.0, "Member[map].Argument[0].Argument[0]"]
- [mongoose.Cursor.0, "Member[next].Argument[0].TypeVar[mongoose.Callback.0]"]
- [mongoose.Cursor.0, "Member[next].WithArity[0].ReturnValue.Awaited"]
- [mongoose.Cursor.1, "Member[map].ReturnValue.TypeVar[mongoose.Cursor.1]"]
- [mongoose.Cursor.1, "Member[options]"]
- [mongoose.DiscriminatorSchema.1, "TypeVar[mongoose.Schema.1]"]
- [mongoose.DiscriminatorSchema.1, "TypeVar[mongoose.Schema.1].TypeVar[mongoose.DiscriminatorModel.1]"]
- [mongoose.Document.0, "Member[_id]"]
- [mongoose.Document.0, "Member[equals].Argument[0].TypeVar[mongoose.Document.0]"]
- [mongoose.FilterQuery.0, "TypeVar[mongoose._FilterQuery.0]"]
- [mongoose.IfAny.1, ""]
- [mongoose.IfAny.2, ""]
- [mongoose.IfEquals.3, ""]
- [mongoose.LeanDocumentOrArray.0, ""]
- [mongoose.LeanDocumentOrArray.0, "TypeVar[mongoose.LeanDocument.0]"]
- [mongoose.LeanDocumentOrArrayWithRawType.0, ""]
- [mongoose.ModifyResult.0, "Member[value].TypeVar[mongoose.Require_id.0]"]
- [mongoose.PluginFunction.1, "Argument[0].TypeVar[mongoose.Schema.1]"]
- [mongoose.PostMiddlewareFunction.1, "Argument[0]"]
- [mongoose.Query.0, "Member[exec].Argument[0].TypeVar[mongoose.Callback.0]"]
- [mongoose.Query.0, "Member[exec].WithArity[0].ReturnValue.Awaited"]
- [mongoose.Query.0, "Member[lean].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.LeanDocumentOrArray.0,mongoose.LeanDocumentOrArrayWithRawType.0]"]
- [mongoose.Query.0, "Member[orFail].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0]"]
- [mongoose.Query.0, "Member[populate].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.UnpackedIntersection.0]"]
- [mongoose.Query.0, "Member[then,transform].Argument[0].Argument[0]"]
- [mongoose.Query.0, "Member[toConstructor].ReturnValue.Instance.TypeVar[mongoose.QueryWithHelpers.0]"]
- [mongoose.Query.1, "Member[$where,count,countDocuments,deleteMany,deleteOne,distinct,estimatedDocumentCount,find,lean,orFail,populate,replaceOne,transform,update,updateMany,updateOne].ReturnValue.TypeVar[mongoose.QueryWithHelpers.1]"]
- [mongoose.Query.1, "Member[$where,find].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].ArrayElement"]
- [mongoose.Query.1, "Member[_mongooseOptions].TypeVar[mongoose.MongooseQueryOptions.0]"]
- [mongoose.Query.1, "Member[and,nor,or].Argument[0].ArrayElement.TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[countDocuments,findByIdAndDelete,findOneAndDelete,findOneAndRemove].Argument[1].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[countDocuments].WithArity[1,2,3].Argument[0].TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[count].WithArity[1,2].Argument[0].TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[cursor,estimatedDocumentCount,setOptions].Argument[0].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[cursor].ReturnValue.TypeVar[mongoose.Cursor.0]"]
- [mongoose.Query.1, "Member[cursor].ReturnValue.TypeVar[mongoose.Cursor.1].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[0].TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[deleteMany,deleteOne].WithArity[0,1,2,3].Argument[1].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[distinct].Argument[1].TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[findByIdAndDelete,findOne,findOneAndDelete,findOneAndRemove].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]"]
- [mongoose.Query.1, "Member[findByIdAndDelete,findOneAndDelete,findOneAndRemove].Argument[2].Argument[1]"]
- [mongoose.Query.1, "Member[findByIdAndUpdate,findOneAndUpdate,update,updateMany,updateOne].Argument[1].TypeVar[mongoose.UpdateQuery.0]"]
- [mongoose.Query.1, "Member[findByIdAndUpdate,findOneAndUpdate].WithArity[0,1,2,3,4].Argument[2].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[findByIdAndUpdate,findOneAndUpdate].WithArity[0,1,2,3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0,mongoose.QueryWithHelpers.1]"]
- [mongoose.Query.1, "Member[findByIdAndUpdate].WithArity[0,1,2,4].Argument[3].Argument[1]"]
- [mongoose.Query.1, "Member[findByIdAndUpdate].WithArity[3].Argument[2,3].Argument[1]"]
- [mongoose.Query.1, "Member[findOne,findOneAndDelete,findOneAndRemove,findOneAndUpdate,merge,remove,replaceOne,setQuery,update,updateMany,updateOne].Argument[0].TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[findOneAndUpdate].Argument[3].Argument[1]"]
- [mongoose.Query.1, "Member[findOneAndUpdate].Argument[3].Argument[2].TypeVar[mongoose.ModifyResult.0]"]
- [mongoose.Query.1, "Member[findOneAndUpdate].WithArity[3,4].ReturnValue.TypeVar[mongoose.QueryWithHelpers.0].TypeVar[mongoose.ModifyResult.0]"]
- [mongoose.Query.1, "Member[findOne].Argument[3].TypeVar[mongoose.Callback.0]"]
- [mongoose.Query.1, "Member[findOne].WithArity[0,1,2,3].Argument[2].TypeVar[mongoose.Callback.0,mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[findOne].WithArity[0,1,2].Argument[1].TypeVar[mongoose.Callback.0,mongoose.ProjectionType.0]"]
- [mongoose.Query.1, "Member[findOne].WithArity[3,4].Argument[1].TypeVar[mongoose.ProjectionType.0]"]
- [mongoose.Query.1, "Member[findOne].WithArity[4].Argument[2].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[find].Argument[3].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.Query.1, "Member[find].WithArity[0].Argument[0].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.Query.1, "Member[find].WithArity[1,2,3,4].Argument[0].TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[find].WithArity[1,2,3,4].Argument[1].TypeVar[mongoose.ProjectionType.0]"]
- [mongoose.Query.1, "Member[find].WithArity[1,2,3,4].Argument[2].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[find].WithArity[1].Argument[0,1,2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.Query.1, "Member[find].WithArity[2].Argument[1,2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.Query.1, "Member[find].WithArity[3].Argument[2].TypeVar[mongoose.Callback.0].ArrayElement"]
- [mongoose.Query.1, "Member[getFilter,getQuery].ReturnValue.TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Query.1, "Member[getOptions].ReturnValue.TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[getUpdate].ReturnValue.TypeVar[mongoose.UpdateQuery.0]"]
- [mongoose.Query.1, "Member[projection].WithArity[0,1].Argument[0].TypeVar[mongoose.ProjectionFields.0]"]
- [mongoose.Query.1, "Member[projection].WithArity[0,1].ReturnValue.TypeVar[mongoose.ProjectionFields.0]"]
- [mongoose.Query.1, "Member[remove].ReturnValue.TypeVar[mongoose.Query.1]"]
- [mongoose.Query.1, "Member[replaceOne,update,updateMany,updateOne].Argument[2].TypeVar[mongoose.QueryOptions.0]"]
- [mongoose.Query.1, "Member[replaceOne].Argument[1]"]
- [mongoose.Query.1, "Member[setUpdate].Argument[0].TypeVar[mongoose.UpdateQuery.0]"]
- [mongoose.Query.1, "Member[toConstructor].ReturnValue.Instance.TypeVar[mongoose.QueryWithHelpers.1]"]
- [mongoose.QueryOptions.0, "Member[projection].TypeVar[mongoose.ProjectionType.0]"]
- [mongoose.QueryWithHelpers.0, "TypeVar[mongoose.Query.0]"]
- [mongoose.QueryWithHelpers.1, "TypeVar[mongoose.Query.1]"]
- [mongoose.Require_id.0, ""]
- [mongoose.Require_id.0, "TypeVar[mongoose.IfAny.1,mongoose.IfAny.2]"]
- [mongoose.RootQuerySelector.0, "Member[$and,$nor,$or].ArrayElement.TypeVar[mongoose.FilterQuery.0]"]
- [mongoose.Schema.1, "Member[discriminator].ReturnValue.TypeVar[mongoose.DiscriminatorSchema.1]"]
- [mongoose.Schema.1, "Member[plugin].Argument[0].TypeVar[mongoose.PluginFunction.1]"]
- [mongoose.Schema.1, "Member[post].Argument[2].TypeVar[mongoose.ErrorHandlingMiddlewareFunction.0,mongoose.PostMiddlewareFunction.0,mongoose.PostMiddlewareFunction.1]"]
- [mongoose.Schema.1, "Member[post].WithArity[2].WithStringArgument[0=insertMany].Argument[1].TypeVar[mongoose.ErrorHandlingMiddlewareFunction.0,mongoose.PostMiddlewareFunction.0,mongoose.PostMiddlewareFunction.1]"]
- [mongoose.Types.Array.0, "Member[$pop,$shift,shift].ReturnValue"]
- [mongoose.Types.Array.0, "Member[set].Argument[1]"]
- [mongoose.Types.DocumentArray.0, "Member[create,id].ReturnValue"]
- [mongoose.Types.DocumentArray.0, "Member[create,id].ReturnValue.TypeVar[mongoose.Types.Subdocument.0].TypeVar[mongoose.InferId.0]"]
- [mongoose.Types.DocumentArray.0, "Member[push].Argument[0].ArrayElement.TypeVar[mongoose.AnyKeys.0]"]
- [mongoose.Types.DocumentArray.0, "TypeVar[mongoose.Types.Array.0]"]
- [mongoose.Types.DocumentArray.0, "TypeVar[mongoose.Types.Array.0].TypeVar[mongoose.Types.Subdocument.0].TypeVar[mongoose.InferId.0]"]
- [mongoose.Types.Subdocument.0, "TypeVar[mongoose.Document.0]"]
- [mongoose.UnpackedIntersection.0, ""]
- [mongoose.UpdateQuery.0, "TypeVar[mongoose._UpdateQuery.0].TypeVar[mongoose._UpdateQueryDef.0]"]
- [mongoose.VirtualType.0, "Member[get,set].Argument[0].Argument[1].TypeVar[mongoose.VirtualType.0]"]
- [mongoose.VirtualType.0, "Member[get,set].Argument[0].Argument[2]"]
- [mongoose.VirtualTypeOptions.0, "Member[foreignField,localField].Argument[0]"]
- [mongoose._FilterQuery.0, "TypeVar[mongoose.RootQuerySelector.0]"]
- [mongoose._UpdateQuery.0, "Member[$currentDate,$inc,$max,$min,$mul,$pop,$pull,$pullAll,$push,$set,$setOnInsert,$unset].TypeVar[mongoose.AnyKeys.0]"]

View File

@@ -1,45 +0,0 @@
/** Generated model file */
private import javascript
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[connect].ReturnValue.Awaited", //
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[pool]", //
"mssql;ConnectionPool;mssql;;Member[connect].ReturnValue.Awaited", //
"mssql;ConnectionPool;mssql;;Member[pool]", //
"mssql;ConnectionPool;mssql;ConnectionPool;Member[connect].WithArity[0].ReturnValue.Awaited", //
"mssql;ConnectionPool;mssql;ConnectionPoolStatic;Instance", //
"mssql;ConnectionPoolStatic;mssql/msnodesqlv8;;Member[ConnectionPool]", //
"mssql;ConnectionPoolStatic;mssql;;Member[ConnectionPool]", //
"mssql;PreparedStatement;mssql;PreparedStatement;Member[input,output].ReturnValue", //
"mssql;PreparedStatement;mssql;PreparedStatement;Member[prepare].WithArity[0,1,2].ReturnValue", //
"mssql;PreparedStatement;mssql;PreparedStatement;Member[unprepare].WithArity[1].ReturnValue", //
"mssql;PreparedStatement;mssql;PreparedStatementStatic;Instance", //
"mssql;PreparedStatement;mssql;Request;Member[pstatement]", //
"mssql;PreparedStatementStatic;mssql/msnodesqlv8;;Member[PreparedStatement]", //
"mssql;PreparedStatementStatic;mssql;;Member[PreparedStatement]", //
"mssql;Request;mssql;ConnectionPool;Member[request].ReturnValue", //
"mssql;Request;mssql;PreparedStatement;Member[execute].WithArity[2].ReturnValue", //
"mssql;Request;mssql;Request;Member[input,output,replaceInput].ReturnValue", //
"mssql;Request;mssql;Request;Member[replaceOutput].ReturnValue", //
"mssql;Request;mssql;RequestStatic;Instance", //
"mssql;Request;mssql;Transaction;Member[request].ReturnValue", //
"mssql;RequestStatic;mssql/msnodesqlv8;;Member[Request]", //
"mssql;RequestStatic;mssql;;Member[Request]", //
"mssql;Transaction;mssql;ConnectionPool;Member[transaction].ReturnValue", //
"mssql;Transaction;mssql;PreparedStatement;Member[transaction]", //
"mssql;Transaction;mssql;Request;Member[transaction]", //
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1,2].ReturnValue", //
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1].ReturnValue.Awaited", //
"mssql;Transaction;mssql;TransactionStatic;Instance", //
"mssql;TransactionStatic;mssql/msnodesqlv8;;Member[Transaction]", //
"mssql;TransactionStatic;mssql;;Member[Transaction]", //
"mssql;config;mssql/msnodesqlv8;;Member[connect].Argument[0]", //
"mssql;config;mssql;;Member[connect].Argument[0]", //
"mssql;config;mssql;ConnectionPoolStatic;WithArity[1,2].Argument[0]", //
]
}
}

View File

@@ -10,55 +10,55 @@
"language": "javascript",
"usedTypes": {
"sources": [
"mssql;Request",
"mssql;ConnectionPool"
"mssql.Request",
"mssql.ConnectionPool"
],
"sinks": [
"mssql;config"
"mssql.config"
]
},
"model": {
"typeDefinitions": [
"mssql;Request;mssql;Request;Member[replaceOutput].ReturnValue"
"mssql.Request;mssql.Request;Member[replaceOutput].ReturnValue"
],
"sinks": []
},
"generatedModel": {
"//": "Autogenerated section. Manual edits in here will be lost.",
"typeDefinitions": [
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[connect].ReturnValue.Awaited",
"mssql;ConnectionPool;mssql/msnodesqlv8;;Member[pool]",
"mssql;ConnectionPool;mssql;;Member[connect].ReturnValue.Awaited",
"mssql;ConnectionPool;mssql;;Member[pool]",
"mssql;ConnectionPool;mssql;ConnectionPool;Member[connect].WithArity[0].ReturnValue.Awaited",
"mssql;ConnectionPool;mssql;ConnectionPoolStatic;Instance",
"mssql;ConnectionPoolStatic;mssql/msnodesqlv8;;Member[ConnectionPool]",
"mssql;ConnectionPoolStatic;mssql;;Member[ConnectionPool]",
"mssql;PreparedStatement;mssql;PreparedStatement;Member[input,output].ReturnValue",
"mssql;PreparedStatement;mssql;PreparedStatement;Member[prepare].WithArity[0,1,2].ReturnValue",
"mssql;PreparedStatement;mssql;PreparedStatement;Member[unprepare].WithArity[1].ReturnValue",
"mssql;PreparedStatement;mssql;PreparedStatementStatic;Instance",
"mssql;PreparedStatement;mssql;Request;Member[pstatement]",
"mssql;PreparedStatementStatic;mssql/msnodesqlv8;;Member[PreparedStatement]",
"mssql;PreparedStatementStatic;mssql;;Member[PreparedStatement]",
"mssql;Request;mssql;ConnectionPool;Member[request].ReturnValue",
"mssql;Request;mssql;PreparedStatement;Member[execute].WithArity[2].ReturnValue",
"mssql;Request;mssql;Request;Member[input,output,replaceInput].ReturnValue",
"mssql;Request;mssql;RequestStatic;Instance",
"mssql;Request;mssql;Transaction;Member[request].ReturnValue",
"mssql;RequestStatic;mssql/msnodesqlv8;;Member[Request]",
"mssql;RequestStatic;mssql;;Member[Request]",
"mssql;Transaction;mssql;ConnectionPool;Member[transaction].ReturnValue",
"mssql;Transaction;mssql;PreparedStatement;Member[transaction]",
"mssql;Transaction;mssql;Request;Member[transaction]",
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1,2].ReturnValue",
"mssql;Transaction;mssql;Transaction;Member[begin].WithArity[0,1].ReturnValue.Awaited",
"mssql;Transaction;mssql;TransactionStatic;Instance",
"mssql;TransactionStatic;mssql/msnodesqlv8;;Member[Transaction]",
"mssql;TransactionStatic;mssql;;Member[Transaction]",
"mssql;config;mssql/msnodesqlv8;;Member[connect].Argument[0]",
"mssql;config;mssql;;Member[connect].Argument[0]",
"mssql;config;mssql;ConnectionPoolStatic;WithArity[1,2].Argument[0]"
"mssql.ConnectionPool;mssql.ConnectionPool;Member[connect].WithArity[0].ReturnValue.Awaited",
"mssql.ConnectionPool;mssql.ConnectionPoolStatic;Instance",
"mssql.ConnectionPool;mssql/msnodesqlv8;Member[connect].ReturnValue.Awaited",
"mssql.ConnectionPool;mssql/msnodesqlv8;Member[pool]",
"mssql.ConnectionPool;mssql;Member[connect].ReturnValue.Awaited",
"mssql.ConnectionPool;mssql;Member[pool]",
"mssql.ConnectionPoolStatic;mssql/msnodesqlv8;Member[ConnectionPool]",
"mssql.ConnectionPoolStatic;mssql;Member[ConnectionPool]",
"mssql.PreparedStatement;mssql.PreparedStatement;Member[input,output].ReturnValue",
"mssql.PreparedStatement;mssql.PreparedStatement;Member[prepare].WithArity[0,1,2].ReturnValue",
"mssql.PreparedStatement;mssql.PreparedStatement;Member[unprepare].WithArity[1].ReturnValue",
"mssql.PreparedStatement;mssql.PreparedStatementStatic;Instance",
"mssql.PreparedStatement;mssql.Request;Member[pstatement]",
"mssql.PreparedStatementStatic;mssql/msnodesqlv8;Member[PreparedStatement]",
"mssql.PreparedStatementStatic;mssql;Member[PreparedStatement]",
"mssql.Request;mssql.ConnectionPool;Member[request].ReturnValue",
"mssql.Request;mssql.PreparedStatement;Member[execute].WithArity[2].ReturnValue",
"mssql.Request;mssql.Request;Member[input,output,replaceInput].ReturnValue",
"mssql.Request;mssql.RequestStatic;Instance",
"mssql.Request;mssql.Transaction;Member[request].ReturnValue",
"mssql.RequestStatic;mssql/msnodesqlv8;Member[Request]",
"mssql.RequestStatic;mssql;Member[Request]",
"mssql.Transaction;mssql.ConnectionPool;Member[transaction].ReturnValue",
"mssql.Transaction;mssql.PreparedStatement;Member[transaction]",
"mssql.Transaction;mssql.Request;Member[transaction]",
"mssql.Transaction;mssql.Transaction;Member[begin].WithArity[0,1,2].ReturnValue",
"mssql.Transaction;mssql.Transaction;Member[begin].WithArity[0,1].ReturnValue.Awaited",
"mssql.Transaction;mssql.TransactionStatic;Instance",
"mssql.TransactionStatic;mssql/msnodesqlv8;Member[Transaction]",
"mssql.TransactionStatic;mssql;Member[Transaction]",
"mssql.config;mssql.ConnectionPoolStatic;WithArity[1,2].Argument[0]",
"mssql.config;mssql/msnodesqlv8;Member[connect].Argument[0]",
"mssql.config;mssql;Member[connect].Argument[0]"
],
"summaries": [],
"typeVariables": []

View File

@@ -0,0 +1,39 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- [mssql.ConnectionPool, mssql.ConnectionPool, "Member[connect].WithArity[0].ReturnValue.Awaited"]
- [mssql.ConnectionPool, mssql.ConnectionPoolStatic, Instance]
- [mssql.ConnectionPool, "mssql/msnodesqlv8", "Member[connect].ReturnValue.Awaited"]
- [mssql.ConnectionPool, "mssql/msnodesqlv8", "Member[pool]"]
- [mssql.ConnectionPool, mssql, "Member[connect].ReturnValue.Awaited"]
- [mssql.ConnectionPool, mssql, "Member[pool]"]
- [mssql.ConnectionPoolStatic, "mssql/msnodesqlv8", "Member[ConnectionPool]"]
- [mssql.ConnectionPoolStatic, mssql, "Member[ConnectionPool]"]
- [mssql.PreparedStatement, mssql.PreparedStatement, "Member[input,output].ReturnValue"]
- [mssql.PreparedStatement, mssql.PreparedStatement, "Member[prepare].WithArity[0,1,2].ReturnValue"]
- [mssql.PreparedStatement, mssql.PreparedStatement, "Member[unprepare].WithArity[1].ReturnValue"]
- [mssql.PreparedStatement, mssql.PreparedStatementStatic, Instance]
- [mssql.PreparedStatement, mssql.Request, "Member[pstatement]"]
- [mssql.PreparedStatementStatic, "mssql/msnodesqlv8", "Member[PreparedStatement]"]
- [mssql.PreparedStatementStatic, mssql, "Member[PreparedStatement]"]
- [mssql.Request, mssql.ConnectionPool, "Member[request].ReturnValue"]
- [mssql.Request, mssql.PreparedStatement, "Member[execute].WithArity[2].ReturnValue"]
- [mssql.Request, mssql.Request, "Member[input,output,replaceInput].ReturnValue"]
- [mssql.Request, mssql.Request, "Member[replaceOutput].ReturnValue"]
- [mssql.Request, mssql.RequestStatic, Instance]
- [mssql.Request, mssql.Transaction, "Member[request].ReturnValue"]
- [mssql.RequestStatic, "mssql/msnodesqlv8", "Member[Request]"]
- [mssql.RequestStatic, mssql, "Member[Request]"]
- [mssql.Transaction, mssql.ConnectionPool, "Member[transaction].ReturnValue"]
- [mssql.Transaction, mssql.PreparedStatement, "Member[transaction]"]
- [mssql.Transaction, mssql.Request, "Member[transaction]"]
- [mssql.Transaction, mssql.Transaction, "Member[begin].WithArity[0,1,2].ReturnValue"]
- [mssql.Transaction, mssql.Transaction, "Member[begin].WithArity[0,1].ReturnValue.Awaited"]
- [mssql.Transaction, mssql.TransactionStatic, Instance]
- [mssql.TransactionStatic, "mssql/msnodesqlv8", "Member[Transaction]"]
- [mssql.TransactionStatic, mssql, "Member[Transaction]"]
- [mssql.config, mssql.ConnectionPoolStatic, "WithArity[1,2].Argument[0]"]
- [mssql.config, "mssql/msnodesqlv8", "Member[connect].Argument[0]"]
- [mssql.config, mssql, "Member[connect].Argument[0]"]

View File

@@ -1,79 +0,0 @@
/** Generated model file */
private import javascript
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"mysql2/promise;Connection;mysql2/promise;;Member[createConnectionPromise].ReturnValue.Awaited", //
"mysql2/promise;Connection;mysql2/promise;;Member[createConnection].ReturnValue.Awaited", //
"mysql2/promise;Connection;mysql2/promise;PoolConnection;", //
"mysql2/promise;Connection;mysql2;;Member[createConnectionPromise].ReturnValue.Awaited", //
"mysql2/promise;Connection;mysql2;Connection;Member[promise].ReturnValue", //
"mysql2/promise;Pool;mysql2/promise;;Member[createPool].ReturnValue", //
"mysql2/promise;Pool;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
"mysql2/promise;Pool;mysql2;Pool;Member[promise].ReturnValue", //
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[getConnection].ReturnValue.Awaited", //
"mysql2/promise;PoolConnection;mysql2;PoolConnection;Member[promise].ReturnValue", //
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql/lib/PoolConnection;;", //
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql;Connection;", //
"mysql2/typings/mysql/lib/PoolConnection;;mysql2/typings/mysql;PoolConnection;", //
"mysql2/typings/mysql;Connection;mysql2;Connection;", //
"mysql2/typings/mysql;Connection;mysql2;Pool;", //
"mysql2/typings/mysql;PoolConnection;mysql2;PoolConnection;", //
"mysql2;Connection;mysql2;;Member[createConnection].ReturnValue", //
"mysql2;Connection;mysql2;PoolConnection;", //
"mysql2;Connection;mysql2;authPlugins;Argument[0].Member[connection]", //
"mysql2;ConnectionOptions;mysql2/promise;;Member[createConnection].Argument[0]", //
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[changeUser].Argument[0]", //
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[config]", //
"mysql2;ConnectionOptions;mysql2;;Member[createConnection].Argument[0]", //
"mysql2;ConnectionOptions;mysql2;PoolOptions;", //
"mysql2;Pool;mysql2;;Member[createPool].ReturnValue", //
"mysql2;Pool;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
"mysql2;PoolConnection;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
"mysql2;PoolConnection;mysql2;Pool;Member[getConnection].Argument[0].Argument[1]", //
"mysql2;PoolOptions;mysql2/promise;;Member[createPool].Argument[0]", //
"mysql2;PoolOptions;mysql2;;Member[createPool].Argument[0]", //
"mysql2;authPlugins;mysql2;ConnectionOptions;Member[authPlugins].AnyMember", //
"mysql;Connection;mysql;;Member[createConnection].ReturnValue", //
"mysql;Connection;mysql;Pool;Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]", //
"mysql;Connection;mysql;PoolConnection;", //
"mysql;Connection;mysql;Query;Member[RowDataPacket].Argument[2]", //
"mysql;ConnectionConfig;mysql;;Member[createConnection].Argument[0]", //
"mysql;ConnectionConfig;mysql;Connection;Member[config]", //
"mysql;ConnectionConfig;mysql;PoolConfig;", //
"mysql;ConnectionOptions;mysql;Connection;Member[changeUser].WithArity[1,2].Argument[0]", //
"mysql;ConnectionOptions;mysql;ConnectionConfig;", //
"mysql;Pool;mysql;;Member[createPool].ReturnValue", //
"mysql;Pool;mysql;PoolCluster;Member[of].ReturnValue", //
"mysql;PoolCluster;mysql;;Member[createPoolCluster].ReturnValue", //
"mysql;PoolConfig;mysql;;Member[createPool].Argument[0]", //
"mysql;PoolConfig;mysql;PoolCluster;Member[add].Argument[1]", //
"mysql;PoolConfig;mysql;PoolCluster;Member[add].WithArity[1].Argument[0]", //
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[0]", //
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[1].Argument[1]", //
"mysql;PoolConnection;mysql;Pool;Member[getConnection].Argument[0].Argument[1]", //
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].Argument[1,2].Argument[1]", //
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].WithArity[1].Argument[0].Argument[1]", //
"mysql;Query;mysql;Query;Member[on].ReturnValue", //
"mysql;Query;mysql;QueryFunction;ReturnValue", //
"mysql;Query;mysql;QueryFunction;WithArity[1].Argument[0]", //
"mysql;QueryFunction;mysql;Connection;Member[createQuery,query]", //
"mysql;QueryFunction;mysql;Pool;Member[query]", //
]
}
}
private class Summaries extends ModelInput::SummaryModelCsv {
override predicate row(string row) {
row =
[
"mysql2/promise;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
"mysql2/typings/mysql/lib/Connection;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
"mysql2;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
]
}
}

View File

@@ -11,89 +11,89 @@
"language": "javascript",
"usedTypes": {
"sources": [
"mysql;Pool",
"mysql;Connection",
"mysql2;Pool",
"mysql2;Connection",
"mysql2/promise;Pool",
"mysql2/promise;Connection"
"mysql.Pool",
"mysql.Connection",
"mysql2.Pool",
"mysql2.Connection",
"mysql2/promise.Pool",
"mysql2/promise.Connection"
],
"sinks": [
"mysql;ConnectionOptions",
"mysql2;ConnectionOptions",
"mysql2/promise;ConnectionOptions"
"mysql.ConnectionOptions",
"mysql2.ConnectionOptions",
"mysql2/promise.ConnectionOptions"
]
},
"model": {
"sinks": [],
"typeDefinitions": [
"mysql;Connection;mysql;Pool;Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
"mysql2/promise;Connection;mysql2;;Member[createConnectionPromise].ReturnValue.Awaited",
"mysql2/promise;Connection;mysql2/promise;;Member[createConnectionPromise].ReturnValue.Awaited"
"mysql.Connection;mysql.Pool;Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
"mysql2/promise.Connection;mysql2;Member[createConnectionPromise].ReturnValue.Awaited",
"mysql2/promise.Connection;mysql2/promise;Member[createConnectionPromise].ReturnValue.Awaited"
]
},
"generatedModel": {
"//": "Autogenerated section. Manual edits in here will be lost.",
"typeDefinitions": [
"mysql2/promise;Connection;mysql2/promise;;Member[createConnection].ReturnValue.Awaited",
"mysql2/promise;Connection;mysql2/promise;PoolConnection;",
"mysql2/promise;Connection;mysql2;Connection;Member[promise].ReturnValue",
"mysql2/promise;Pool;mysql2/promise;;Member[createPool].ReturnValue",
"mysql2/promise;Pool;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"mysql2/promise;Pool;mysql2;Pool;Member[promise].ReturnValue",
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
"mysql2/promise;PoolConnection;mysql2/promise;Pool;Member[getConnection].ReturnValue.Awaited",
"mysql2/promise;PoolConnection;mysql2;PoolConnection;Member[promise].ReturnValue",
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql/lib/PoolConnection;;",
"mysql2/typings/mysql/lib/Connection;;mysql2/typings/mysql;Connection;",
"mysql2/typings/mysql/lib/PoolConnection;;mysql2/typings/mysql;PoolConnection;",
"mysql2/typings/mysql;Connection;mysql2;Connection;",
"mysql2/typings/mysql;Connection;mysql2;Pool;",
"mysql2/typings/mysql;PoolConnection;mysql2;PoolConnection;",
"mysql2;Connection;mysql2;;Member[createConnection].ReturnValue",
"mysql2;Connection;mysql2;PoolConnection;",
"mysql2;Connection;mysql2;authPlugins;Argument[0].Member[connection]",
"mysql2;ConnectionOptions;mysql2/promise;;Member[createConnection].Argument[0]",
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[changeUser].Argument[0]",
"mysql2;ConnectionOptions;mysql2/promise;Connection;Member[config]",
"mysql2;ConnectionOptions;mysql2;;Member[createConnection].Argument[0]",
"mysql2;ConnectionOptions;mysql2;PoolOptions;",
"mysql2;Pool;mysql2;;Member[createPool].ReturnValue",
"mysql2;Pool;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"mysql2;PoolConnection;mysql2;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
"mysql2;PoolConnection;mysql2;Pool;Member[getConnection].Argument[0].Argument[1]",
"mysql2;PoolOptions;mysql2/promise;;Member[createPool].Argument[0]",
"mysql2;PoolOptions;mysql2;;Member[createPool].Argument[0]",
"mysql2;authPlugins;mysql2;ConnectionOptions;Member[authPlugins].AnyMember",
"mysql;Connection;mysql;;Member[createConnection].ReturnValue",
"mysql;Connection;mysql;PoolConnection;",
"mysql;Connection;mysql;Query;Member[RowDataPacket].Argument[2]",
"mysql;ConnectionConfig;mysql;;Member[createConnection].Argument[0]",
"mysql;ConnectionConfig;mysql;Connection;Member[config]",
"mysql;ConnectionConfig;mysql;PoolConfig;",
"mysql;ConnectionOptions;mysql;Connection;Member[changeUser].WithArity[1,2].Argument[0]",
"mysql;ConnectionOptions;mysql;ConnectionConfig;",
"mysql;Pool;mysql;;Member[createPool].ReturnValue",
"mysql;Pool;mysql;PoolCluster;Member[of].ReturnValue",
"mysql;PoolCluster;mysql;;Member[createPoolCluster].ReturnValue",
"mysql;PoolConfig;mysql;;Member[createPool].Argument[0]",
"mysql;PoolConfig;mysql;PoolCluster;Member[add].Argument[1]",
"mysql;PoolConfig;mysql;PoolCluster;Member[add].WithArity[1].Argument[0]",
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[0]",
"mysql;PoolConnection;mysql;Pool;Member[acquireConnection].Argument[1].Argument[1]",
"mysql;PoolConnection;mysql;Pool;Member[getConnection].Argument[0].Argument[1]",
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].Argument[1,2].Argument[1]",
"mysql;PoolConnection;mysql;PoolCluster;Member[getConnection].WithArity[1].Argument[0].Argument[1]",
"mysql;Query;mysql;Query;Member[on].ReturnValue",
"mysql;Query;mysql;QueryFunction;ReturnValue",
"mysql;Query;mysql;QueryFunction;WithArity[1].Argument[0]",
"mysql;QueryFunction;mysql;Connection;Member[createQuery,query]",
"mysql;QueryFunction;mysql;Pool;Member[query]"
"mysql.Connection;mysql.PoolConnection;",
"mysql.Connection;mysql.Query;Member[RowDataPacket].Argument[2]",
"mysql.Connection;mysql;Member[createConnection].ReturnValue",
"mysql.ConnectionConfig;mysql.Connection;Member[config]",
"mysql.ConnectionConfig;mysql.PoolConfig;",
"mysql.ConnectionConfig;mysql;Member[createConnection].Argument[0]",
"mysql.ConnectionOptions;mysql.Connection;Member[changeUser].WithArity[1,2].Argument[0]",
"mysql.ConnectionOptions;mysql.ConnectionConfig;",
"mysql.Pool;mysql.PoolCluster;Member[of].ReturnValue",
"mysql.Pool;mysql;Member[createPool].ReturnValue",
"mysql.PoolCluster;mysql;Member[createPoolCluster].ReturnValue",
"mysql.PoolConfig;mysql.PoolCluster;Member[add].Argument[1]",
"mysql.PoolConfig;mysql.PoolCluster;Member[add].WithArity[1].Argument[0]",
"mysql.PoolConfig;mysql;Member[createPool].Argument[0]",
"mysql.PoolConnection;mysql.Pool;Member[acquireConnection].Argument[0]",
"mysql.PoolConnection;mysql.Pool;Member[acquireConnection].Argument[1].Argument[1]",
"mysql.PoolConnection;mysql.Pool;Member[getConnection].Argument[0].Argument[1]",
"mysql.PoolConnection;mysql.PoolCluster;Member[getConnection].Argument[1,2].Argument[1]",
"mysql.PoolConnection;mysql.PoolCluster;Member[getConnection].WithArity[1].Argument[0].Argument[1]",
"mysql.Query;mysql.Query;Member[on].ReturnValue",
"mysql.Query;mysql.QueryFunction;ReturnValue",
"mysql.Query;mysql.QueryFunction;WithArity[1].Argument[0]",
"mysql.QueryFunction;mysql.Connection;Member[createQuery,query]",
"mysql.QueryFunction;mysql.Pool;Member[query]",
"mysql2.Connection;mysql2.PoolConnection;",
"mysql2.Connection;mysql2.authPlugins;Argument[0].Member[connection]",
"mysql2.Connection;mysql2;Member[createConnection].ReturnValue",
"mysql2.ConnectionOptions;mysql2.PoolOptions;",
"mysql2.ConnectionOptions;mysql2/promise.Connection;Member[changeUser].Argument[0]",
"mysql2.ConnectionOptions;mysql2/promise.Connection;Member[config]",
"mysql2.ConnectionOptions;mysql2/promise;Member[createConnection].Argument[0]",
"mysql2.ConnectionOptions;mysql2;Member[createConnection].Argument[0]",
"mysql2.Pool;mysql2.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"mysql2.Pool;mysql2;Member[createPool].ReturnValue",
"mysql2.PoolConnection;mysql2.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
"mysql2.PoolConnection;mysql2.Pool;Member[getConnection].Argument[0].Argument[1]",
"mysql2.PoolOptions;mysql2/promise;Member[createPool].Argument[0]",
"mysql2.PoolOptions;mysql2;Member[createPool].Argument[0]",
"mysql2.authPlugins;mysql2.ConnectionOptions;Member[authPlugins].AnyMember",
"mysql2/promise.Connection;mysql2.Connection;Member[promise].ReturnValue",
"mysql2/promise.Connection;mysql2/promise.PoolConnection;",
"mysql2/promise.Connection;mysql2/promise;Member[createConnection].ReturnValue.Awaited",
"mysql2/promise.Pool;mysql2.Pool;Member[promise].ReturnValue",
"mysql2/promise.Pool;mysql2/promise.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"mysql2/promise.Pool;mysql2/promise;Member[createPool].ReturnValue",
"mysql2/promise.PoolConnection;mysql2.PoolConnection;Member[promise].ReturnValue",
"mysql2/promise.PoolConnection;mysql2/promise.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]",
"mysql2/promise.PoolConnection;mysql2/promise.Pool;Member[getConnection].ReturnValue.Awaited",
"mysql2/typings/mysql.Connection;mysql2.Connection;",
"mysql2/typings/mysql.Connection;mysql2.Pool;",
"mysql2/typings/mysql.PoolConnection;mysql2.PoolConnection;",
"mysql2/typings/mysql/lib/Connection;mysql2/typings/mysql.Connection;",
"mysql2/typings/mysql/lib/Connection;mysql2/typings/mysql/lib/PoolConnection;",
"mysql2/typings/mysql/lib/PoolConnection;mysql2/typings/mysql.PoolConnection;"
],
"summaries": [
"mysql2/promise;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"mysql2/typings/mysql/lib/Connection;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"mysql2;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
"mysql2.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"mysql2/promise.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"mysql2/typings/mysql/lib/Connection;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
],
"typeVariables": []
}

View File

@@ -0,0 +1,70 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- [mysql.Connection, mysql.Pool, "Member[on,addListener].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]"]
- [mysql.Connection, mysql.PoolConnection, ""]
- [mysql.Connection, mysql.Query, "Member[RowDataPacket].Argument[2]"]
- [mysql.Connection, mysql, "Member[createConnection].ReturnValue"]
- [mysql.ConnectionConfig, mysql.Connection, "Member[config]"]
- [mysql.ConnectionConfig, mysql.PoolConfig, ""]
- [mysql.ConnectionConfig, mysql, "Member[createConnection].Argument[0]"]
- [mysql.ConnectionOptions, mysql.Connection, "Member[changeUser].WithArity[1,2].Argument[0]"]
- [mysql.ConnectionOptions, mysql.ConnectionConfig, ""]
- [mysql.Pool, mysql.PoolCluster, "Member[of].ReturnValue"]
- [mysql.Pool, mysql, "Member[createPool].ReturnValue"]
- [mysql.PoolCluster, mysql, "Member[createPoolCluster].ReturnValue"]
- [mysql.PoolConfig, mysql.PoolCluster, "Member[add].Argument[1]"]
- [mysql.PoolConfig, mysql.PoolCluster, "Member[add].WithArity[1].Argument[0]"]
- [mysql.PoolConfig, mysql, "Member[createPool].Argument[0]"]
- [mysql.PoolConnection, mysql.Pool, "Member[acquireConnection].Argument[0]"]
- [mysql.PoolConnection, mysql.Pool, "Member[acquireConnection].Argument[1].Argument[1]"]
- [mysql.PoolConnection, mysql.Pool, "Member[getConnection].Argument[0].Argument[1]"]
- [mysql.PoolConnection, mysql.PoolCluster, "Member[getConnection].Argument[1,2].Argument[1]"]
- [mysql.PoolConnection, mysql.PoolCluster, "Member[getConnection].WithArity[1].Argument[0].Argument[1]"]
- [mysql.Query, mysql.Query, "Member[on].ReturnValue"]
- [mysql.Query, mysql.QueryFunction, ReturnValue]
- [mysql.Query, mysql.QueryFunction, "WithArity[1].Argument[0]"]
- [mysql.QueryFunction, mysql.Connection, "Member[createQuery,query]"]
- [mysql.QueryFunction, mysql.Pool, "Member[query]"]
- [mysql2.Connection, mysql2.PoolConnection, ""]
- [mysql2.Connection, mysql2.authPlugins, "Argument[0].Member[connection]"]
- [mysql2.Connection, mysql2, "Member[createConnection].ReturnValue"]
- [mysql2.ConnectionOptions, mysql2.PoolOptions, ""]
- [mysql2.ConnectionOptions, "mysql2/promise.Connection", "Member[changeUser].Argument[0]"]
- [mysql2.ConnectionOptions, "mysql2/promise.Connection", "Member[config]"]
- [mysql2.ConnectionOptions, "mysql2/promise", "Member[createConnection].Argument[0]"]
- [mysql2.ConnectionOptions, mysql2, "Member[createConnection].Argument[0]"]
- [mysql2.Pool, mysql2.Pool, "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue"]
- [mysql2.Pool, mysql2, "Member[createPool].ReturnValue"]
- [mysql2.PoolConnection, mysql2.Pool, "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]"]
- [mysql2.PoolConnection, mysql2.Pool, "Member[getConnection].Argument[0].Argument[1]"]
- [mysql2.PoolOptions, "mysql2/promise", "Member[createPool].Argument[0]"]
- [mysql2.PoolOptions, mysql2, "Member[createPool].Argument[0]"]
- [mysql2.authPlugins, mysql2.ConnectionOptions, "Member[authPlugins].AnyMember"]
- ["mysql2/promise.Connection", mysql2.Connection, "Member[promise].ReturnValue"]
- ["mysql2/promise.Connection", "mysql2/promise.PoolConnection", ""]
- ["mysql2/promise.Connection", "mysql2/promise", "Member[createConnectionPromise].ReturnValue.Awaited"]
- ["mysql2/promise.Connection", "mysql2/promise", "Member[createConnection].ReturnValue.Awaited"]
- ["mysql2/promise.Connection", mysql2, "Member[createConnectionPromise].ReturnValue.Awaited"]
- ["mysql2/promise.Pool", mysql2.Pool, "Member[promise].ReturnValue"]
- ["mysql2/promise.Pool", "mysql2/promise.Pool", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue"]
- ["mysql2/promise.Pool", "mysql2/promise", "Member[createPool].ReturnValue"]
- ["mysql2/promise.PoolConnection", mysql2.PoolConnection, "Member[promise].ReturnValue"]
- ["mysql2/promise.PoolConnection", "mysql2/promise.Pool", "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connection,0=release].Argument[1].Argument[0]"]
- ["mysql2/promise.PoolConnection", "mysql2/promise.Pool", "Member[getConnection].ReturnValue.Awaited"]
- ["mysql2/typings/mysql.Connection", mysql2.Connection, ""]
- ["mysql2/typings/mysql.Connection", mysql2.Pool, ""]
- ["mysql2/typings/mysql.PoolConnection", mysql2.PoolConnection, ""]
- ["mysql2/typings/mysql/lib/Connection", "mysql2/typings/mysql.Connection", ""]
- ["mysql2/typings/mysql/lib/Connection", "mysql2/typings/mysql/lib/PoolConnection", ""]
- ["mysql2/typings/mysql/lib/PoolConnection", "mysql2/typings/mysql.PoolConnection", ""]
- addsTo:
pack: codeql/javascript-all
extensible: summaryModel
data:
- [mysql2.Pool, "", "", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", type]
- ["mysql2/promise.Pool", "", "", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", type]
- ["mysql2/typings/mysql/lib/Connection", "", "", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", type]

View File

@@ -1,120 +0,0 @@
/** Generated model file */
private import javascript
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"events;;pg-cursor;;", //
"events;;pg-promise/pg-subset;pg.IClient;", //
"events;;pg-promise/pg-subset;pg.IConnection;", //
"events;;pg-promise/pg-subset;pg.IPool;", //
"events;;pg;ClientBase;", //
"events;;pg;Events;", //
"events;;pg;Pool;", //
"global;NodeJS.EventEmitter;events;;", //
"pg-cursor;;pg-cursor;Static;Instance", //
"pg-cursor;Static;pg-cursor;;", //
"pg-pool;;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
"pg-pool;;pg-pool;Static;Instance", //
"pg-pool;Static;pg-pool;;", //
"pg-promise/pg-subset;pg.IClient;pg-promise/pg-subset;;Member[Client].Instance", //
"pg-promise/pg-subset;pg.IClient;pg-promise;;Argument[0].TypeVar[pg-promise.IInitOptions.1]", //
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]", //
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;ReturnValue.TypeVar[pg-promise.IDatabase.1]", //
"pg-promise/pg-subset;pg.IConnection;pg-promise/pg-subset;pg.IClient;Member[connection]", //
"pg-promise/pg-subset;pg.IPool;pg-promise;IDatabase;Member[$pool]", //
"pg-promise;IBaseProtocol;pg-promise/typescript/pg-promise;IBaseProtocol;", //
"pg-promise;IBaseProtocol;pg-promise;IConnected;", //
"pg-promise;IBaseProtocol;pg-promise;IDatabase;", //
"pg-promise;IBaseProtocol;pg-promise;ITask;", //
"pg-promise;IConnected;pg-promise/typescript/pg-promise;IConnected;", //
"pg-promise;IConnected;pg-promise;IDatabase;Member[connect].ReturnValue.Awaited", //
"pg-promise;IDatabase;pg-promise/typescript/pg-promise;IDatabase;", //
"pg-promise;IDatabase;pg-promise;IInitOptions;Member[extend].Argument[0]", //
"pg-promise;IDatabase;pg-promise;IMain;ReturnValue", //
"pg-promise;IInitOptions;pg-promise/typescript/pg-promise;IInitOptions;", //
"pg-promise;IInitOptions;pg-promise;;Argument[0]", //
"pg-promise;IInitOptions;pg-promise;ILibConfig;Member[options]", //
"pg-promise;ILibConfig;pg-promise/typescript/pg-promise;ILibConfig;", //
"pg-promise;ILibConfig;pg-promise;IDatabase;Member[$config]", //
"pg-promise;IMain;pg-promise/typescript/pg-promise;IMain;", //
"pg-promise;IMain;pg-promise;;ReturnValue", //
"pg-promise;IMain;pg-promise;ILibConfig;Member[pgp]", //
"pg-promise;ITask;pg-promise/typescript/pg-promise;ITask;", //
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].Argument[1].Argument[0]", //
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]", //
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]", //
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]", //
"pg;Client;pg-pool;Static;Instance.TypeVar[pg-pool..0]", //
"pg;Client;pg-promise/pg-subset;pg.IClient;", //
"pg;Client;pg;ClientStatic;Instance", //
"pg;Client;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]", //
"pg;ClientBase;pg;Client;", //
"pg;ClientBase;pg;PoolClient;", //
"pg;ClientStatic;pg;;Member[Client]", //
"pg;Connection;pg-promise/pg-subset;pg.IConnection;", //
"pg;Events;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
"pg;Events;pg;EventsStatic;Instance", //
"pg;EventsStatic;pg;;Member[Events]", //
"pg;Pool;pg-pool;;", //
"pg;Pool;pg-promise/pg-subset;pg.IPool;", //
"pg;Pool;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", //
"pg;Pool;pg;PoolStatic;Instance", //
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
"pg;PoolClient;pg-pool;;Member[connect].Argument[0].Argument[1]", //
"pg;PoolClient;pg-pool;;Member[connect].WithArity[0].ReturnValue.Awaited", //
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
"pg;PoolClient;pg;Pool;Member[connect].Argument[0].Argument[1]", //
"pg;PoolClient;pg;Pool;Member[connect].WithArity[0].ReturnValue.Awaited", //
"pg;PoolStatic;pg;;Member[Pool]", //
]
}
}
private class Summaries extends ModelInput::SummaryModelCsv {
override predicate row(string row) {
row =
[
"global;NodeJS.EventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type", //
"pg-pool;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
"pg;ClientBase;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
"pg;Events;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
"pg;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type", //
]
}
}
private class TypeVariables extends ModelInput::TypeVariableModelCsv {
override predicate row(string row) {
row =
[
"pg-pool..0;Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]", //
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]", //
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]", //
"pg-pool..0;Member[connect].Argument[0].Argument[1]", //
"pg-pool..0;Member[connect].WithArity[0].ReturnValue.Awaited", //
"pg-pool.ClientLikeCtr.0;Instance", //
"pg-promise.IConnected.1;Member[client]", //
"pg-promise.IConnectionOptions.0;Member[onLost].Argument[1].TypeVar[pg-promise.ILostContext.0]", //
"pg-promise.IDatabase.1;Member[$cn].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]", //
"pg-promise.IDatabase.1;Member[$config].TypeVar[pg-promise.ILibConfig.1]", //
"pg-promise.IDatabase.1;Member[connect].Argument[0].TypeVar[pg-promise.IConnectionOptions.0]", //
"pg-promise.IDatabase.1;Member[connect].ReturnValue.Awaited.TypeVar[pg-promise.IConnected.1]", //
"pg-promise.IEventContext.0;Member[client]", //
"pg-promise.IInitOptions.1;Member[connect,disconnect].Argument[0]", //
"pg-promise.IInitOptions.1;Member[error].Argument[1].TypeVar[pg-promise.IEventContext.0]", //
"pg-promise.IInitOptions.1;Member[extend].Argument[0].TypeVar[pg-promise.IDatabase.1]", //
"pg-promise.IInitOptions.1;Member[query,task,transact].Argument[0].TypeVar[pg-promise.IEventContext.0]", //
"pg-promise.IInitOptions.1;Member[receive].Argument[2].TypeVar[pg-promise.IEventContext.0]", //
"pg-promise.ILibConfig.1;Member[options].TypeVar[pg-promise.IInitOptions.1]", //
"pg-promise.ILibConfig.1;Member[pgp].TypeVar[pg-promise.IMain.1]", //
"pg-promise.ILostContext.0;Member[client]", //
"pg-promise/pg-promise.XPromise.0;Awaited", //
"pg-promise/pg-subset.pg.IConnectionParameters.0;Member[Client].Instance", //
]
}
}

View File

@@ -18,103 +18,103 @@
"language": "javascript",
"usedTypes": {
"sources": [
"pg-cursor;",
"pg-pool;",
"pg-promise;IBaseProtocol",
"pg;Client",
"pg;ClientStatic",
"pg;Pool",
"pg;PoolClient",
"pg;PoolStatic"
"pg-cursor",
"pg-pool",
"pg-promise.IBaseProtocol",
"pg.Client",
"pg.ClientStatic",
"pg.Pool",
"pg.PoolClient",
"pg.PoolStatic"
]
},
"model": {
"typeDefinitions": [
"pg;Client;pg-promise/pg-subset;pg.IClient;",
"pg;Connection;pg-promise/pg-subset;pg.IConnection;",
"pg;Pool;pg-promise/pg-subset;pg.IPool;"
"pg.Client;pg-promise/pg-subset.pg.IClient;",
"pg.Connection;pg-promise/pg-subset.pg.IConnection;",
"pg.Pool;pg-promise/pg-subset.pg.IPool;"
],
"sinks": []
},
"generatedModel": {
"//": "Autogenerated section. Manual edits in here will be lost.",
"typeDefinitions": [
"events;;pg-cursor;;",
"events;;pg-promise/pg-subset;pg.IClient;",
"events;;pg-promise/pg-subset;pg.IConnection;",
"events;;pg-promise/pg-subset;pg.IPool;",
"events;;pg;ClientBase;",
"events;;pg;Events;",
"events;;pg;Pool;",
"global;NodeJS.EventEmitter;events;;",
"pg-cursor;;pg-cursor;Static;Instance",
"pg-cursor;Static;pg-cursor;;",
"pg-pool;;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"pg-pool;;pg-pool;Static;Instance",
"pg-pool;Static;pg-pool;;",
"pg-promise/pg-subset;pg.IClient;pg-promise/pg-subset;;Member[Client].Instance",
"pg-promise/pg-subset;pg.IClient;pg-promise;;Argument[0].TypeVar[pg-promise.IInitOptions.1]",
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]",
"pg-promise/pg-subset;pg.IClient;pg-promise;IMain;ReturnValue.TypeVar[pg-promise.IDatabase.1]",
"pg-promise/pg-subset;pg.IConnection;pg-promise/pg-subset;pg.IClient;Member[connection]",
"pg-promise/pg-subset;pg.IPool;pg-promise;IDatabase;Member[$pool]",
"pg-promise;IBaseProtocol;pg-promise/typescript/pg-promise;IBaseProtocol;",
"pg-promise;IBaseProtocol;pg-promise;IConnected;",
"pg-promise;IBaseProtocol;pg-promise;IDatabase;",
"pg-promise;IBaseProtocol;pg-promise;ITask;",
"pg-promise;IConnected;pg-promise/typescript/pg-promise;IConnected;",
"pg-promise;IConnected;pg-promise;IDatabase;Member[connect].ReturnValue.Awaited",
"pg-promise;IDatabase;pg-promise/typescript/pg-promise;IDatabase;",
"pg-promise;IDatabase;pg-promise;IInitOptions;Member[extend].Argument[0]",
"pg-promise;IDatabase;pg-promise;IMain;ReturnValue",
"pg-promise;IInitOptions;pg-promise/typescript/pg-promise;IInitOptions;",
"pg-promise;IInitOptions;pg-promise;;Argument[0]",
"pg-promise;IInitOptions;pg-promise;ILibConfig;Member[options]",
"pg-promise;ILibConfig;pg-promise/typescript/pg-promise;ILibConfig;",
"pg-promise;ILibConfig;pg-promise;IDatabase;Member[$config]",
"pg-promise;IMain;pg-promise/typescript/pg-promise;IMain;",
"pg-promise;IMain;pg-promise;;ReturnValue",
"pg-promise;IMain;pg-promise;ILibConfig;Member[pgp]",
"pg-promise;ITask;pg-promise/typescript/pg-promise;ITask;",
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].Argument[1].Argument[0]",
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]",
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]",
"pg-promise;ITask;pg-promise;IBaseProtocol;Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]",
"pg;Client;pg-pool;Static;Instance.TypeVar[pg-pool..0]",
"pg;Client;pg;ClientStatic;Instance",
"pg;Client;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]",
"pg;ClientBase;pg;Client;",
"pg;ClientBase;pg;PoolClient;",
"pg;ClientStatic;pg;;Member[Client]",
"pg;Events;pg;Events;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"pg;Events;pg;EventsStatic;Instance",
"pg;EventsStatic;pg;;Member[Events]",
"pg;Pool;pg-pool;;",
"pg;Pool;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"pg;Pool;pg;PoolStatic;Instance",
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
"pg;PoolClient;pg-pool;;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
"pg;PoolClient;pg-pool;;Member[connect].Argument[0].Argument[1]",
"pg;PoolClient;pg-pool;;Member[connect].WithArity[0].ReturnValue.Awaited",
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
"pg;PoolClient;pg;Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
"pg;PoolClient;pg;Pool;Member[connect].Argument[0].Argument[1]",
"pg;PoolClient;pg;Pool;Member[connect].WithArity[0].ReturnValue.Awaited",
"pg;PoolStatic;pg;;Member[Pool]"
"events;pg-cursor;",
"events;pg-promise/pg-subset.pg.IClient;",
"events;pg-promise/pg-subset.pg.IConnection;",
"events;pg-promise/pg-subset.pg.IPool;",
"events;pg.ClientBase;",
"events;pg.Events;",
"events;pg.Pool;",
"global.NodeJS.EventEmitter;events;",
"pg-cursor.Static;pg-cursor;",
"pg-cursor;pg-cursor.Static;Instance",
"pg-pool.Static;pg-pool;",
"pg-pool;pg-pool.Static;Instance",
"pg-pool;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"pg-promise.IBaseProtocol;pg-promise.IConnected;",
"pg-promise.IBaseProtocol;pg-promise.IDatabase;",
"pg-promise.IBaseProtocol;pg-promise.ITask;",
"pg-promise.IBaseProtocol;pg-promise/typescript/pg-promise.IBaseProtocol;",
"pg-promise.IConnected;pg-promise.IDatabase;Member[connect].ReturnValue.Awaited",
"pg-promise.IConnected;pg-promise/typescript/pg-promise.IConnected;",
"pg-promise.IDatabase;pg-promise.IInitOptions;Member[extend].Argument[0]",
"pg-promise.IDatabase;pg-promise.IMain;ReturnValue",
"pg-promise.IDatabase;pg-promise/typescript/pg-promise.IDatabase;",
"pg-promise.IInitOptions;pg-promise.ILibConfig;Member[options]",
"pg-promise.IInitOptions;pg-promise/typescript/pg-promise.IInitOptions;",
"pg-promise.IInitOptions;pg-promise;Argument[0]",
"pg-promise.ILibConfig;pg-promise.IDatabase;Member[$config]",
"pg-promise.ILibConfig;pg-promise/typescript/pg-promise.ILibConfig;",
"pg-promise.IMain;pg-promise.ILibConfig;Member[pgp]",
"pg-promise.IMain;pg-promise/typescript/pg-promise.IMain;",
"pg-promise.IMain;pg-promise;ReturnValue",
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[task,taskIf,tx,txIf].Argument[1].Argument[0]",
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]",
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]",
"pg-promise.ITask;pg-promise.IBaseProtocol;Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]",
"pg-promise.ITask;pg-promise/typescript/pg-promise.ITask;",
"pg-promise/pg-subset.pg.IClient;pg-promise.IMain;Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]",
"pg-promise/pg-subset.pg.IClient;pg-promise.IMain;ReturnValue.TypeVar[pg-promise.IDatabase.1]",
"pg-promise/pg-subset.pg.IClient;pg-promise/pg-subset;Member[Client].Instance",
"pg-promise/pg-subset.pg.IClient;pg-promise;Argument[0].TypeVar[pg-promise.IInitOptions.1]",
"pg-promise/pg-subset.pg.IConnection;pg-promise/pg-subset.pg.IClient;Member[connection]",
"pg-promise/pg-subset.pg.IPool;pg-promise.IDatabase;Member[$pool]",
"pg.Client;pg-pool.Static;Instance.TypeVar[pg-pool.0]",
"pg.Client;pg.ClientStatic;Instance",
"pg.Client;pg.Events;Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]",
"pg.ClientBase;pg.Client;",
"pg.ClientBase;pg.PoolClient;",
"pg.ClientStatic;pg;Member[Client]",
"pg.Events;pg.Events;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"pg.Events;pg.EventsStatic;Instance",
"pg.EventsStatic;pg;Member[Events]",
"pg.Pool;pg-pool;",
"pg.Pool;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue",
"pg.Pool;pg.PoolStatic;Instance",
"pg.PoolClient;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
"pg.PoolClient;pg-pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
"pg.PoolClient;pg-pool;Member[connect].Argument[0].Argument[1]",
"pg.PoolClient;pg-pool;Member[connect].WithArity[0].ReturnValue.Awaited",
"pg.PoolClient;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
"pg.PoolClient;pg.Pool;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
"pg.PoolClient;pg.Pool;Member[connect].Argument[0].Argument[1]",
"pg.PoolClient;pg.Pool;Member[connect].WithArity[0].ReturnValue.Awaited",
"pg.PoolStatic;pg;Member[Pool]"
],
"summaries": [
"global;NodeJS.EventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type",
"pg-pool;;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"pg;ClientBase;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"pg;Events;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"pg;Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
"global.NodeJS.EventEmitter;;;Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue;type",
"pg-pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"pg.ClientBase;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"pg.Events;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type",
"pg.Pool;;;Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue;type"
],
"typeVariables": [
"pg-pool..0;Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]",
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
"pg-pool..0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
"pg-pool..0;Member[connect].Argument[0].Argument[1]",
"pg-pool..0;Member[connect].WithArity[0].ReturnValue.Awaited",
"pg-pool.0;Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]",
"pg-pool.0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]",
"pg-pool.0;Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]",
"pg-pool.0;Member[connect].Argument[0].Argument[1]",
"pg-pool.0;Member[connect].WithArity[0].ReturnValue.Awaited",
"pg-pool.ClientLikeCtr.0;Instance",
"pg-promise.IConnected.1;Member[client]",
"pg-promise.IConnectionOptions.0;Member[onLost].Argument[1].TypeVar[pg-promise.ILostContext.0]",

View File

@@ -0,0 +1,108 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- [events, "pg-cursor", ""]
- [events, "pg-promise/pg-subset.pg.IClient", ""]
- [events, "pg-promise/pg-subset.pg.IConnection", ""]
- [events, "pg-promise/pg-subset.pg.IPool", ""]
- [events, pg.ClientBase, ""]
- [events, pg.Events, ""]
- [events, pg.Pool, ""]
- [global.NodeJS.EventEmitter, events, ""]
- ["pg-cursor.Static", "pg-cursor", ""]
- ["pg-cursor", "pg-cursor.Static", Instance]
- ["pg-pool.Static", "pg-pool", ""]
- ["pg-pool", "pg-pool.Static", Instance]
- ["pg-pool", "pg-pool", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue"]
- ["pg-promise.IBaseProtocol", "pg-promise.IConnected", ""]
- ["pg-promise.IBaseProtocol", "pg-promise.IDatabase", ""]
- ["pg-promise.IBaseProtocol", "pg-promise.ITask", ""]
- ["pg-promise.IBaseProtocol", "pg-promise/typescript/pg-promise.IBaseProtocol", ""]
- ["pg-promise.IConnected", "pg-promise.IDatabase", "Member[connect].ReturnValue.Awaited"]
- ["pg-promise.IConnected", "pg-promise/typescript/pg-promise.IConnected", ""]
- ["pg-promise.IDatabase", "pg-promise.IInitOptions", "Member[extend].Argument[0]"]
- ["pg-promise.IDatabase", "pg-promise.IMain", ReturnValue]
- ["pg-promise.IDatabase", "pg-promise/typescript/pg-promise.IDatabase", ""]
- ["pg-promise.IInitOptions", "pg-promise.ILibConfig", "Member[options]"]
- ["pg-promise.IInitOptions", "pg-promise/typescript/pg-promise.IInitOptions", ""]
- ["pg-promise.IInitOptions", "pg-promise", "Argument[0]"]
- ["pg-promise.ILibConfig", "pg-promise.IDatabase", "Member[$config]"]
- ["pg-promise.ILibConfig", "pg-promise/typescript/pg-promise.ILibConfig", ""]
- ["pg-promise.IMain", "pg-promise.ILibConfig", "Member[pgp]"]
- ["pg-promise.IMain", "pg-promise/typescript/pg-promise.IMain", ""]
- ["pg-promise.IMain", "pg-promise", ReturnValue]
- ["pg-promise.ITask", "pg-promise.IBaseProtocol", "Member[task,taskIf,tx,txIf].Argument[1].Argument[0]"]
- ["pg-promise.ITask", "pg-promise.IBaseProtocol", "Member[task,taskIf,tx,txIf].WithArity[1].Argument[0].Argument[0]"]
- ["pg-promise.ITask", "pg-promise.IBaseProtocol", "Member[taskIf].WithArity[2].Argument[0].Member[cnd].Argument[0]"]
- ["pg-promise.ITask", "pg-promise.IBaseProtocol", "Member[txIf].WithArity[2].Argument[0].Member[cnd,reusable].Argument[0]"]
- ["pg-promise.ITask", "pg-promise/typescript/pg-promise.ITask", ""]
- ["pg-promise/pg-subset.pg.IClient", "pg-promise.IMain", "Argument[0].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]"]
- ["pg-promise/pg-subset.pg.IClient", "pg-promise.IMain", "ReturnValue.TypeVar[pg-promise.IDatabase.1]"]
- ["pg-promise/pg-subset.pg.IClient", "pg-promise/pg-subset", "Member[Client].Instance"]
- ["pg-promise/pg-subset.pg.IClient", "pg-promise", "Argument[0].TypeVar[pg-promise.IInitOptions.1]"]
- ["pg-promise/pg-subset.pg.IConnection", "pg-promise/pg-subset.pg.IClient", "Member[connection]"]
- ["pg-promise/pg-subset.pg.IPool", "pg-promise.IDatabase", "Member[$pool]"]
- [pg.Client, "pg-pool.Static", "Instance.TypeVar[pg-pool.0]"]
- [pg.Client, "pg-promise/pg-subset.pg.IClient", ""]
- [pg.Client, pg.ClientStatic, Instance]
- [pg.Client, pg.Events, "Member[addListener,on,once,prependListener,prependOnceListener].Argument[1].Argument[1]"]
- [pg.ClientBase, pg.Client, ""]
- [pg.ClientBase, pg.PoolClient, ""]
- [pg.ClientStatic, pg, "Member[Client]"]
- [pg.Connection, "pg-promise/pg-subset.pg.IConnection", ""]
- [pg.Events, pg.Events, "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue"]
- [pg.Events, pg.EventsStatic, Instance]
- [pg.EventsStatic, pg, "Member[Events]"]
- [pg.Pool, "pg-pool", ""]
- [pg.Pool, "pg-promise/pg-subset.pg.IPool", ""]
- [pg.Pool, pg.Pool, "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue"]
- [pg.Pool, pg.PoolStatic, Instance]
- [pg.PoolClient, "pg-pool", "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]"]
- [pg.PoolClient, "pg-pool", "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]"]
- [pg.PoolClient, "pg-pool", "Member[connect].Argument[0].Argument[1]"]
- [pg.PoolClient, "pg-pool", "Member[connect].WithArity[0].ReturnValue.Awaited"]
- [pg.PoolClient, pg.Pool, "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]"]
- [pg.PoolClient, pg.Pool, "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]"]
- [pg.PoolClient, pg.Pool, "Member[connect].Argument[0].Argument[1]"]
- [pg.PoolClient, pg.Pool, "Member[connect].WithArity[0].ReturnValue.Awaited"]
- [pg.PoolStatic, pg, "Member[Pool]"]
- addsTo:
pack: codeql/javascript-all
extensible: summaryModel
data:
- [global.NodeJS.EventEmitter, "", "", "Member[addListener,off,on,once,prependListener,prependOnceListener,removeAllListeners,removeListener,setMaxListeners].ReturnValue", type]
- ["pg-pool", "", "", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", type]
- [pg.ClientBase, "", "", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", type]
- [pg.Events, "", "", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", type]
- [pg.Pool, "", "", "Member[addListener,on,once,prependListener,prependOnceListener].ReturnValue", type]
- addsTo:
pack: codeql/javascript-all
extensible: typeVariableModel
data:
- ["pg-pool.0", "Member[Client].TypeVar[pg-pool.ClientLikeCtr.0]"]
- ["pg-pool.0", "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=acquire,0=connect,0=remove].Argument[1].Argument[0]"]
- ["pg-pool.0", "Member[addListener,on,once,prependListener,prependOnceListener].WithArity[2].WithStringArgument[0=error].Argument[1].Argument[1]"]
- ["pg-pool.0", "Member[connect].Argument[0].Argument[1]"]
- ["pg-pool.0", "Member[connect].WithArity[0].ReturnValue.Awaited"]
- ["pg-pool.ClientLikeCtr.0", Instance]
- ["pg-promise.IConnected.1", "Member[client]"]
- ["pg-promise.IConnectionOptions.0", "Member[onLost].Argument[1].TypeVar[pg-promise.ILostContext.0]"]
- ["pg-promise.IDatabase.1", "Member[$cn].TypeVar[pg-promise/pg-subset.pg.IConnectionParameters.0]"]
- ["pg-promise.IDatabase.1", "Member[$config].TypeVar[pg-promise.ILibConfig.1]"]
- ["pg-promise.IDatabase.1", "Member[connect].Argument[0].TypeVar[pg-promise.IConnectionOptions.0]"]
- ["pg-promise.IDatabase.1", "Member[connect].ReturnValue.Awaited.TypeVar[pg-promise.IConnected.1]"]
- ["pg-promise.IEventContext.0", "Member[client]"]
- ["pg-promise.IInitOptions.1", "Member[connect,disconnect].Argument[0]"]
- ["pg-promise.IInitOptions.1", "Member[error].Argument[1].TypeVar[pg-promise.IEventContext.0]"]
- ["pg-promise.IInitOptions.1", "Member[extend].Argument[0].TypeVar[pg-promise.IDatabase.1]"]
- ["pg-promise.IInitOptions.1", "Member[query,task,transact].Argument[0].TypeVar[pg-promise.IEventContext.0]"]
- ["pg-promise.IInitOptions.1", "Member[receive].Argument[2].TypeVar[pg-promise.IEventContext.0]"]
- ["pg-promise.ILibConfig.1", "Member[options].TypeVar[pg-promise.IInitOptions.1]"]
- ["pg-promise.ILibConfig.1", "Member[pgp].TypeVar[pg-promise.IMain.1]"]
- ["pg-promise.ILostContext.0", "Member[client]"]
- ["pg-promise/pg-promise.XPromise.0", Awaited]
- ["pg-promise/pg-subset.pg.IConnectionParameters.0", "Member[Client].Instance"]

View File

@@ -1,297 +0,0 @@
/** Generated model file */
private import javascript
private class Sinks extends ModelInput::SinkModelCsv {
override predicate row(string row) {
row =
[
"sequelize;;Argument[0..].Member[password];credentials[password]", //
"sequelize;;Argument[0..].Member[username];credentials[username]", //
"sequelize;;Argument[1];credentials[username]", //
"sequelize;;Argument[2];credentials[password]", //
"sequelize;Sequelize;Member[query].Argument[0].Member[query];sql-injection", //
"sequelize;Sequelize;Member[query].Argument[0];sql-injection", //
"sequelize;SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection", //
]
}
}
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeys].ReturnValue.ArrayElement", //
"sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;sequelize-typescript;Model;Member[$create].Argument[2]", //
"sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;sequelize-typescript/model/shared/model-not-initialized-error;;Member[ModelNotInitializedError]", //
"sequelize-typescript;AssociationCountOptions;sequelize-typescript/model/model/association/association-count-options;AssociationCountOptions;", //
"sequelize-typescript;AssociationCountOptions;sequelize-typescript;Model;Member[$count].Argument[1]", //
"sequelize-typescript;AssociationGetOptions;sequelize-typescript/model/model/association/association-get-options;AssociationGetOptions;", //
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$get].Argument[1]", //
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$has].Argument[2]", //
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[addAssociation].Argument[1]", //
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement", //
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[setAssociations].Argument[1].ArrayElement", //
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/base-association;BaseAssociation;", //
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[addAssociation].Argument[1]", //
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement", //
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[setAssociations].Argument[1].ArrayElement", //
"sequelize-typescript;BaseAssociation;sequelize-typescript;BaseAssociationStatic;Instance", //
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToAssociation;", //
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToManyAssociation;", //
"sequelize-typescript;BaseAssociation;sequelize-typescript;HasAssociation;", //
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;;Member[BaseAssociation]", //
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;BaseAssociationStatic;", //
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript;;Member[BaseAssociation]", //
"sequelize-typescript;BelongsToAssociation;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociation;", //
"sequelize-typescript;BelongsToAssociation;sequelize-typescript;BelongsToAssociationStatic;Instance", //
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;;Member[BelongsToAssociation]", //
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociationStatic;", //
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript;;Member[BelongsToAssociation]", //
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociation;", //
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript;BelongsToManyAssociationStatic;Instance", //
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;;Member[BelongsToManyAssociation]", //
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociationStatic;", //
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript;;Member[BelongsToManyAssociation]", //
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/default-scope;;Member[DefaultScope].Argument[0]", //
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/scope-options;DefaultScopeGetter;", //
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;;Member[DefaultScope].Argument[0]", //
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;ScopeOptionsGetters;Member[getDefaultScope]", //
"sequelize-typescript;HasAssociation;sequelize-typescript/associations/has/has-association;HasAssociation;", //
"sequelize-typescript;HasAssociation;sequelize-typescript;HasAssociationStatic;Instance", //
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;;Member[HasAssociation]", //
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;HasAssociationStatic;", //
"sequelize-typescript;HasAssociationStatic;sequelize-typescript;;Member[HasAssociation]", //
"sequelize-typescript;Model;sequelize-typescript/model/model/model;Model;", //
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1]", //
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1].ArrayElement", //
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$create,reload].ReturnValue.Awaited", //
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Instance", //
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]", //
"sequelize-typescript;Model;sequelize-typescript;ModelType;Instance", //
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].Argument[0].Instance", //
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to-many/belongs-to-many;;Member[BelongsToMany].Argument[0,1]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to/belongs-to;;Member[BelongsTo].Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;Member[relatedClassGetter]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[addForeignKey].Argument[1]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key;;Member[ForeignKey].Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-many;;Member[HasMany].Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-one;;Member[HasOne].Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript/model/shared/model-class-getter;ModelClassGetter;", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsToMany].Argument[0,1]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BaseAssociationStatic;Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToAssociationStatic;Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToManyAssociationStatic;Argument[0]", //
"sequelize-typescript;ModelClassGetter;sequelize-typescript;HasAssociationStatic;Argument[0]", //
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;;Member[Model]", //
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;ModelStatic~;", //
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;Argument[0]", //
"sequelize-typescript;ModelStatic~;sequelize-typescript;;Member[Model]", //
"sequelize-typescript;ModelType;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeyOptions].Argument[0,1]", //
"sequelize-typescript;ModelType;sequelize-typescript/model/model/model;ModelType;", //
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getAssociatedClass].ReturnValue", //
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[0]", //
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToAssociation;Member[getSequelizeOptions].Argument[0]", //
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[0]", //
"sequelize-typescript;ModelType;sequelize-typescript;HasAssociation;Member[getSequelizeOptions].Argument[0]", //
"sequelize-typescript;ModelType;sequelize-typescript;ModelClassGetter;ReturnValue", //
"sequelize-typescript;ModelType;sequelize-typescript;Sequelize;Member[model].Argument[0]", //
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-options;ScopeOptionsGetters;", //
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]", //
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[getScopeOptionsGetters].ReturnValue", //
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]", //
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[getScopeOptionsGetters].ReturnValue", //
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-options;ScopesOptions;", //
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-service;;Member[resolveScope].Argument[2]", //
"sequelize-typescript;ScopesOptions;sequelize-typescript;;Member[resolveScope].Argument[2]", //
"sequelize-typescript;ScopesOptions;sequelize-typescript;ScopesOptionsGetter;ReturnValue.AnyMember", //
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scope-options;ScopesOptionsGetter;", //
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scopes;;Member[Scopes].Argument[0]", //
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;;Member[Scopes].Argument[0]", //
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;ScopeOptionsGetters;Member[getScopes]", //
"sequelize-typescript;Sequelize;sequelize-typescript/sequelize/sequelize/sequelize;Sequelize;", //
"sequelize-typescript;Sequelize;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[1]", //
"sequelize-typescript;Sequelize;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[1]", //
"sequelize-typescript;Sequelize;sequelize-typescript;SequelizeStatic;Instance", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-options;SequelizeOptions;", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareArgs].ReturnValue.Member[options]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].Argument[0]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].ReturnValue", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareArgs].ReturnValue.Member[options]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].Argument[0]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].ReturnValue", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;Sequelize;Member[options]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;Argument[3]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[0].Argument[0]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[1].Argument[0,1]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[2].Argument[1,2]", //
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[3].Argument[2]", //
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;;Member[Sequelize]", //
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;SequelizeStatic;", //
"sequelize-typescript;SequelizeStatic;sequelize-typescript;;Member[Sequelize]", //
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationMixin;Argument[1]", //
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationsMixin;Argument[1]", //
"sequelize;AnyFindOptions;sequelize;BelongsToManySetAssociationsMixin;Argument[1]", //
"sequelize;AnyFindOptions;sequelize;DefineOptions;Member[defaultScope]", //
"sequelize;AnyFindOptions;sequelize;DefineScopeOptions;AnyMember", //
"sequelize;AnyFindOptions;sequelize;HasManySetAssociationsMixin;Argument[1]", //
"sequelize;AnyFindOptions;sequelize;Instance;Member[reload].Argument[0]", //
"sequelize;AnyFindOptions;sequelize;Model;Member[addScope].Argument[1]", //
"sequelize;AssociationOptionsBelongsToMany;sequelize;Associations;Member[belongsToMany].Argument[1]", //
"sequelize;Associations;sequelize;Model;", //
"sequelize;Associations;sequelize;SequelizeStaticAndInstance.Model;", //
"sequelize;BuildOptions;sequelize-typescript;ModelStatic~;Argument[1]", //
"sequelize;BuildOptions;sequelize;CreateOptions;", //
"sequelize;BuildOptions;sequelize;Model;Member[build,bulkBuild].Argument[1]", //
"sequelize;CountOptions;sequelize;Model;Member[count].Argument[0]", //
"sequelize;CreateOptions;sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;", //
"sequelize;CreateOptions;sequelize;BelongsToCreateAssociationMixin;Argument[1]", //
"sequelize;CreateOptions;sequelize;BelongsToManyCreateAssociationMixin;Argument[1]", //
"sequelize;CreateOptions;sequelize;HasManyCreateAssociationMixin;Argument[1]", //
"sequelize;CreateOptions;sequelize;HasOneCreateAssociationMixin;Argument[1]", //
"sequelize;CreateOptions;sequelize;Model;Member[create].Argument[1]", //
"sequelize;DefineAttributeColumnOptions;sequelize;DefineAttributes;AnyMember", //
"sequelize;DefineAttributeColumnOptions;sequelize;QueryInterface;Member[addColumn,changeColumn].Argument[2]", //
"sequelize;DefineAttributeColumnReferencesOptions;sequelize;DefineAttributeColumnOptions;Member[references]", //
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].Argument[1].Argument[0]", //
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].WithArity[1].Argument[0].Argument[0]", //
"sequelize;DefineAttributes;sequelize;QueryInterface;Member[createTable].Argument[1]", //
"sequelize;DefineOptions;sequelize;Options;Member[define]", //
"sequelize;DefineOptions;sequelize;Sequelize;Member[define].Argument[2]", //
"sequelize;DefineScopeOptions;sequelize;DefineOptions;Member[scopes]", //
"sequelize;FindCreateFindOptions;sequelize;Model;Member[findCreateFind].Argument[0]", //
"sequelize;FindOptions;sequelize-typescript;AssociationCountOptions;", //
"sequelize;FindOptions;sequelize-typescript;AssociationGetOptions;", //
"sequelize;FindOptions;sequelize-typescript;DefaultScopeGetter;ReturnValue", //
"sequelize;FindOptions;sequelize-typescript;Model;Member[reload].Argument[0]", //
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;", //
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;ReturnValue", //
"sequelize;FindOptions;sequelize;AnyFindOptions;", //
"sequelize;FindOptions;sequelize;FindCreateFindOptions;", //
"sequelize;FindOptions;sequelize;FindOrInitializeOptions;", //
"sequelize;FindOptions;sequelize;Model;Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]", //
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order]", //
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order].ArrayElement", //
"sequelize;FindOrInitializeOptions;sequelize;Model;Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]", //
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyGetAssociationsMixin;Argument[0]", //
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationMixin;Argument[1]", //
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationsMixin;Argument[1]", //
"sequelize;Hooks;sequelize;Hooks;Member[addHook,hook,removeHook].ReturnValue", //
"sequelize;Hooks;sequelize;Model;", //
"sequelize;Hooks;sequelize;Sequelize;", //
"sequelize;Hooks;sequelize;SequelizeStaticAndInstance.Model;", //
"sequelize;IncludeAssociation;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue", //
"sequelize;IncludeAssociation;sequelize;IncludeOptions;Member[association]", //
"sequelize;IncludeOptions;sequelize;BuildOptions;Member[include].ArrayElement", //
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include]", //
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include].ArrayElement", //
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include]", //
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include].ArrayElement", //
"sequelize;IncludeOptions;sequelize;HasManyGetAssociationsMixinOptions;Member[include]", //
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include]", //
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include].ArrayElement", //
"sequelize;Instance;sequelize;Instance;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited", //
"sequelize;Instance;sequelize;Instance;Member[equalsOneOf].Argument[0].ArrayElement", //
"sequelize;Instance;sequelize;Instance;Member[equals].Argument[0]", //
"sequelize;Instance;sequelize;Instance;Member[set,setAttributes].ReturnValue", //
"sequelize;Instance;sequelize;Model;Member[Instance,build].ReturnValue", //
"sequelize;Instance;sequelize;Model;Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement", //
"sequelize;Instance;sequelize;Model;Member[bulkBuild].ReturnValue.ArrayElement", //
"sequelize;Instance;sequelize;Model;Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited", //
"sequelize;Instance;sequelize;Model;Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement", //
"sequelize;Instance;sequelize;QueryInterface;Member[delete,increment,insert,update].Argument[0]", //
"sequelize;Instance;sequelize;QueryOptions;Member[instance]", //
"sequelize;Instance;sequelize;SequelizeStaticAndInstance;Member[Instance]", //
"sequelize;Model;sequelize;AssociationOptionsBelongsToMany;Member[through]", //
"sequelize;Model;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]", //
"sequelize;Model;sequelize;BuildOptions;Member[include].ArrayElement", //
"sequelize;Model;sequelize;CountOptions;Member[include]", //
"sequelize;Model;sequelize;CountOptions;Member[include].ArrayElement", //
"sequelize;Model;sequelize;DefineAttributeColumnReferencesOptions;Member[model]", //
"sequelize;Model;sequelize;FindOptions;Member[include]", //
"sequelize;Model;sequelize;FindOptions;Member[include].ArrayElement", //
"sequelize;Model;sequelize;FindOptions;Member[lock].Member[of]", //
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement", //
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement.Member[model]", //
"sequelize;Model;sequelize;Hooks;Member[afterDefine].Argument[1].Argument[0]", //
"sequelize;Model;sequelize;Hooks;Member[afterDefine].WithArity[1].Argument[0].Argument[0]", //
"sequelize;Model;sequelize;IncludeAssociation;Member[source,target]", //
"sequelize;Model;sequelize;IncludeOptions;Member[include,model]", //
"sequelize;Model;sequelize;IncludeOptions;Member[include].ArrayElement", //
"sequelize;Model;sequelize;Instance;Member[Model]", //
"sequelize;Model;sequelize;Model;Member[schema,scope,unscoped].ReturnValue", //
"sequelize;Model;sequelize;Model;Member[sync].ReturnValue.Awaited", //
"sequelize;Model;sequelize;Models;AnyMember", //
"sequelize;Model;sequelize;ModelsHashInterface;AnyMember", //
"sequelize;Model;sequelize;QueryInterface;Member[bulkDelete,rawSelect,upsert].Argument[3]", //
"sequelize;Model;sequelize;QueryInterface;Member[select].Argument[0]", //
"sequelize;Model;sequelize;QueryOptions;Member[model]", //
"sequelize;Model;sequelize;Sequelize;Member[define,import,model].ReturnValue", //
"sequelize;Model;sequelize;Sequelize;Member[import].Argument[1].ReturnValue", //
"sequelize;Model;sequelize;SequelizeStaticAndInstance;Member[Model]", //
"sequelize;Model;sequelize;ThroughOptions;Member[model]", //
"sequelize;Model;sequelize;Utils;Member[mapOptionFieldNames].Argument[1]", //
"sequelize;Model;sequelize;Utils;Member[mapValueFieldNames].Argument[2]", //
"sequelize;Models;sequelize;Model;Member[associate].Argument[0]", //
"sequelize;ModelsHashInterface;sequelize;Sequelize;Member[models]", //
"sequelize;Options;sequelize-typescript;SequelizeOptions;", //
"sequelize;Options;sequelize;Sequelize;Member[options]", //
"sequelize;Options;sequelize;SequelizeStatic;Argument[3]", //
"sequelize;Options;sequelize;SequelizeStatic;WithArity[1].Argument[0,1]", //
"sequelize;Options;sequelize;SequelizeStatic;WithArity[2].Argument[1,2]", //
"sequelize;Options;sequelize;SequelizeStatic;WithArity[3].Argument[2]", //
"sequelize;QueryInterface;sequelize;Sequelize;Member[getQueryInterface].ReturnValue", //
"sequelize;QueryOptions;sequelize;Options;Member[query]", //
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]", //
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkUpdate,delete,insert].Argument[3]", //
"sequelize;QueryOptions;sequelize;QueryInterface;Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]", //
"sequelize;QueryOptions;sequelize;QueryInterface;Member[createFunction].Argument[5]", //
"sequelize;QueryOptions;sequelize;QueryInterface;Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]", //
"sequelize;QueryOptions;sequelize;QueryInterface;Member[increment,update,upsert].Argument[4]", //
"sequelize;QueryOptions;sequelize;Sequelize;Member[authenticate,validate].Argument[0]", //
"sequelize;QueryOptions;sequelize;Sequelize;Member[query].Argument[1]", //
"sequelize;Sequelize;sequelize-typescript;Sequelize;", //
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].Argument[1].Argument[0]", //
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].WithArity[1].Argument[0].Argument[0]", //
"sequelize;Sequelize;sequelize;Instance;Member[sequelize]", //
"sequelize;Sequelize;sequelize;QueryInterface;Member[sequelize]", //
"sequelize;Sequelize;sequelize;Sequelize;Member[import].Argument[1].Argument[0]", //
"sequelize;Sequelize;sequelize;SequelizeStatic;Instance", //
"sequelize;Sequelize;sequelize;SequelizeStatic;Member[useCLS].ReturnValue", //
"sequelize;SequelizeStatic;sequelize-typescript;Sequelize;", //
"sequelize;SequelizeStatic;sequelize;;", //
"sequelize;SequelizeStatic;sequelize;Sequelize;Member[Sequelize]", //
"sequelize;SequelizeStatic;sequelize;SequelizeStatic;Member[Sequelize,default]", //
"sequelize;SequelizeStaticAndInstance.Model;sequelize-typescript;Model;", //
"sequelize;SequelizeStaticAndInstance;sequelize;Sequelize;", //
"sequelize;SequelizeStaticAndInstance;sequelize;SequelizeStatic;", //
"sequelize;ThroughOptions;sequelize;AssociationOptionsBelongsToMany;Member[through]", //
"sequelize;Utils;sequelize;SequelizeStaticAndInstance;Member[Utils]", //
]
}
}
private class Summaries extends ModelInput::SummaryModelCsv {
override predicate row(string row) {
row =
[
"sequelize-typescript;Model;;;Member[reload].ReturnValue.Awaited;type", //
"sequelize;Instance;;;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited;type", //
"sequelize;Instance;;;Member[set,setAttributes].ReturnValue;type", //
"sequelize;Model;;;Member[schema,scope,unscoped].ReturnValue;type", //
"sequelize;Model;;;Member[sync].ReturnValue.Awaited;type", //
]
}
}
private class TypeVariables extends ModelInput::TypeVariableModelCsv {
override predicate row(string row) {
row =
[
"sequelize-typescript.ModelStatic.0;Instance", //
"sequelize-typescript.Repository.0;Instance", //
]
}
}

View File

@@ -12,279 +12,279 @@
},
"language": "javascript",
"replaceTypeParameters": [
"sequelize;Model;TInstance;sequelize;Instance"
"sequelize.Model;TInstance;sequelize.Instance"
],
"model": {
"sinks": [
"sequelize;;Argument[0..].Member[password];credentials[password]",
"sequelize;;Argument[0..].Member[username];credentials[username]",
"sequelize;;Argument[1];credentials[username]",
"sequelize;;Argument[2];credentials[password]",
"sequelize;Sequelize;Member[query].Argument[0].Member[query];sql-injection",
"sequelize;Sequelize;Member[query].Argument[0];sql-injection",
"sequelize;SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection"
"sequelize.Sequelize;Member[query].Argument[0].Member[query];sql-injection",
"sequelize.Sequelize;Member[query].Argument[0];sql-injection",
"sequelize.SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection",
"sequelize;Argument[0..].Member[password];credentials[password]",
"sequelize;Argument[0..].Member[username];credentials[username]",
"sequelize;Argument[1];credentials[username]",
"sequelize;Argument[2];credentials[password]"
],
"typeDefinitions": [
"sequelize;Sequelize;sequelize-typescript;Sequelize;"
"sequelize.Sequelize;sequelize-typescript.Sequelize;"
]
},
"generatedModel": {
"//": "Autogenerated section. Manual edits in here will be lost.",
"typeDefinitions": [
"sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeys].ReturnValue.ArrayElement",
"sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;sequelize-typescript;Model;Member[$create].Argument[2]",
"sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;sequelize-typescript/model/shared/model-not-initialized-error;;Member[ModelNotInitializedError]",
"sequelize-typescript;AssociationCountOptions;sequelize-typescript/model/model/association/association-count-options;AssociationCountOptions;",
"sequelize-typescript;AssociationCountOptions;sequelize-typescript;Model;Member[$count].Argument[1]",
"sequelize-typescript;AssociationGetOptions;sequelize-typescript/model/model/association/association-get-options;AssociationGetOptions;",
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$get].Argument[1]",
"sequelize-typescript;AssociationGetOptions;sequelize-typescript;Model;Member[$has].Argument[2]",
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[addAssociation].Argument[1]",
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/association-service;;Member[setAssociations].Argument[1].ArrayElement",
"sequelize-typescript;BaseAssociation;sequelize-typescript/associations/shared/base-association;BaseAssociation;",
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[addAssociation].Argument[1]",
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
"sequelize-typescript;BaseAssociation;sequelize-typescript;;Member[setAssociations].Argument[1].ArrayElement",
"sequelize-typescript;BaseAssociation;sequelize-typescript;BaseAssociationStatic;Instance",
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToAssociation;",
"sequelize-typescript;BaseAssociation;sequelize-typescript;BelongsToManyAssociation;",
"sequelize-typescript;BaseAssociation;sequelize-typescript;HasAssociation;",
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;;Member[BaseAssociation]",
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;BaseAssociationStatic;",
"sequelize-typescript;BaseAssociationStatic;sequelize-typescript;;Member[BaseAssociation]",
"sequelize-typescript;BelongsToAssociation;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociation;",
"sequelize-typescript;BelongsToAssociation;sequelize-typescript;BelongsToAssociationStatic;Instance",
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;;Member[BelongsToAssociation]",
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;BelongsToAssociationStatic;",
"sequelize-typescript;BelongsToAssociationStatic;sequelize-typescript;;Member[BelongsToAssociation]",
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociation;",
"sequelize-typescript;BelongsToManyAssociation;sequelize-typescript;BelongsToManyAssociationStatic;Instance",
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;;Member[BelongsToManyAssociation]",
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;BelongsToManyAssociationStatic;",
"sequelize-typescript;BelongsToManyAssociationStatic;sequelize-typescript;;Member[BelongsToManyAssociation]",
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/default-scope;;Member[DefaultScope].Argument[0]",
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript/scopes/scope-options;DefaultScopeGetter;",
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;;Member[DefaultScope].Argument[0]",
"sequelize-typescript;DefaultScopeGetter;sequelize-typescript;ScopeOptionsGetters;Member[getDefaultScope]",
"sequelize-typescript;HasAssociation;sequelize-typescript/associations/has/has-association;HasAssociation;",
"sequelize-typescript;HasAssociation;sequelize-typescript;HasAssociationStatic;Instance",
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;;Member[HasAssociation]",
"sequelize-typescript;HasAssociationStatic;sequelize-typescript/associations/has/has-association;HasAssociationStatic;",
"sequelize-typescript;HasAssociationStatic;sequelize-typescript;;Member[HasAssociation]",
"sequelize-typescript;Model;sequelize-typescript/model/model/model;Model;",
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1]",
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$add,$has,$remove,$set].Argument[1].ArrayElement",
"sequelize-typescript;Model;sequelize-typescript;Model;Member[$create,reload].ReturnValue.Awaited",
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Instance",
"sequelize-typescript;Model;sequelize-typescript;ModelStatic~;Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]",
"sequelize-typescript;Model;sequelize-typescript;ModelType;Instance",
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].Argument[0].Instance",
"sequelize-typescript;Model;sequelize-typescript;Sequelize;Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to-many/belongs-to-many;;Member[BelongsToMany].Argument[0,1]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/belongs-to/belongs-to;;Member[BelongsTo].Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-meta;ForeignKeyMeta;Member[relatedClassGetter]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[addForeignKey].Argument[1]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key;;Member[ForeignKey].Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-many;;Member[HasMany].Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/associations/has/has-one;;Member[HasOne].Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript/model/shared/model-class-getter;ModelClassGetter;",
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript;;Member[BelongsToMany].Argument[0,1]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BaseAssociationStatic;Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToAssociationStatic;Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript;BelongsToManyAssociationStatic;Argument[0]",
"sequelize-typescript;ModelClassGetter;sequelize-typescript;HasAssociationStatic;Argument[0]",
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;;Member[Model]",
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/model/model;ModelStatic~;",
"sequelize-typescript;ModelStatic~;sequelize-typescript/model/shared/model-not-initialized-error;ModelNotInitializedErrorStatic;Argument[0]",
"sequelize-typescript;ModelStatic~;sequelize-typescript;;Member[Model]",
"sequelize-typescript;ModelType;sequelize-typescript/associations/foreign-key/foreign-key-service;;Member[getForeignKeyOptions].Argument[0,1]",
"sequelize-typescript;ModelType;sequelize-typescript/model/model/model;ModelType;",
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getAssociatedClass].ReturnValue",
"sequelize-typescript;ModelType;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript;ModelType;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript;ModelType;sequelize-typescript;HasAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript;ModelType;sequelize-typescript;ModelClassGetter;ReturnValue",
"sequelize-typescript;ModelType;sequelize-typescript;Sequelize;Member[model].Argument[0]",
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-options;ScopeOptionsGetters;",
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;;Member[getScopeOptionsGetters].ReturnValue",
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
"sequelize-typescript;ScopeOptionsGetters;sequelize-typescript;;Member[getScopeOptionsGetters].ReturnValue",
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-options;ScopesOptions;",
"sequelize-typescript;ScopesOptions;sequelize-typescript/scopes/scope-service;;Member[resolveScope].Argument[2]",
"sequelize-typescript;ScopesOptions;sequelize-typescript;;Member[resolveScope].Argument[2]",
"sequelize-typescript;ScopesOptions;sequelize-typescript;ScopesOptionsGetter;ReturnValue.AnyMember",
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scope-options;ScopesOptionsGetter;",
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript/scopes/scopes;;Member[Scopes].Argument[0]",
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;;Member[Scopes].Argument[0]",
"sequelize-typescript;ScopesOptionsGetter;sequelize-typescript;ScopeOptionsGetters;Member[getScopes]",
"sequelize-typescript;Sequelize;sequelize-typescript/sequelize/sequelize/sequelize;Sequelize;",
"sequelize-typescript;Sequelize;sequelize-typescript;BaseAssociation;Member[getSequelizeOptions].Argument[1]",
"sequelize-typescript;Sequelize;sequelize-typescript;BelongsToManyAssociation;Member[getSequelizeOptions].Argument[1]",
"sequelize-typescript;Sequelize;sequelize-typescript;SequelizeStatic;Instance",
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-options;SequelizeOptions;",
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareArgs].ReturnValue.Member[options]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].Argument[0]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;;Member[prepareOptions].ReturnValue",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareArgs].ReturnValue.Member[options]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].Argument[0]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;;Member[prepareOptions].ReturnValue",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;Sequelize;Member[options]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;Argument[3]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[0].Argument[0]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[1].Argument[0,1]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[2].Argument[1,2]",
"sequelize-typescript;SequelizeOptions;sequelize-typescript;SequelizeStatic;WithArity[3].Argument[2]",
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;;Member[Sequelize]",
"sequelize-typescript;SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;SequelizeStatic;",
"sequelize-typescript;SequelizeStatic;sequelize-typescript;;Member[Sequelize]",
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationMixin;Argument[1]",
"sequelize;AnyFindOptions;sequelize;BelongsToManyAddAssociationsMixin;Argument[1]",
"sequelize;AnyFindOptions;sequelize;BelongsToManySetAssociationsMixin;Argument[1]",
"sequelize;AnyFindOptions;sequelize;DefineOptions;Member[defaultScope]",
"sequelize;AnyFindOptions;sequelize;DefineScopeOptions;AnyMember",
"sequelize;AnyFindOptions;sequelize;HasManySetAssociationsMixin;Argument[1]",
"sequelize;AnyFindOptions;sequelize;Instance;Member[reload].Argument[0]",
"sequelize;AnyFindOptions;sequelize;Model;Member[addScope].Argument[1]",
"sequelize;AssociationOptionsBelongsToMany;sequelize;Associations;Member[belongsToMany].Argument[1]",
"sequelize;Associations;sequelize;Model;",
"sequelize;Associations;sequelize;SequelizeStaticAndInstance.Model;",
"sequelize;BuildOptions;sequelize-typescript;ModelStatic~;Argument[1]",
"sequelize;BuildOptions;sequelize;CreateOptions;",
"sequelize;BuildOptions;sequelize;Model;Member[build,bulkBuild].Argument[1]",
"sequelize;CountOptions;sequelize;Model;Member[count].Argument[0]",
"sequelize;CreateOptions;sequelize-typescript/model/model/association/association-create-options;AssociationCreateOptions;",
"sequelize;CreateOptions;sequelize;BelongsToCreateAssociationMixin;Argument[1]",
"sequelize;CreateOptions;sequelize;BelongsToManyCreateAssociationMixin;Argument[1]",
"sequelize;CreateOptions;sequelize;HasManyCreateAssociationMixin;Argument[1]",
"sequelize;CreateOptions;sequelize;HasOneCreateAssociationMixin;Argument[1]",
"sequelize;CreateOptions;sequelize;Model;Member[create].Argument[1]",
"sequelize;DefineAttributeColumnOptions;sequelize;DefineAttributes;AnyMember",
"sequelize;DefineAttributeColumnOptions;sequelize;QueryInterface;Member[addColumn,changeColumn].Argument[2]",
"sequelize;DefineAttributeColumnReferencesOptions;sequelize;DefineAttributeColumnOptions;Member[references]",
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].Argument[1].Argument[0]",
"sequelize;DefineAttributes;sequelize;Hooks;Member[beforeDefine].WithArity[1].Argument[0].Argument[0]",
"sequelize;DefineAttributes;sequelize;QueryInterface;Member[createTable].Argument[1]",
"sequelize;DefineOptions;sequelize;Options;Member[define]",
"sequelize;DefineOptions;sequelize;Sequelize;Member[define].Argument[2]",
"sequelize;DefineScopeOptions;sequelize;DefineOptions;Member[scopes]",
"sequelize;FindCreateFindOptions;sequelize;Model;Member[findCreateFind].Argument[0]",
"sequelize;FindOptions;sequelize-typescript;AssociationCountOptions;",
"sequelize;FindOptions;sequelize-typescript;AssociationGetOptions;",
"sequelize;FindOptions;sequelize-typescript;DefaultScopeGetter;ReturnValue",
"sequelize;FindOptions;sequelize-typescript;Model;Member[reload].Argument[0]",
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;",
"sequelize;FindOptions;sequelize-typescript;ScopesOptions;ReturnValue",
"sequelize;FindOptions;sequelize;AnyFindOptions;",
"sequelize;FindOptions;sequelize;FindCreateFindOptions;",
"sequelize;FindOptions;sequelize;FindOrInitializeOptions;",
"sequelize;FindOptions;sequelize;Model;Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]",
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order]",
"sequelize;FindOptionsOrderArray;sequelize;FindOptions;Member[order].ArrayElement",
"sequelize;FindOrInitializeOptions;sequelize;Model;Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]",
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyGetAssociationsMixin;Argument[0]",
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationMixin;Argument[1]",
"sequelize;HasManyGetAssociationsMixinOptions;sequelize;HasManyHasAssociationsMixin;Argument[1]",
"sequelize;Hooks;sequelize;Hooks;Member[addHook,hook,removeHook].ReturnValue",
"sequelize;Hooks;sequelize;Model;",
"sequelize;Hooks;sequelize;Sequelize;",
"sequelize;Hooks;sequelize;SequelizeStaticAndInstance.Model;",
"sequelize;IncludeAssociation;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue",
"sequelize;IncludeAssociation;sequelize;IncludeOptions;Member[association]",
"sequelize;IncludeOptions;sequelize;BuildOptions;Member[include].ArrayElement",
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include]",
"sequelize;IncludeOptions;sequelize;CountOptions;Member[include].ArrayElement",
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include]",
"sequelize;IncludeOptions;sequelize;FindOptions;Member[include].ArrayElement",
"sequelize;IncludeOptions;sequelize;HasManyGetAssociationsMixinOptions;Member[include]",
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include]",
"sequelize;IncludeOptions;sequelize;IncludeOptions;Member[include].ArrayElement",
"sequelize;Instance;sequelize;Instance;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited",
"sequelize;Instance;sequelize;Instance;Member[equalsOneOf].Argument[0].ArrayElement",
"sequelize;Instance;sequelize;Instance;Member[equals].Argument[0]",
"sequelize;Instance;sequelize;Instance;Member[set,setAttributes].ReturnValue",
"sequelize;Instance;sequelize;Model;Member[Instance,build].ReturnValue",
"sequelize;Instance;sequelize;Model;Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement",
"sequelize;Instance;sequelize;Model;Member[bulkBuild].ReturnValue.ArrayElement",
"sequelize;Instance;sequelize;Model;Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited",
"sequelize;Instance;sequelize;Model;Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement",
"sequelize;Instance;sequelize;QueryInterface;Member[delete,increment,insert,update].Argument[0]",
"sequelize;Instance;sequelize;QueryOptions;Member[instance]",
"sequelize;Instance;sequelize;SequelizeStaticAndInstance;Member[Instance]",
"sequelize;Model;sequelize;AssociationOptionsBelongsToMany;Member[through]",
"sequelize;Model;sequelize;Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]",
"sequelize;Model;sequelize;BuildOptions;Member[include].ArrayElement",
"sequelize;Model;sequelize;CountOptions;Member[include]",
"sequelize;Model;sequelize;CountOptions;Member[include].ArrayElement",
"sequelize;Model;sequelize;DefineAttributeColumnReferencesOptions;Member[model]",
"sequelize;Model;sequelize;FindOptions;Member[include]",
"sequelize;Model;sequelize;FindOptions;Member[include].ArrayElement",
"sequelize;Model;sequelize;FindOptions;Member[lock].Member[of]",
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement",
"sequelize;Model;sequelize;FindOptionsOrderArray;ArrayElement.Member[model]",
"sequelize;Model;sequelize;Hooks;Member[afterDefine].Argument[1].Argument[0]",
"sequelize;Model;sequelize;Hooks;Member[afterDefine].WithArity[1].Argument[0].Argument[0]",
"sequelize;Model;sequelize;IncludeAssociation;Member[source,target]",
"sequelize;Model;sequelize;IncludeOptions;Member[include,model]",
"sequelize;Model;sequelize;IncludeOptions;Member[include].ArrayElement",
"sequelize;Model;sequelize;Instance;Member[Model]",
"sequelize;Model;sequelize;Model;Member[schema,scope,unscoped].ReturnValue",
"sequelize;Model;sequelize;Model;Member[sync].ReturnValue.Awaited",
"sequelize;Model;sequelize;Models;AnyMember",
"sequelize;Model;sequelize;ModelsHashInterface;AnyMember",
"sequelize;Model;sequelize;QueryInterface;Member[bulkDelete,rawSelect,upsert].Argument[3]",
"sequelize;Model;sequelize;QueryInterface;Member[select].Argument[0]",
"sequelize;Model;sequelize;QueryOptions;Member[model]",
"sequelize;Model;sequelize;Sequelize;Member[define,import,model].ReturnValue",
"sequelize;Model;sequelize;Sequelize;Member[import].Argument[1].ReturnValue",
"sequelize;Model;sequelize;SequelizeStaticAndInstance;Member[Model]",
"sequelize;Model;sequelize;ThroughOptions;Member[model]",
"sequelize;Model;sequelize;Utils;Member[mapOptionFieldNames].Argument[1]",
"sequelize;Model;sequelize;Utils;Member[mapValueFieldNames].Argument[2]",
"sequelize;Models;sequelize;Model;Member[associate].Argument[0]",
"sequelize;ModelsHashInterface;sequelize;Sequelize;Member[models]",
"sequelize;Options;sequelize-typescript;SequelizeOptions;",
"sequelize;Options;sequelize;Sequelize;Member[options]",
"sequelize;Options;sequelize;SequelizeStatic;Argument[3]",
"sequelize;Options;sequelize;SequelizeStatic;WithArity[1].Argument[0,1]",
"sequelize;Options;sequelize;SequelizeStatic;WithArity[2].Argument[1,2]",
"sequelize;Options;sequelize;SequelizeStatic;WithArity[3].Argument[2]",
"sequelize;QueryInterface;sequelize;Sequelize;Member[getQueryInterface].ReturnValue",
"sequelize;QueryOptions;sequelize;Options;Member[query]",
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]",
"sequelize;QueryOptions;sequelize;QueryInterface;Member[bulkUpdate,delete,insert].Argument[3]",
"sequelize;QueryOptions;sequelize;QueryInterface;Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]",
"sequelize;QueryOptions;sequelize;QueryInterface;Member[createFunction].Argument[5]",
"sequelize;QueryOptions;sequelize;QueryInterface;Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]",
"sequelize;QueryOptions;sequelize;QueryInterface;Member[increment,update,upsert].Argument[4]",
"sequelize;QueryOptions;sequelize;Sequelize;Member[authenticate,validate].Argument[0]",
"sequelize;QueryOptions;sequelize;Sequelize;Member[query].Argument[1]",
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].Argument[1].Argument[0]",
"sequelize;Sequelize;sequelize;Hooks;Member[afterInit].WithArity[1].Argument[0].Argument[0]",
"sequelize;Sequelize;sequelize;Instance;Member[sequelize]",
"sequelize;Sequelize;sequelize;QueryInterface;Member[sequelize]",
"sequelize;Sequelize;sequelize;Sequelize;Member[import].Argument[1].Argument[0]",
"sequelize;Sequelize;sequelize;SequelizeStatic;Instance",
"sequelize;Sequelize;sequelize;SequelizeStatic;Member[useCLS].ReturnValue",
"sequelize;SequelizeStatic;sequelize-typescript;Sequelize;",
"sequelize;SequelizeStatic;sequelize;;",
"sequelize;SequelizeStatic;sequelize;Sequelize;Member[Sequelize]",
"sequelize;SequelizeStatic;sequelize;SequelizeStatic;Member[Sequelize,default]",
"sequelize;SequelizeStaticAndInstance.Model;sequelize-typescript;Model;",
"sequelize;SequelizeStaticAndInstance;sequelize;Sequelize;",
"sequelize;SequelizeStaticAndInstance;sequelize;SequelizeStatic;",
"sequelize;ThroughOptions;sequelize;AssociationOptionsBelongsToMany;Member[through]",
"sequelize;Utils;sequelize;SequelizeStaticAndInstance;Member[Utils]"
"sequelize-typescript.AssociationCountOptions;sequelize-typescript.Model;Member[$count].Argument[1]",
"sequelize-typescript.AssociationCountOptions;sequelize-typescript/model/model/association/association-count-options.AssociationCountOptions;",
"sequelize-typescript.AssociationGetOptions;sequelize-typescript.Model;Member[$get].Argument[1]",
"sequelize-typescript.AssociationGetOptions;sequelize-typescript.Model;Member[$has].Argument[2]",
"sequelize-typescript.AssociationGetOptions;sequelize-typescript/model/model/association/association-get-options.AssociationGetOptions;",
"sequelize-typescript.BaseAssociation;sequelize-typescript.BaseAssociationStatic;Instance",
"sequelize-typescript.BaseAssociation;sequelize-typescript.BelongsToAssociation;",
"sequelize-typescript.BaseAssociation;sequelize-typescript.BelongsToManyAssociation;",
"sequelize-typescript.BaseAssociation;sequelize-typescript.HasAssociation;",
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[addAssociation].Argument[1]",
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/association-service;Member[setAssociations].Argument[1].ArrayElement",
"sequelize-typescript.BaseAssociation;sequelize-typescript/associations/shared/base-association.BaseAssociation;",
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[addAssociation].Argument[1]",
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement",
"sequelize-typescript.BaseAssociation;sequelize-typescript;Member[setAssociations].Argument[1].ArrayElement",
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript/associations/shared/base-association.BaseAssociationStatic;",
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript/associations/shared/base-association;Member[BaseAssociation]",
"sequelize-typescript.BaseAssociationStatic;sequelize-typescript;Member[BaseAssociation]",
"sequelize-typescript.BelongsToAssociation;sequelize-typescript.BelongsToAssociationStatic;Instance",
"sequelize-typescript.BelongsToAssociation;sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociation;",
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociationStatic;",
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript/associations/belongs-to/belongs-to-association;Member[BelongsToAssociation]",
"sequelize-typescript.BelongsToAssociationStatic;sequelize-typescript;Member[BelongsToAssociation]",
"sequelize-typescript.BelongsToManyAssociation;sequelize-typescript.BelongsToManyAssociationStatic;Instance",
"sequelize-typescript.BelongsToManyAssociation;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociation;",
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociationStatic;",
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript/associations/belongs-to-many/belongs-to-many-association;Member[BelongsToManyAssociation]",
"sequelize-typescript.BelongsToManyAssociationStatic;sequelize-typescript;Member[BelongsToManyAssociation]",
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript.ScopeOptionsGetters;Member[getDefaultScope]",
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript/scopes/default-scope;Member[DefaultScope].Argument[0]",
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript/scopes/scope-options.DefaultScopeGetter;",
"sequelize-typescript.DefaultScopeGetter;sequelize-typescript;Member[DefaultScope].Argument[0]",
"sequelize-typescript.HasAssociation;sequelize-typescript.HasAssociationStatic;Instance",
"sequelize-typescript.HasAssociation;sequelize-typescript/associations/has/has-association.HasAssociation;",
"sequelize-typescript.HasAssociationStatic;sequelize-typescript/associations/has/has-association.HasAssociationStatic;",
"sequelize-typescript.HasAssociationStatic;sequelize-typescript/associations/has/has-association;Member[HasAssociation]",
"sequelize-typescript.HasAssociationStatic;sequelize-typescript;Member[HasAssociation]",
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$add,$has,$remove,$set].Argument[1]",
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$add,$has,$remove,$set].Argument[1].ArrayElement",
"sequelize-typescript.Model;sequelize-typescript.Model;Member[$create,reload].ReturnValue.Awaited",
"sequelize-typescript.Model;sequelize-typescript.ModelStatic~;Instance",
"sequelize-typescript.Model;sequelize-typescript.ModelStatic~;Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]",
"sequelize-typescript.Model;sequelize-typescript.ModelType;Instance",
"sequelize-typescript.Model;sequelize-typescript.Sequelize;Member[getRepository].Argument[0].Instance",
"sequelize-typescript.Model;sequelize-typescript.Sequelize;Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]",
"sequelize-typescript.Model;sequelize-typescript/model/model/model.Model;",
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BaseAssociationStatic;Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BelongsToAssociationStatic;Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript.BelongsToManyAssociationStatic;Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript.HasAssociationStatic;Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/belongs-to-many/belongs-to-many;Member[BelongsToMany].Argument[0,1]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/belongs-to/belongs-to;Member[BelongsTo].Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta;Member[relatedClassGetter]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[addForeignKey].Argument[1]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/foreign-key/foreign-key;Member[ForeignKey].Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/has/has-many;Member[HasMany].Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/associations/has/has-one;Member[HasOne].Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript/model/shared/model-class-getter.ModelClassGetter;",
"sequelize-typescript.ModelClassGetter;sequelize-typescript;Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]",
"sequelize-typescript.ModelClassGetter;sequelize-typescript;Member[BelongsToMany].Argument[0,1]",
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/model/model.ModelStatic~;",
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/model/model;Member[Model]",
"sequelize-typescript.ModelStatic~;sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic;Argument[0]",
"sequelize-typescript.ModelStatic~;sequelize-typescript;Member[Model]",
"sequelize-typescript.ModelType;sequelize-typescript.BaseAssociation;Member[getAssociatedClass].ReturnValue",
"sequelize-typescript.ModelType;sequelize-typescript.BaseAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript.ModelType;sequelize-typescript.BelongsToAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript.ModelType;sequelize-typescript.BelongsToManyAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript.ModelType;sequelize-typescript.HasAssociation;Member[getSequelizeOptions].Argument[0]",
"sequelize-typescript.ModelType;sequelize-typescript.ModelClassGetter;ReturnValue",
"sequelize-typescript.ModelType;sequelize-typescript.Sequelize;Member[model].Argument[0]",
"sequelize-typescript.ModelType;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[getForeignKeyOptions].Argument[0,1]",
"sequelize-typescript.ModelType;sequelize-typescript/model/model/model.ModelType;",
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-options.ScopeOptionsGetters;",
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript/scopes/scope-service;Member[getScopeOptionsGetters].ReturnValue",
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript;Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]",
"sequelize-typescript.ScopeOptionsGetters;sequelize-typescript;Member[getScopeOptionsGetters].ReturnValue",
"sequelize-typescript.ScopesOptions;sequelize-typescript.ScopesOptionsGetter;ReturnValue.AnyMember",
"sequelize-typescript.ScopesOptions;sequelize-typescript/scopes/scope-options.ScopesOptions;",
"sequelize-typescript.ScopesOptions;sequelize-typescript/scopes/scope-service;Member[resolveScope].Argument[2]",
"sequelize-typescript.ScopesOptions;sequelize-typescript;Member[resolveScope].Argument[2]",
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript.ScopeOptionsGetters;Member[getScopes]",
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript/scopes/scope-options.ScopesOptionsGetter;",
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript/scopes/scopes;Member[Scopes].Argument[0]",
"sequelize-typescript.ScopesOptionsGetter;sequelize-typescript;Member[Scopes].Argument[0]",
"sequelize-typescript.Sequelize;sequelize-typescript.BaseAssociation;Member[getSequelizeOptions].Argument[1]",
"sequelize-typescript.Sequelize;sequelize-typescript.BelongsToManyAssociation;Member[getSequelizeOptions].Argument[1]",
"sequelize-typescript.Sequelize;sequelize-typescript.SequelizeStatic;Instance",
"sequelize-typescript.Sequelize;sequelize-typescript/sequelize/sequelize/sequelize.Sequelize;",
"sequelize-typescript.SequelizeOptions;sequelize-typescript.Sequelize;Member[options]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;Argument[3]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[0].Argument[0]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[1].Argument[0,1]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[2].Argument[1,2]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript.SequelizeStatic;WithArity[3].Argument[2]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-options.SequelizeOptions;",
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareArgs].ReturnValue.Member[options]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareOptions].Argument[0]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript/sequelize/sequelize/sequelize-service;Member[prepareOptions].ReturnValue",
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareArgs].ReturnValue.Member[options]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareOptions].Argument[0]",
"sequelize-typescript.SequelizeOptions;sequelize-typescript;Member[prepareOptions].ReturnValue",
"sequelize-typescript.SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize.SequelizeStatic;",
"sequelize-typescript.SequelizeStatic;sequelize-typescript/sequelize/sequelize/sequelize;Member[Sequelize]",
"sequelize-typescript.SequelizeStatic;sequelize-typescript;Member[Sequelize]",
"sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta;sequelize-typescript/associations/foreign-key/foreign-key-service;Member[getForeignKeys].ReturnValue.ArrayElement",
"sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions;sequelize-typescript.Model;Member[$create].Argument[2]",
"sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic;sequelize-typescript/model/shared/model-not-initialized-error;Member[ModelNotInitializedError]",
"sequelize.AnyFindOptions;sequelize.BelongsToManyAddAssociationMixin;Argument[1]",
"sequelize.AnyFindOptions;sequelize.BelongsToManyAddAssociationsMixin;Argument[1]",
"sequelize.AnyFindOptions;sequelize.BelongsToManySetAssociationsMixin;Argument[1]",
"sequelize.AnyFindOptions;sequelize.DefineOptions;Member[defaultScope]",
"sequelize.AnyFindOptions;sequelize.DefineScopeOptions;AnyMember",
"sequelize.AnyFindOptions;sequelize.HasManySetAssociationsMixin;Argument[1]",
"sequelize.AnyFindOptions;sequelize.Instance;Member[reload].Argument[0]",
"sequelize.AnyFindOptions;sequelize.Model;Member[addScope].Argument[1]",
"sequelize.AssociationOptionsBelongsToMany;sequelize.Associations;Member[belongsToMany].Argument[1]",
"sequelize.Associations;sequelize.Model;",
"sequelize.Associations;sequelize.SequelizeStaticAndInstance.Model;",
"sequelize.BuildOptions;sequelize-typescript.ModelStatic~;Argument[1]",
"sequelize.BuildOptions;sequelize.CreateOptions;",
"sequelize.BuildOptions;sequelize.Model;Member[build,bulkBuild].Argument[1]",
"sequelize.CountOptions;sequelize.Model;Member[count].Argument[0]",
"sequelize.CreateOptions;sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions;",
"sequelize.CreateOptions;sequelize.BelongsToCreateAssociationMixin;Argument[1]",
"sequelize.CreateOptions;sequelize.BelongsToManyCreateAssociationMixin;Argument[1]",
"sequelize.CreateOptions;sequelize.HasManyCreateAssociationMixin;Argument[1]",
"sequelize.CreateOptions;sequelize.HasOneCreateAssociationMixin;Argument[1]",
"sequelize.CreateOptions;sequelize.Model;Member[create].Argument[1]",
"sequelize.DefineAttributeColumnOptions;sequelize.DefineAttributes;AnyMember",
"sequelize.DefineAttributeColumnOptions;sequelize.QueryInterface;Member[addColumn,changeColumn].Argument[2]",
"sequelize.DefineAttributeColumnReferencesOptions;sequelize.DefineAttributeColumnOptions;Member[references]",
"sequelize.DefineAttributes;sequelize.Hooks;Member[beforeDefine].Argument[1].Argument[0]",
"sequelize.DefineAttributes;sequelize.Hooks;Member[beforeDefine].WithArity[1].Argument[0].Argument[0]",
"sequelize.DefineAttributes;sequelize.QueryInterface;Member[createTable].Argument[1]",
"sequelize.DefineOptions;sequelize.Options;Member[define]",
"sequelize.DefineOptions;sequelize.Sequelize;Member[define].Argument[2]",
"sequelize.DefineScopeOptions;sequelize.DefineOptions;Member[scopes]",
"sequelize.FindCreateFindOptions;sequelize.Model;Member[findCreateFind].Argument[0]",
"sequelize.FindOptions;sequelize-typescript.AssociationCountOptions;",
"sequelize.FindOptions;sequelize-typescript.AssociationGetOptions;",
"sequelize.FindOptions;sequelize-typescript.DefaultScopeGetter;ReturnValue",
"sequelize.FindOptions;sequelize-typescript.Model;Member[reload].Argument[0]",
"sequelize.FindOptions;sequelize-typescript.ScopesOptions;",
"sequelize.FindOptions;sequelize-typescript.ScopesOptions;ReturnValue",
"sequelize.FindOptions;sequelize.AnyFindOptions;",
"sequelize.FindOptions;sequelize.FindCreateFindOptions;",
"sequelize.FindOptions;sequelize.FindOrInitializeOptions;",
"sequelize.FindOptions;sequelize.Model;Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]",
"sequelize.FindOptionsOrderArray;sequelize.FindOptions;Member[order]",
"sequelize.FindOptionsOrderArray;sequelize.FindOptions;Member[order].ArrayElement",
"sequelize.FindOrInitializeOptions;sequelize.Model;Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]",
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyGetAssociationsMixin;Argument[0]",
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyHasAssociationMixin;Argument[1]",
"sequelize.HasManyGetAssociationsMixinOptions;sequelize.HasManyHasAssociationsMixin;Argument[1]",
"sequelize.Hooks;sequelize.Hooks;Member[addHook,hook,removeHook].ReturnValue",
"sequelize.Hooks;sequelize.Model;",
"sequelize.Hooks;sequelize.Sequelize;",
"sequelize.Hooks;sequelize.SequelizeStaticAndInstance.Model;",
"sequelize.IncludeAssociation;sequelize.Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue",
"sequelize.IncludeAssociation;sequelize.IncludeOptions;Member[association]",
"sequelize.IncludeOptions;sequelize.BuildOptions;Member[include].ArrayElement",
"sequelize.IncludeOptions;sequelize.CountOptions;Member[include]",
"sequelize.IncludeOptions;sequelize.CountOptions;Member[include].ArrayElement",
"sequelize.IncludeOptions;sequelize.FindOptions;Member[include]",
"sequelize.IncludeOptions;sequelize.FindOptions;Member[include].ArrayElement",
"sequelize.IncludeOptions;sequelize.HasManyGetAssociationsMixinOptions;Member[include]",
"sequelize.IncludeOptions;sequelize.IncludeOptions;Member[include]",
"sequelize.IncludeOptions;sequelize.IncludeOptions;Member[include].ArrayElement",
"sequelize.Instance;sequelize.Instance;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited",
"sequelize.Instance;sequelize.Instance;Member[equalsOneOf].Argument[0].ArrayElement",
"sequelize.Instance;sequelize.Instance;Member[equals].Argument[0]",
"sequelize.Instance;sequelize.Instance;Member[set,setAttributes].ReturnValue",
"sequelize.Instance;sequelize.Model;Member[Instance,build].ReturnValue",
"sequelize.Instance;sequelize.Model;Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement",
"sequelize.Instance;sequelize.Model;Member[bulkBuild].ReturnValue.ArrayElement",
"sequelize.Instance;sequelize.Model;Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited",
"sequelize.Instance;sequelize.Model;Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement",
"sequelize.Instance;sequelize.QueryInterface;Member[delete,increment,insert,update].Argument[0]",
"sequelize.Instance;sequelize.QueryOptions;Member[instance]",
"sequelize.Instance;sequelize.SequelizeStaticAndInstance;Member[Instance]",
"sequelize.Model;sequelize.AssociationOptionsBelongsToMany;Member[through]",
"sequelize.Model;sequelize.Associations;Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]",
"sequelize.Model;sequelize.BuildOptions;Member[include].ArrayElement",
"sequelize.Model;sequelize.CountOptions;Member[include]",
"sequelize.Model;sequelize.CountOptions;Member[include].ArrayElement",
"sequelize.Model;sequelize.DefineAttributeColumnReferencesOptions;Member[model]",
"sequelize.Model;sequelize.FindOptions;Member[include]",
"sequelize.Model;sequelize.FindOptions;Member[include].ArrayElement",
"sequelize.Model;sequelize.FindOptions;Member[lock].Member[of]",
"sequelize.Model;sequelize.FindOptionsOrderArray;ArrayElement",
"sequelize.Model;sequelize.FindOptionsOrderArray;ArrayElement.Member[model]",
"sequelize.Model;sequelize.Hooks;Member[afterDefine].Argument[1].Argument[0]",
"sequelize.Model;sequelize.Hooks;Member[afterDefine].WithArity[1].Argument[0].Argument[0]",
"sequelize.Model;sequelize.IncludeAssociation;Member[source,target]",
"sequelize.Model;sequelize.IncludeOptions;Member[include,model]",
"sequelize.Model;sequelize.IncludeOptions;Member[include].ArrayElement",
"sequelize.Model;sequelize.Instance;Member[Model]",
"sequelize.Model;sequelize.Model;Member[schema,scope,unscoped].ReturnValue",
"sequelize.Model;sequelize.Model;Member[sync].ReturnValue.Awaited",
"sequelize.Model;sequelize.Models;AnyMember",
"sequelize.Model;sequelize.ModelsHashInterface;AnyMember",
"sequelize.Model;sequelize.QueryInterface;Member[bulkDelete,rawSelect,upsert].Argument[3]",
"sequelize.Model;sequelize.QueryInterface;Member[select].Argument[0]",
"sequelize.Model;sequelize.QueryOptions;Member[model]",
"sequelize.Model;sequelize.Sequelize;Member[define,import,model].ReturnValue",
"sequelize.Model;sequelize.Sequelize;Member[import].Argument[1].ReturnValue",
"sequelize.Model;sequelize.SequelizeStaticAndInstance;Member[Model]",
"sequelize.Model;sequelize.ThroughOptions;Member[model]",
"sequelize.Model;sequelize.Utils;Member[mapOptionFieldNames].Argument[1]",
"sequelize.Model;sequelize.Utils;Member[mapValueFieldNames].Argument[2]",
"sequelize.Models;sequelize.Model;Member[associate].Argument[0]",
"sequelize.ModelsHashInterface;sequelize.Sequelize;Member[models]",
"sequelize.Options;sequelize-typescript.SequelizeOptions;",
"sequelize.Options;sequelize.Sequelize;Member[options]",
"sequelize.Options;sequelize.SequelizeStatic;Argument[3]",
"sequelize.Options;sequelize.SequelizeStatic;WithArity[1].Argument[0,1]",
"sequelize.Options;sequelize.SequelizeStatic;WithArity[2].Argument[1,2]",
"sequelize.Options;sequelize.SequelizeStatic;WithArity[3].Argument[2]",
"sequelize.QueryInterface;sequelize.Sequelize;Member[getQueryInterface].ReturnValue",
"sequelize.QueryOptions;sequelize.Options;Member[query]",
"sequelize.QueryOptions;sequelize.QueryInterface;Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]",
"sequelize.QueryOptions;sequelize.QueryInterface;Member[bulkUpdate,delete,insert].Argument[3]",
"sequelize.QueryOptions;sequelize.QueryInterface;Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]",
"sequelize.QueryOptions;sequelize.QueryInterface;Member[createFunction].Argument[5]",
"sequelize.QueryOptions;sequelize.QueryInterface;Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]",
"sequelize.QueryOptions;sequelize.QueryInterface;Member[increment,update,upsert].Argument[4]",
"sequelize.QueryOptions;sequelize.Sequelize;Member[authenticate,validate].Argument[0]",
"sequelize.QueryOptions;sequelize.Sequelize;Member[query].Argument[1]",
"sequelize.Sequelize;sequelize.Hooks;Member[afterInit].Argument[1].Argument[0]",
"sequelize.Sequelize;sequelize.Hooks;Member[afterInit].WithArity[1].Argument[0].Argument[0]",
"sequelize.Sequelize;sequelize.Instance;Member[sequelize]",
"sequelize.Sequelize;sequelize.QueryInterface;Member[sequelize]",
"sequelize.Sequelize;sequelize.Sequelize;Member[import].Argument[1].Argument[0]",
"sequelize.Sequelize;sequelize.SequelizeStatic;Instance",
"sequelize.Sequelize;sequelize.SequelizeStatic;Member[useCLS].ReturnValue",
"sequelize.SequelizeStatic;sequelize-typescript.Sequelize;",
"sequelize.SequelizeStatic;sequelize.Sequelize;Member[Sequelize]",
"sequelize.SequelizeStatic;sequelize.SequelizeStatic;Member[Sequelize,default]",
"sequelize.SequelizeStatic;sequelize;",
"sequelize.SequelizeStaticAndInstance.Model;sequelize-typescript.Model;",
"sequelize.SequelizeStaticAndInstance;sequelize.Sequelize;",
"sequelize.SequelizeStaticAndInstance;sequelize.SequelizeStatic;",
"sequelize.ThroughOptions;sequelize.AssociationOptionsBelongsToMany;Member[through]",
"sequelize.Utils;sequelize.SequelizeStaticAndInstance;Member[Utils]"
],
"summaries": [
"sequelize-typescript;Model;;;Member[reload].ReturnValue.Awaited;type",
"sequelize;Instance;;;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited;type",
"sequelize;Instance;;;Member[set,setAttributes].ReturnValue;type",
"sequelize;Model;;;Member[schema,scope,unscoped].ReturnValue;type",
"sequelize;Model;;;Member[sync].ReturnValue.Awaited;type"
"sequelize-typescript.Model;;;Member[reload].ReturnValue.Awaited;type",
"sequelize.Instance;;;Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited;type",
"sequelize.Instance;;;Member[set,setAttributes].ReturnValue;type",
"sequelize.Model;;;Member[schema,scope,unscoped].ReturnValue;type",
"sequelize.Model;;;Member[sync].ReturnValue.Awaited;type"
],
"typeVariables": [
"sequelize-typescript.ModelStatic.0;Instance",

View File

@@ -0,0 +1,282 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: sinkModel
data:
- [sequelize.Sequelize, "Member[query].Argument[0].Member[query]", "sql-injection"]
- [sequelize.Sequelize, "Member[query].Argument[0]", "sql-injection"]
- [sequelize.SequelizeStaticAndInstance, "Member[asIs,literal].Argument[0]", "sql-injection"]
- [sequelize, "Argument[0..].Member[password]", "credentials[password]"]
- [sequelize, "Argument[0..].Member[username]", "credentials[username]"]
- [sequelize, "Argument[1]", "credentials[username]"]
- [sequelize, "Argument[2]", "credentials[password]"]
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- ["sequelize-typescript.AssociationCountOptions", "sequelize-typescript.Model", "Member[$count].Argument[1]"]
- ["sequelize-typescript.AssociationCountOptions", "sequelize-typescript/model/model/association/association-count-options.AssociationCountOptions", ""]
- ["sequelize-typescript.AssociationGetOptions", "sequelize-typescript.Model", "Member[$get].Argument[1]"]
- ["sequelize-typescript.AssociationGetOptions", "sequelize-typescript.Model", "Member[$has].Argument[2]"]
- ["sequelize-typescript.AssociationGetOptions", "sequelize-typescript/model/model/association/association-get-options.AssociationGetOptions", ""]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript.BaseAssociationStatic", Instance]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript.BelongsToAssociation", ""]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript.BelongsToManyAssociation", ""]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript.HasAssociation", ""]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript/associations/shared/association-service", "Member[addAssociation].Argument[1]"]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript/associations/shared/association-service", "Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement"]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript/associations/shared/association-service", "Member[setAssociations].Argument[1].ArrayElement"]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript/associations/shared/base-association.BaseAssociation", ""]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript", "Member[addAssociation].Argument[1]"]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript", "Member[getAssociations,getAssociationsByRelation].ReturnValue.ArrayElement"]
- ["sequelize-typescript.BaseAssociation", "sequelize-typescript", "Member[setAssociations].Argument[1].ArrayElement"]
- ["sequelize-typescript.BaseAssociationStatic", "sequelize-typescript/associations/shared/base-association.BaseAssociationStatic", ""]
- ["sequelize-typescript.BaseAssociationStatic", "sequelize-typescript/associations/shared/base-association", "Member[BaseAssociation]"]
- ["sequelize-typescript.BaseAssociationStatic", "sequelize-typescript", "Member[BaseAssociation]"]
- ["sequelize-typescript.BelongsToAssociation", "sequelize-typescript.BelongsToAssociationStatic", Instance]
- ["sequelize-typescript.BelongsToAssociation", "sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociation", ""]
- ["sequelize-typescript.BelongsToAssociationStatic", "sequelize-typescript/associations/belongs-to/belongs-to-association.BelongsToAssociationStatic", ""]
- ["sequelize-typescript.BelongsToAssociationStatic", "sequelize-typescript/associations/belongs-to/belongs-to-association", "Member[BelongsToAssociation]"]
- ["sequelize-typescript.BelongsToAssociationStatic", "sequelize-typescript", "Member[BelongsToAssociation]"]
- ["sequelize-typescript.BelongsToManyAssociation", "sequelize-typescript.BelongsToManyAssociationStatic", Instance]
- ["sequelize-typescript.BelongsToManyAssociation", "sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociation", ""]
- ["sequelize-typescript.BelongsToManyAssociationStatic", "sequelize-typescript/associations/belongs-to-many/belongs-to-many-association.BelongsToManyAssociationStatic", ""]
- ["sequelize-typescript.BelongsToManyAssociationStatic", "sequelize-typescript/associations/belongs-to-many/belongs-to-many-association", "Member[BelongsToManyAssociation]"]
- ["sequelize-typescript.BelongsToManyAssociationStatic", "sequelize-typescript", "Member[BelongsToManyAssociation]"]
- ["sequelize-typescript.DefaultScopeGetter", "sequelize-typescript.ScopeOptionsGetters", "Member[getDefaultScope]"]
- ["sequelize-typescript.DefaultScopeGetter", "sequelize-typescript/scopes/default-scope", "Member[DefaultScope].Argument[0]"]
- ["sequelize-typescript.DefaultScopeGetter", "sequelize-typescript/scopes/scope-options.DefaultScopeGetter", ""]
- ["sequelize-typescript.DefaultScopeGetter", "sequelize-typescript", "Member[DefaultScope].Argument[0]"]
- ["sequelize-typescript.HasAssociation", "sequelize-typescript.HasAssociationStatic", Instance]
- ["sequelize-typescript.HasAssociation", "sequelize-typescript/associations/has/has-association.HasAssociation", ""]
- ["sequelize-typescript.HasAssociationStatic", "sequelize-typescript/associations/has/has-association.HasAssociationStatic", ""]
- ["sequelize-typescript.HasAssociationStatic", "sequelize-typescript/associations/has/has-association", "Member[HasAssociation]"]
- ["sequelize-typescript.HasAssociationStatic", "sequelize-typescript", "Member[HasAssociation]"]
- ["sequelize-typescript.Model", "sequelize-typescript.Model", "Member[$add,$has,$remove,$set].Argument[1]"]
- ["sequelize-typescript.Model", "sequelize-typescript.Model", "Member[$add,$has,$remove,$set].Argument[1].ArrayElement"]
- ["sequelize-typescript.Model", "sequelize-typescript.Model", "Member[$create,reload].ReturnValue.Awaited"]
- ["sequelize-typescript.Model", "sequelize-typescript.ModelStatic~", Instance]
- ["sequelize-typescript.Model", "sequelize-typescript.ModelStatic~", "Member[initialize].ReturnValue.TypeVar[sequelize-typescript.ModelStatic.0]"]
- ["sequelize-typescript.Model", "sequelize-typescript.ModelType", Instance]
- ["sequelize-typescript.Model", "sequelize-typescript.Sequelize", "Member[getRepository].Argument[0].Instance"]
- ["sequelize-typescript.Model", "sequelize-typescript.Sequelize", "Member[getRepository].ReturnValue.TypeVar[sequelize-typescript.Repository.0]"]
- ["sequelize-typescript.Model", "sequelize-typescript/model/model/model.Model", ""]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript.BaseAssociationStatic", "Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript.BelongsToAssociationStatic", "Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript.BelongsToManyAssociationStatic", "Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript.HasAssociationStatic", "Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/associations/belongs-to-many/belongs-to-many", "Member[BelongsToMany].Argument[0,1]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/associations/belongs-to/belongs-to", "Member[BelongsTo].Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta", "Member[relatedClassGetter]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/associations/foreign-key/foreign-key-service", "Member[addForeignKey].Argument[1]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/associations/foreign-key/foreign-key", "Member[ForeignKey].Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/associations/has/has-many", "Member[HasMany].Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/associations/has/has-one", "Member[HasOne].Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript/model/shared/model-class-getter.ModelClassGetter", ""]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript", "Member[BelongsTo,ForeignKey,HasMany,HasOne].Argument[0]"]
- ["sequelize-typescript.ModelClassGetter", "sequelize-typescript", "Member[BelongsToMany].Argument[0,1]"]
- ["sequelize-typescript.ModelStatic~", "sequelize-typescript/model/model/model.ModelStatic~", ""]
- ["sequelize-typescript.ModelStatic~", "sequelize-typescript/model/model/model", "Member[Model]"]
- ["sequelize-typescript.ModelStatic~", "sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic", "Argument[0]"]
- ["sequelize-typescript.ModelStatic~", "sequelize-typescript", "Member[Model]"]
- ["sequelize-typescript.ModelType", "sequelize-typescript.BaseAssociation", "Member[getAssociatedClass].ReturnValue"]
- ["sequelize-typescript.ModelType", "sequelize-typescript.BaseAssociation", "Member[getSequelizeOptions].Argument[0]"]
- ["sequelize-typescript.ModelType", "sequelize-typescript.BelongsToAssociation", "Member[getSequelizeOptions].Argument[0]"]
- ["sequelize-typescript.ModelType", "sequelize-typescript.BelongsToManyAssociation", "Member[getSequelizeOptions].Argument[0]"]
- ["sequelize-typescript.ModelType", "sequelize-typescript.HasAssociation", "Member[getSequelizeOptions].Argument[0]"]
- ["sequelize-typescript.ModelType", "sequelize-typescript.ModelClassGetter", ReturnValue]
- ["sequelize-typescript.ModelType", "sequelize-typescript.Sequelize", "Member[model].Argument[0]"]
- ["sequelize-typescript.ModelType", "sequelize-typescript/associations/foreign-key/foreign-key-service", "Member[getForeignKeyOptions].Argument[0,1]"]
- ["sequelize-typescript.ModelType", "sequelize-typescript/model/model/model.ModelType", ""]
- ["sequelize-typescript.ScopeOptionsGetters", "sequelize-typescript/scopes/scope-options.ScopeOptionsGetters", ""]
- ["sequelize-typescript.ScopeOptionsGetters", "sequelize-typescript/scopes/scope-service", "Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]"]
- ["sequelize-typescript.ScopeOptionsGetters", "sequelize-typescript/scopes/scope-service", "Member[getScopeOptionsGetters].ReturnValue"]
- ["sequelize-typescript.ScopeOptionsGetters", "sequelize-typescript", "Member[addScopeOptionsGetter,setScopeOptionsGetters].Argument[1]"]
- ["sequelize-typescript.ScopeOptionsGetters", "sequelize-typescript", "Member[getScopeOptionsGetters].ReturnValue"]
- ["sequelize-typescript.ScopesOptions", "sequelize-typescript.ScopesOptionsGetter", ReturnValue.AnyMember]
- ["sequelize-typescript.ScopesOptions", "sequelize-typescript/scopes/scope-options.ScopesOptions", ""]
- ["sequelize-typescript.ScopesOptions", "sequelize-typescript/scopes/scope-service", "Member[resolveScope].Argument[2]"]
- ["sequelize-typescript.ScopesOptions", "sequelize-typescript", "Member[resolveScope].Argument[2]"]
- ["sequelize-typescript.ScopesOptionsGetter", "sequelize-typescript.ScopeOptionsGetters", "Member[getScopes]"]
- ["sequelize-typescript.ScopesOptionsGetter", "sequelize-typescript/scopes/scope-options.ScopesOptionsGetter", ""]
- ["sequelize-typescript.ScopesOptionsGetter", "sequelize-typescript/scopes/scopes", "Member[Scopes].Argument[0]"]
- ["sequelize-typescript.ScopesOptionsGetter", "sequelize-typescript", "Member[Scopes].Argument[0]"]
- ["sequelize-typescript.Sequelize", "sequelize-typescript.BaseAssociation", "Member[getSequelizeOptions].Argument[1]"]
- ["sequelize-typescript.Sequelize", "sequelize-typescript.BelongsToManyAssociation", "Member[getSequelizeOptions].Argument[1]"]
- ["sequelize-typescript.Sequelize", "sequelize-typescript.SequelizeStatic", Instance]
- ["sequelize-typescript.Sequelize", "sequelize-typescript/sequelize/sequelize/sequelize.Sequelize", ""]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript.Sequelize", "Member[options]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript.SequelizeStatic", "Argument[3]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript.SequelizeStatic", "WithArity[0].Argument[0]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript.SequelizeStatic", "WithArity[1].Argument[0,1]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript.SequelizeStatic", "WithArity[2].Argument[1,2]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript.SequelizeStatic", "WithArity[3].Argument[2]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript/sequelize/sequelize/sequelize-options.SequelizeOptions", ""]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript/sequelize/sequelize/sequelize-service", "Member[prepareArgs].ReturnValue.Member[options]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript/sequelize/sequelize/sequelize-service", "Member[prepareOptions].Argument[0]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript/sequelize/sequelize/sequelize-service", "Member[prepareOptions].ReturnValue"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript", "Member[prepareArgs].ReturnValue.Member[options]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript", "Member[prepareOptions].Argument[0]"]
- ["sequelize-typescript.SequelizeOptions", "sequelize-typescript", "Member[prepareOptions].ReturnValue"]
- ["sequelize-typescript.SequelizeStatic", "sequelize-typescript/sequelize/sequelize/sequelize.SequelizeStatic", ""]
- ["sequelize-typescript.SequelizeStatic", "sequelize-typescript/sequelize/sequelize/sequelize", "Member[Sequelize]"]
- ["sequelize-typescript.SequelizeStatic", "sequelize-typescript", "Member[Sequelize]"]
- ["sequelize-typescript/associations/foreign-key/foreign-key-meta.ForeignKeyMeta", "sequelize-typescript/associations/foreign-key/foreign-key-service", "Member[getForeignKeys].ReturnValue.ArrayElement"]
- ["sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions", "sequelize-typescript.Model", "Member[$create].Argument[2]"]
- ["sequelize-typescript/model/shared/model-not-initialized-error.ModelNotInitializedErrorStatic", "sequelize-typescript/model/shared/model-not-initialized-error", "Member[ModelNotInitializedError]"]
- [sequelize.AnyFindOptions, sequelize.BelongsToManyAddAssociationMixin, "Argument[1]"]
- [sequelize.AnyFindOptions, sequelize.BelongsToManyAddAssociationsMixin, "Argument[1]"]
- [sequelize.AnyFindOptions, sequelize.BelongsToManySetAssociationsMixin, "Argument[1]"]
- [sequelize.AnyFindOptions, sequelize.DefineOptions, "Member[defaultScope]"]
- [sequelize.AnyFindOptions, sequelize.DefineScopeOptions, AnyMember]
- [sequelize.AnyFindOptions, sequelize.HasManySetAssociationsMixin, "Argument[1]"]
- [sequelize.AnyFindOptions, sequelize.Instance, "Member[reload].Argument[0]"]
- [sequelize.AnyFindOptions, sequelize.Model, "Member[addScope].Argument[1]"]
- [sequelize.AssociationOptionsBelongsToMany, sequelize.Associations, "Member[belongsToMany].Argument[1]"]
- [sequelize.Associations, sequelize.Model, ""]
- [sequelize.Associations, sequelize.SequelizeStaticAndInstance.Model, ""]
- [sequelize.BuildOptions, "sequelize-typescript.ModelStatic~", "Argument[1]"]
- [sequelize.BuildOptions, sequelize.CreateOptions, ""]
- [sequelize.BuildOptions, sequelize.Model, "Member[build,bulkBuild].Argument[1]"]
- [sequelize.CountOptions, sequelize.Model, "Member[count].Argument[0]"]
- [sequelize.CreateOptions, "sequelize-typescript/model/model/association/association-create-options.AssociationCreateOptions", ""]
- [sequelize.CreateOptions, sequelize.BelongsToCreateAssociationMixin, "Argument[1]"]
- [sequelize.CreateOptions, sequelize.BelongsToManyCreateAssociationMixin, "Argument[1]"]
- [sequelize.CreateOptions, sequelize.HasManyCreateAssociationMixin, "Argument[1]"]
- [sequelize.CreateOptions, sequelize.HasOneCreateAssociationMixin, "Argument[1]"]
- [sequelize.CreateOptions, sequelize.Model, "Member[create].Argument[1]"]
- [sequelize.DefineAttributeColumnOptions, sequelize.DefineAttributes, AnyMember]
- [sequelize.DefineAttributeColumnOptions, sequelize.QueryInterface, "Member[addColumn,changeColumn].Argument[2]"]
- [sequelize.DefineAttributeColumnReferencesOptions, sequelize.DefineAttributeColumnOptions, "Member[references]"]
- [sequelize.DefineAttributes, sequelize.Hooks, "Member[beforeDefine].Argument[1].Argument[0]"]
- [sequelize.DefineAttributes, sequelize.Hooks, "Member[beforeDefine].WithArity[1].Argument[0].Argument[0]"]
- [sequelize.DefineAttributes, sequelize.QueryInterface, "Member[createTable].Argument[1]"]
- [sequelize.DefineOptions, sequelize.Options, "Member[define]"]
- [sequelize.DefineOptions, sequelize.Sequelize, "Member[define].Argument[2]"]
- [sequelize.DefineScopeOptions, sequelize.DefineOptions, "Member[scopes]"]
- [sequelize.FindCreateFindOptions, sequelize.Model, "Member[findCreateFind].Argument[0]"]
- [sequelize.FindOptions, "sequelize-typescript.AssociationCountOptions", ""]
- [sequelize.FindOptions, "sequelize-typescript.AssociationGetOptions", ""]
- [sequelize.FindOptions, "sequelize-typescript.DefaultScopeGetter", ReturnValue]
- [sequelize.FindOptions, "sequelize-typescript.Model", "Member[reload].Argument[0]"]
- [sequelize.FindOptions, "sequelize-typescript.ScopesOptions", ""]
- [sequelize.FindOptions, "sequelize-typescript.ScopesOptions", ReturnValue]
- [sequelize.FindOptions, sequelize.AnyFindOptions, ""]
- [sequelize.FindOptions, sequelize.FindCreateFindOptions, ""]
- [sequelize.FindOptions, sequelize.FindOrInitializeOptions, ""]
- [sequelize.FindOptions, sequelize.Model, "Member[all,find,findAll,findAndCount,findAndCountAll,findOne].Argument[0]"]
- [sequelize.FindOptionsOrderArray, sequelize.FindOptions, "Member[order]"]
- [sequelize.FindOptionsOrderArray, sequelize.FindOptions, "Member[order].ArrayElement"]
- [sequelize.FindOrInitializeOptions, sequelize.Model, "Member[findOrBuild,findOrCreate,findOrInitialize].Argument[0]"]
- [sequelize.HasManyGetAssociationsMixinOptions, sequelize.HasManyGetAssociationsMixin, "Argument[0]"]
- [sequelize.HasManyGetAssociationsMixinOptions, sequelize.HasManyHasAssociationMixin, "Argument[1]"]
- [sequelize.HasManyGetAssociationsMixinOptions, sequelize.HasManyHasAssociationsMixin, "Argument[1]"]
- [sequelize.Hooks, sequelize.Hooks, "Member[addHook,hook,removeHook].ReturnValue"]
- [sequelize.Hooks, sequelize.Model, ""]
- [sequelize.Hooks, sequelize.Sequelize, ""]
- [sequelize.Hooks, sequelize.SequelizeStaticAndInstance.Model, ""]
- [sequelize.IncludeAssociation, sequelize.Associations, "Member[belongsTo,belongsToMany,hasMany,hasOne].ReturnValue"]
- [sequelize.IncludeAssociation, sequelize.IncludeOptions, "Member[association]"]
- [sequelize.IncludeOptions, sequelize.BuildOptions, "Member[include].ArrayElement"]
- [sequelize.IncludeOptions, sequelize.CountOptions, "Member[include]"]
- [sequelize.IncludeOptions, sequelize.CountOptions, "Member[include].ArrayElement"]
- [sequelize.IncludeOptions, sequelize.FindOptions, "Member[include]"]
- [sequelize.IncludeOptions, sequelize.FindOptions, "Member[include].ArrayElement"]
- [sequelize.IncludeOptions, sequelize.HasManyGetAssociationsMixinOptions, "Member[include]"]
- [sequelize.IncludeOptions, sequelize.IncludeOptions, "Member[include]"]
- [sequelize.IncludeOptions, sequelize.IncludeOptions, "Member[include].ArrayElement"]
- [sequelize.Instance, sequelize.Instance, "Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited"]
- [sequelize.Instance, sequelize.Instance, "Member[equalsOneOf].Argument[0].ArrayElement"]
- [sequelize.Instance, sequelize.Instance, "Member[equals].Argument[0]"]
- [sequelize.Instance, sequelize.Instance, "Member[set,setAttributes].ReturnValue"]
- [sequelize.Instance, sequelize.Model, "Member[Instance,build].ReturnValue"]
- [sequelize.Instance, sequelize.Model, "Member[all,bulkCreate,findAll].ReturnValue.Awaited.ArrayElement"]
- [sequelize.Instance, sequelize.Model, "Member[bulkBuild].ReturnValue.ArrayElement"]
- [sequelize.Instance, sequelize.Model, "Member[create,find,findById,findByPk,findByPrimary,findOne].ReturnValue.Awaited"]
- [sequelize.Instance, sequelize.Model, "Member[findAndCount,findAndCountAll].ReturnValue.Awaited.Member[rows].ArrayElement"]
- [sequelize.Instance, sequelize.QueryInterface, "Member[delete,increment,insert,update].Argument[0]"]
- [sequelize.Instance, sequelize.QueryOptions, "Member[instance]"]
- [sequelize.Instance, sequelize.SequelizeStaticAndInstance, "Member[Instance]"]
- [sequelize.Model, sequelize.AssociationOptionsBelongsToMany, "Member[through]"]
- [sequelize.Model, sequelize.Associations, "Member[belongsTo,belongsToMany,hasMany,hasOne].Argument[0]"]
- [sequelize.Model, sequelize.BuildOptions, "Member[include].ArrayElement"]
- [sequelize.Model, sequelize.CountOptions, "Member[include]"]
- [sequelize.Model, sequelize.CountOptions, "Member[include].ArrayElement"]
- [sequelize.Model, sequelize.DefineAttributeColumnReferencesOptions, "Member[model]"]
- [sequelize.Model, sequelize.FindOptions, "Member[include]"]
- [sequelize.Model, sequelize.FindOptions, "Member[include].ArrayElement"]
- [sequelize.Model, sequelize.FindOptions, "Member[lock].Member[of]"]
- [sequelize.Model, sequelize.FindOptionsOrderArray, ArrayElement]
- [sequelize.Model, sequelize.FindOptionsOrderArray, "ArrayElement.Member[model]"]
- [sequelize.Model, sequelize.Hooks, "Member[afterDefine].Argument[1].Argument[0]"]
- [sequelize.Model, sequelize.Hooks, "Member[afterDefine].WithArity[1].Argument[0].Argument[0]"]
- [sequelize.Model, sequelize.IncludeAssociation, "Member[source,target]"]
- [sequelize.Model, sequelize.IncludeOptions, "Member[include,model]"]
- [sequelize.Model, sequelize.IncludeOptions, "Member[include].ArrayElement"]
- [sequelize.Model, sequelize.Instance, "Member[Model]"]
- [sequelize.Model, sequelize.Model, "Member[schema,scope,unscoped].ReturnValue"]
- [sequelize.Model, sequelize.Model, "Member[sync].ReturnValue.Awaited"]
- [sequelize.Model, sequelize.Models, AnyMember]
- [sequelize.Model, sequelize.ModelsHashInterface, AnyMember]
- [sequelize.Model, sequelize.QueryInterface, "Member[bulkDelete,rawSelect,upsert].Argument[3]"]
- [sequelize.Model, sequelize.QueryInterface, "Member[select].Argument[0]"]
- [sequelize.Model, sequelize.QueryOptions, "Member[model]"]
- [sequelize.Model, sequelize.Sequelize, "Member[define,import,model].ReturnValue"]
- [sequelize.Model, sequelize.Sequelize, "Member[import].Argument[1].ReturnValue"]
- [sequelize.Model, sequelize.SequelizeStaticAndInstance, "Member[Model]"]
- [sequelize.Model, sequelize.ThroughOptions, "Member[model]"]
- [sequelize.Model, sequelize.Utils, "Member[mapOptionFieldNames].Argument[1]"]
- [sequelize.Model, sequelize.Utils, "Member[mapValueFieldNames].Argument[2]"]
- [sequelize.Models, sequelize.Model, "Member[associate].Argument[0]"]
- [sequelize.ModelsHashInterface, sequelize.Sequelize, "Member[models]"]
- [sequelize.Options, "sequelize-typescript.SequelizeOptions", ""]
- [sequelize.Options, sequelize.Sequelize, "Member[options]"]
- [sequelize.Options, sequelize.SequelizeStatic, "Argument[3]"]
- [sequelize.Options, sequelize.SequelizeStatic, "WithArity[1].Argument[0,1]"]
- [sequelize.Options, sequelize.SequelizeStatic, "WithArity[2].Argument[1,2]"]
- [sequelize.Options, sequelize.SequelizeStatic, "WithArity[3].Argument[2]"]
- [sequelize.QueryInterface, sequelize.Sequelize, "Member[getQueryInterface].ReturnValue"]
- [sequelize.QueryOptions, sequelize.Options, "Member[query]"]
- [sequelize.QueryOptions, sequelize.QueryInterface, "Member[bulkDelete,bulkInsert,createTable,select,setAutocommit,setIsolationLevel].Argument[2]"]
- [sequelize.QueryOptions, sequelize.QueryInterface, "Member[bulkUpdate,delete,insert].Argument[3]"]
- [sequelize.QueryOptions, sequelize.QueryInterface, "Member[commitTransaction,deferConstraints,dropTable,rawSelect,rollbackTransaction,showIndex,startTransaction].Argument[1]"]
- [sequelize.QueryOptions, sequelize.QueryInterface, "Member[createFunction].Argument[5]"]
- [sequelize.QueryOptions, sequelize.QueryInterface, "Member[dropAllEnums,dropAllTables,showAllSchemas,showAllTables].Argument[0]"]
- [sequelize.QueryOptions, sequelize.QueryInterface, "Member[increment,update,upsert].Argument[4]"]
- [sequelize.QueryOptions, sequelize.Sequelize, "Member[authenticate,validate].Argument[0]"]
- [sequelize.QueryOptions, sequelize.Sequelize, "Member[query].Argument[1]"]
- [sequelize.Sequelize, "sequelize-typescript.Sequelize", ""]
- [sequelize.Sequelize, sequelize.Hooks, "Member[afterInit].Argument[1].Argument[0]"]
- [sequelize.Sequelize, sequelize.Hooks, "Member[afterInit].WithArity[1].Argument[0].Argument[0]"]
- [sequelize.Sequelize, sequelize.Instance, "Member[sequelize]"]
- [sequelize.Sequelize, sequelize.QueryInterface, "Member[sequelize]"]
- [sequelize.Sequelize, sequelize.Sequelize, "Member[import].Argument[1].Argument[0]"]
- [sequelize.Sequelize, sequelize.SequelizeStatic, Instance]
- [sequelize.Sequelize, sequelize.SequelizeStatic, "Member[useCLS].ReturnValue"]
- [sequelize.SequelizeStatic, "sequelize-typescript.Sequelize", ""]
- [sequelize.SequelizeStatic, sequelize.Sequelize, "Member[Sequelize]"]
- [sequelize.SequelizeStatic, sequelize.SequelizeStatic, "Member[Sequelize,default]"]
- [sequelize.SequelizeStatic, sequelize, ""]
- [sequelize.SequelizeStaticAndInstance.Model, "sequelize-typescript.Model", ""]
- [sequelize.SequelizeStaticAndInstance, sequelize.Sequelize, ""]
- [sequelize.SequelizeStaticAndInstance, sequelize.SequelizeStatic, ""]
- [sequelize.ThroughOptions, sequelize.AssociationOptionsBelongsToMany, "Member[through]"]
- [sequelize.Utils, sequelize.SequelizeStaticAndInstance, "Member[Utils]"]
- addsTo:
pack: codeql/javascript-all
extensible: summaryModel
data:
- ["sequelize-typescript.Model", "", "", "Member[reload].ReturnValue.Awaited", type]
- [sequelize.Instance, "", "", "Member[decrement,increment,reload,save,update,updateAttributes].ReturnValue.Awaited", type]
- [sequelize.Instance, "", "", "Member[set,setAttributes].ReturnValue", type]
- [sequelize.Model, "", "", "Member[schema,scope,unscoped].ReturnValue", type]
- [sequelize.Model, "", "", "Member[sync].ReturnValue.Awaited", type]
- addsTo:
pack: codeql/javascript-all
extensible: typeVariableModel
data:
- ["sequelize-typescript.ModelStatic.0", Instance]
- ["sequelize-typescript.Repository.0", Instance]

View File

@@ -1,198 +0,0 @@
/** Generated model file */
private import javascript
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransactionStatic;Instance", //
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/database;CreateBatchTransactionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner;Database;Member[batchTransaction].ReturnValue", //
"@google-cloud/spanner/batch-transaction;BatchTransactionStatic;@google-cloud/spanner/batch-transaction;;Member[BatchTransaction]", //
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner/batch-transaction;BatchTransaction;Member[identifier].ReturnValue", //
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner;Database;Member[batchTransaction].Argument[0]", //
"@google-cloud/spanner/database;BatchCreateSessionsCallback;@google-cloud/spanner;Database;Member[batchCreateSessions].Argument[1]", //
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].Argument[1]", //
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].WithArity[1].Argument[0]", //
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].Argument[1]", //
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].WithArity[1].Argument[0]", //
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].Argument[1]", //
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].WithArity[1].Argument[0]", //
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].Argument[1]", //
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].WithArity[1].Argument[0]", //
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].Argument[1]", //
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].WithArity[1].Argument[0]", //
"@google-cloud/spanner/database;GetTransactionCallback;@google-cloud/spanner;Database;Member[getTransaction].Argument[0]", //
"@google-cloud/spanner/database;PoolRequestCallback;@google-cloud/spanner;Database;Member[makePooledRequest_].Argument[1]", //
"@google-cloud/spanner/database;RestoreDatabaseCallback;@google-cloud/spanner;Database;Member[restore].Argument[1,2]", //
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;DatabaseStatic;Argument[2]", //
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;Instance;Member[database].Argument[1]", //
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].Argument[2]", //
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[2].Argument[1]", //
"@google-cloud/spanner/instance;CreateDatabaseOptions;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[1,2,3].Argument[1]", //
"@google-cloud/spanner/instance;CreateInstanceCallback;@google-cloud/spanner;Spanner;Member[createInstance].Argument[2]", //
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].Argument[1]", //
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].WithArity[1].Argument[0]", //
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].Argument[1]", //
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].WithArity[1].Argument[0]", //
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getReadSession].Argument[0]", //
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner;SessionPool;Member[getReadSession].Argument[0]", //
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getWriteSession].Argument[0]", //
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner;SessionPool;Member[getWriteSession].Argument[0]", //
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner/database;SessionPoolConstructor;Instance", //
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;Database;Member[pool_]", //
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;SessionPool;", //
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].Argument[2]", //
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].WithArity[2].Argument[1]", //
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].Argument[2]", //
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].WithArity[2].Argument[1]", //
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Argument[2]", //
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].Argument[1]", //
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].WithArity[1].Argument[0]", //
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Instance", //
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[AsyncTransactionRunner]", //
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Argument[2]", //
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].Argument[1]", //
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].WithArity[1].Argument[0]", //
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;", //
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;RunnerStatic;Instance", //
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;TransactionRunner;", //
"@google-cloud/spanner/transaction-runner;RunnerStatic;@google-cloud/spanner/transaction-runner;;Member[Runner]", //
"@google-cloud/spanner/transaction-runner;TransactionRunner;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Instance", //
"@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[TransactionRunner]", //
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner/transaction;DmlStatic;Instance", //
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;PartitionedDml;", //
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;Transaction;", //
"@google-cloud/spanner/transaction;DmlStatic;@google-cloud/spanner/transaction;;Member[Dml]", //
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;;Member[Backup]", //
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;BackupStatic;", //
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner;;Member[Backup]", //
"@google-cloud/spanner;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransaction;", //
"@google-cloud/spanner;Database;@google-cloud/spanner/database;Database;", //
"@google-cloud/spanner;Database;@google-cloud/spanner/database;DatabaseCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
"@google-cloud/spanner;Database;@google-cloud/spanner/database;RestoreDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
"@google-cloud/spanner;Database;@google-cloud/spanner/database;SessionPoolConstructor;Argument[0]", //
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;CreateDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;GetDatabasesCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
"@google-cloud/spanner;Database;@google-cloud/spanner;DatabaseStatic;Instance", //
"@google-cloud/spanner;Database;@google-cloud/spanner;Instance;Member[database].ReturnValue", //
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPool;Member[database]", //
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPoolStatic;Argument[0]", //
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionStatic;Argument[0]", //
"@google-cloud/spanner;Database;@google-cloud/spanner;Table;Member[database]", //
"@google-cloud/spanner;Database;@google-cloud/spanner;TableStatic;Argument[0]", //
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;;Member[Database]", //
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;DatabaseStatic;", //
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner;;Member[Database]", //
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner/build/src;GetInstancesCallback;", //
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].Argument[1]", //
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].WithArity[1].Argument[0]", //
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;CreateInstanceCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;GetInstanceCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;Instance;", //
"@google-cloud/spanner;Instance;@google-cloud/spanner;BackupStatic;Argument[0]", //
"@google-cloud/spanner;Instance;@google-cloud/spanner;DatabaseStatic;Argument[0]", //
"@google-cloud/spanner;Instance;@google-cloud/spanner;GetInstancesCallback;TypeVar[@google-cloud/spanner/common.PagedCallback.0]", //
"@google-cloud/spanner;Instance;@google-cloud/spanner;InstanceStatic;Instance", //
"@google-cloud/spanner;Instance;@google-cloud/spanner;Spanner;Member[instance].ReturnValue", //
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;;Member[Instance]", //
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;InstanceStatic;", //
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner;;Member[Instance]", //
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner/transaction;PartitionedDml;", //
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;PartitionedDmlStatic;Instance", //
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;Session;Member[partitionedDml].ReturnValue", //
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;;Member[PartitionedDml]", //
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;PartitionedDmlStatic;", //
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner;;Member[PartitionedDml]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/batch-transaction;TransactionIdentifier;Member[session]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/database;BatchCreateSessionsCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement", //
"@google-cloud/spanner;Session;@google-cloud/spanner/database;CreateSessionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/database;GetSessionsCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/database;PoolRequestCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetReadSessionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[1]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[release].Argument[0]", //
"@google-cloud/spanner;Session;@google-cloud/spanner/session;Session;", //
"@google-cloud/spanner;Session;@google-cloud/spanner/transaction-runner;Runner;Member[session]", //
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[_runPartitionedUpdate].Argument[0]", //
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited", //
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[session].ReturnValue", //
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_acquire,_getSession].ReturnValue.Awaited", //
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]", //
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue", //
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_getIdleSessions].ReturnValue.ArrayElement", //
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionStatic;Instance", //
"@google-cloud/spanner;Session;@google-cloud/spanner;Snapshot;Member[session]", //
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/instance;CreateDatabaseOptions;Member[poolCtor]", //
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/session-pool;SessionPool;", //
"@google-cloud/spanner;SessionPool;@google-cloud/spanner;SessionPoolStatic;Instance", //
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;;Member[SessionPool]", //
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;SessionPoolStatic;", //
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner;;Member[SessionPool]", //
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;;Member[Session]", //
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;SessionStatic;", //
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner;;Member[Session]", //
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/batch-transaction;BatchTransaction;", //
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/database;GetSnapshotCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Dml;", //
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Snapshot;", //
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;Session;Member[snapshot].ReturnValue", //
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;SnapshotStatic;Instance", //
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;;Member[Snapshot]", //
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;SnapshotStatic;", //
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner;;Member[Snapshot]", //
"@google-cloud/spanner;Spanner;@google-cloud/spanner;InstanceStatic;Argument[0]", //
"@google-cloud/spanner;Spanner;@google-cloud/spanner;SpannerStatic;Instance", //
"@google-cloud/spanner;SpannerStatic;@google-cloud/spanner;;Member[Spanner]", //
"@google-cloud/spanner;Table;@google-cloud/spanner/table;CreateTableCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]", //
"@google-cloud/spanner;Table;@google-cloud/spanner/table;Table;", //
"@google-cloud/spanner;Table;@google-cloud/spanner;Database;Member[table].ReturnValue", //
"@google-cloud/spanner;Table;@google-cloud/spanner;TableStatic;Instance", //
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;;Member[Table]", //
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;TableStatic;", //
"@google-cloud/spanner;TableStatic;@google-cloud/spanner;;Member[Table]", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner/database;GetTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[2]", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;Argument[0]", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;RunTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[getTransaction].ReturnValue.Awaited", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[transaction]", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction;Transaction;", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[transaction].ReturnValue", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[txn]", //
"@google-cloud/spanner;Transaction;@google-cloud/spanner;TransactionStatic;Instance", //
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;;Member[Transaction]", //
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;TransactionStatic;", //
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner;;Member[Transaction]", //
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner/v1/spanner_client;SpannerClient;", //
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner;v1.SpannerClientStatic;Instance", //
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;;Member[SpannerClient]", //
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;SpannerClientStatic;", //
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner;;Member[v1].Member[SpannerClient]", //
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Database;", //
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Snapshot;", //
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Transaction;", //
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;v1.SpannerClient;", //
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;BatchTransaction;Member[createQueryPartitions]", //
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Database;Member[run,runPartitionedUpdate,runStream]", //
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;PartitionedDml;Member[runUpdate]", //
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Snapshot;Member[run,runStream]", //
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Transaction;Member[run,runStream,runUpdate]", //
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;v1.SpannerClient;Member[executeSql,executeStreamingSql,partitionQuery]", //
]
}
}
private class TypeVariables extends ModelInput::TypeVariableModelCsv {
override predicate row(string row) {
row =
[
"@google-cloud/spanner/common.LongRunningCallback.0;Argument[1]", //
"@google-cloud/spanner/common.NormalCallback.0;Argument[1]", //
"@google-cloud/spanner/common.PagedCallback.0;Argument[1].ArrayElement", //
"@google-cloud/spanner/common.RequestCallback.0;TypeVar[@google-cloud/spanner/common.NormalCallback.0,@google-cloud/spanner/common.PagedCallback.0]", //
"@google-cloud/spanner/common.ResourceCallback.0;Argument[1]", //
]
}
}

View File

@@ -56,186 +56,186 @@
"language": "javascript",
"model": {
"typeDefinitions": [
"@google-cloud/spanner;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransaction;",
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Database;",
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Snapshot;",
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;Transaction;",
"@google-cloud/spanner;~SpannerObject;@google-cloud/spanner;v1.SpannerClient;",
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;BatchTransaction;Member[createQueryPartitions]",
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Database;Member[run,runPartitionedUpdate,runStream]",
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;PartitionedDml;Member[runUpdate]",
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Snapshot;Member[run,runStream]",
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;Transaction;Member[run,runStream,runUpdate]",
"@google-cloud/spanner;~SqlExecutorDirect;@google-cloud/spanner;v1.SpannerClient;Member[executeSql,executeStreamingSql,partitionQuery]"
"@google-cloud/spanner.BatchTransaction;@google-cloud/spanner/batch-transaction.BatchTransaction;",
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Database;",
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Snapshot;",
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.Transaction;",
"@google-cloud/spanner.~SpannerObject;@google-cloud/spanner.v1.SpannerClient;",
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.BatchTransaction;Member[createQueryPartitions]",
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Database;Member[run,runPartitionedUpdate,runStream]",
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.PartitionedDml;Member[runUpdate]",
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Snapshot;Member[run,runStream]",
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.Transaction;Member[run,runStream,runUpdate]",
"@google-cloud/spanner.~SqlExecutorDirect;@google-cloud/spanner.v1.SpannerClient;Member[executeSql,executeStreamingSql,partitionQuery]"
],
"sinks": []
},
"generatedModel": {
"//": "Autogenerated section. Manual edits in here will be lost.",
"typeDefinitions": [
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/batch-transaction;BatchTransactionStatic;Instance",
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner/database;CreateBatchTransactionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner/batch-transaction;BatchTransaction;@google-cloud/spanner;Database;Member[batchTransaction].ReturnValue",
"@google-cloud/spanner/batch-transaction;BatchTransactionStatic;@google-cloud/spanner/batch-transaction;;Member[BatchTransaction]",
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner/batch-transaction;BatchTransaction;Member[identifier].ReturnValue",
"@google-cloud/spanner/batch-transaction;TransactionIdentifier;@google-cloud/spanner;Database;Member[batchTransaction].Argument[0]",
"@google-cloud/spanner/database;BatchCreateSessionsCallback;@google-cloud/spanner;Database;Member[batchCreateSessions].Argument[1]",
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].Argument[1]",
"@google-cloud/spanner/database;CreateBatchTransactionCallback;@google-cloud/spanner;Database;Member[createBatchTransaction].WithArity[1].Argument[0]",
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].Argument[1]",
"@google-cloud/spanner/database;CreateSessionCallback;@google-cloud/spanner;Database;Member[createSession].WithArity[1].Argument[0]",
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].Argument[1]",
"@google-cloud/spanner/database;DatabaseCallback;@google-cloud/spanner;Database;Member[get].WithArity[1].Argument[0]",
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].Argument[1]",
"@google-cloud/spanner/database;GetSessionsCallback;@google-cloud/spanner;Database;Member[getSessions].WithArity[1].Argument[0]",
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].Argument[1]",
"@google-cloud/spanner/database;GetSnapshotCallback;@google-cloud/spanner;Database;Member[getSnapshot].WithArity[1].Argument[0]",
"@google-cloud/spanner/database;GetTransactionCallback;@google-cloud/spanner;Database;Member[getTransaction].Argument[0]",
"@google-cloud/spanner/database;PoolRequestCallback;@google-cloud/spanner;Database;Member[makePooledRequest_].Argument[1]",
"@google-cloud/spanner/database;RestoreDatabaseCallback;@google-cloud/spanner;Database;Member[restore].Argument[1,2]",
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;DatabaseStatic;Argument[2]",
"@google-cloud/spanner/database;SessionPoolConstructor;@google-cloud/spanner;Instance;Member[database].Argument[1]",
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].Argument[2]",
"@google-cloud/spanner/instance;CreateDatabaseCallback;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[2].Argument[1]",
"@google-cloud/spanner/instance;CreateDatabaseOptions;@google-cloud/spanner;Instance;Member[createDatabase].WithArity[1,2,3].Argument[1]",
"@google-cloud/spanner/instance;CreateInstanceCallback;@google-cloud/spanner;Spanner;Member[createInstance].Argument[2]",
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].Argument[1]",
"@google-cloud/spanner/instance;GetDatabasesCallback;@google-cloud/spanner;Instance;Member[getDatabases].WithArity[1].Argument[0]",
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].Argument[1]",
"@google-cloud/spanner/instance;GetInstanceCallback;@google-cloud/spanner;Instance;Member[get].WithArity[1].Argument[0]",
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getReadSession].Argument[0]",
"@google-cloud/spanner/session-pool;GetReadSessionCallback;@google-cloud/spanner;SessionPool;Member[getReadSession].Argument[0]",
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[getWriteSession].Argument[0]",
"@google-cloud/spanner/session-pool;GetWriteSessionCallback;@google-cloud/spanner;SessionPool;Member[getWriteSession].Argument[0]",
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner/database;SessionPoolConstructor;Instance",
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;Database;Member[pool_]",
"@google-cloud/spanner/session-pool;SessionPoolInterface;@google-cloud/spanner;SessionPool;",
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].Argument[2]",
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Database;Member[createTable].WithArity[2].Argument[1]",
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].Argument[2]",
"@google-cloud/spanner/table;CreateTableCallback;@google-cloud/spanner;Table;Member[create].WithArity[2].Argument[1]",
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Argument[2]",
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].Argument[1]",
"@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;@google-cloud/spanner;Database;Member[runTransactionAsync].WithArity[1].Argument[0]",
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;Instance",
"@google-cloud/spanner/transaction-runner;AsyncTransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[AsyncTransactionRunner]",
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Argument[2]",
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].Argument[1]",
"@google-cloud/spanner/transaction-runner;RunTransactionCallback;@google-cloud/spanner;Database;Member[runTransaction].WithArity[1].Argument[0]",
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;AsyncTransactionRunner;",
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;RunnerStatic;Instance",
"@google-cloud/spanner/transaction-runner;Runner;@google-cloud/spanner/transaction-runner;TransactionRunner;",
"@google-cloud/spanner/transaction-runner;RunnerStatic;@google-cloud/spanner/transaction-runner;;Member[Runner]",
"@google-cloud/spanner/transaction-runner;TransactionRunner;@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;Instance",
"@google-cloud/spanner/transaction-runner;TransactionRunnerStatic;@google-cloud/spanner/transaction-runner;;Member[TransactionRunner]",
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner/transaction;DmlStatic;Instance",
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;PartitionedDml;",
"@google-cloud/spanner/transaction;Dml;@google-cloud/spanner;Transaction;",
"@google-cloud/spanner/transaction;DmlStatic;@google-cloud/spanner/transaction;;Member[Dml]",
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;;Member[Backup]",
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner/backup;BackupStatic;",
"@google-cloud/spanner;BackupStatic;@google-cloud/spanner;;Member[Backup]",
"@google-cloud/spanner;Database;@google-cloud/spanner/database;Database;",
"@google-cloud/spanner;Database;@google-cloud/spanner/database;DatabaseCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner;Database;@google-cloud/spanner/database;RestoreDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner;Database;@google-cloud/spanner/database;SessionPoolConstructor;Argument[0]",
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;CreateDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner;Database;@google-cloud/spanner/instance;GetDatabasesCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
"@google-cloud/spanner;Database;@google-cloud/spanner;DatabaseStatic;Instance",
"@google-cloud/spanner;Database;@google-cloud/spanner;Instance;Member[database].ReturnValue",
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPool;Member[database]",
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionPoolStatic;Argument[0]",
"@google-cloud/spanner;Database;@google-cloud/spanner;SessionStatic;Argument[0]",
"@google-cloud/spanner;Database;@google-cloud/spanner;Table;Member[database]",
"@google-cloud/spanner;Database;@google-cloud/spanner;TableStatic;Argument[0]",
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;;Member[Database]",
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner/database;DatabaseStatic;",
"@google-cloud/spanner;DatabaseStatic;@google-cloud/spanner;;Member[Database]",
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner/build/src;GetInstancesCallback;",
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].Argument[1]",
"@google-cloud/spanner;GetInstancesCallback;@google-cloud/spanner;Spanner;Member[getInstances].WithArity[1].Argument[0]",
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;CreateInstanceCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;GetInstanceCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner;Instance;@google-cloud/spanner/instance;Instance;",
"@google-cloud/spanner;Instance;@google-cloud/spanner;BackupStatic;Argument[0]",
"@google-cloud/spanner;Instance;@google-cloud/spanner;DatabaseStatic;Argument[0]",
"@google-cloud/spanner;Instance;@google-cloud/spanner;GetInstancesCallback;TypeVar[@google-cloud/spanner/common.PagedCallback.0]",
"@google-cloud/spanner;Instance;@google-cloud/spanner;InstanceStatic;Instance",
"@google-cloud/spanner;Instance;@google-cloud/spanner;Spanner;Member[instance].ReturnValue",
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;;Member[Instance]",
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner/instance;InstanceStatic;",
"@google-cloud/spanner;InstanceStatic;@google-cloud/spanner;;Member[Instance]",
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner/transaction;PartitionedDml;",
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;PartitionedDmlStatic;Instance",
"@google-cloud/spanner;PartitionedDml;@google-cloud/spanner;Session;Member[partitionedDml].ReturnValue",
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;;Member[PartitionedDml]",
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner/transaction;PartitionedDmlStatic;",
"@google-cloud/spanner;PartitionedDmlStatic;@google-cloud/spanner;;Member[PartitionedDml]",
"@google-cloud/spanner;Session;@google-cloud/spanner/batch-transaction;TransactionIdentifier;Member[session]",
"@google-cloud/spanner;Session;@google-cloud/spanner/database;BatchCreateSessionsCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement",
"@google-cloud/spanner;Session;@google-cloud/spanner/database;CreateSessionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner;Session;@google-cloud/spanner/database;GetSessionsCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
"@google-cloud/spanner;Session;@google-cloud/spanner/database;PoolRequestCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetReadSessionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[1]",
"@google-cloud/spanner;Session;@google-cloud/spanner/session-pool;SessionPoolInterface;Member[release].Argument[0]",
"@google-cloud/spanner;Session;@google-cloud/spanner/session;Session;",
"@google-cloud/spanner;Session;@google-cloud/spanner/transaction-runner;Runner;Member[session]",
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[_runPartitionedUpdate].Argument[0]",
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited",
"@google-cloud/spanner;Session;@google-cloud/spanner;Database;Member[session].ReturnValue",
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_acquire,_getSession].ReturnValue.Awaited",
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]",
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue",
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionPool;Member[_getIdleSessions].ReturnValue.ArrayElement",
"@google-cloud/spanner;Session;@google-cloud/spanner;SessionStatic;Instance",
"@google-cloud/spanner;Session;@google-cloud/spanner;Snapshot;Member[session]",
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/instance;CreateDatabaseOptions;Member[poolCtor]",
"@google-cloud/spanner;SessionPool;@google-cloud/spanner/session-pool;SessionPool;",
"@google-cloud/spanner;SessionPool;@google-cloud/spanner;SessionPoolStatic;Instance",
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;;Member[SessionPool]",
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner/session-pool;SessionPoolStatic;",
"@google-cloud/spanner;SessionPoolStatic;@google-cloud/spanner;;Member[SessionPool]",
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;;Member[Session]",
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner/session;SessionStatic;",
"@google-cloud/spanner;SessionStatic;@google-cloud/spanner;;Member[Session]",
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/batch-transaction;BatchTransaction;",
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/database;GetSnapshotCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Dml;",
"@google-cloud/spanner;Snapshot;@google-cloud/spanner/transaction;Snapshot;",
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;Session;Member[snapshot].ReturnValue",
"@google-cloud/spanner;Snapshot;@google-cloud/spanner;SnapshotStatic;Instance",
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;;Member[Snapshot]",
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner/transaction;SnapshotStatic;",
"@google-cloud/spanner;SnapshotStatic;@google-cloud/spanner;;Member[Snapshot]",
"@google-cloud/spanner;Spanner;@google-cloud/spanner;InstanceStatic;Argument[0]",
"@google-cloud/spanner;Spanner;@google-cloud/spanner;SpannerStatic;Instance",
"@google-cloud/spanner;SpannerStatic;@google-cloud/spanner;;Member[Spanner]",
"@google-cloud/spanner;Table;@google-cloud/spanner/table;CreateTableCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner;Table;@google-cloud/spanner/table;Table;",
"@google-cloud/spanner;Table;@google-cloud/spanner;Database;Member[table].ReturnValue",
"@google-cloud/spanner;Table;@google-cloud/spanner;TableStatic;Instance",
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;;Member[Table]",
"@google-cloud/spanner;TableStatic;@google-cloud/spanner/table;TableStatic;",
"@google-cloud/spanner;TableStatic;@google-cloud/spanner;;Member[Table]",
"@google-cloud/spanner;Transaction;@google-cloud/spanner/database;GetTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner;Transaction;@google-cloud/spanner/session-pool;GetWriteSessionCallback;Argument[2]",
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;AsyncRunTransactionCallback;Argument[0]",
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;RunTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[getTransaction].ReturnValue.Awaited",
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction-runner;Runner;Member[transaction]",
"@google-cloud/spanner;Transaction;@google-cloud/spanner/transaction;Transaction;",
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[transaction].ReturnValue",
"@google-cloud/spanner;Transaction;@google-cloud/spanner;Session;Member[txn]",
"@google-cloud/spanner;Transaction;@google-cloud/spanner;TransactionStatic;Instance",
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;;Member[Transaction]",
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner/transaction;TransactionStatic;",
"@google-cloud/spanner;TransactionStatic;@google-cloud/spanner;;Member[Transaction]",
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner/v1/spanner_client;SpannerClient;",
"@google-cloud/spanner;v1.SpannerClient;@google-cloud/spanner;v1.SpannerClientStatic;Instance",
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;;Member[SpannerClient]",
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;SpannerClientStatic;",
"@google-cloud/spanner;v1.SpannerClientStatic;@google-cloud/spanner;;Member[v1].Member[SpannerClient]"
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner/backup.BackupStatic;",
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner/backup;Member[Backup]",
"@google-cloud/spanner.BackupStatic;@google-cloud/spanner;Member[Backup]",
"@google-cloud/spanner.Database;@google-cloud/spanner.DatabaseStatic;Instance",
"@google-cloud/spanner.Database;@google-cloud/spanner.Instance;Member[database].ReturnValue",
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionPool;Member[database]",
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionPoolStatic;Argument[0]",
"@google-cloud/spanner.Database;@google-cloud/spanner.SessionStatic;Argument[0]",
"@google-cloud/spanner.Database;@google-cloud/spanner.Table;Member[database]",
"@google-cloud/spanner.Database;@google-cloud/spanner.TableStatic;Argument[0]",
"@google-cloud/spanner.Database;@google-cloud/spanner/database.Database;",
"@google-cloud/spanner.Database;@google-cloud/spanner/database.DatabaseCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner.Database;@google-cloud/spanner/database.RestoreDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner.Database;@google-cloud/spanner/database.SessionPoolConstructor;Argument[0]",
"@google-cloud/spanner.Database;@google-cloud/spanner/instance.CreateDatabaseCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner.Database;@google-cloud/spanner/instance.GetDatabasesCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner/database.DatabaseStatic;",
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner/database;Member[Database]",
"@google-cloud/spanner.DatabaseStatic;@google-cloud/spanner;Member[Database]",
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner.Spanner;Member[getInstances].Argument[1]",
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner.Spanner;Member[getInstances].WithArity[1].Argument[0]",
"@google-cloud/spanner.GetInstancesCallback;@google-cloud/spanner/build/src.GetInstancesCallback;",
"@google-cloud/spanner.Instance;@google-cloud/spanner.BackupStatic;Argument[0]",
"@google-cloud/spanner.Instance;@google-cloud/spanner.DatabaseStatic;Argument[0]",
"@google-cloud/spanner.Instance;@google-cloud/spanner.GetInstancesCallback;TypeVar[@google-cloud/spanner/common.PagedCallback.0]",
"@google-cloud/spanner.Instance;@google-cloud/spanner.InstanceStatic;Instance",
"@google-cloud/spanner.Instance;@google-cloud/spanner.Spanner;Member[instance].ReturnValue",
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.CreateInstanceCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.GetInstanceCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner.Instance;@google-cloud/spanner/instance.Instance;",
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner/instance.InstanceStatic;",
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner/instance;Member[Instance]",
"@google-cloud/spanner.InstanceStatic;@google-cloud/spanner;Member[Instance]",
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner.PartitionedDmlStatic;Instance",
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner.Session;Member[partitionedDml].ReturnValue",
"@google-cloud/spanner.PartitionedDml;@google-cloud/spanner/transaction.PartitionedDml;",
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner/transaction.PartitionedDmlStatic;",
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner/transaction;Member[PartitionedDml]",
"@google-cloud/spanner.PartitionedDmlStatic;@google-cloud/spanner;Member[PartitionedDml]",
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[_runPartitionedUpdate].Argument[0]",
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited",
"@google-cloud/spanner.Session;@google-cloud/spanner.Database;Member[session].ReturnValue",
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_acquire,_getSession].ReturnValue.Awaited",
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]",
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue",
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionPool;Member[_getIdleSessions].ReturnValue.ArrayElement",
"@google-cloud/spanner.Session;@google-cloud/spanner.SessionStatic;Instance",
"@google-cloud/spanner.Session;@google-cloud/spanner.Snapshot;Member[session]",
"@google-cloud/spanner.Session;@google-cloud/spanner/batch-transaction.TransactionIdentifier;Member[session]",
"@google-cloud/spanner.Session;@google-cloud/spanner/database.BatchCreateSessionsCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement",
"@google-cloud/spanner.Session;@google-cloud/spanner/database.CreateSessionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner.Session;@google-cloud/spanner/database.GetSessionsCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
"@google-cloud/spanner.Session;@google-cloud/spanner/database.PoolRequestCallback;TypeVar[@google-cloud/spanner/common.RequestCallback.0]",
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.GetReadSessionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.GetWriteSessionCallback;Argument[1]",
"@google-cloud/spanner.Session;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[release].Argument[0]",
"@google-cloud/spanner.Session;@google-cloud/spanner/session.Session;",
"@google-cloud/spanner.Session;@google-cloud/spanner/transaction-runner.Runner;Member[session]",
"@google-cloud/spanner.SessionPool;@google-cloud/spanner.SessionPoolStatic;Instance",
"@google-cloud/spanner.SessionPool;@google-cloud/spanner/instance.CreateDatabaseOptions;Member[poolCtor]",
"@google-cloud/spanner.SessionPool;@google-cloud/spanner/session-pool.SessionPool;",
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner/session-pool.SessionPoolStatic;",
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner/session-pool;Member[SessionPool]",
"@google-cloud/spanner.SessionPoolStatic;@google-cloud/spanner;Member[SessionPool]",
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner/session.SessionStatic;",
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner/session;Member[Session]",
"@google-cloud/spanner.SessionStatic;@google-cloud/spanner;Member[Session]",
"@google-cloud/spanner.Snapshot;@google-cloud/spanner.Session;Member[snapshot].ReturnValue",
"@google-cloud/spanner.Snapshot;@google-cloud/spanner.SnapshotStatic;Instance",
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/batch-transaction.BatchTransaction;",
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/database.GetSnapshotCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/transaction.Dml;",
"@google-cloud/spanner.Snapshot;@google-cloud/spanner/transaction.Snapshot;",
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner/transaction.SnapshotStatic;",
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner/transaction;Member[Snapshot]",
"@google-cloud/spanner.SnapshotStatic;@google-cloud/spanner;Member[Snapshot]",
"@google-cloud/spanner.Spanner;@google-cloud/spanner.InstanceStatic;Argument[0]",
"@google-cloud/spanner.Spanner;@google-cloud/spanner.SpannerStatic;Instance",
"@google-cloud/spanner.SpannerStatic;@google-cloud/spanner;Member[Spanner]",
"@google-cloud/spanner.Table;@google-cloud/spanner.Database;Member[table].ReturnValue",
"@google-cloud/spanner.Table;@google-cloud/spanner.TableStatic;Instance",
"@google-cloud/spanner.Table;@google-cloud/spanner/table.CreateTableCallback;TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]",
"@google-cloud/spanner.Table;@google-cloud/spanner/table.Table;",
"@google-cloud/spanner.TableStatic;@google-cloud/spanner/table.TableStatic;",
"@google-cloud/spanner.TableStatic;@google-cloud/spanner/table;Member[Table]",
"@google-cloud/spanner.TableStatic;@google-cloud/spanner;Member[Table]",
"@google-cloud/spanner.Transaction;@google-cloud/spanner.Session;Member[transaction].ReturnValue",
"@google-cloud/spanner.Transaction;@google-cloud/spanner.Session;Member[txn]",
"@google-cloud/spanner.Transaction;@google-cloud/spanner.TransactionStatic;Instance",
"@google-cloud/spanner.Transaction;@google-cloud/spanner/database.GetTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner.Transaction;@google-cloud/spanner/session-pool.GetWriteSessionCallback;Argument[2]",
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;Argument[0]",
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.RunTransactionCallback;TypeVar[@google-cloud/spanner/common.NormalCallback.0]",
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.Runner;Member[getTransaction].ReturnValue.Awaited",
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction-runner.Runner;Member[transaction]",
"@google-cloud/spanner.Transaction;@google-cloud/spanner/transaction.Transaction;",
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner/transaction.TransactionStatic;",
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner/transaction;Member[Transaction]",
"@google-cloud/spanner.TransactionStatic;@google-cloud/spanner;Member[Transaction]",
"@google-cloud/spanner.v1.SpannerClient;@google-cloud/spanner.v1.SpannerClientStatic;Instance",
"@google-cloud/spanner.v1.SpannerClient;@google-cloud/spanner/v1/spanner_client.SpannerClient;",
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client.SpannerClientStatic;",
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner/v1/spanner_client;Member[SpannerClient]",
"@google-cloud/spanner.v1.SpannerClientStatic;@google-cloud/spanner;Member[v1].Member[SpannerClient]",
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner.Database;Member[batchTransaction].ReturnValue",
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner/batch-transaction.BatchTransactionStatic;Instance",
"@google-cloud/spanner/batch-transaction.BatchTransaction;@google-cloud/spanner/database.CreateBatchTransactionCallback;TypeVar[@google-cloud/spanner/common.ResourceCallback.0]",
"@google-cloud/spanner/batch-transaction.BatchTransactionStatic;@google-cloud/spanner/batch-transaction;Member[BatchTransaction]",
"@google-cloud/spanner/batch-transaction.TransactionIdentifier;@google-cloud/spanner.Database;Member[batchTransaction].Argument[0]",
"@google-cloud/spanner/batch-transaction.TransactionIdentifier;@google-cloud/spanner/batch-transaction.BatchTransaction;Member[identifier].ReturnValue",
"@google-cloud/spanner/database.BatchCreateSessionsCallback;@google-cloud/spanner.Database;Member[batchCreateSessions].Argument[1]",
"@google-cloud/spanner/database.CreateBatchTransactionCallback;@google-cloud/spanner.Database;Member[createBatchTransaction].Argument[1]",
"@google-cloud/spanner/database.CreateBatchTransactionCallback;@google-cloud/spanner.Database;Member[createBatchTransaction].WithArity[1].Argument[0]",
"@google-cloud/spanner/database.CreateSessionCallback;@google-cloud/spanner.Database;Member[createSession].Argument[1]",
"@google-cloud/spanner/database.CreateSessionCallback;@google-cloud/spanner.Database;Member[createSession].WithArity[1].Argument[0]",
"@google-cloud/spanner/database.DatabaseCallback;@google-cloud/spanner.Database;Member[get].Argument[1]",
"@google-cloud/spanner/database.DatabaseCallback;@google-cloud/spanner.Database;Member[get].WithArity[1].Argument[0]",
"@google-cloud/spanner/database.GetSessionsCallback;@google-cloud/spanner.Database;Member[getSessions].Argument[1]",
"@google-cloud/spanner/database.GetSessionsCallback;@google-cloud/spanner.Database;Member[getSessions].WithArity[1].Argument[0]",
"@google-cloud/spanner/database.GetSnapshotCallback;@google-cloud/spanner.Database;Member[getSnapshot].Argument[1]",
"@google-cloud/spanner/database.GetSnapshotCallback;@google-cloud/spanner.Database;Member[getSnapshot].WithArity[1].Argument[0]",
"@google-cloud/spanner/database.GetTransactionCallback;@google-cloud/spanner.Database;Member[getTransaction].Argument[0]",
"@google-cloud/spanner/database.PoolRequestCallback;@google-cloud/spanner.Database;Member[makePooledRequest_].Argument[1]",
"@google-cloud/spanner/database.RestoreDatabaseCallback;@google-cloud/spanner.Database;Member[restore].Argument[1,2]",
"@google-cloud/spanner/database.SessionPoolConstructor;@google-cloud/spanner.DatabaseStatic;Argument[2]",
"@google-cloud/spanner/database.SessionPoolConstructor;@google-cloud/spanner.Instance;Member[database].Argument[1]",
"@google-cloud/spanner/instance.CreateDatabaseCallback;@google-cloud/spanner.Instance;Member[createDatabase].Argument[2]",
"@google-cloud/spanner/instance.CreateDatabaseCallback;@google-cloud/spanner.Instance;Member[createDatabase].WithArity[2].Argument[1]",
"@google-cloud/spanner/instance.CreateDatabaseOptions;@google-cloud/spanner.Instance;Member[createDatabase].WithArity[1,2,3].Argument[1]",
"@google-cloud/spanner/instance.CreateInstanceCallback;@google-cloud/spanner.Spanner;Member[createInstance].Argument[2]",
"@google-cloud/spanner/instance.GetDatabasesCallback;@google-cloud/spanner.Instance;Member[getDatabases].Argument[1]",
"@google-cloud/spanner/instance.GetDatabasesCallback;@google-cloud/spanner.Instance;Member[getDatabases].WithArity[1].Argument[0]",
"@google-cloud/spanner/instance.GetInstanceCallback;@google-cloud/spanner.Instance;Member[get].Argument[1]",
"@google-cloud/spanner/instance.GetInstanceCallback;@google-cloud/spanner.Instance;Member[get].WithArity[1].Argument[0]",
"@google-cloud/spanner/session-pool.GetReadSessionCallback;@google-cloud/spanner.SessionPool;Member[getReadSession].Argument[0]",
"@google-cloud/spanner/session-pool.GetReadSessionCallback;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[getReadSession].Argument[0]",
"@google-cloud/spanner/session-pool.GetWriteSessionCallback;@google-cloud/spanner.SessionPool;Member[getWriteSession].Argument[0]",
"@google-cloud/spanner/session-pool.GetWriteSessionCallback;@google-cloud/spanner/session-pool.SessionPoolInterface;Member[getWriteSession].Argument[0]",
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner.Database;Member[pool_]",
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner.SessionPool;",
"@google-cloud/spanner/session-pool.SessionPoolInterface;@google-cloud/spanner/database.SessionPoolConstructor;Instance",
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Database;Member[createTable].Argument[2]",
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Database;Member[createTable].WithArity[2].Argument[1]",
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Table;Member[create].Argument[2]",
"@google-cloud/spanner/table.CreateTableCallback;@google-cloud/spanner.Table;Member[create].WithArity[2].Argument[1]",
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner.Database;Member[runTransactionAsync].Argument[1]",
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner.Database;Member[runTransactionAsync].WithArity[1].Argument[0]",
"@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback;@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;Argument[2]",
"@google-cloud/spanner/transaction-runner.AsyncTransactionRunner;@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;Instance",
"@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic;@google-cloud/spanner/transaction-runner;Member[AsyncTransactionRunner]",
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner.Database;Member[runTransaction].Argument[1]",
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner.Database;Member[runTransaction].WithArity[1].Argument[0]",
"@google-cloud/spanner/transaction-runner.RunTransactionCallback;@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;Argument[2]",
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.AsyncTransactionRunner;",
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.RunnerStatic;Instance",
"@google-cloud/spanner/transaction-runner.Runner;@google-cloud/spanner/transaction-runner.TransactionRunner;",
"@google-cloud/spanner/transaction-runner.RunnerStatic;@google-cloud/spanner/transaction-runner;Member[Runner]",
"@google-cloud/spanner/transaction-runner.TransactionRunner;@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;Instance",
"@google-cloud/spanner/transaction-runner.TransactionRunnerStatic;@google-cloud/spanner/transaction-runner;Member[TransactionRunner]",
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner.PartitionedDml;",
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner.Transaction;",
"@google-cloud/spanner/transaction.Dml;@google-cloud/spanner/transaction.DmlStatic;Instance",
"@google-cloud/spanner/transaction.DmlStatic;@google-cloud/spanner/transaction;Member[Dml]"
],
"summaries": [],
"typeVariables": [

View File

@@ -0,0 +1,189 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- ["@google-cloud/spanner.BackupStatic", "@google-cloud/spanner/backup.BackupStatic", ""]
- ["@google-cloud/spanner.BackupStatic", "@google-cloud/spanner/backup", "Member[Backup]"]
- ["@google-cloud/spanner.BackupStatic", "@google-cloud/spanner", "Member[Backup]"]
- ["@google-cloud/spanner.BatchTransaction", "@google-cloud/spanner/batch-transaction.BatchTransaction", ""]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner.DatabaseStatic", Instance]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner.Instance", "Member[database].ReturnValue"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner.SessionPool", "Member[database]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner.SessionPoolStatic", "Argument[0]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner.SessionStatic", "Argument[0]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner.Table", "Member[database]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner.TableStatic", "Argument[0]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner/database.Database", ""]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner/database.DatabaseCallback", "TypeVar[@google-cloud/spanner/common.ResourceCallback.0]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner/database.RestoreDatabaseCallback", "TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner/database.SessionPoolConstructor", "Argument[0]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner/instance.CreateDatabaseCallback", "TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]"]
- ["@google-cloud/spanner.Database", "@google-cloud/spanner/instance.GetDatabasesCallback", "TypeVar[@google-cloud/spanner/common.RequestCallback.0]"]
- ["@google-cloud/spanner.DatabaseStatic", "@google-cloud/spanner/database.DatabaseStatic", ""]
- ["@google-cloud/spanner.DatabaseStatic", "@google-cloud/spanner/database", "Member[Database]"]
- ["@google-cloud/spanner.DatabaseStatic", "@google-cloud/spanner", "Member[Database]"]
- ["@google-cloud/spanner.GetInstancesCallback", "@google-cloud/spanner.Spanner", "Member[getInstances].Argument[1]"]
- ["@google-cloud/spanner.GetInstancesCallback", "@google-cloud/spanner.Spanner", "Member[getInstances].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner.GetInstancesCallback", "@google-cloud/spanner/build/src.GetInstancesCallback", ""]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner.BackupStatic", "Argument[0]"]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner.DatabaseStatic", "Argument[0]"]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner.GetInstancesCallback", "TypeVar[@google-cloud/spanner/common.PagedCallback.0]"]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner.InstanceStatic", Instance]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner.Spanner", "Member[instance].ReturnValue"]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner/instance.CreateInstanceCallback", "TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]"]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner/instance.GetInstanceCallback", "TypeVar[@google-cloud/spanner/common.ResourceCallback.0]"]
- ["@google-cloud/spanner.Instance", "@google-cloud/spanner/instance.Instance", ""]
- ["@google-cloud/spanner.InstanceStatic", "@google-cloud/spanner/instance.InstanceStatic", ""]
- ["@google-cloud/spanner.InstanceStatic", "@google-cloud/spanner/instance", "Member[Instance]"]
- ["@google-cloud/spanner.InstanceStatic", "@google-cloud/spanner", "Member[Instance]"]
- ["@google-cloud/spanner.PartitionedDml", "@google-cloud/spanner.PartitionedDmlStatic", Instance]
- ["@google-cloud/spanner.PartitionedDml", "@google-cloud/spanner.Session", "Member[partitionedDml].ReturnValue"]
- ["@google-cloud/spanner.PartitionedDml", "@google-cloud/spanner/transaction.PartitionedDml", ""]
- ["@google-cloud/spanner.PartitionedDmlStatic", "@google-cloud/spanner/transaction.PartitionedDmlStatic", ""]
- ["@google-cloud/spanner.PartitionedDmlStatic", "@google-cloud/spanner/transaction", "Member[PartitionedDml]"]
- ["@google-cloud/spanner.PartitionedDmlStatic", "@google-cloud/spanner", "Member[PartitionedDml]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.Database", "Member[_runPartitionedUpdate].Argument[0]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.Database", "Member[makePooledRequest_].WithArity[1].ReturnValue.Awaited"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.Database", "Member[session].ReturnValue"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.SessionPool", "Member[_acquire,_getSession].ReturnValue.Awaited"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.SessionPool", "Member[_borrow,_destroy,_isValidSession,_ping,_prepareTransaction,_release,release].Argument[0]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.SessionPool", "Member[_borrowFrom,_borrowNextAvailableSession].ReturnValue"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.SessionPool", "Member[_getIdleSessions].ReturnValue.ArrayElement"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.SessionStatic", Instance]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner.Snapshot", "Member[session]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/batch-transaction.TransactionIdentifier", "Member[session]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/database.BatchCreateSessionsCallback", "TypeVar[@google-cloud/spanner/common.ResourceCallback.0].ArrayElement"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/database.CreateSessionCallback", "TypeVar[@google-cloud/spanner/common.ResourceCallback.0]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/database.GetSessionsCallback", "TypeVar[@google-cloud/spanner/common.RequestCallback.0]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/database.PoolRequestCallback", "TypeVar[@google-cloud/spanner/common.RequestCallback.0]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/session-pool.GetReadSessionCallback", "TypeVar[@google-cloud/spanner/common.NormalCallback.0]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/session-pool.GetWriteSessionCallback", "Argument[1]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/session-pool.SessionPoolInterface", "Member[release].Argument[0]"]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/session.Session", ""]
- ["@google-cloud/spanner.Session", "@google-cloud/spanner/transaction-runner.Runner", "Member[session]"]
- ["@google-cloud/spanner.SessionPool", "@google-cloud/spanner.SessionPoolStatic", Instance]
- ["@google-cloud/spanner.SessionPool", "@google-cloud/spanner/instance.CreateDatabaseOptions", "Member[poolCtor]"]
- ["@google-cloud/spanner.SessionPool", "@google-cloud/spanner/session-pool.SessionPool", ""]
- ["@google-cloud/spanner.SessionPoolStatic", "@google-cloud/spanner/session-pool.SessionPoolStatic", ""]
- ["@google-cloud/spanner.SessionPoolStatic", "@google-cloud/spanner/session-pool", "Member[SessionPool]"]
- ["@google-cloud/spanner.SessionPoolStatic", "@google-cloud/spanner", "Member[SessionPool]"]
- ["@google-cloud/spanner.SessionStatic", "@google-cloud/spanner/session.SessionStatic", ""]
- ["@google-cloud/spanner.SessionStatic", "@google-cloud/spanner/session", "Member[Session]"]
- ["@google-cloud/spanner.SessionStatic", "@google-cloud/spanner", "Member[Session]"]
- ["@google-cloud/spanner.Snapshot", "@google-cloud/spanner.Session", "Member[snapshot].ReturnValue"]
- ["@google-cloud/spanner.Snapshot", "@google-cloud/spanner.SnapshotStatic", Instance]
- ["@google-cloud/spanner.Snapshot", "@google-cloud/spanner/batch-transaction.BatchTransaction", ""]
- ["@google-cloud/spanner.Snapshot", "@google-cloud/spanner/database.GetSnapshotCallback", "TypeVar[@google-cloud/spanner/common.NormalCallback.0]"]
- ["@google-cloud/spanner.Snapshot", "@google-cloud/spanner/transaction.Dml", ""]
- ["@google-cloud/spanner.Snapshot", "@google-cloud/spanner/transaction.Snapshot", ""]
- ["@google-cloud/spanner.SnapshotStatic", "@google-cloud/spanner/transaction.SnapshotStatic", ""]
- ["@google-cloud/spanner.SnapshotStatic", "@google-cloud/spanner/transaction", "Member[Snapshot]"]
- ["@google-cloud/spanner.SnapshotStatic", "@google-cloud/spanner", "Member[Snapshot]"]
- ["@google-cloud/spanner.Spanner", "@google-cloud/spanner.InstanceStatic", "Argument[0]"]
- ["@google-cloud/spanner.Spanner", "@google-cloud/spanner.SpannerStatic", Instance]
- ["@google-cloud/spanner.SpannerStatic", "@google-cloud/spanner", "Member[Spanner]"]
- ["@google-cloud/spanner.Table", "@google-cloud/spanner.Database", "Member[table].ReturnValue"]
- ["@google-cloud/spanner.Table", "@google-cloud/spanner.TableStatic", Instance]
- ["@google-cloud/spanner.Table", "@google-cloud/spanner/table.CreateTableCallback", "TypeVar[@google-cloud/spanner/common.LongRunningCallback.0]"]
- ["@google-cloud/spanner.Table", "@google-cloud/spanner/table.Table", ""]
- ["@google-cloud/spanner.TableStatic", "@google-cloud/spanner/table.TableStatic", ""]
- ["@google-cloud/spanner.TableStatic", "@google-cloud/spanner/table", "Member[Table]"]
- ["@google-cloud/spanner.TableStatic", "@google-cloud/spanner", "Member[Table]"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner.Session", "Member[transaction].ReturnValue"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner.Session", "Member[txn]"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner.TransactionStatic", Instance]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner/database.GetTransactionCallback", "TypeVar[@google-cloud/spanner/common.NormalCallback.0]"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner/session-pool.GetWriteSessionCallback", "Argument[2]"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback", "Argument[0]"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner/transaction-runner.RunTransactionCallback", "TypeVar[@google-cloud/spanner/common.NormalCallback.0]"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner/transaction-runner.Runner", "Member[getTransaction].ReturnValue.Awaited"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner/transaction-runner.Runner", "Member[transaction]"]
- ["@google-cloud/spanner.Transaction", "@google-cloud/spanner/transaction.Transaction", ""]
- ["@google-cloud/spanner.TransactionStatic", "@google-cloud/spanner/transaction.TransactionStatic", ""]
- ["@google-cloud/spanner.TransactionStatic", "@google-cloud/spanner/transaction", "Member[Transaction]"]
- ["@google-cloud/spanner.TransactionStatic", "@google-cloud/spanner", "Member[Transaction]"]
- ["@google-cloud/spanner.v1.SpannerClient", "@google-cloud/spanner.v1.SpannerClientStatic", Instance]
- ["@google-cloud/spanner.v1.SpannerClient", "@google-cloud/spanner/v1/spanner_client.SpannerClient", ""]
- ["@google-cloud/spanner.v1.SpannerClientStatic", "@google-cloud/spanner/v1/spanner_client.SpannerClientStatic", ""]
- ["@google-cloud/spanner.v1.SpannerClientStatic", "@google-cloud/spanner/v1/spanner_client", "Member[SpannerClient]"]
- ["@google-cloud/spanner.v1.SpannerClientStatic", "@google-cloud/spanner", "Member[v1].Member[SpannerClient]"]
- ["@google-cloud/spanner.~SpannerObject", "@google-cloud/spanner.Database", ""]
- ["@google-cloud/spanner.~SpannerObject", "@google-cloud/spanner.Snapshot", ""]
- ["@google-cloud/spanner.~SpannerObject", "@google-cloud/spanner.Transaction", ""]
- ["@google-cloud/spanner.~SpannerObject", "@google-cloud/spanner.v1.SpannerClient", ""]
- ["@google-cloud/spanner.~SqlExecutorDirect", "@google-cloud/spanner.BatchTransaction", "Member[createQueryPartitions]"]
- ["@google-cloud/spanner.~SqlExecutorDirect", "@google-cloud/spanner.Database", "Member[run,runPartitionedUpdate,runStream]"]
- ["@google-cloud/spanner.~SqlExecutorDirect", "@google-cloud/spanner.PartitionedDml", "Member[runUpdate]"]
- ["@google-cloud/spanner.~SqlExecutorDirect", "@google-cloud/spanner.Snapshot", "Member[run,runStream]"]
- ["@google-cloud/spanner.~SqlExecutorDirect", "@google-cloud/spanner.Transaction", "Member[run,runStream,runUpdate]"]
- ["@google-cloud/spanner.~SqlExecutorDirect", "@google-cloud/spanner.v1.SpannerClient", "Member[executeSql,executeStreamingSql,partitionQuery]"]
- ["@google-cloud/spanner/batch-transaction.BatchTransaction", "@google-cloud/spanner.Database", "Member[batchTransaction].ReturnValue"]
- ["@google-cloud/spanner/batch-transaction.BatchTransaction", "@google-cloud/spanner/batch-transaction.BatchTransactionStatic", Instance]
- ["@google-cloud/spanner/batch-transaction.BatchTransaction", "@google-cloud/spanner/database.CreateBatchTransactionCallback", "TypeVar[@google-cloud/spanner/common.ResourceCallback.0]"]
- ["@google-cloud/spanner/batch-transaction.BatchTransactionStatic", "@google-cloud/spanner/batch-transaction", "Member[BatchTransaction]"]
- ["@google-cloud/spanner/batch-transaction.TransactionIdentifier", "@google-cloud/spanner.Database", "Member[batchTransaction].Argument[0]"]
- ["@google-cloud/spanner/batch-transaction.TransactionIdentifier", "@google-cloud/spanner/batch-transaction.BatchTransaction", "Member[identifier].ReturnValue"]
- ["@google-cloud/spanner/database.BatchCreateSessionsCallback", "@google-cloud/spanner.Database", "Member[batchCreateSessions].Argument[1]"]
- ["@google-cloud/spanner/database.CreateBatchTransactionCallback", "@google-cloud/spanner.Database", "Member[createBatchTransaction].Argument[1]"]
- ["@google-cloud/spanner/database.CreateBatchTransactionCallback", "@google-cloud/spanner.Database", "Member[createBatchTransaction].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/database.CreateSessionCallback", "@google-cloud/spanner.Database", "Member[createSession].Argument[1]"]
- ["@google-cloud/spanner/database.CreateSessionCallback", "@google-cloud/spanner.Database", "Member[createSession].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/database.DatabaseCallback", "@google-cloud/spanner.Database", "Member[get].Argument[1]"]
- ["@google-cloud/spanner/database.DatabaseCallback", "@google-cloud/spanner.Database", "Member[get].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/database.GetSessionsCallback", "@google-cloud/spanner.Database", "Member[getSessions].Argument[1]"]
- ["@google-cloud/spanner/database.GetSessionsCallback", "@google-cloud/spanner.Database", "Member[getSessions].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/database.GetSnapshotCallback", "@google-cloud/spanner.Database", "Member[getSnapshot].Argument[1]"]
- ["@google-cloud/spanner/database.GetSnapshotCallback", "@google-cloud/spanner.Database", "Member[getSnapshot].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/database.GetTransactionCallback", "@google-cloud/spanner.Database", "Member[getTransaction].Argument[0]"]
- ["@google-cloud/spanner/database.PoolRequestCallback", "@google-cloud/spanner.Database", "Member[makePooledRequest_].Argument[1]"]
- ["@google-cloud/spanner/database.RestoreDatabaseCallback", "@google-cloud/spanner.Database", "Member[restore].Argument[1,2]"]
- ["@google-cloud/spanner/database.SessionPoolConstructor", "@google-cloud/spanner.DatabaseStatic", "Argument[2]"]
- ["@google-cloud/spanner/database.SessionPoolConstructor", "@google-cloud/spanner.Instance", "Member[database].Argument[1]"]
- ["@google-cloud/spanner/instance.CreateDatabaseCallback", "@google-cloud/spanner.Instance", "Member[createDatabase].Argument[2]"]
- ["@google-cloud/spanner/instance.CreateDatabaseCallback", "@google-cloud/spanner.Instance", "Member[createDatabase].WithArity[2].Argument[1]"]
- ["@google-cloud/spanner/instance.CreateDatabaseOptions", "@google-cloud/spanner.Instance", "Member[createDatabase].WithArity[1,2,3].Argument[1]"]
- ["@google-cloud/spanner/instance.CreateInstanceCallback", "@google-cloud/spanner.Spanner", "Member[createInstance].Argument[2]"]
- ["@google-cloud/spanner/instance.GetDatabasesCallback", "@google-cloud/spanner.Instance", "Member[getDatabases].Argument[1]"]
- ["@google-cloud/spanner/instance.GetDatabasesCallback", "@google-cloud/spanner.Instance", "Member[getDatabases].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/instance.GetInstanceCallback", "@google-cloud/spanner.Instance", "Member[get].Argument[1]"]
- ["@google-cloud/spanner/instance.GetInstanceCallback", "@google-cloud/spanner.Instance", "Member[get].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/session-pool.GetReadSessionCallback", "@google-cloud/spanner.SessionPool", "Member[getReadSession].Argument[0]"]
- ["@google-cloud/spanner/session-pool.GetReadSessionCallback", "@google-cloud/spanner/session-pool.SessionPoolInterface", "Member[getReadSession].Argument[0]"]
- ["@google-cloud/spanner/session-pool.GetWriteSessionCallback", "@google-cloud/spanner.SessionPool", "Member[getWriteSession].Argument[0]"]
- ["@google-cloud/spanner/session-pool.GetWriteSessionCallback", "@google-cloud/spanner/session-pool.SessionPoolInterface", "Member[getWriteSession].Argument[0]"]
- ["@google-cloud/spanner/session-pool.SessionPoolInterface", "@google-cloud/spanner.Database", "Member[pool_]"]
- ["@google-cloud/spanner/session-pool.SessionPoolInterface", "@google-cloud/spanner.SessionPool", ""]
- ["@google-cloud/spanner/session-pool.SessionPoolInterface", "@google-cloud/spanner/database.SessionPoolConstructor", Instance]
- ["@google-cloud/spanner/table.CreateTableCallback", "@google-cloud/spanner.Database", "Member[createTable].Argument[2]"]
- ["@google-cloud/spanner/table.CreateTableCallback", "@google-cloud/spanner.Database", "Member[createTable].WithArity[2].Argument[1]"]
- ["@google-cloud/spanner/table.CreateTableCallback", "@google-cloud/spanner.Table", "Member[create].Argument[2]"]
- ["@google-cloud/spanner/table.CreateTableCallback", "@google-cloud/spanner.Table", "Member[create].WithArity[2].Argument[1]"]
- ["@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback", "@google-cloud/spanner.Database", "Member[runTransactionAsync].Argument[1]"]
- ["@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback", "@google-cloud/spanner.Database", "Member[runTransactionAsync].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/transaction-runner.AsyncRunTransactionCallback", "@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic", "Argument[2]"]
- ["@google-cloud/spanner/transaction-runner.AsyncTransactionRunner", "@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic", Instance]
- ["@google-cloud/spanner/transaction-runner.AsyncTransactionRunnerStatic", "@google-cloud/spanner/transaction-runner", "Member[AsyncTransactionRunner]"]
- ["@google-cloud/spanner/transaction-runner.RunTransactionCallback", "@google-cloud/spanner.Database", "Member[runTransaction].Argument[1]"]
- ["@google-cloud/spanner/transaction-runner.RunTransactionCallback", "@google-cloud/spanner.Database", "Member[runTransaction].WithArity[1].Argument[0]"]
- ["@google-cloud/spanner/transaction-runner.RunTransactionCallback", "@google-cloud/spanner/transaction-runner.TransactionRunnerStatic", "Argument[2]"]
- ["@google-cloud/spanner/transaction-runner.Runner", "@google-cloud/spanner/transaction-runner.AsyncTransactionRunner", ""]
- ["@google-cloud/spanner/transaction-runner.Runner", "@google-cloud/spanner/transaction-runner.RunnerStatic", Instance]
- ["@google-cloud/spanner/transaction-runner.Runner", "@google-cloud/spanner/transaction-runner.TransactionRunner", ""]
- ["@google-cloud/spanner/transaction-runner.RunnerStatic", "@google-cloud/spanner/transaction-runner", "Member[Runner]"]
- ["@google-cloud/spanner/transaction-runner.TransactionRunner", "@google-cloud/spanner/transaction-runner.TransactionRunnerStatic", Instance]
- ["@google-cloud/spanner/transaction-runner.TransactionRunnerStatic", "@google-cloud/spanner/transaction-runner", "Member[TransactionRunner]"]
- ["@google-cloud/spanner/transaction.Dml", "@google-cloud/spanner.PartitionedDml", ""]
- ["@google-cloud/spanner/transaction.Dml", "@google-cloud/spanner.Transaction", ""]
- ["@google-cloud/spanner/transaction.Dml", "@google-cloud/spanner/transaction.DmlStatic", Instance]
- ["@google-cloud/spanner/transaction.DmlStatic", "@google-cloud/spanner/transaction", "Member[Dml]"]
- addsTo:
pack: codeql/javascript-all
extensible: typeVariableModel
data:
- ["@google-cloud/spanner/common.LongRunningCallback.0", "Argument[1]"]
- ["@google-cloud/spanner/common.NormalCallback.0", "Argument[1]"]
- ["@google-cloud/spanner/common.PagedCallback.0", "Argument[1].ArrayElement"]
- ["@google-cloud/spanner/common.RequestCallback.0", "TypeVar[@google-cloud/spanner/common.NormalCallback.0,@google-cloud/spanner/common.PagedCallback.0]"]
- ["@google-cloud/spanner/common.ResourceCallback.0", "Argument[1]"]

View File

@@ -1,37 +0,0 @@
/** Generated model file */
private import javascript
private class Types extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"sqlite3;Database;sqlite3;;Member[cached].Member[Database].ReturnValue", //
"sqlite3;Database;sqlite3;Database;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue", //
"sqlite3;Database;sqlite3;DatabaseStatic;Instance", //
"sqlite3;Database;sqlite3;Statement;Member[finalize].ReturnValue", //
"sqlite3;DatabaseStatic;sqlite3;;Member[Database]", //
"sqlite3;DatabaseStatic;sqlite3;sqlite3;Member[Database]", //
"sqlite3;RunResult;sqlite3;sqlite3;Member[RunResult]", //
"sqlite3;Statement;sqlite3;Database;Member[prepare].ReturnValue", //
"sqlite3;Statement;sqlite3;RunResult;", //
"sqlite3;Statement;sqlite3;Statement;Member[all,bind,each,get,reset,run].ReturnValue", //
"sqlite3;Statement;sqlite3;StatementStatic;Instance", //
"sqlite3;StatementStatic;sqlite3;;Member[Statement]", //
"sqlite3;StatementStatic;sqlite3;sqlite3;Member[Statement]", //
"sqlite3;sqlite3;sqlite3;;Member[verbose].ReturnValue", //
"sqlite3;sqlite3;sqlite3;sqlite3;Member[verbose].ReturnValue", //
]
}
}
private class Summaries extends ModelInput::SummaryModelCsv {
override predicate row(string row) {
row =
[
"sqlite3;Database;;;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue;type", //
"sqlite3;Statement;;;Member[all,bind,each,get,reset,run].ReturnValue;type", //
"sqlite3;sqlite3;;;Member[verbose].ReturnValue;type", //
]
}
}

View File

@@ -8,7 +8,7 @@
"language": "javascript",
"usedTypes": {
"sources": [
"sqlite3;Database"
"sqlite3.Database"
]
},
"model": {
@@ -17,26 +17,26 @@
"generatedModel": {
"//": "Autogenerated section. Manual edits in here will be lost.",
"typeDefinitions": [
"sqlite3;Database;sqlite3;;Member[cached].Member[Database].ReturnValue",
"sqlite3;Database;sqlite3;Database;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue",
"sqlite3;Database;sqlite3;DatabaseStatic;Instance",
"sqlite3;Database;sqlite3;Statement;Member[finalize].ReturnValue",
"sqlite3;DatabaseStatic;sqlite3;;Member[Database]",
"sqlite3;DatabaseStatic;sqlite3;sqlite3;Member[Database]",
"sqlite3;RunResult;sqlite3;sqlite3;Member[RunResult]",
"sqlite3;Statement;sqlite3;Database;Member[prepare].ReturnValue",
"sqlite3;Statement;sqlite3;RunResult;",
"sqlite3;Statement;sqlite3;Statement;Member[all,bind,each,get,reset,run].ReturnValue",
"sqlite3;Statement;sqlite3;StatementStatic;Instance",
"sqlite3;StatementStatic;sqlite3;;Member[Statement]",
"sqlite3;StatementStatic;sqlite3;sqlite3;Member[Statement]",
"sqlite3;sqlite3;sqlite3;;Member[verbose].ReturnValue",
"sqlite3;sqlite3;sqlite3;sqlite3;Member[verbose].ReturnValue"
"sqlite3.Database;sqlite3.Database;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue",
"sqlite3.Database;sqlite3.DatabaseStatic;Instance",
"sqlite3.Database;sqlite3.Statement;Member[finalize].ReturnValue",
"sqlite3.Database;sqlite3;Member[cached].Member[Database].ReturnValue",
"sqlite3.DatabaseStatic;sqlite3.sqlite3;Member[Database]",
"sqlite3.DatabaseStatic;sqlite3;Member[Database]",
"sqlite3.RunResult;sqlite3.sqlite3;Member[RunResult]",
"sqlite3.Statement;sqlite3.Database;Member[prepare].ReturnValue",
"sqlite3.Statement;sqlite3.RunResult;",
"sqlite3.Statement;sqlite3.Statement;Member[all,bind,each,get,reset,run].ReturnValue",
"sqlite3.Statement;sqlite3.StatementStatic;Instance",
"sqlite3.StatementStatic;sqlite3.sqlite3;Member[Statement]",
"sqlite3.StatementStatic;sqlite3;Member[Statement]",
"sqlite3.sqlite3;sqlite3.sqlite3;Member[verbose].ReturnValue",
"sqlite3.sqlite3;sqlite3;Member[verbose].ReturnValue"
],
"summaries": [
"sqlite3;Database;;;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue;type",
"sqlite3;Statement;;;Member[all,bind,each,get,reset,run].ReturnValue;type",
"sqlite3;sqlite3;;;Member[verbose].ReturnValue;type"
"sqlite3.Database;;;Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue;type",
"sqlite3.Statement;;;Member[all,bind,each,get,reset,run].ReturnValue;type",
"sqlite3.sqlite3;;;Member[verbose].ReturnValue;type"
],
"typeVariables": []
}

View File

@@ -0,0 +1,28 @@
extensions:
- addsTo:
pack: codeql/javascript-all
extensible: typeModel
data:
- [sqlite3.Database, sqlite3.Database, "Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue"]
- [sqlite3.Database, sqlite3.DatabaseStatic, Instance]
- [sqlite3.Database, sqlite3.Statement, "Member[finalize].ReturnValue"]
- [sqlite3.Database, sqlite3, "Member[cached].Member[Database].ReturnValue"]
- [sqlite3.DatabaseStatic, sqlite3.sqlite3, "Member[Database]"]
- [sqlite3.DatabaseStatic, sqlite3, "Member[Database]"]
- [sqlite3.RunResult, sqlite3.sqlite3, "Member[RunResult]"]
- [sqlite3.Statement, sqlite3.Database, "Member[prepare].ReturnValue"]
- [sqlite3.Statement, sqlite3.RunResult, ""]
- [sqlite3.Statement, sqlite3.Statement, "Member[all,bind,each,get,reset,run].ReturnValue"]
- [sqlite3.Statement, sqlite3.StatementStatic, Instance]
- [sqlite3.StatementStatic, sqlite3.sqlite3, "Member[Statement]"]
- [sqlite3.StatementStatic, sqlite3, "Member[Statement]"]
- [sqlite3.sqlite3, sqlite3.sqlite3, "Member[verbose].ReturnValue"]
- [sqlite3.sqlite3, sqlite3, "Member[verbose].ReturnValue"]
- addsTo:
pack: codeql/javascript-all
extensible: summaryModel
data:
- [sqlite3.Database, "", "", "Member[addListener,all,each,exec,get,on,once,prependListener,prependOnceListener,run].ReturnValue", type]
- [sqlite3.Statement, "", "", "Member[all,bind,each,get,reset,run].ReturnValue", type]
- [sqlite3.sqlite3, "", "", "Member[verbose].ReturnValue", type]

View File

@@ -2,155 +2,7 @@
* Provides predicates for reasoning about bad tag filter vulnerabilities.
*/
import regexp.RegexpMatching
/**
* Holds if the regexp `root` should be tested against `str`.
* Implements the `isRegexpMatchingCandidateSig` signature from `RegexpMatching`.
* `ignorePrefix` toggles whether the regular expression should be treated as accepting any prefix if it's unanchored.
* `testWithGroups` toggles whether it's tested which groups are filled by a given input string.
*/
private predicate isBadTagFilterCandidate(
RootTerm root, string str, boolean ignorePrefix, boolean testWithGroups
) {
// the regexp must mention "<" and ">" explicitly.
forall(string angleBracket | angleBracket = ["<", ">"] |
any(RegExpConstant term | term.getValue().matches("%" + angleBracket + "%")).getRootTerm() =
root
) and
ignorePrefix = true and
(
str = ["<!-- foo -->", "<!-- foo --!>", "<!- foo ->", "<foo>", "<script>"] and
testWithGroups = true
or
str =
[
"<!-- foo -->", "<!- foo ->", "<!-- foo --!>", "<!-- foo\n -->", "<script>foo</script>",
"<script \n>foo</script>", "<script >foo\n</script>", "<foo ></foo>", "<foo>",
"<foo src=\"foo\"></foo>", "<script>", "<script src=\"foo\"></script>",
"<script src='foo'></script>", "<SCRIPT>foo</SCRIPT>", "<script\tsrc=\"foo\"/>",
"<script\tsrc='foo'></script>", "<sCrIpT>foo</ScRiPt>", "<script src=\"foo\">foo</script >",
"<script src=\"foo\">foo</script foo=\"bar\">", "<script src=\"foo\">foo</script\t\n bar>"
] and
testWithGroups = false
)
}
/**
* A regexp that matches some string from the `isBadTagFilterCandidate` predicate.
*/
class HtmlMatchingRegExp extends RootTerm {
HtmlMatchingRegExp() { RegexpMatching<isBadTagFilterCandidate/4>::matches(this, _) }
/** Holds if this regexp matched `str`, where `str` is one of the string from `isBadTagFilterCandidate`. */
predicate matches(string str) { RegexpMatching<isBadTagFilterCandidate/4>::matches(this, str) }
/** Holds if this regexp fills capture group `g' when matching `str', where `str` is one of the string from `isBadTagFilterCandidate`. */
predicate fillsCaptureGroup(string str, int g) {
RegexpMatching<isBadTagFilterCandidate/4>::fillsCaptureGroup(this, str, g)
}
}
/** DEPRECATED: Alias for HtmlMatchingRegExp */
deprecated class HTMLMatchingRegExp = HtmlMatchingRegExp;
/**
* Holds if `regexp` matches some HTML tags, but misses some HTML tags that it should match.
*
* When adding a new case to this predicate, make sure the test string used in `matches(..)` calls are present in `HTMLMatchingRegExp::test` / `HTMLMatchingRegExp::testWithGroups`.
*/
predicate isBadRegexpFilter(HtmlMatchingRegExp regexp, string msg) {
// CVE-2021-33829 - matching both "<!-- foo -->" and "<!-- foo --!>", but in different capture groups
regexp.matches("<!-- foo -->") and
regexp.matches("<!-- foo --!>") and
exists(int a, int b | a != b |
regexp.fillsCaptureGroup("<!-- foo -->", a) and
// <!-- foo --> might be ambiguously parsed (matching both capture groups), and that is ok here.
regexp.fillsCaptureGroup("<!-- foo --!>", b) and
not regexp.fillsCaptureGroup("<!-- foo --!>", a) and
msg =
"Comments ending with --> are matched differently from comments ending with --!>. The first is matched with capture group "
+ a + " and comments ending with --!> are matched with capture group " +
strictconcat(int i | regexp.fillsCaptureGroup("<!-- foo --!>", i) | i.toString(), ", ") +
"."
)
or
// CVE-2020-17480 - matching "<!-- foo -->" and other tags, but not "<!-- foo --!>".
exists(int group, int other |
group != other and
regexp.fillsCaptureGroup("<!-- foo -->", group) and
regexp.fillsCaptureGroup("<foo>", other) and
not regexp.matches("<!-- foo --!>") and
not regexp.fillsCaptureGroup("<!-- foo -->", any(int i | i != group)) and
not regexp.fillsCaptureGroup("<!- foo ->", group) and
not regexp.fillsCaptureGroup("<foo>", group) and
not regexp.fillsCaptureGroup("<script>", group) and
msg =
"This regular expression only parses --> (capture group " + group +
") and not --!> as an HTML comment end tag."
)
or
regexp.matches("<!-- foo -->") and
not regexp.matches("<!-- foo\n -->") and
not regexp.matches("<!- foo ->") and
not regexp.matches("<foo>") and
not regexp.matches("<script>") and
msg = "This regular expression does not match comments containing newlines."
or
regexp.matches("<script>foo</script>") and
regexp.matches("<script src=\"foo\"></script>") and
not regexp.matches("<foo ></foo>") and
(
not regexp.matches("<script \n>foo</script>") and
msg = "This regular expression matches <script></script>, but not <script \\n></script>"
or
not regexp.matches("<script >foo\n</script>") and
msg = "This regular expression matches <script>...</script>, but not <script >...\\n</script>"
)
or
regexp.matches("<script>foo</script>") and
regexp.matches("<script src=\"foo\"></script>") and
not regexp.matches("<script src='foo'></script>") and
not regexp.matches("<foo>") and
msg = "This regular expression does not match script tags where the attribute uses single-quotes."
or
regexp.matches("<script>foo</script>") and
regexp.matches("<script src='foo'></script>") and
not regexp.matches("<script src=\"foo\"></script>") and
not regexp.matches("<foo>") and
msg = "This regular expression does not match script tags where the attribute uses double-quotes."
or
regexp.matches("<script>foo</script>") and
regexp.matches("<script src='foo'></script>") and
not regexp.matches("<script\tsrc='foo'></script>") and
not regexp.matches("<foo>") and
not regexp.matches("<foo src=\"foo\"></foo>") and
msg = "This regular expression does not match script tags where tabs are used between attributes."
or
regexp.matches("<script>foo</script>") and
not RegExpFlags::isIgnoreCase(regexp) and
not regexp.matches("<foo>") and
not regexp.matches("<foo ></foo>") and
(
not regexp.matches("<SCRIPT>foo</SCRIPT>") and
msg = "This regular expression does not match upper case <SCRIPT> tags."
or
not regexp.matches("<sCrIpT>foo</ScRiPt>") and
regexp.matches("<SCRIPT>foo</SCRIPT>") and
msg = "This regular expression does not match mixed case <sCrIpT> tags."
)
or
regexp.matches("<script src=\"foo\"></script>") and
not regexp.matches("<foo>") and
not regexp.matches("<foo ></foo>") and
(
not regexp.matches("<script src=\"foo\">foo</script >") and
msg = "This regular expression does not match script end tags like </script >."
or
not regexp.matches("<script src=\"foo\">foo</script foo=\"bar\">") and
msg = "This regular expression does not match script end tags like </script foo=\"bar\">."
or
not regexp.matches("<script src=\"foo\">foo</script\t\n bar>") and
msg = "This regular expression does not match script end tags like </script\\t\\n bar>."
)
}
private import regexp.RegExpTreeView::RegExpTreeView as TreeView
// BadTagFilterQuery should be used directly from the shared pack, and not from this file.
deprecated private import codeql.regex.nfa.BadTagFilterQuery::Make<TreeView> as Dep
import Dep

View File

@@ -3,7 +3,8 @@
*/
import javascript
import semmle.javascript.security.regexp.NfaUtils as NfaUtils
private import semmle.javascript.security.regexp.RegExpTreeView::RegExpTreeView as TreeView
import codeql.regex.nfa.NfaUtils::Make<TreeView> as NfaUtils
class StringSubstitutionCall = StringReplaceCall;

View File

@@ -2,288 +2,7 @@
* Classes and predicates for working with suspicious character ranges.
*/
// We don't need the NFA utils, just the regexp tree.
// but the below is a nice shared library that exposes the API we need.
import regexp.NfaUtils
/**
* Gets a rank for `range` that is unique for ranges in the same file.
* Prioritizes ranges that match more characters.
*/
int rankRange(RegExpCharacterRange range) {
range =
rank[result](RegExpCharacterRange r, Location l, int low, int high |
r.getLocation() = l and
isRange(r, low, high)
|
r order by (high - low) desc, l.getStartLine(), l.getStartColumn()
)
}
/** Holds if `range` spans from the unicode code points `low` to `high` (both inclusive). */
predicate isRange(RegExpCharacterRange range, int low, int high) {
exists(string lowc, string highc |
range.isRange(lowc, highc) and
low.toUnicode() = lowc and
high.toUnicode() = highc
)
}
/** Holds if `char` is an alpha-numeric character. */
predicate isAlphanumeric(string char) {
// written like this to avoid having a bindingset for the predicate
char = [[48 .. 57], [65 .. 90], [97 .. 122]].toUnicode() // 0-9, A-Z, a-z
}
/**
* Holds if the given ranges are from the same character class
* and there exists at least one character matched by both ranges.
*/
predicate overlap(RegExpCharacterRange a, RegExpCharacterRange b) {
exists(RegExpCharacterClass clz |
a = clz.getAChild() and
b = clz.getAChild() and
a != b
|
exists(int alow, int ahigh, int blow, int bhigh |
isRange(a, alow, ahigh) and
isRange(b, blow, bhigh) and
alow <= bhigh and
blow <= ahigh
)
)
}
/**
* Holds if `range` overlaps with the char class `escape` from the same character class.
*/
predicate overlapsWithCharEscape(RegExpCharacterRange range, RegExpCharacterClassEscape escape) {
exists(RegExpCharacterClass clz, string low, string high |
range = clz.getAChild() and
escape = clz.getAChild() and
range.isRange(low, high)
|
escape.getValue() = "w" and
getInRange(low, high).regexpMatch("\\w")
or
escape.getValue() = "d" and
getInRange(low, high).regexpMatch("\\d")
or
escape.getValue() = "s" and
getInRange(low, high).regexpMatch("\\s")
)
}
/** Gets the unicode code point for a `char`. */
bindingset[char]
int toCodePoint(string char) { result.toUnicode() = char }
/** A character range that appears to be overly wide. */
class OverlyWideRange extends RegExpCharacterRange {
OverlyWideRange() {
exists(int low, int high, int numChars |
isRange(this, low, high) and
numChars = (1 + high - low) and
this.getRootTerm().isUsedAsRegExp() and
numChars >= 10
|
// across the Z-a range (which includes backticks)
toCodePoint("Z") >= low and
toCodePoint("a") <= high
or
// across the 9-A range (which includes e.g. ; and ?)
toCodePoint("9") >= low and
toCodePoint("A") <= high
or
// a non-alphanumeric char as part of the range boundaries
exists(int bound | bound = [low, high] | not isAlphanumeric(bound.toUnicode())) and
// while still being ascii
low < 128 and
high < 128
) and
// allowlist for known ranges
not this = allowedWideRanges()
}
/** Gets a string representation of a character class that matches the same chars as this range. */
string printEquivalent() { result = RangePrinter::printEquivalentCharClass(this) }
}
/** Gets a range that should not be reported as an overly wide range. */
RegExpCharacterRange allowedWideRanges() {
// ~ is the last printable ASCII character, it's used right in various wide ranges.
result.isRange(_, "~")
or
// the same with " " and "!". " " is the first printable character, and "!" is the first non-white-space printable character.
result.isRange([" ", "!"], _)
or
// the `[@-_]` range is intentional
result.isRange("@", "_")
or
// starting from the zero byte is a good indication that it's purposely matching a large range.
result.isRange(0.toUnicode(), _)
}
/** Gets a char between (and including) `low` and `high`. */
bindingset[low, high]
private string getInRange(string low, string high) {
result = [toCodePoint(low) .. toCodePoint(high)].toUnicode()
}
/** A module computing an equivalent character class for an overly wide range. */
module RangePrinter {
bindingset[char]
bindingset[result]
private string next(string char) {
exists(int prev, int next |
prev.toUnicode() = char and
next.toUnicode() = result and
next = prev + 1
)
}
/** Gets the points where the parts of the pretty printed range should be cut off. */
private string cutoffs() { result = ["A", "Z", "a", "z", "0", "9"] }
/** Gets the char to use in the low end of a range for a given `cut` */
private string lowCut(string cut) {
cut = ["A", "a", "0"] and
result = cut
or
cut = ["Z", "z", "9"] and
result = next(cut)
}
/** Gets the char to use in the high end of a range for a given `cut` */
private string highCut(string cut) {
cut = ["Z", "z", "9"] and
result = cut
or
cut = ["A", "a", "0"] and
next(result) = cut
}
/** Gets the cutoff char used for a given `part` of a range when pretty-printing it. */
private string cutoff(OverlyWideRange range, int part) {
exists(int low, int high | isRange(range, low, high) |
result =
rank[part + 1](string cut |
cut = cutoffs() and low < toCodePoint(cut) and toCodePoint(cut) < high
|
cut order by toCodePoint(cut)
)
)
}
/** Gets the number of parts we should print for a given `range`. */
private int parts(OverlyWideRange range) { result = 1 + count(cutoff(range, _)) }
/** Holds if the given part of a range should span from `low` to `high`. */
private predicate part(OverlyWideRange range, int part, string low, string high) {
// first part.
part = 0 and
(
range.isRange(low, high) and
parts(range) = 1
or
parts(range) >= 2 and
range.isRange(low, _) and
high = highCut(cutoff(range, part))
)
or
// middle
part >= 1 and
part < parts(range) - 1 and
low = lowCut(cutoff(range, part - 1)) and
high = highCut(cutoff(range, part))
or
// last.
part = parts(range) - 1 and
low = lowCut(cutoff(range, part - 1)) and
range.isRange(_, high)
}
/** Gets an escaped `char` for use in a character class. */
bindingset[char]
private string escape(string char) {
exists(string reg | reg = "(\\[|\\]|\\\\|-|/)" |
if char.regexpMatch(reg) then result = "\\" + char else result = char
)
}
/** Gets a part of the equivalent range. */
private string printEquivalentCharClass(OverlyWideRange range, int part) {
exists(string low, string high | part(range, part, low, high) |
if
isAlphanumeric(low) and
isAlphanumeric(high)
then result = low + "-" + high
else
result =
strictconcat(string char | char = getInRange(low, high) | escape(char) order by char)
)
}
/** Gets the entire pretty printed equivalent range. */
string printEquivalentCharClass(OverlyWideRange range) {
result =
strictconcat(string r, int part |
r = "[" and part = -1 and exists(range)
or
r = printEquivalentCharClass(range, part)
or
r = "]" and part = parts(range)
|
r order by part
)
}
}
/** Gets a char range that is overly large because of `reason`. */
RegExpCharacterRange getABadRange(string reason, int priority) {
result instanceof OverlyWideRange and
priority = 0 and
exists(string equiv | equiv = result.(OverlyWideRange).printEquivalent() |
if equiv.length() <= 50
then reason = "is equivalent to " + equiv
else reason = "is equivalent to " + equiv.substring(0, 50) + "..."
)
or
priority = 1 and
exists(RegExpCharacterRange other |
reason = "overlaps with " + other + " in the same character class" and
rankRange(result) < rankRange(other) and
overlap(result, other)
)
or
priority = 2 and
exists(RegExpCharacterClassEscape escape |
reason = "overlaps with " + escape + " in the same character class" and
overlapsWithCharEscape(result, escape)
)
or
reason = "is empty" and
priority = 3 and
exists(int low, int high |
isRange(result, low, high) and
low > high
)
}
/** Holds if `range` matches suspiciously many characters. */
predicate problem(RegExpCharacterRange range, string reason) {
reason =
strictconcat(string m, int priority |
range = getABadRange(m, priority)
|
m, ", and " order by priority desc
) and
// specifying a range using an escape is usually OK.
not range.getAChild() instanceof RegExpEscape and
// Unicode escapes in strings are interpreted before it turns into a regexp,
// so e.g. [\u0001-\uFFFF] will just turn up as a range between two constants.
// We therefore exclude these ranges.
range.getRootTerm().getParent() instanceof RegExpLiteral and
// is used as regexp (mostly for JS where regular expressions are parsed eagerly)
range.getRootTerm().isUsedAsRegExp()
}
private import regexp.RegExpTreeView::RegExpTreeView as TreeView
// OverlyLargeRangeQuery should be used directly from the shared pack, and not from this file.
deprecated private import codeql.regex.OverlyLargeRangeQuery::Make<TreeView> as Dep
import Dep

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `BrokenCryptoAlgorithmQuery` instead. */
import javascript
private import BrokenCryptoAlgorithmQuery as BrokenCryptoAlgorithmQuery // ignore-query-import
/** DEPRECATED. Import `BrokenCryptoAlgorithmQuery` instead. */
deprecated module BrokenCryptoAlgorithm = BrokenCryptoAlgorithmQuery;

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `BuildArtifactLeakQuery` instead. */
import javascript
private import BuildArtifactLeakQuery as BuildArtifactLeakQuery // ignore-query-import
/** DEPRECATED. Import `BuildArtifactLeakQuery` instead. */
deprecated module BuildArtifactLeak = BuildArtifactLeakQuery;

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `CleartextLoggingQuery` instead. */
import javascript
private import CleartextLoggingQuery as CleartextLoggingQuery // ignore-query-import
/** DEPRECATED. Import `CleartextLoggingQuery` instead. */
deprecated module CleartextLogging = CleartextLoggingQuery;

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `CleartextStorageQuery` instead. */
import javascript
private import CleartextStorageQuery as CleartextStorageQuery // ignore-query-import
/** DEPRECATED. Import `CleartextStorageQuery` instead. */
deprecated module CleartextStorage = CleartextStorageQuery;

View File

@@ -1,8 +0,0 @@
/** DEPRECATED. Import `ClientSideUrlRedirectQuery` instead. */
import javascript
import UrlConcatenation
private import ClientSideUrlRedirectQuery as ClientSideUrlRedirectQuery // ignore-query-import
/** DEPRECATED. Import `ClientSideUrlRedirectQuery` instead. */
deprecated module ClientSideUrlRedirect = ClientSideUrlRedirectQuery;

View File

@@ -235,4 +235,8 @@ module ClientSideUrlRedirect {
this = NextJS::nextRouter().getAMemberCall(["push", "replace"]).getArgument(0)
}
}
private class SinkFromModel extends Sink {
SinkFromModel() { this = ModelOutput::getASinkNode("url-redirection").asSink() }
}
}

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `CodeInjectionQuery` instead. */
import javascript
private import CodeInjectionQuery as CodeInjectionQuery // ignore-query-import
/** DEPRECATED. Import `CodeInjectionQuery` instead. */
deprecated module CodeInjection = CodeInjectionQuery;

View File

@@ -410,4 +410,8 @@ module CodeInjection {
/** DEPRECATED: Alias for JsonStringifySanitizer */
deprecated class JSONStringifySanitizer = JsonStringifySanitizer;
private class SinkFromModel extends Sink {
SinkFromModel() { this = ModelOutput::getASinkNode("code-injection").asSink() }
}
}

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `CommandInjectionQuery` instead. */
import javascript
private import CommandInjectionQuery as CommandInjectionQuery // ignore-query-import
/** DEPRECATED. Import `CommandInjectionQuery` instead. */
deprecated module CommandInjection = CommandInjectionQuery;

View File

@@ -50,4 +50,8 @@ module CommandInjection {
class SystemCommandExecutionSink extends Sink, DataFlow::ValueNode {
SystemCommandExecutionSink() { this = any(SystemCommandExecution sys).getACommandArgument() }
}
private class SinkFromModel extends Sink {
SinkFromModel() { this = ModelOutput::getASinkNode("command-line-injection").asSink() }
}
}

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `ConditionalBypassQuery` instead. */
import javascript
private import ConditionalBypassQuery as ConditionalBypassQuery // ignore-query-import
/** DEPRECATED. Import `ConditionalBypassQuery` instead. */
deprecated module ConditionalBypass = ConditionalBypassQuery;

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `CorsMisconfigurationForCredentialsQuery` instead. */
import javascript
private import CorsMisconfigurationForCredentialsQuery as CorsMisconfigurationForCredentialsQuery // ignore-query-import
/** DEPRECATED. Import `CorsMisconfigurationForCredentialsQuery` instead. */
deprecated module CorsMisconfigurationForCredentials = CorsMisconfigurationForCredentialsQuery;

View File

@@ -1,8 +0,0 @@
/** DEPRECATED. Import `DeepObjectResourceExhaustionQuery` instead. */
import javascript
import semmle.javascript.security.TaintedObject
private import DeepObjectResourceExhaustionQuery as DeepObjectResourceExhaustionQuery // ignore-query-import
/** DEPRECATED. Import `DeepObjectResourceExhaustionQuery` instead. */
deprecated module DeepObjectResourceExhaustion = DeepObjectResourceExhaustionQuery;

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `DifferentKindsComparisonBypassQuery` instead. */
import javascript
private import DifferentKindsComparisonBypassQuery as DifferentKindsComparisonBypassQuery // ignore-query-import
/** DEPRECATED. Import `DifferentKindsComparisonBypassQuery` instead. */
deprecated module DifferentKindsComparisonBypass = DifferentKindsComparisonBypassQuery;

View File

@@ -1,7 +0,0 @@
/** DEPRECATED. Import `DomBasedXssQuery` instead. */
import javascript
private import DomBasedXssQuery as DomBasedXssQuery // ignore-query-import
/** DEPRECATED. Import `DomBasedXssQuery` instead. */
deprecated module DomBasedXss = DomBasedXssQuery;

View File

@@ -342,4 +342,8 @@ module DomBasedXss {
outcome = super.getPolarity()
}
}
private class SinkFromModel extends Sink {
SinkFromModel() { this = ModelOutput::getASinkNode("html-injection").asSink() }
}
}

Some files were not shown because too many files have changed in this diff Show More