mirror of
https://github.com/github/codeql.git
synced 2025-12-21 19:26:31 +01:00
Merge branch 'main' into henrymercer/mergeback-3.8
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/**
|
||||
* For internal use only.
|
||||
*
|
||||
* Provides information about the results of boosted queries for use in adaptive threat modeling (ATM).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/**
|
||||
* For internal use only.
|
||||
*
|
||||
* Provides shared scoring functionality for use in adaptive threat modeling (ATM).
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/**
|
||||
* For internal use only.
|
||||
*
|
||||
* Extracts data about the database for use in adaptive threat modeling (ATM).
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/**
|
||||
* For internal use only.
|
||||
*
|
||||
* Provides an implementation of scoring alerts for use in adaptive threat modeling (ATM).
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/**
|
||||
* FunctionBodyFeatures.qll
|
||||
*
|
||||
* Contains logic relating to the `enclosingFunctionBody` and `enclosingFunctionName` features.
|
||||
|
||||
@@ -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()
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
)
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/**
|
||||
* For internal use only.
|
||||
*
|
||||
*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/**
|
||||
* For internal use only.
|
||||
*
|
||||
* Defines files that should be excluded from the evaluation of ML models.
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
erroneousEndpoints
|
||||
erroneousConfidences
|
||||
@@ -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]"
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 |
|
||||
@@ -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)
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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) |
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
import experimental.adaptivethreatmodeling.StandardEndpointFilters
|
||||
import experimental.adaptivethreatmodeling.EndpointCharacteristics as EndpointCharacteristics
|
||||
|
||||
select getALikelyExternalLibraryCall()
|
||||
select EndpointCharacteristics::getALikelyExternalLibraryCall()
|
||||
|
||||
@@ -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 | |
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -5,3 +5,7 @@ dbscheme: semmlecode.javascript.dbscheme
|
||||
extractor: javascript
|
||||
library: true
|
||||
upgrades: upgrades
|
||||
dependencies:
|
||||
codeql/regex: ${workspace}
|
||||
dataExtensions:
|
||||
- semmle/javascript/frameworks/**/model.yml
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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) }
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
@@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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: []
|
||||
@@ -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;", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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": []
|
||||
|
||||
@@ -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, ""]
|
||||
@@ -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]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
791
javascript/ql/lib/semmle/javascript/frameworks/mongodb/model.yml
Normal file
791
javascript/ql/lib/semmle/javascript/frameworks/mongodb/model.yml
Normal 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]"]
|
||||
@@ -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]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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": []
|
||||
|
||||
@@ -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]"]
|
||||
@@ -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", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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": []
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
@@ -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", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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]",
|
||||
|
||||
108
javascript/ql/lib/semmle/javascript/frameworks/pg/model.yml
Normal file
108
javascript/ql/lib/semmle/javascript/frameworks/pg/model.yml
Normal 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"]
|
||||
@@ -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", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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]
|
||||
@@ -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]", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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": [
|
||||
|
||||
189
javascript/ql/lib/semmle/javascript/frameworks/spanner/model.yml
Normal file
189
javascript/ql/lib/semmle/javascript/frameworks/spanner/model.yml
Normal 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]"]
|
||||
@@ -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", //
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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": []
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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
Reference in New Issue
Block a user