@@ -463,22 +463,34 @@ private module MsSql {
463463 * Provides classes modelling the `sequelize` package.
464464 */
465465private module Sequelize {
466- /** Gets an import of the `sequelize` module. */
467- API:: Node sequelize ( ) { result = API:: moduleImport ( "sequelize" ) }
466+ /** Gets an import of the `sequelize` module or one that re-exports it . */
467+ API:: Node sequelize ( ) { result = API:: moduleImport ( [ "sequelize" , "sequelize-typescript" ] ) }
468468
469469 /** Gets an expression that creates an instance of the `Sequelize` class. */
470- API:: Node newSequelize ( ) { result = sequelize ( ) .getInstance ( ) }
470+ API:: Node instance ( ) {
471+ result = [ sequelize ( ) , sequelize ( ) .getMember ( "Sequelize" ) ] .getInstance ( )
472+ or
473+ result = API:: Node:: ofType ( [ "sequelize" , "sequelize-typescript" ] , [ "Sequelize" , "default" ] )
474+ }
471475
472476 /** A call to `Sequelize.query`. */
473477 private class QueryCall extends DatabaseAccess , DataFlow:: MethodCallNode {
474- QueryCall ( ) { this = newSequelize ( ) .getMember ( "query" ) .getACall ( ) }
478+ QueryCall ( ) { this = instance ( ) .getMember ( "query" ) .getACall ( ) }
475479
476- override DataFlow:: Node getAQueryArgument ( ) { result = getArgument ( 0 ) }
480+ override DataFlow:: Node getAQueryArgument ( ) {
481+ result = getArgument ( 0 )
482+ or
483+ result = getOptionArgument ( 0 , "query" )
484+ }
477485 }
478486
479487 /** An expression that is passed to `Sequelize.query` method and hence interpreted as SQL. */
480488 class QueryString extends SQL:: SqlString {
481- QueryString ( ) { this = any ( QueryCall qc ) .getAQueryArgument ( ) .asExpr ( ) }
489+ QueryString ( ) {
490+ this = any ( QueryCall qc ) .getAQueryArgument ( ) .asExpr ( )
491+ or
492+ this = sequelize ( ) .getMember ( [ "literal" , "asIs" ] ) .getParameter ( 0 ) .getARhs ( ) .asExpr ( )
493+ }
482494 }
483495
484496 /**
0 commit comments