Merge branch 'main' into henrymercer/mergeback-3.8

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

View File

@@ -2,8 +2,8 @@
This directory contains the source code of the JavaScript extractor. The extractor depends on various libraries that are not currently bundled with the source code, so at present it cannot be built in isolation.
The extractor consists of a parser for the latest version of ECMAScript, including a few proposed and historic extensions (see `src/com/semmle/jcorn`), classes for representing JavaScript and TypeScript ASTs (`src/com/semmle/js/ast` and `src/com/semmle/ts/ast`), and various other bits of functionality. Historically, the main entry point of the JavaScript extractor has been `com.semmle.js.extractor.Main`. However, this class is slowly being phased out in favour of `com.semmle.js.extractor.AutoBuild`, which is the entry point used by LGTM.
The extractor consists of a parser for the latest version of ECMAScript, including a few proposed and historic extensions (see `src/com/semmle/jcorn`), classes for representing JavaScript and TypeScript ASTs (`src/com/semmle/js/ast` and `src/com/semmle/ts/ast`), and various other bits of functionality. Historically, the main entry point of the JavaScript extractor has been `com.semmle.js.extractor.Main`. However, this class is slowly being phased out in favour of `com.semmle.js.extractor.AutoBuild`, which is the entry point used by CodeQL.
## License
Like the LGTM queries, the JavaScript extractor is licensed under [Apache License 2.0](LICENSE) by [GitHub](https://github.com). Some code is derived from other projects, whose licenses are noted in other `LICENSE-*.md` files in this folder.
Like the CodeQL queries, the JavaScript extractor is licensed under [Apache License 2.0](LICENSE) by [GitHub](https://github.com). Some code is derived from other projects, whose licenses are noted in other `LICENSE-*.md` files in this folder.

View File

@@ -52,6 +52,7 @@ import com.semmle.util.exception.ResourceError;
import com.semmle.util.exception.UserError;
import com.semmle.util.extraction.ExtractorOutputConfig;
import com.semmle.util.files.FileUtil;
import com.semmle.util.files.FileUtil8;
import com.semmle.util.io.WholeIO;
import com.semmle.util.io.csv.CSVReader;
import com.semmle.util.language.LegacyLanguage;
@@ -433,23 +434,41 @@ public class AutoBuild {
return true;
}
/**
* Returns whether the autobuilder has seen code.
* This is overridden in tests.
*/
protected boolean hasSeenCode() {
return seenCode;
}
/** Perform extraction. */
public int run() throws IOException {
startThreadPool();
try {
extractSource();
extractExterns();
CompletableFuture<?> sourceFuture = extractSource();
sourceFuture.join(); // wait for source extraction to complete
if (hasSeenCode()) { // don't bother with the externs if no code was seen
extractExterns();
}
extractXml();
} finally {
shutdownThreadPool();
}
if (!seenCode) {
if (!hasSeenCode()) {
if (seenFiles) {
warn("Only found JavaScript or TypeScript files that were empty or contained syntax errors.");
} else {
warn("No JavaScript or TypeScript code found.");
}
return -1;
// ensuring that the finalize steps detects that no code was seen.
Path srcFolder = Paths.get(EnvironmentVariables.getWipDatabase(), "src");
// check that the srcFolder is empty
if (Files.list(srcFolder).count() == 0) {
// Non-recursive delete because "src/" should be empty.
FileUtil8.delete(srcFolder);
}
return 0;
}
return 0;
}
@@ -571,7 +590,7 @@ public class AutoBuild {
}
/** Extract all supported candidate files that pass the filters. */
private void extractSource() throws IOException {
private CompletableFuture<?> extractSource() throws IOException {
// default extractor
FileExtractor defaultExtractor =
new FileExtractor(mkExtractorConfig(), outputConfig, trapCache);
@@ -618,7 +637,7 @@ public class AutoBuild {
boolean hasTypeScriptFiles = extractedFiles.size() > 0;
// extract remaining files
extractFiles(
return extractFiles(
filesToExtract, extractedFiles, extractors,
f -> !(hasTypeScriptFiles && isFileDerivedFromTypeScriptFile(f, extractedFiles)));
}

View File

@@ -41,7 +41,7 @@ public class Main {
* A version identifier that should be updated every time the extractor changes in such a way that
* it may produce different tuples for the same file under the same {@link ExtractorConfig}.
*/
public static final String EXTRACTOR_VERSION = "2022-11-16";
public static final String EXTRACTOR_VERSION = "2022-11-29";
public static final Pattern NEWLINE = Pattern.compile("\n");

View File

@@ -119,6 +119,11 @@ public class AutoBuildTests {
return CompletableFuture.completedFuture(null);
}
@Override
protected boolean hasSeenCode() {
return true;
}
@Override
public void verifyTypeScriptInstallation(ExtractorState state) {}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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