mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2025-10-16 12:05:41 +00:00
6166 lines
226 KiB
TypeScript
6166 lines
226 KiB
TypeScript
// Type definitions for Sequelize 3.4.1
|
|
// Project: http://sequelizejs.com
|
|
// Definitions by: samuelneff <https://github.com/samuelneff>, Peter Harris <https://github.com/codeanimal>, Ivan Drinchev <https://github.com/drinchev>
|
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
|
|
// Based on original work by: samuelneff <https://github.com/samuelneff/sequelize-auto-ts/blob/master/lib/sequelize.d.ts>
|
|
|
|
/// <reference path='../lodash/lodash.d.ts' />
|
|
/// <reference path="../bluebird/bluebird.d.ts" />
|
|
/// <reference path="../validator/validator.d.ts" />
|
|
|
|
declare module "sequelize" {
|
|
|
|
namespace sequelize {
|
|
|
|
//
|
|
// Associations
|
|
// ~~~~~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/tree/v3.4.1/lib/associations
|
|
//
|
|
|
|
|
|
/**
|
|
* The options for the getAssociation mixin of the belongsTo association.
|
|
* @see BelongsToGetAssociationMixin
|
|
*/
|
|
interface BelongsToGetAssociationMixinOptions {
|
|
/**
|
|
* Apply a scope on the related model, or remove its default scope by passing false.
|
|
*/
|
|
scope?: string | boolean;
|
|
}
|
|
|
|
/**
|
|
* The getAssociation mixin applied to models with belongsTo.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsTo(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttrib>, UserAttrib {
|
|
* getRole: Sequelize.BelongsToGetAssociationMixin<RoleInstance>;
|
|
* // setRole...
|
|
* // createRole...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToGetAssociationMixin<TInstance> {
|
|
/**
|
|
* Get the associated instance.
|
|
* @param options The options to use when getting the association.
|
|
*/
|
|
(options?: BelongsToGetAssociationMixinOptions): Promise<TInstance>;
|
|
}
|
|
|
|
/**
|
|
* The options for the setAssociation mixin of the belongsTo association.
|
|
* @see BelongsToSetAssociationMixin
|
|
*/
|
|
interface BelongsToSetAssociationMixinOptions {
|
|
/**
|
|
* Skip saving this after setting the foreign key if false.
|
|
*/
|
|
save?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The setAssociation mixin applied to models with belongsTo.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsTo(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRole...
|
|
* setRole: Sequelize.BelongsToSetAssociationMixin<RoleInstance, RoleId>;
|
|
* // createRole...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToSetAssociationMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Set the associated instance.
|
|
* @param newAssociation An instance or the primary key of an instance to associate with this. Pass null or undefined to remove the association.
|
|
* @param options the options passed to `this.save`.
|
|
*/
|
|
(
|
|
newAssociation?: TInstance | TInstancePrimaryKey,
|
|
options?: BelongsToSetAssociationMixinOptions | InstanceSaveOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the createAssociation mixin of the belongsTo association.
|
|
* @see BelongsToCreateAssociationMixin
|
|
*/
|
|
interface BelongsToCreateAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The createAssociation mixin applied to models with belongsTo.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsTo(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRole...
|
|
* // setRole...
|
|
* createRole: Sequelize.BelongsToCreateAssociationMixin<RoleAttributes>;
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToCreateAssociationMixin<TAttributes> {
|
|
/**
|
|
* Create a new instance of the associated model and associate it with this.
|
|
* @param values The values used to create the association.
|
|
* @param options The options passed to `target.create` and `setAssociation`.
|
|
*/
|
|
(
|
|
values?: TAttributes,
|
|
options?: BelongsToCreateAssociationMixinOptions | CreateOptions | BelongsToSetAssociationMixinOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the getAssociation mixin of the hasOne association.
|
|
* @see HasOneGetAssociationMixin
|
|
*/
|
|
interface HasOneGetAssociationMixinOptions {
|
|
/**
|
|
* Apply a scope on the related model, or remove its default scope by passing false.
|
|
*/
|
|
scope?: string | boolean;
|
|
}
|
|
|
|
/**
|
|
* The getAssociation mixin applied to models with hasOne.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasOne(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttrib>, UserAttrib {
|
|
* getRole: Sequelize.HasOneGetAssociationMixin<RoleInstance>;
|
|
* // setRole...
|
|
* // createRole...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-one/
|
|
* @see Instance
|
|
*/
|
|
interface HasOneGetAssociationMixin<TInstance> {
|
|
/**
|
|
* Get the associated instance.
|
|
* @param options The options to use when getting the association.
|
|
*/
|
|
(options?: HasOneGetAssociationMixinOptions): Promise<TInstance>;
|
|
}
|
|
|
|
/**
|
|
* The options for the setAssociation mixin of the hasOne association.
|
|
* @see HasOneSetAssociationMixin
|
|
*/
|
|
interface HasOneSetAssociationMixinOptions {
|
|
/**
|
|
* Skip saving this after setting the foreign key if false.
|
|
*/
|
|
save?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The setAssociation mixin applied to models with hasOne.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasOne(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRole...
|
|
* setRole: Sequelize.HasOneSetAssociationMixin<RoleInstance, RoleId>;
|
|
* // createRole...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-one/
|
|
* @see Instance
|
|
*/
|
|
interface HasOneSetAssociationMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Set the associated instance.
|
|
* @param newAssociation An instance or the primary key of an instance to associate with this. Pass null or undefined to remove the association.
|
|
* @param options The options passed to `getAssocation` and `target.save`.
|
|
*/
|
|
(
|
|
newAssociation?: TInstance | TInstancePrimaryKey,
|
|
options?: HasOneSetAssociationMixinOptions | HasOneGetAssociationMixinOptions | InstanceSaveOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the createAssociation mixin of the hasOne association.
|
|
* @see HasOneCreateAssociationMixin
|
|
*/
|
|
interface HasOneCreateAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The createAssociation mixin applied to models with hasOne.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasOne(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRole...
|
|
* // setRole...
|
|
* createRole: Sequelize.HasOneCreateAssociationMixin<RoleAttributes>;
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-one/
|
|
* @see Instance
|
|
*/
|
|
interface HasOneCreateAssociationMixin<TAttributes> {
|
|
/**
|
|
* Create a new instance of the associated model and associate it with this.
|
|
* @param values The values used to create the association.
|
|
* @param options The options passed to `target.create` and `setAssociation`.
|
|
*/
|
|
(
|
|
values?: TAttributes,
|
|
options?: HasOneCreateAssociationMixinOptions | HasOneSetAssociationMixinOptions | CreateOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the getAssociations mixin of the hasMany association.
|
|
* @see HasManyGetAssociationsMixin
|
|
*/
|
|
interface HasManyGetAssociationsMixinOptions {
|
|
|
|
/**
|
|
* An optional where clause to limit the associated models.
|
|
*/
|
|
where?: WhereOptions;
|
|
|
|
/**
|
|
* Apply a scope on the related model, or remove its default scope by passing false.
|
|
*/
|
|
scope?: string | boolean;
|
|
}
|
|
|
|
/**
|
|
* The getAssociations mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* getRoles: Sequelize.HasManyGetAssociationsMixin<RoleInstance>;
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyGetAssociationsMixin<TInstance> {
|
|
/**
|
|
* Get everything currently associated with this, using an optional where clause.
|
|
* @param options The options to use when getting the associations.
|
|
*/
|
|
(options?: HasManyGetAssociationsMixinOptions): Promise<TInstance[]>;
|
|
}
|
|
|
|
/**
|
|
* The options for the setAssociations mixin of the hasMany association.
|
|
* @see HasManySetAssociationsMixin
|
|
*/
|
|
interface HasManySetAssociationsMixinOptions {
|
|
|
|
/**
|
|
* Run validation for the join model.
|
|
*/
|
|
validate?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The setAssociations mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* setRoles: Sequelize.HasManySetAssociationsMixin<RoleInstance, RoleId>;
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManySetAssociationsMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Set the associated models by passing an array of instances or their primary keys.
|
|
* Everything that it not in the passed array will be un-associated.
|
|
* @param newAssociations An array of instances or primary key of instances to associate with this. Pass null or undefined to remove all associations.
|
|
* @param options The options passed to `target.findAll` and `update`.
|
|
*/
|
|
(
|
|
newAssociations?: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: HasManySetAssociationsMixinOptions | FindOptions | InstanceUpdateOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the addAssociations mixin of the hasMany association.
|
|
* @see HasManyAddAssociationsMixin
|
|
*/
|
|
interface HasManyAddAssociationsMixinOptions {
|
|
|
|
/**
|
|
* Run validation for the join model.
|
|
*/
|
|
validate?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The addAssociations mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* addRoles: Sequelize.HasManyAddAssociationsMixin<RoleInstance, RoleId>;
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyAddAssociationsMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Associate several instances with this.
|
|
* @param newAssociations An array of instances or primary key of instances to associate with this.
|
|
* @param options The options passed to `target.update`.
|
|
*/
|
|
(
|
|
newAssociations?: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: HasManyAddAssociationsMixinOptions | InstanceUpdateOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the addAssociation mixin of the hasMany association.
|
|
* @see HasManyAddAssociationMixin
|
|
*/
|
|
interface HasManyAddAssociationMixinOptions {
|
|
|
|
/**
|
|
* Run validation for the join model.
|
|
*/
|
|
validate?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The addAssociation mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* addRole: Sequelize.HasManyAddAssociationMixin<RoleInstance, RoleId>;
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyAddAssociationMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Associate an instance with this.
|
|
* @param newAssociation An instance or the primary key of an instance to associate with this.
|
|
* @param options The options passed to `target.update`.
|
|
*/
|
|
(
|
|
newAssociation?: TInstance | TInstancePrimaryKey,
|
|
options?: HasManyAddAssociationMixinOptions | InstanceUpdateOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the createAssociation mixin of the hasMany association.
|
|
* @see HasManyCreateAssociationMixin
|
|
*/
|
|
interface HasManyCreateAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The createAssociation mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* createRole: Sequelize.HasManyCreateAssociationMixin<RoleAttributes>;
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyCreateAssociationMixin<TAttributes> {
|
|
/**
|
|
* Create a new instance of the associated model and associate it with this.
|
|
* @param values The values used to create the association.
|
|
* @param options The options to use when creating the association.
|
|
*/
|
|
(
|
|
values?: TAttributes,
|
|
options?: HasManyCreateAssociationMixinOptions | CreateOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the removeAssociation mixin of the hasMany association.
|
|
* @see HasManyRemoveAssociationMixin
|
|
*/
|
|
interface HasManyRemoveAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The removeAssociation mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* removeRole: Sequelize.HasManyRemoveAssociationMixin<RoleInstance, RoleId>;
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyRemoveAssociationMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Un-associate the instance.
|
|
* @param oldAssociated The instance or the primary key of the instance to un-associate.
|
|
* @param options The options passed to `target.update`.
|
|
*/
|
|
(
|
|
oldAssociated?: TInstance | TInstancePrimaryKey,
|
|
options?: HasManyRemoveAssociationMixinOptions | InstanceUpdateOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the removeAssociations mixin of the hasMany association.
|
|
* @see HasManyRemoveAssociationsMixin
|
|
*/
|
|
interface HasManyRemoveAssociationsMixinOptions { }
|
|
|
|
/**
|
|
* The removeAssociations mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* removeRoles: Sequelize.HasManyRemoveAssociationsMixin<RoleInstance, RoleId>;
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyRemoveAssociationsMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Un-associate several instances.
|
|
* @param oldAssociated An array of instances or primary key of instances to un-associate.
|
|
* @param options The options passed to `target.update`.
|
|
*/
|
|
(
|
|
oldAssociateds?: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: HasManyRemoveAssociationsMixinOptions | InstanceUpdateOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the hasAssociation mixin of the hasMany association.
|
|
* @see HasManyHasAssociationMixin
|
|
*/
|
|
interface HasManyHasAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The hasAssociation mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* hasRole: Sequelize.HasManyHasAssociationMixin<RoleInstance, RoleId>;
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyHasAssociationMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Check if an instance is associated with this.
|
|
* @param target The instance or the primary key of the instance to check.
|
|
* @param options The options passed to `getAssociations`.
|
|
*/
|
|
(
|
|
target: TInstance | TInstancePrimaryKey,
|
|
options?: HasManyHasAssociationMixinOptions | HasManyGetAssociationsMixinOptions
|
|
): Promise<boolean>;
|
|
}
|
|
|
|
/**
|
|
* The options for the hasAssociations mixin of the hasMany association.
|
|
* @see HasManyHasAssociationsMixin
|
|
*/
|
|
interface HasManyHasAssociationsMixinOptions { }
|
|
|
|
/**
|
|
* The removeAssociations mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles
|
|
* // hasRole...
|
|
* hasRoles: Sequelize.HasManyHasAssociationsMixin<RoleInstance, RoleId>;
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyHasAssociationsMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Check if all instances are associated with this.
|
|
* @param targets An array of instances or primary key of instances to check.
|
|
* @param options The options passed to `getAssociations`.
|
|
*/
|
|
(
|
|
targets: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: HasManyHasAssociationsMixinOptions | HasManyGetAssociationsMixinOptions
|
|
): Promise<boolean>;
|
|
}
|
|
|
|
/**
|
|
* The options for the countAssociations mixin of the hasMany association.
|
|
* @see HasManyCountAssociationsMixin
|
|
*/
|
|
interface HasManyCountAssociationsMixinOptions {
|
|
|
|
/**
|
|
* An optional where clause to limit the associated models.
|
|
*/
|
|
where?: WhereOptions;
|
|
|
|
/**
|
|
* Apply a scope on the related model, or remove its default scope by passing false.
|
|
*/
|
|
scope?: string | boolean;
|
|
}
|
|
|
|
/**
|
|
* The countAssociations mixin applied to models with hasMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.hasMany(Role);
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* countRoles: Sequelize.HasManyCountAssociationsMixin;
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/has-many/
|
|
* @see Instance
|
|
*/
|
|
interface HasManyCountAssociationsMixin {
|
|
/**
|
|
* Count everything currently associated with this, using an optional where clause.
|
|
* @param options The options to use when counting the associations.
|
|
*/
|
|
(options?: HasManyCountAssociationsMixinOptions): Promise<number>;
|
|
}
|
|
|
|
/**
|
|
* The options for the getAssociations mixin of the belongsToMany association.
|
|
* @see BelongsToManyGetAssociationsMixin
|
|
*/
|
|
interface BelongsToManyGetAssociationsMixinOptions {
|
|
|
|
/**
|
|
* An optional where clause to limit the associated models.
|
|
*/
|
|
where?: WhereOptions;
|
|
|
|
/**
|
|
* Apply a scope on the related model, or remove its default scope by passing false.
|
|
*/
|
|
scope?: string | boolean;
|
|
}
|
|
|
|
/**
|
|
* The getAssociations mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* getRoles: Sequelize.BelongsToManyGetAssociationsMixin<RoleInstance>;
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyGetAssociationsMixin<TInstance> {
|
|
/**
|
|
* Get everything currently associated with this, using an optional where clause.
|
|
* @param options The options to use when getting the associations.
|
|
*/
|
|
(options?: BelongsToManyGetAssociationsMixinOptions): Promise<TInstance[]>;
|
|
}
|
|
|
|
/**
|
|
* The options for the setAssociations mixin of the belongsToMany association.
|
|
* @see BelongsToManySetAssociationsMixin
|
|
*/
|
|
interface BelongsToManySetAssociationsMixinOptions {
|
|
|
|
/**
|
|
* Run validation for the join model.
|
|
*/
|
|
validate?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The setAssociations mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* setRoles: Sequelize.BelongsToManySetAssociationsMixin<RoleInstance, RoleId, UserRoleAttributes>;
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManySetAssociationsMixin<TInstance, TInstancePrimaryKey, TJoinTableAttributes> {
|
|
/**
|
|
* Set the associated models by passing an array of instances or their primary keys.
|
|
* Everything that it not in the passed array will be un-associated.
|
|
* @param newAssociations An array of instances or primary key of instances to associate with this. Pass null or undefined to remove all associations.
|
|
* @param options The options passed to `through.findAll`, `bulkCreate`, `update` and `destroy`. Can also hold additional attributes for the join table.
|
|
*/
|
|
(
|
|
newAssociations?: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: BelongsToManySetAssociationsMixinOptions | FindOptions | BulkCreateOptions | InstanceUpdateOptions | InstanceDestroyOptions | TJoinTableAttributes
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the addAssociations mixin of the belongsToMany association.
|
|
* @see BelongsToManyAddAssociationsMixin
|
|
*/
|
|
interface BelongsToManyAddAssociationsMixinOptions {
|
|
|
|
/**
|
|
* Run validation for the join model.
|
|
*/
|
|
validate?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The addAssociations mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* addRoles: Sequelize.BelongsToManyAddAssociationsMixin<RoleInstance, RoleId, UserRoleAttributes>;
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyAddAssociationsMixin<TInstance, TInstancePrimaryKey, TJoinTableAttributes> {
|
|
/**
|
|
* Associate several instances with this.
|
|
* @param newAssociations An array of instances or primary key of instances to associate with this.
|
|
* @param options The options passed to `through.findAll`, `bulkCreate`, `update` and `destroy`. Can also hold additional attributes for the join table.
|
|
*/
|
|
(
|
|
newAssociations?: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: BelongsToManyAddAssociationsMixinOptions | FindOptions | BulkCreateOptions | InstanceUpdateOptions | InstanceDestroyOptions | TJoinTableAttributes
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the addAssociation mixin of the belongsToMany association.
|
|
* @see BelongsToManyAddAssociationMixin
|
|
*/
|
|
interface BelongsToManyAddAssociationMixinOptions {
|
|
|
|
/**
|
|
* Run validation for the join model.
|
|
*/
|
|
validate?: boolean;
|
|
}
|
|
|
|
/**
|
|
* The addAssociation mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* addRole: Sequelize.BelongsToManyAddAssociationMixin<RoleInstance, RoleId, UserRoleAttributes>;
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyAddAssociationMixin<TInstance, TInstancePrimaryKey, TJoinTableAttributes> {
|
|
/**
|
|
* Associate an instance with this.
|
|
* @param newAssociation An instance or the primary key of an instance to associate with this.
|
|
* @param options The options passed to `through.findAll`, `bulkCreate`, `update` and `destroy`. Can also hold additional attributes for the join table.
|
|
*/
|
|
(
|
|
newAssociation?: TInstance | TInstancePrimaryKey,
|
|
options?: BelongsToManyAddAssociationMixinOptions | FindOptions | BulkCreateOptions | InstanceUpdateOptions | InstanceDestroyOptions | TJoinTableAttributes
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the createAssociation mixin of the belongsToMany association.
|
|
* @see BelongsToManyCreateAssociationMixin
|
|
*/
|
|
interface BelongsToManyCreateAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The createAssociation mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* createRole: Sequelize.BelongsToManyCreateAssociationMixin<RoleAttributes, UserRoleAttributes>;
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyCreateAssociationMixin<TAttributes, TJoinTableAttributes> {
|
|
/**
|
|
* Create a new instance of the associated model and associate it with this.
|
|
* @param values The values used to create the association.
|
|
* @param options Options passed to `create` and `add`. Can also hold additional attributes for the join table.
|
|
*/
|
|
(
|
|
values?: TAttributes,
|
|
options?: BelongsToManyCreateAssociationMixinOptions | CreateOptions | TJoinTableAttributes
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the removeAssociation mixin of the belongsToMany association.
|
|
* @see BelongsToManyRemoveAssociationMixin
|
|
*/
|
|
interface BelongsToManyRemoveAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The removeAssociation mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* removeRole: Sequelize.BelongsToManyRemoveAssociationMixin<RoleInstance, RoleId>;
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyRemoveAssociationMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Un-associate the instance.
|
|
* @param oldAssociated The instance or the primary key of the instance to un-associate.
|
|
* @param options The options passed to `through.destroy`.
|
|
*/
|
|
(
|
|
oldAssociated?: TInstance | TInstancePrimaryKey,
|
|
options?: BelongsToManyRemoveAssociationMixinOptions | InstanceDestroyOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the removeAssociations mixin of the belongsToMany association.
|
|
* @see BelongsToManyRemoveAssociationsMixin
|
|
*/
|
|
interface BelongsToManyRemoveAssociationsMixinOptions { }
|
|
|
|
/**
|
|
* The removeAssociations mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* removeRoles: Sequelize.BelongsToManyRemoveAssociationsMixin<RoleInstance, RoleId>;
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyRemoveAssociationsMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Un-associate several instances.
|
|
* @param oldAssociated An array of instances or primary key of instances to un-associate.
|
|
* @param options The options passed to `through.destroy`.
|
|
*/
|
|
(
|
|
oldAssociateds?: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: BelongsToManyRemoveAssociationsMixinOptions | InstanceDestroyOptions
|
|
): Promise<void>;
|
|
}
|
|
|
|
/**
|
|
* The options for the hasAssociation mixin of the belongsToMany association.
|
|
* @see BelongsToManyHasAssociationMixin
|
|
*/
|
|
interface BelongsToManyHasAssociationMixinOptions { }
|
|
|
|
/**
|
|
* The hasAssociation mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* hasRole: Sequelize.BelongsToManyHasAssociationMixin<RoleInstance, RoleId>;
|
|
* // hasRoles...
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyHasAssociationMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Check if an instance is associated with this.
|
|
* @param target The instance or the primary key of the instance to check.
|
|
* @param options The options passed to `getAssociations`.
|
|
*/
|
|
(
|
|
target: TInstance | TInstancePrimaryKey,
|
|
options?: BelongsToManyHasAssociationMixinOptions | BelongsToManyGetAssociationsMixinOptions
|
|
): Promise<boolean>;
|
|
}
|
|
|
|
/**
|
|
* The options for the hasAssociations mixin of the belongsToMany association.
|
|
* @see BelongsToManyHasAssociationsMixin
|
|
*/
|
|
interface BelongsToManyHasAssociationsMixinOptions { }
|
|
|
|
/**
|
|
* The removeAssociations mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles
|
|
* // hasRole...
|
|
* hasRoles: Sequelize.BelongsToManyHasAssociationsMixin<RoleInstance, RoleId>;
|
|
* // countRoles...
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyHasAssociationsMixin<TInstance, TInstancePrimaryKey> {
|
|
/**
|
|
* Check if all instances are associated with this.
|
|
* @param targets An array of instances or primary key of instances to check.
|
|
* @param options The options passed to `getAssociations`.
|
|
*/
|
|
(
|
|
targets: Array<TInstance | TInstancePrimaryKey>,
|
|
options?: BelongsToManyHasAssociationsMixinOptions | BelongsToManyGetAssociationsMixinOptions
|
|
): Promise<boolean>;
|
|
}
|
|
|
|
/**
|
|
* The options for the countAssociations mixin of the belongsToMany association.
|
|
* @see BelongsToManyCountAssociationsMixin
|
|
*/
|
|
interface BelongsToManyCountAssociationsMixinOptions {
|
|
|
|
/**
|
|
* An optional where clause to limit the associated models.
|
|
*/
|
|
where?: WhereOptions;
|
|
|
|
/**
|
|
* Apply a scope on the related model, or remove its default scope by passing false.
|
|
*/
|
|
scope?: string | boolean;
|
|
}
|
|
|
|
/**
|
|
* The countAssociations mixin applied to models with belongsToMany.
|
|
* An example of usage is as follows:
|
|
*
|
|
* ```js
|
|
*
|
|
* User.belongsToMany(Role, { through: UserRole });
|
|
*
|
|
* interface UserInstance extends Sequelize.Instance<UserInstance, UserAttributes>, UserAttributes {
|
|
* // getRoles...
|
|
* // setRoles...
|
|
* // addRoles...
|
|
* // addRole...
|
|
* // createRole...
|
|
* // removeRole...
|
|
* // removeRoles...
|
|
* // hasRole...
|
|
* // hasRoles...
|
|
* countRoles: Sequelize.BelongsToManyCountAssociationsMixin;
|
|
* }
|
|
* ```
|
|
*
|
|
* @see http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
|
|
* @see Instance
|
|
*/
|
|
interface BelongsToManyCountAssociationsMixin {
|
|
/**
|
|
* Count everything currently associated with this, using an optional where clause.
|
|
* @param options The options to use when counting the associations.
|
|
*/
|
|
(options?: BelongsToManyCountAssociationsMixinOptions): Promise<number>;
|
|
}
|
|
|
|
/**
|
|
* Foreign Key Options
|
|
*
|
|
* @see AssociationOptions
|
|
*/
|
|
interface AssociationForeignKeyOptions extends ColumnOptions {
|
|
|
|
/**
|
|
* Attribute name for the relation
|
|
*/
|
|
name? : string;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options provided when associating models
|
|
*
|
|
* @see Association class
|
|
*/
|
|
interface AssociationOptions {
|
|
|
|
/**
|
|
* Set to true to run before-/afterDestroy hooks when an associated model is deleted because of a cascade.
|
|
* For example if `User.hasOne(Profile, {onDelete: 'cascade', hooks:true})`, the before-/afterDestroy hooks
|
|
* for profile will be called when a user is deleted. Otherwise the profile will be deleted without invoking
|
|
* any hooks.
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
hooks?: boolean;
|
|
|
|
/**
|
|
* The alias of this model, in singular form. See also the `name` option passed to `sequelize.define`. If
|
|
* you create multiple associations between the same tables, you should provide an alias to be able to
|
|
* distinguish between them. If you provide an alias when creating the assocition, you should provide the
|
|
* same alias when eager loading and when getting assocated models. Defaults to the singularized name of
|
|
* target
|
|
*/
|
|
as?: string | { singular: string, plural: string };
|
|
|
|
/**
|
|
* The name of the foreign key in the target table or an object representing the type definition for the
|
|
* foreign column (see `Sequelize.define` for syntax). When using an object, you can add a `name` property
|
|
* to set the name of the column. Defaults to the name of source + primary key of source
|
|
*/
|
|
foreignKey?: string | AssociationForeignKeyOptions;
|
|
|
|
/**
|
|
* What happens when delete occurs.
|
|
*
|
|
* Cascade if this is a n:m, and set null if it is a 1:m
|
|
*
|
|
* Defaults to 'SET NULL' or 'CASCADE'
|
|
*/
|
|
onDelete?: string;
|
|
|
|
/**
|
|
* What happens when update occurs
|
|
*
|
|
* Defaults to 'CASCADE'
|
|
*/
|
|
onUpdate?: string;
|
|
|
|
/**
|
|
* Should on update and on delete constraints be enabled on the foreign key.
|
|
*/
|
|
constraints?: boolean;
|
|
foreignKeyConstraint?: boolean;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options for Association Scope
|
|
*
|
|
* @see AssociationOptionsManyToMany
|
|
*/
|
|
interface AssociationScope {
|
|
|
|
/**
|
|
* The name of the column that will be used for the associated scope and it's value
|
|
*/
|
|
[scopeName: string] : any;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options provided for many-to-many relationships
|
|
*
|
|
* @see AssociationOptionsHasMany
|
|
* @see AssociationOptionsBelongsToMany
|
|
*/
|
|
interface AssociationOptionsManyToMany extends AssociationOptions {
|
|
|
|
/**
|
|
* A key/value set that will be used for association create and find defaults on the target.
|
|
* (sqlite not supported for N:M)
|
|
*/
|
|
scope? : AssociationScope;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options provided when associating models with hasOne relationship
|
|
*
|
|
* @see Association class hasOne method
|
|
*/
|
|
interface AssociationOptionsHasOne extends AssociationOptions {
|
|
|
|
/**
|
|
* A string or a data type to represent the identifier in the table
|
|
*/
|
|
keyType?: DataTypeAbstract;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options provided when associating models with belongsTo relationship
|
|
*
|
|
* @see Association class belongsTo method
|
|
*/
|
|
interface AssociationOptionsBelongsTo extends AssociationOptions {
|
|
|
|
/**
|
|
* The name of the field to use as the key for the association in the target table. Defaults to the primary
|
|
* key of the target table
|
|
*/
|
|
targetKey? : string;
|
|
|
|
/**
|
|
* A string or a data type to represent the identifier in the table
|
|
*/
|
|
keyType?: DataTypeAbstract;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options provided when associating models with hasMany relationship
|
|
*
|
|
* @see Association class hasMany method
|
|
*/
|
|
interface AssociationOptionsHasMany extends AssociationOptionsManyToMany {
|
|
|
|
/**
|
|
* A string or a data type to represent the identifier in the table
|
|
*/
|
|
keyType?: DataTypeAbstract;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options provided when associating models with belongsToMany relationship
|
|
*
|
|
* @see Association class belongsToMany method
|
|
*/
|
|
interface AssociationOptionsBelongsToMany extends AssociationOptionsManyToMany {
|
|
|
|
/**
|
|
* The name of the table that is used to join source and target in n:m associations. Can also be a
|
|
* sequelize
|
|
* model if you want to define the junction table yourself and add extra attributes to it.
|
|
*
|
|
* In 3.4.1 version of Sequelize, hasMany's use of through gives an error, and on the other hand through
|
|
* option for belongsToMany has been made required.
|
|
*
|
|
* @see https://github.com/sequelize/sequelize/blob/v3.4.1/lib/associations/has-many.js
|
|
* @see https://github.com/sequelize/sequelize/blob/v3.4.1/lib/associations/belongs-to-many.js
|
|
*/
|
|
through : Model<any, any> | string | ThroughOptions;
|
|
|
|
/**
|
|
* The name of the foreign key in the join table (representing the target model) or an object representing
|
|
* the type definition for the other column (see `Sequelize.define` for syntax). When using an object, you
|
|
* can add a `name` property to set the name of the colum. Defaults to the name of target + primary key of
|
|
* target
|
|
*/
|
|
otherKey? : string | AssociationForeignKeyOptions;
|
|
|
|
}
|
|
|
|
/**
|
|
* Used for a association table in n:m associations.
|
|
*
|
|
* @see AssociationOptionsBelongsToMany
|
|
*/
|
|
interface ThroughOptions {
|
|
|
|
/**
|
|
* The model used to join both sides of the N:M association.
|
|
*/
|
|
model : Model<any, any>;
|
|
|
|
/**
|
|
* A key/value set that will be used for association create and find defaults on the through model.
|
|
* (Remember to add the attributes to the through model)
|
|
*/
|
|
scope? : AssociationScope;
|
|
|
|
/**
|
|
* If true a unique key will be generated from the foreign keys used (might want to turn this off and create
|
|
* specific unique keys when using scopes)
|
|
*
|
|
* Defaults to true
|
|
*/
|
|
unique? : boolean;
|
|
|
|
}
|
|
|
|
/**
|
|
* Creating assocations in sequelize is done by calling one of the belongsTo / hasOne / hasMany functions on a
|
|
* model (the source), and providing another model as the first argument to the function (the target).
|
|
*
|
|
* * hasOne - adds a foreign key to target
|
|
* * belongsTo - add a foreign key to source
|
|
* * hasMany - adds a foreign key to target, unless you also specify that target hasMany source, in which case
|
|
* a
|
|
* junction table is created with sourceId and targetId
|
|
*
|
|
* Creating an association will add a foreign key constraint to the attributes. All associations use `CASCADE`
|
|
* on update and `SET NULL` on delete, except for n:m, which also uses `CASCADE` on delete.
|
|
*
|
|
* When creating associations, you can provide an alias, via the `as` option. This is useful if the same model
|
|
* is associated twice, or you want your association to be called something other than the name of the target
|
|
* model.
|
|
*
|
|
* As an example, consider the case where users have many pictures, one of which is their profile picture. All
|
|
* pictures have a `userId`, but in addition the user model also has a `profilePictureId`, to be able to easily
|
|
* load the user's profile picture.
|
|
*
|
|
* ```js
|
|
* User.hasMany(Picture)
|
|
* User.belongsTo(Picture, { as: 'ProfilePicture', constraints: false })
|
|
*
|
|
* user.getPictures() // gets you all pictures
|
|
* user.getProfilePicture() // gets you only the profile picture
|
|
*
|
|
* User.findAll({
|
|
* where: ...,
|
|
* include: [
|
|
* { model: Picture }, // load all pictures
|
|
* { model: Picture, as: 'ProfilePicture' }, // load the profile picture. Notice that the spelling must be
|
|
* the exact same as the one in the association
|
|
* ]
|
|
* })
|
|
* ```
|
|
* To get full control over the foreign key column added by sequelize, you can use the `foreignKey` option. It
|
|
* can either be a string, that specifies the name, or and object type definition,
|
|
* equivalent to those passed to `sequelize.define`.
|
|
*
|
|
* ```js
|
|
* User.hasMany(Picture, { foreignKey: 'uid' })
|
|
* ```
|
|
*
|
|
* The foreign key column in Picture will now be called `uid` instead of the default `userId`.
|
|
*
|
|
* ```js
|
|
* User.hasMany(Picture, {
|
|
* foreignKey: {
|
|
* name: 'uid',
|
|
* allowNull: false
|
|
* }
|
|
* })
|
|
* ```
|
|
*
|
|
* This specifies that the `uid` column can not be null. In most cases this will already be covered by the
|
|
* foreign key costraints, which sequelize creates automatically, but can be useful in case where the foreign
|
|
* keys are disabled, e.g. due to circular references (see `constraints: false` below).
|
|
*
|
|
* When fetching associated models, you can limit your query to only load some models. These queries are
|
|
* written
|
|
* in the same way as queries to `find`/`findAll`. To only get pictures in JPG, you can do:
|
|
*
|
|
* ```js
|
|
* user.getPictures({
|
|
* where: {
|
|
* format: 'jpg'
|
|
* }
|
|
* })
|
|
* ```
|
|
*
|
|
* There are several ways to update and add new assoications. Continuing with our example of users and
|
|
* pictures:
|
|
* ```js
|
|
* user.addPicture(p) // Add a single picture
|
|
* user.setPictures([p1, p2]) // Associate user with ONLY these two picture, all other associations will be
|
|
* deleted user.addPictures([p1, p2]) // Associate user with these two pictures, but don't touch any current
|
|
* associations
|
|
* ```
|
|
*
|
|
* You don't have to pass in a complete object to the association functions, if your associated model has a
|
|
* single primary key:
|
|
*
|
|
* ```js
|
|
* user.addPicture(req.query.pid) // Here pid is just an integer, representing the primary key of the picture
|
|
* ```
|
|
*
|
|
* In the example above we have specified that a user belongs to his profile picture. Conceptually, this might
|
|
* not make sense, but since we want to add the foreign key to the user model this is the way to do it.
|
|
*
|
|
* Note how we also specified `constraints: false` for profile picture. This is because we add a foreign key
|
|
* from user to picture (profilePictureId), and from picture to user (userId). If we were to add foreign keys
|
|
* to both, it would create a cyclic dependency, and sequelize would not know which table to create first,
|
|
* since user depends on picture, and picture depends on user. These kinds of problems are detected by
|
|
* sequelize before the models are synced to the database, and you will get an error along the lines of `Error:
|
|
* Cyclic dependency found. 'users' is dependent of itself`. If you encounter this, you should either disable
|
|
* some constraints, or rethink your associations completely.
|
|
*
|
|
* @see Sequelize.Model
|
|
*/
|
|
interface Associations {
|
|
|
|
/**
|
|
* Creates an association between this (the source) and the provided target. The foreign key is added
|
|
* on the target.
|
|
*
|
|
* Example: `User.hasOne(Profile)`. This will add userId to the profile table.
|
|
*
|
|
* @param target The model that will be associated with hasOne relationship
|
|
* @param options Options for the association
|
|
*/
|
|
hasOne( target : Model<any, any>, options? : AssociationOptionsHasOne ): void;
|
|
|
|
/**
|
|
* Creates an association between this (the source) and the provided target. The foreign key is added on the
|
|
* source.
|
|
*
|
|
* Example: `Profile.belongsTo(User)`. This will add userId to the profile table.
|
|
*
|
|
* @param target The model that will be associated with hasOne relationship
|
|
* @param options Options for the association
|
|
*/
|
|
belongsTo( target : Model<any, any>, options? : AssociationOptionsBelongsTo ) : void;
|
|
|
|
/**
|
|
* Create an association that is either 1:m or n:m.
|
|
*
|
|
* ```js
|
|
* // Create a 1:m association between user and project
|
|
* User.hasMany(Project)
|
|
* ```
|
|
* ```js
|
|
* // Create a n:m association between user and project
|
|
* User.hasMany(Project)
|
|
* Project.hasMany(User)
|
|
* ```
|
|
* By default, the name of the join table will be source+target, so in this case projectsusers. This can be
|
|
* overridden by providing either a string or a Model as `through` in the options. If you use a through
|
|
* model with custom attributes, these attributes can be set when adding / setting new associations in two
|
|
* ways. Consider users and projects from before with a join table that stores whether the project has been
|
|
* started yet:
|
|
* ```js
|
|
* var UserProjects = sequelize.define('userprojects', {
|
|
* started: Sequelize.BOOLEAN
|
|
* })
|
|
* User.hasMany(Project, { through: UserProjects })
|
|
* Project.hasMany(User, { through: UserProjects })
|
|
* ```
|
|
* ```js
|
|
* jan.addProject(homework, { started: false }) // The homework project is not started yet
|
|
* jan.setProjects([makedinner, doshopping], { started: true}) // Both shopping and dinner have been
|
|
* started
|
|
* ```
|
|
*
|
|
* If you want to set several target instances, but with different attributes you have to set the
|
|
* attributes on the instance, using a property with the name of the through model:
|
|
*
|
|
* ```js
|
|
* p1.userprojects {
|
|
* started: true
|
|
* }
|
|
* user.setProjects([p1, p2], {started: false}) // The default value is false, but p1 overrides that.
|
|
* ```
|
|
*
|
|
* Similarily, when fetching through a join table with custom attributes, these attributes will be
|
|
* available as an object with the name of the through model.
|
|
* ```js
|
|
* user.getProjects().then(function (projects) {
|
|
* var p1 = projects[0]
|
|
* p1.userprojects.started // Is this project started yet?
|
|
* })
|
|
* ```
|
|
*
|
|
* @param target The model that will be associated with hasOne relationship
|
|
* @param options Options for the association
|
|
*/
|
|
hasMany( target : Model<any, any>, options? : AssociationOptionsHasMany ) : void;
|
|
|
|
/**
|
|
* Create an N:M association with a join table
|
|
*
|
|
* ```js
|
|
* User.belongsToMany(Project)
|
|
* Project.belongsToMany(User)
|
|
* ```
|
|
* By default, the name of the join table will be source+target, so in this case projectsusers. This can be
|
|
* overridden by providing either a string or a Model as `through` in the options.
|
|
*
|
|
* If you use a through model with custom attributes, these attributes can be set when adding / setting new
|
|
* associations in two ways. Consider users and projects from before with a join table that stores whether
|
|
* the project has been started yet:
|
|
* ```js
|
|
* var UserProjects = sequelize.define('userprojects', {
|
|
* started: Sequelize.BOOLEAN
|
|
* })
|
|
* User.belongsToMany(Project, { through: UserProjects })
|
|
* Project.belongsToMany(User, { through: UserProjects })
|
|
* ```
|
|
* ```js
|
|
* jan.addProject(homework, { started: false }) // The homework project is not started yet
|
|
* jan.setProjects([makedinner, doshopping], { started: true}) // Both shopping and dinner has been started
|
|
* ```
|
|
*
|
|
* If you want to set several target instances, but with different attributes you have to set the
|
|
* attributes on the instance, using a property with the name of the through model:
|
|
*
|
|
* ```js
|
|
* p1.userprojects {
|
|
* started: true
|
|
* }
|
|
* user.setProjects([p1, p2], {started: false}) // The default value is false, but p1 overrides that.
|
|
* ```
|
|
*
|
|
* Similarily, when fetching through a join table with custom attributes, these attributes will be
|
|
* available as an object with the name of the through model.
|
|
* ```js
|
|
* user.getProjects().then(function (projects) {
|
|
* var p1 = projects[0]
|
|
* p1.userprojects.started // Is this project started yet?
|
|
* })
|
|
* ```
|
|
*
|
|
* @param target The model that will be associated with hasOne relationship
|
|
* @param options Options for the association
|
|
*
|
|
*/
|
|
belongsToMany( target : Model<any, any>, options : AssociationOptionsBelongsToMany ) : void;
|
|
|
|
}
|
|
|
|
//
|
|
// DataTypes
|
|
// ~~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/data-types.js
|
|
//
|
|
|
|
/**
|
|
* Abstract DataType interface. Use this if you want to create an interface that has a value any of the
|
|
* DataTypes that Sequelize supports.
|
|
*/
|
|
interface DataTypeAbstract {
|
|
|
|
/**
|
|
* Although this is not needed for the definitions itself, we want to make sure that DataTypeAbstract is not
|
|
* something than can be evaluated to an empty object.
|
|
*/
|
|
dialectTypes : string;
|
|
|
|
}
|
|
|
|
interface DataTypeAbstractString<T> extends DataTypeAbstract {
|
|
|
|
/**
|
|
* A variable length string. Default length 255
|
|
*/
|
|
( options? : { length: number } ) : T;
|
|
( length : number ) : T;
|
|
|
|
/**
|
|
* Property BINARY for the type
|
|
*/
|
|
BINARY : T;
|
|
|
|
}
|
|
|
|
interface DataTypeString extends DataTypeAbstractString<DataTypeString> { }
|
|
|
|
interface DataTypeChar extends DataTypeAbstractString<DataTypeChar> { }
|
|
|
|
interface DataTypeText extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Length of the text field.
|
|
*
|
|
* Available lengths: `tiny`, `medium`, `long`
|
|
*/
|
|
( options? : { length: string } ) : DataTypeText;
|
|
( length : string ) : DataTypeText;
|
|
|
|
}
|
|
|
|
interface DataTypeAbstractNumber<T> extends DataTypeAbstract {
|
|
UNSIGNED : T;
|
|
ZEROFILL : T;
|
|
}
|
|
|
|
interface DataTypeNumber extends DataTypeAbstractNumber<DataTypeNumber> { }
|
|
|
|
interface DataTypeInteger extends DataTypeAbstractNumber<DataTypeInteger> {
|
|
|
|
/**
|
|
* Length of the number field.
|
|
*/
|
|
( options? : { length: number } ) : DataTypeInteger;
|
|
( length : number ) : DataTypeInteger;
|
|
|
|
}
|
|
|
|
interface DataTypeBigInt extends DataTypeAbstractNumber<DataTypeBigInt> {
|
|
|
|
/**
|
|
* Length of the number field.
|
|
*/
|
|
( options? : { length: number } ) : DataTypeBigInt;
|
|
( length : number ) : DataTypeBigInt;
|
|
|
|
}
|
|
|
|
interface DataTypeFloat extends DataTypeAbstractNumber<DataTypeFloat> {
|
|
|
|
/**
|
|
* Length of the number field and decimals of the float
|
|
*/
|
|
( options? : { length: number, decimals?: number } ) : DataTypeFloat;
|
|
( length : number, decimals? : number ) : DataTypeFloat;
|
|
|
|
}
|
|
|
|
interface DataTypeReal extends DataTypeAbstractNumber<DataTypeReal> {
|
|
|
|
/**
|
|
* Length of the number field and decimals of the real
|
|
*/
|
|
( options? : { length: number, decimals?: number } ) : DataTypeReal;
|
|
( length : number, decimals? : number ) : DataTypeReal;
|
|
|
|
}
|
|
|
|
interface DataTypeDouble extends DataTypeAbstractNumber<DataTypeDouble> {
|
|
|
|
/**
|
|
* Length of the number field and decimals of the real
|
|
*/
|
|
( options? : { length: number, decimals?: number } ) : DataTypeDouble;
|
|
( length : number, decimals? : number ) : DataTypeDouble;
|
|
|
|
}
|
|
|
|
interface DataTypeDecimal extends DataTypeAbstractNumber<DataTypeDecimal> {
|
|
|
|
/**
|
|
* Precision and scale for the decimal number
|
|
*/
|
|
( options? : { precision: number, scale?: number } ) : DataTypeDecimal;
|
|
( precision : number, scale? : number ) : DataTypeDecimal;
|
|
|
|
}
|
|
|
|
interface DataTypeBoolean extends DataTypeAbstract { }
|
|
|
|
interface DataTypeTime extends DataTypeAbstract { }
|
|
|
|
interface DataTypeDate extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Length of decimal places of time
|
|
*/
|
|
( options? : { length?: number } ) : DataTypeDate;
|
|
( length? : number) : DataTypeDate;
|
|
|
|
}
|
|
|
|
interface DataTypeDateOnly extends DataTypeAbstract { }
|
|
|
|
interface DataTypeHStore extends DataTypeAbstract { }
|
|
|
|
interface DataTypeJSONType extends DataTypeAbstract { }
|
|
|
|
interface DataTypeJSONB extends DataTypeAbstract { }
|
|
|
|
interface DataTypeNow extends DataTypeAbstract { }
|
|
|
|
interface DataTypeBlob extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Length of the blob field.
|
|
*
|
|
* Available lengths: `tiny`, `medium`, `long`
|
|
*/
|
|
( options? : { length: string } ) : DataTypeBlob;
|
|
( length : string ) : DataTypeBlob;
|
|
|
|
}
|
|
|
|
interface DataTypeRange extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Range field for Postgre
|
|
*
|
|
* Accepts subtype any of the ranges
|
|
*/
|
|
( options? : { subtype: DataTypeAbstract } ) : DataTypeRange;
|
|
( subtype : DataTypeAbstract ) : DataTypeRange;
|
|
|
|
}
|
|
|
|
interface DataTypeUUID extends DataTypeAbstract { }
|
|
|
|
interface DataTypeUUIDv1 extends DataTypeAbstract { }
|
|
|
|
interface DataTypeUUIDv4 extends DataTypeAbstract { }
|
|
|
|
interface DataTypeVirtual extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Virtual field
|
|
*
|
|
* Accepts subtype any of the DataTypes
|
|
* Array of required attributes that are available on the model
|
|
*/
|
|
new( subtype : DataTypeAbstract, requireAttributes? : Array<string> ) : DataTypeVirtual;
|
|
}
|
|
|
|
interface DataTypeEnum extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Enum field
|
|
*
|
|
* Accepts values
|
|
*/
|
|
( options? : { values: string | string[] } ) : DataTypeEnum;
|
|
( values : string | string[] ) : DataTypeEnum;
|
|
( ...args : string[] ) : DataTypeEnum;
|
|
|
|
}
|
|
|
|
interface DataTypeArray extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Array field for Postgre
|
|
*
|
|
* Accepts type any of the DataTypes
|
|
*/
|
|
( options : { type: DataTypeAbstract } ) : DataTypeArray;
|
|
( type : DataTypeAbstract ) : DataTypeArray;
|
|
|
|
}
|
|
|
|
interface DataTypeGeometry extends DataTypeAbstract {
|
|
|
|
/**
|
|
* Geometry field for Postgres
|
|
*/
|
|
( type : string, srid? : number ) : DataTypeGeometry;
|
|
|
|
}
|
|
|
|
/**
|
|
* A convenience class holding commonly used data types. The datatypes are used when definining a new model
|
|
* using
|
|
* `Sequelize.define`, like this:
|
|
*
|
|
* ```js
|
|
* sequelize.define('model', {
|
|
* column: DataTypes.INTEGER
|
|
* })
|
|
* ```
|
|
* When defining a model you can just as easily pass a string as type, but often using the types defined here
|
|
* is
|
|
* beneficial. For example, using `DataTypes.BLOB`, mean that that column will be returned as an instance of
|
|
* `Buffer` when being fetched by sequelize.
|
|
*
|
|
* Some data types have special properties that can be accessed in order to change the data type.
|
|
* For example, to get an unsigned integer with zerofill you can do `DataTypes.INTEGER.UNSIGNED.ZEROFILL`.
|
|
* The order you access the properties in do not matter, so `DataTypes.INTEGER.ZEROFILL.UNSIGNED` is fine as
|
|
* well. The available properties are listed under each data type.
|
|
*
|
|
* To provide a length for the data type, you can invoke it like a function: `INTEGER(2)`
|
|
*
|
|
* Three of the values provided here (`NOW`, `UUIDV1` and `UUIDV4`) are special default values, that should not
|
|
* be used to define types. Instead they are used as shorthands for defining default values. For example, to
|
|
* get a uuid field with a default value generated following v1 of the UUID standard:
|
|
*
|
|
* ```js
|
|
* sequelize.define('model', {
|
|
* uuid: {
|
|
* type: DataTypes.UUID,
|
|
* defaultValue: DataTypes.UUIDV1,
|
|
* primaryKey: true
|
|
* }
|
|
* })
|
|
* ```
|
|
*/
|
|
interface DataTypes {
|
|
ABSTRACT : DataTypeAbstract;
|
|
STRING : DataTypeString;
|
|
CHAR : DataTypeChar;
|
|
TEXT : DataTypeText;
|
|
NUMBER : DataTypeNumber;
|
|
INTEGER : DataTypeInteger;
|
|
BIGINT : DataTypeBigInt;
|
|
FLOAT : DataTypeFloat;
|
|
TIME : DataTypeTime;
|
|
DATE : DataTypeDate;
|
|
DATEONLY: DataTypeDateOnly;
|
|
BOOLEAN: DataTypeBoolean;
|
|
NOW: DataTypeNow;
|
|
BLOB: DataTypeBlob;
|
|
DECIMAL: DataTypeDecimal;
|
|
NUMERIC: DataTypeDecimal;
|
|
UUID: DataTypeUUID;
|
|
UUIDV1: DataTypeUUIDv1;
|
|
UUIDV4: DataTypeUUIDv4;
|
|
HSTORE: DataTypeHStore;
|
|
JSON: DataTypeJSONType;
|
|
JSONB: DataTypeJSONB;
|
|
VIRTUAL: DataTypeVirtual;
|
|
ARRAY: DataTypeArray;
|
|
NONE: DataTypeVirtual;
|
|
ENUM: DataTypeEnum;
|
|
RANGE: DataTypeRange;
|
|
REAL: DataTypeReal;
|
|
DOUBLE: DataTypeDouble;
|
|
"DOUBLE PRECISION": DataTypeDouble;
|
|
GEOMETRY: DataTypeGeometry;
|
|
}
|
|
|
|
//
|
|
// Deferrable
|
|
// ~~~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/deferrable.js
|
|
//
|
|
|
|
/**
|
|
* Abstract Deferrable interface. Use this if you want to create an interface that has a value any of the
|
|
* Deferrables that Sequelize supports.
|
|
*/
|
|
interface DeferrableAbstract {
|
|
|
|
/**
|
|
* Although this is not needed for the definitions itself, we want to make sure that DeferrableAbstract is
|
|
* not something than can be evaluated to an empty object.
|
|
*/
|
|
toString() : string;
|
|
toSql() : string;
|
|
|
|
}
|
|
|
|
interface DeferrableInitiallyDeferred extends DeferrableAbstract {
|
|
|
|
/**
|
|
* A property that will defer constraints checks to the end of transactions.
|
|
*/
|
|
() : DeferrableInitiallyDeferred;
|
|
|
|
}
|
|
|
|
interface DeferrableInitiallyImmediate extends DeferrableAbstract {
|
|
|
|
/**
|
|
* A property that will trigger the constraint checks immediately
|
|
*/
|
|
() : DeferrableInitiallyImmediate;
|
|
|
|
}
|
|
|
|
interface DeferrableNot extends DeferrableAbstract {
|
|
|
|
/**
|
|
* A property that will set the constraints to not deferred. This is the default in PostgreSQL and it make
|
|
* it impossible to dynamically defer the constraints within a transaction.
|
|
*/
|
|
() : DeferrableNot;
|
|
|
|
}
|
|
|
|
interface DeferrableSetDeferred extends DeferrableAbstract {
|
|
|
|
/**
|
|
* A property that will trigger an additional query at the beginning of a
|
|
* transaction which sets the constraints to deferred.
|
|
*
|
|
* @param constraints An array of constraint names. Will defer all constraints by default.
|
|
*/
|
|
( constraints : string[] ) : DeferrableSetDeferred;
|
|
|
|
}
|
|
|
|
interface DeferrableSetImmediate extends DeferrableAbstract {
|
|
|
|
/**
|
|
* A property that will trigger an additional query at the beginning of a
|
|
* transaction which sets the constraints to immediately.
|
|
*
|
|
* @param constraints An array of constraint names. Will defer all constraints by default.
|
|
*/
|
|
( constraints : string[] ) : DeferrableSetImmediate;
|
|
|
|
}
|
|
|
|
/**
|
|
* A collection of properties related to deferrable constraints. It can be used to
|
|
* make foreign key constraints deferrable and to set the constaints within a
|
|
* transaction. This is only supported in PostgreSQL.
|
|
*
|
|
* The foreign keys can be configured like this. It will create a foreign key
|
|
* that will check the constraints immediately when the data was inserted.
|
|
*
|
|
* ```js
|
|
* sequelize.define('Model', {
|
|
* foreign_id: {
|
|
* type: Sequelize.INTEGER,
|
|
* references: {
|
|
* model: OtherModel,
|
|
* key: 'id',
|
|
* deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE
|
|
* }
|
|
* }
|
|
* });
|
|
* ```
|
|
*
|
|
* The constraints can be configured in a transaction like this. It will
|
|
* trigger a query once the transaction has been started and set the constraints
|
|
* to be checked at the very end of the transaction.
|
|
*
|
|
* ```js
|
|
* sequelize.transaction({
|
|
* deferrable: Sequelize.Deferrable.SET_DEFERRED
|
|
* });
|
|
* ```
|
|
*/
|
|
interface Deferrable {
|
|
INITIALLY_DEFERRED: DeferrableInitiallyDeferred;
|
|
INITIALLY_IMMEDIATE: DeferrableInitiallyImmediate;
|
|
NOT: DeferrableNot;
|
|
SET_DEFERRED: DeferrableSetDeferred;
|
|
SET_IMMEDIATE: DeferrableSetImmediate;
|
|
}
|
|
|
|
//
|
|
// Errors
|
|
// ~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/errors.js
|
|
//
|
|
|
|
/**
|
|
* The Base Error all Sequelize Errors inherit from.
|
|
*/
|
|
interface BaseError extends Error, ErrorConstructor { }
|
|
|
|
interface ValidationError extends BaseError {
|
|
|
|
/**
|
|
* Validation Error. Thrown when the sequelize validation has failed. The error contains an `errors`
|
|
* property, which is an array with 1 or more ValidationErrorItems, one for each validation that failed.
|
|
*
|
|
* @param message Error message
|
|
* @param errors Array of ValidationErrorItem objects describing the validation errors
|
|
*/
|
|
new ( message : string, errors? : ValidationErrorItem[] ) : ValidationError;
|
|
|
|
/**
|
|
* Gets all validation error items for the path / field specified.
|
|
*
|
|
* @param path The path to be checked for error items
|
|
*/
|
|
get( path : string ) : ValidationErrorItem[];
|
|
|
|
/** Array of ValidationErrorItem objects describing the validation errors */
|
|
errors : ValidationErrorItem[];
|
|
|
|
}
|
|
|
|
interface ValidationErrorItem extends BaseError {
|
|
|
|
/**
|
|
* Validation Error Item
|
|
* Instances of this class are included in the `ValidationError.errors` property.
|
|
*
|
|
* @param message An error message
|
|
* @param type The type of the validation error
|
|
* @param path The field that triggered the validation error
|
|
* @param value The value that generated the error
|
|
*/
|
|
new ( message : string, type : string, path : string, value : string ) : ValidationErrorItem;
|
|
|
|
/** An error message */
|
|
message : string;
|
|
|
|
/** The type of the validation error */
|
|
type : string;
|
|
|
|
/** The field that triggered the validation error */
|
|
path : string;
|
|
|
|
/** The value that generated the error */
|
|
value : string;
|
|
|
|
}
|
|
|
|
interface DatabaseError extends BaseError {
|
|
|
|
/**
|
|
* A base class for all database related errors.
|
|
*/
|
|
new ( parent : Error ) : DatabaseError;
|
|
|
|
}
|
|
|
|
interface TimeoutError extends DatabaseError {
|
|
|
|
/**
|
|
* Thrown when a database query times out because of a deadlock
|
|
*/
|
|
new ( parent : Error ) : TimeoutError;
|
|
|
|
}
|
|
|
|
interface UniqueConstraintError extends DatabaseError {
|
|
|
|
/**
|
|
* Thrown when a unique constraint is violated in the database
|
|
*/
|
|
new ( options : { parent? : Error, message? : string, errors? : Object } ) : UniqueConstraintError;
|
|
|
|
}
|
|
|
|
interface ForeignKeyConstraintError extends DatabaseError {
|
|
|
|
/**
|
|
* Thrown when a foreign key constraint is violated in the database
|
|
*/
|
|
new ( options : { parent? : Error, message? : string, index? : string, fields? : string[], table? : string } ) : ForeignKeyConstraintError;
|
|
|
|
}
|
|
|
|
interface ExclusionConstraintError extends DatabaseError {
|
|
|
|
/**
|
|
* Thrown when an exclusion constraint is violated in the database
|
|
*/
|
|
new ( options : { parent? : Error, message? : string, constraint? : string, fields? : string[], table? : string } ) : ExclusionConstraintError;
|
|
|
|
}
|
|
|
|
interface ConnectionError extends BaseError {
|
|
|
|
/**
|
|
* A base class for all connection related errors.
|
|
*/
|
|
new ( parent : Error ) : ConnectionError;
|
|
|
|
}
|
|
|
|
interface ConnectionRefusedError extends ConnectionError {
|
|
|
|
/**
|
|
* Thrown when a connection to a database is refused
|
|
*/
|
|
new ( parent : Error ) : ConnectionRefusedError;
|
|
|
|
}
|
|
|
|
interface AccessDeniedError extends ConnectionError {
|
|
|
|
/**
|
|
* Thrown when a connection to a database is refused due to insufficient privileges
|
|
*/
|
|
new ( parent : Error ) : AccessDeniedError;
|
|
|
|
}
|
|
|
|
interface HostNotFoundError extends ConnectionError {
|
|
|
|
/**
|
|
* Thrown when a connection to a database has a hostname that was not found
|
|
*/
|
|
new ( parent : Error ) : HostNotFoundError;
|
|
|
|
}
|
|
|
|
interface HostNotReachableError extends ConnectionError {
|
|
|
|
/**
|
|
* Thrown when a connection to a database has a hostname that was not reachable
|
|
*/
|
|
new ( parent : Error ) : HostNotReachableError;
|
|
|
|
}
|
|
|
|
interface InvalidConnectionError extends ConnectionError {
|
|
|
|
/**
|
|
* Thrown when a connection to a database has invalid values for any of the connection parameters
|
|
*/
|
|
new ( parent : Error ) : InvalidConnectionError;
|
|
|
|
}
|
|
|
|
interface ConnectionTimedOutError extends ConnectionError {
|
|
|
|
/**
|
|
* Thrown when a connection to a database times out
|
|
*/
|
|
new ( parent : Error ) : ConnectionTimedOutError;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sequelize provides a host of custom error classes, to allow you to do easier debugging. All of these errors
|
|
* are exposed on the sequelize object and the sequelize constructor. All sequelize errors inherit from the
|
|
* base JS error object.
|
|
*/
|
|
interface Errors {
|
|
Error : BaseError;
|
|
ValidationError : ValidationError;
|
|
ValidationErrorItem : ValidationErrorItem;
|
|
DatabaseError : DatabaseError;
|
|
TimeoutError : TimeoutError;
|
|
UniqueConstraintError : UniqueConstraintError;
|
|
ExclusionConstraintError : ExclusionConstraintError;
|
|
ForeignKeyConstraintError : ForeignKeyConstraintError;
|
|
ConnectionError : ConnectionError;
|
|
ConnectionRefusedError : ConnectionRefusedError;
|
|
AccessDeniedError : AccessDeniedError;
|
|
HostNotFoundError : HostNotFoundError;
|
|
HostNotReachableError : HostNotReachableError;
|
|
InvalidConnectionError : InvalidConnectionError;
|
|
ConnectionTimedOutError : ConnectionTimedOutError;
|
|
}
|
|
|
|
//
|
|
// Hooks
|
|
// ~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/hooks.js
|
|
//
|
|
|
|
/**
|
|
* Options for Sequelize.define. We mostly duplicate the Hooks here, since there is no way to combine the two
|
|
* interfaces.
|
|
*
|
|
* beforeValidate, afterValidate, beforeBulkCreate, beforeBulkDestroy, beforeBulkUpdate, beforeCreate,
|
|
* beforeDestroy, beforeUpdate, afterCreate, afterDestroy, afterUpdate, afterBulkCreate, afterBulkDestroy and
|
|
* afterBulkUpdate.
|
|
*/
|
|
interface HooksDefineOptions<TInstance> {
|
|
|
|
beforeValidate? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
afterValidate? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
beforeCreate? : ( attributes : TInstance, options : Object, fn? : Function ) => any;
|
|
afterCreate? : ( attributes : TInstance, options : Object, fn? : Function ) => any;
|
|
beforeDestroy? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
beforeDelete? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
afterDestroy? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
afterDelete? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
beforeUpdate? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
afterUpdate? : ( instance : TInstance, options : Object, fn? : Function ) => any;
|
|
beforeBulkCreate? : ( instances : TInstance[], options : Object, fn? : Function ) => any;
|
|
afterBulkCreate? : ( instances : TInstance[], options : Object, fn? : Function ) => any;
|
|
beforeBulkDestroy? : ( options : Object, fn? : Function ) => any;
|
|
beforeBulkDelete? : ( options : Object, fn? : Function ) => any;
|
|
afterBulkDestroy? : ( options : Object, fn? : Function ) => any;
|
|
afterBulkDelete? : ( options : Object, fn? : Function ) => any;
|
|
beforeBulkUpdate? : ( options : Object, fn? : Function ) => any;
|
|
afterBulkUpdate? : ( options : Object, fn? : Function ) => any;
|
|
beforeFind? : ( options : Object, fn? : Function ) => any;
|
|
beforeFindAfterExpandIncludeAll? : ( options : Object, fn? : Function ) => any;
|
|
beforeFindAfterOptions? : ( options : Object, fn? : Function ) => any;
|
|
afterFind? : ( instancesOrInstance : TInstance[] | TInstance, options : Object,
|
|
fn? : Function ) => any;
|
|
|
|
}
|
|
|
|
/**
|
|
* Hooks are function that are called before and after (bulk-) creation/updating/deletion and validation.
|
|
* Hooks can be added to you models in three ways:
|
|
*
|
|
* 1. By specifying them as options in `sequelize.define`
|
|
* 2. By calling `hook()` with a string and your hook handler function
|
|
* 3. By calling the function with the same name as the hook you want
|
|
*
|
|
* ```js
|
|
* // Method 1
|
|
* sequelize.define(name, { attributes }, {
|
|
* hooks: {
|
|
* beforeBulkCreate: function () {
|
|
* // can be a single function
|
|
* },
|
|
* beforeValidate: [
|
|
* function () {},
|
|
* function() {} // Or an array of several
|
|
* ]
|
|
* }
|
|
* })
|
|
*
|
|
* // Method 2
|
|
* Model.hook('afterDestroy', function () {})
|
|
*
|
|
* // Method 3
|
|
* Model.afterBulkUpdate(function () {})
|
|
* ```
|
|
*
|
|
* @see Sequelize.define
|
|
*/
|
|
interface Hooks<TInstance> {
|
|
|
|
/**
|
|
* Add a hook to the model
|
|
*
|
|
* @param hookType
|
|
* @param name Provide a name for the hook function. It can be used to remove the hook later or to order
|
|
* hooks based on some sort of priority system in the future.
|
|
* @param fn The hook function
|
|
*
|
|
* @alias hook
|
|
*/
|
|
addHook( hookType : string, name : string, fn : Function ) : Hooks<TInstance>;
|
|
addHook( hookType : string, fn : Function ) : Hooks<TInstance>;
|
|
hook( hookType : string, name : string, fn : Function ) : Hooks<TInstance>;
|
|
hook( hookType : string, fn : Function ) : Hooks<TInstance>;
|
|
|
|
/**
|
|
* Remove hook from the model
|
|
*
|
|
* @param hookType
|
|
* @param name
|
|
*/
|
|
removeHook( hookType : string, name : string ) : Hooks<TInstance>;
|
|
|
|
/**
|
|
* Check whether the mode has any hooks of this type
|
|
*
|
|
* @param hookType
|
|
*
|
|
* @alias hasHooks
|
|
*/
|
|
hasHook( hookType : string ) : boolean;
|
|
hasHooks( hookType : string ) : boolean;
|
|
|
|
/**
|
|
* A hook that is run before validation
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instance, options
|
|
*/
|
|
beforeValidate( name : string,
|
|
fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
beforeValidate( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after validation
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instance, options
|
|
*/
|
|
afterValidate( name : string,
|
|
fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
afterValidate( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before creating a single instance
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with attributes, options
|
|
*/
|
|
beforeCreate( name : string,
|
|
fn : ( attributes : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
beforeCreate( fn : ( attributes : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after creating a single instance
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with attributes, options
|
|
*/
|
|
afterCreate( name : string,
|
|
fn : ( attributes : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
afterCreate( fn : ( attributes : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before destroying a single instance
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instance, options
|
|
* @alias beforeDelete
|
|
*/
|
|
beforeDestroy( name : string,
|
|
fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
beforeDestroy( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
beforeDelete( name : string,
|
|
fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
beforeDelete( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after destroying a single instance
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instance, options
|
|
* @alias afterDelete
|
|
*/
|
|
afterDestroy( name : string,
|
|
fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
afterDestroy( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
afterDelete( name : string, fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
afterDelete( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before updating a single instance
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instance, options
|
|
*/
|
|
beforeUpdate( name : string,
|
|
fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
beforeUpdate( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after updating a single instance
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instance, options
|
|
*/
|
|
afterUpdate( name : string, fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
afterUpdate( fn : ( instance : TInstance, options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before creating instances in bulk
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instances, options
|
|
*/
|
|
beforeBulkCreate( name : string,
|
|
fn : ( instances : TInstance[], options : Object, fn? : Function ) => void ): void;
|
|
beforeBulkCreate( fn : ( instances : TInstance[], options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after creating instances in bulk
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instances, options
|
|
* @name afterBulkCreate
|
|
*/
|
|
afterBulkCreate( name : string,
|
|
fn : ( instances : TInstance[], options : Object, fn? : Function ) => void ): void;
|
|
afterBulkCreate( fn : ( instances : TInstance[], options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before destroying instances in bulk
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with options
|
|
*
|
|
* @alias beforeBulkDelete
|
|
*/
|
|
beforeBulkDestroy( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
beforeBulkDestroy( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
beforeBulkDelete( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
beforeBulkDelete( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after destroying instances in bulk
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with options
|
|
*
|
|
* @alias afterBulkDelete
|
|
*/
|
|
afterBulkDestroy( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
afterBulkDestroy( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
afterBulkDelete( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
afterBulkDelete( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after updating instances in bulk
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with options
|
|
*/
|
|
beforeBulkUpdate( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
beforeBulkUpdate( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after updating instances in bulk
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with options
|
|
*/
|
|
afterBulkUpdate( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
afterBulkUpdate( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before a find (select) query
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with options
|
|
*/
|
|
beforeFind( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
beforeFind( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before a find (select) query, after any { include: {all: ...} } options are expanded
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with options
|
|
*/
|
|
beforeFindAfterExpandIncludeAll( name : string,
|
|
fn : ( options : Object, fn? : Function ) => void ): void;
|
|
beforeFindAfterExpandIncludeAll( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before a find (select) query, after all option parsing is complete
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with options
|
|
*/
|
|
beforeFindAfterOptions( name : string, fn : ( options : Object, fn? : Function ) => void ): void;
|
|
beforeFindAfterOptions( fn : ( options : Object, fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after a find (select) query
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with instance(s), options
|
|
*/
|
|
afterFind( name : string,
|
|
fn : ( instancesOrInstance : TInstance[] | TInstance, options : Object,
|
|
fn? : Function ) => void ): void;
|
|
afterFind( fn : ( instancesOrInstance : TInstance[] | TInstance, options : Object,
|
|
fn? : Function ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before a define call
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with attributes, options
|
|
*/
|
|
beforeDefine( name : string, fn : ( attributes : DefineAttributes, options : Object ) => void ): void;
|
|
beforeDefine( fn : ( attributes : DefineAttributes, options : Object ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after a define call
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with factory
|
|
*/
|
|
afterDefine( name : string, fn : ( model : Model<TInstance, any> ) => void ): void;
|
|
afterDefine( fn : ( model : Model<TInstance, any> ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run before Sequelize() call
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with config, options
|
|
*/
|
|
beforeInit( name : string, fn : ( config : Object, options : Object ) => void ): void;
|
|
beforeInit( fn : ( config : Object, options : Object ) => void ): void;
|
|
|
|
/**
|
|
* A hook that is run after Sequelize() call
|
|
*
|
|
* @param name
|
|
* @param fn A callback function that is called with sequelize
|
|
*/
|
|
afterInit( name : string, fn : ( sequelize : Sequelize ) => void ): void;
|
|
afterInit( fn : ( sequelize : Sequelize ) => void ): void;
|
|
|
|
}
|
|
|
|
//
|
|
// Instance
|
|
// ~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/instance.js
|
|
//
|
|
|
|
/**
|
|
* Options used for Instance.increment method
|
|
*/
|
|
interface InstanceIncrementDecrementOptions {
|
|
|
|
/**
|
|
* The number to increment by
|
|
*
|
|
* Defaults to 1
|
|
*/
|
|
by? : number;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
/**
|
|
* A hash of attributes to describe your search. See above for examples.
|
|
*/
|
|
where? : WhereOptions | Array<col | and | or | string>;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Instance.restore method
|
|
*/
|
|
interface InstanceRestoreOptions {
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Instance.destroy method
|
|
*/
|
|
interface InstanceDestroyOptions {
|
|
|
|
/**
|
|
* If set to true, paranoid models will actually be deleted
|
|
*/
|
|
force? : boolean;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* Transaction to run the query in
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Instance.update method
|
|
*/
|
|
interface InstanceUpdateOptions extends InstanceSaveOptions, InstanceSetOptions {
|
|
|
|
/**
|
|
* A hash of attributes to describe your search. See above for examples.
|
|
*/
|
|
where? : WhereOptions | Array<col | and | or | string>;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Instance.set method
|
|
*/
|
|
interface InstanceSetOptions {
|
|
|
|
/**
|
|
* If set to true, field and virtual setters will be ignored
|
|
*/
|
|
raw? : boolean;
|
|
|
|
/**
|
|
* Clear all previously set data values
|
|
*/
|
|
reset? : boolean;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Instance.save method
|
|
*/
|
|
interface InstanceSaveOptions {
|
|
|
|
/**
|
|
* An optional array of strings, representing database columns. If fields is provided, only those columns
|
|
* will be validated and saved.
|
|
*/
|
|
fields? : string[];
|
|
|
|
/**
|
|
* If true, the updatedAt timestamp will not be updated.
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
silent? : boolean;
|
|
|
|
/**
|
|
* If false, validations won't be run.
|
|
*
|
|
* Defaults to true
|
|
*/
|
|
validate? : boolean;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* Transaction to run the query in
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
}
|
|
|
|
/**
|
|
* This class represents an single instance, a database row. You might see it referred to as both Instance and
|
|
* instance. You should not instantiate the Instance class directly, instead you access it using the finder and
|
|
* creation methods on the model.
|
|
*
|
|
* Instance instances operate with the concept of a `dataValues` property, which stores the actual values
|
|
* represented by the instance. By default, the values from dataValues can also be accessed directly from the
|
|
* Instance, that is:
|
|
* ```js
|
|
* instance.field
|
|
* // is the same as
|
|
* instance.get('field')
|
|
* // is the same as
|
|
* instance.getDataValue('field')
|
|
* ```
|
|
* However, if getters and/or setters are defined for `field` they will be invoked, instead of returning the
|
|
* value from `dataValues`. Accessing properties directly or using `get` is preferred for regular use,
|
|
* `getDataValue` should only be used for custom getters.
|
|
*
|
|
* @see Sequelize.define for more information about getters and setters
|
|
*/
|
|
interface Instance<TAttributes> {
|
|
|
|
/**
|
|
* Returns true if this instance has not yet been persisted to the database
|
|
*/
|
|
isNewRecord : boolean;
|
|
|
|
/**
|
|
* Returns the Model the instance was created from.
|
|
*
|
|
* @see Model
|
|
*/
|
|
Model : Model<this, TAttributes>;
|
|
|
|
/**
|
|
* A reference to the sequelize instance
|
|
*/
|
|
sequelize : Sequelize;
|
|
|
|
/**
|
|
* Get an object representing the query for this instance, use with `options.where`
|
|
*/
|
|
where() : Object;
|
|
|
|
/**
|
|
* Get the value of the underlying data value
|
|
*/
|
|
getDataValue( key : string ) : any;
|
|
|
|
/**
|
|
* Update the underlying data value
|
|
*/
|
|
setDataValue( key : string, value : any ) : void;
|
|
|
|
/**
|
|
* If no key is given, returns all values of the instance, also invoking virtual getters.
|
|
*
|
|
* If key is given and a field or virtual getter is present for the key it will call that getter - else it
|
|
* will return the value for key.
|
|
*
|
|
* @param options.plain If set to true, included instances will be returned as plain objects
|
|
*/
|
|
get( key : string, options? : { plain? : boolean, clone? : boolean } ) : any;
|
|
get( options? : { plain? : boolean, clone? : boolean } ) : TAttributes;
|
|
|
|
/**
|
|
* Set is used to update values on the instance (the sequelize representation of the instance that is,
|
|
* remember that nothing will be persisted before you actually call `save`). In its most basic form `set`
|
|
* will update a value stored in the underlying `dataValues` object. However, if a custom setter function
|
|
* is defined for the key, that function will be called instead. To bypass the setter, you can pass `raw:
|
|
* true` in the options object.
|
|
*
|
|
* If set is called with an object, it will loop over the object, and call set recursively for each key,
|
|
* value pair. If you set raw to true, the underlying dataValues will either be set directly to the object
|
|
* passed, or used to extend dataValues, if dataValues already contain values.
|
|
*
|
|
* When set is called, the previous value of the field is stored and sets a changed flag(see `changed`).
|
|
*
|
|
* Set can also be used to build instances for associations, if you have values for those.
|
|
* When using set with associations you need to make sure the property key matches the alias of the
|
|
* association while also making sure that the proper include options have been set (from .build() or
|
|
* .find())
|
|
*
|
|
* If called with a dot.seperated key on a JSON/JSONB attribute it will set the value nested and flag the
|
|
* entire object as changed.
|
|
*
|
|
* @param options.raw If set to true, field and virtual setters will be ignored
|
|
* @param options.reset Clear all previously set data values
|
|
*/
|
|
set( key : string, value : any, options? : InstanceSetOptions ) : this;
|
|
set( keys : Object, options? : InstanceSetOptions ) : this;
|
|
setAttributes( key : string, value : any, options? : InstanceSetOptions ) : this;
|
|
setAttributes( keys : Object, options? : InstanceSetOptions ) : this;
|
|
|
|
/**
|
|
* If changed is called with a string it will return a boolean indicating whether the value of that key in
|
|
* `dataValues` is different from the value in `_previousDataValues`.
|
|
*
|
|
* If changed is called without an argument, it will return an array of keys that have changed.
|
|
*
|
|
* If changed is called without an argument and no keys have changed, it will return `false`.
|
|
*/
|
|
changed( key : string ) : boolean;
|
|
changed() : boolean | string[];
|
|
|
|
/**
|
|
* Returns the previous value for key from `_previousDataValues`.
|
|
*/
|
|
previous( key : string ) : any;
|
|
|
|
/**
|
|
* Validate this instance, and if the validation passes, persist it to the database.
|
|
*
|
|
* On success, the callback will be called with this instance. On validation error, the callback will be
|
|
* called with an instance of `Sequelize.ValidationError`. This error will have a property for each of the
|
|
* fields for which validation failed, with the error message for that field.
|
|
*/
|
|
save( options? : InstanceSaveOptions ) : Promise<this>;
|
|
|
|
/**
|
|
* Refresh the current instance in-place, i.e. update the object with current data from the DB and return
|
|
* the same object. This is different from doing a `find(Instance.id)`, because that would create and
|
|
* return a new instance. With this method, all references to the Instance are updated with the new data
|
|
* and no new objects are created.
|
|
*/
|
|
reload( options? : FindOptions ) : Promise<this>;
|
|
|
|
/**
|
|
* Validate the attribute of this instance according to validation rules set in the model definition.
|
|
*
|
|
* Emits null if and only if validation successful; otherwise an Error instance containing
|
|
* { field name : [error msgs] } entries.
|
|
*
|
|
* @param options.skip An array of strings. All properties that are in this array will not be validated
|
|
*/
|
|
validate( options? : { skip?: string[] } ) : Promise<ValidationError>;
|
|
|
|
/**
|
|
* This is the same as calling `set` and then calling `save`.
|
|
*/
|
|
update( key : string, value : any, options? : InstanceUpdateOptions ) : Promise<this>;
|
|
update( keys : Object, options? : InstanceUpdateOptions ) : Promise<this>;
|
|
updateAttributes( key : string, value : any, options? : InstanceUpdateOptions ) : Promise<this>;
|
|
updateAttributes( keys : Object, options? : InstanceUpdateOptions ) : Promise<this>;
|
|
|
|
/**
|
|
* Destroy the row corresponding to this instance. Depending on your setting for paranoid, the row will
|
|
* either be completely deleted, or have its deletedAt timestamp set to the current time.
|
|
*/
|
|
destroy( options? : InstanceDestroyOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Restore the row corresponding to this instance. Only available for paranoid models.
|
|
*/
|
|
restore( options? : InstanceRestoreOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Increment the value of one or more columns. This is done in the database, which means it does not use
|
|
* the values currently stored on the Instance. The increment is done using a
|
|
* ```sql
|
|
* SET column = column + X
|
|
* ```
|
|
* query. To get the correct value after an increment into the Instance you should do a reload.
|
|
*
|
|
*```js
|
|
* instance.increment('number') // increment number by 1
|
|
* instance.increment(['number', 'count'], { by: 2 }) // increment number and count by 2
|
|
* instance.increment({ answer: 42, tries: 1}, { by: 2 }) // increment answer by 42, and tries by 1.
|
|
* // `by` is ignored, since each column has its own
|
|
* // value
|
|
* ```
|
|
*
|
|
* @param fields If a string is provided, that column is incremented by the value of `by` given in options.
|
|
* If an array is provided, the same is true for each column.
|
|
* If and object is provided, each column is incremented by the value given.
|
|
*/
|
|
increment( fields : string | string[] | Object,
|
|
options? : InstanceIncrementDecrementOptions ) : Promise<this>;
|
|
|
|
/**
|
|
* Decrement the value of one or more columns. This is done in the database, which means it does not use
|
|
* the values currently stored on the Instance. The decrement is done using a
|
|
* ```sql
|
|
* SET column = column - X
|
|
* ```
|
|
* query. To get the correct value after an decrement into the Instance you should do a reload.
|
|
*
|
|
* ```js
|
|
* instance.decrement('number') // decrement number by 1
|
|
* instance.decrement(['number', 'count'], { by: 2 }) // decrement number and count by 2
|
|
* instance.decrement({ answer: 42, tries: 1}, { by: 2 }) // decrement answer by 42, and tries by 1.
|
|
* // `by` is ignored, since each column has its own
|
|
* // value
|
|
* ```
|
|
*
|
|
* @param fields If a string is provided, that column is decremented by the value of `by` given in options.
|
|
* If an array is provided, the same is true for each column.
|
|
* If and object is provided, each column is decremented by the value given
|
|
*/
|
|
decrement( fields : string | string[] | Object,
|
|
options? : InstanceIncrementDecrementOptions ) : Promise<this>;
|
|
|
|
/**
|
|
* Check whether all values of this and `other` Instance are the same
|
|
*/
|
|
equals( other : Instance<any> ) : boolean;
|
|
|
|
/**
|
|
* Check if this is eqaul to one of `others` by calling equals
|
|
*/
|
|
equalsOneOf( others : Instance<any>[] ) : boolean;
|
|
|
|
/**
|
|
* Convert the instance to a JSON representation. Proxies to calling `get` with no keys. This means get all
|
|
* values gotten from the DB, and apply all custom getters.
|
|
*/
|
|
toJSON() : TAttributes;
|
|
|
|
}
|
|
|
|
//
|
|
// Model
|
|
// ~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/model.js
|
|
//
|
|
|
|
/**
|
|
* Options to pass to Model on drop
|
|
*/
|
|
interface DropOptions {
|
|
|
|
/**
|
|
* Also drop all objects depending on this table, such as views. Only works in postgres
|
|
*/
|
|
cascade?: boolean;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging?: boolean | Function;
|
|
|
|
}
|
|
|
|
/**
|
|
* Schema Options provided for applying a schema to a model
|
|
*/
|
|
interface SchemaOptions {
|
|
|
|
/**
|
|
* The character(s) that separates the schema name from the table name
|
|
*/
|
|
schemaDelimeter? : string;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : Function | boolean;
|
|
|
|
}
|
|
|
|
/**
|
|
* Scope Options for Model.scope
|
|
*/
|
|
interface ScopeOptions {
|
|
|
|
/**
|
|
* The scope(s) to apply. Scopes can either be passed as consecutive arguments, or as an array of arguments.
|
|
* To apply simple scopes and scope functions with no arguments, pass them as strings. For scope function,
|
|
* pass an object, with a `method` property. The value can either be a string, if the method does not take
|
|
* any arguments, or an array, where the first element is the name of the method, and consecutive elements
|
|
* are arguments to that method. Pass null to remove all scopes, including the default.
|
|
*/
|
|
method : string | any[];
|
|
|
|
}
|
|
|
|
/**
|
|
* Where Complex nested query
|
|
*/
|
|
interface WhereNested {
|
|
$and : Array<WhereOptions | WhereLogic>;
|
|
$or : Array<WhereOptions | WhereLogic>;
|
|
}
|
|
|
|
/**
|
|
* Nested where Postgre Statement
|
|
*/
|
|
interface WherePGStatement {
|
|
$any : Array<string | number>;
|
|
$all : Array<string | number>;
|
|
}
|
|
|
|
/**
|
|
* Where Geometry Options
|
|
*/
|
|
interface WhereGeometryOptions {
|
|
type: string;
|
|
coordinates: Array<number[] | number>;
|
|
}
|
|
|
|
/**
|
|
* Logic of where statement
|
|
*/
|
|
interface WhereLogic {
|
|
$ne : string | number | WhereLogic;
|
|
$in : Array<string | number> | literal;
|
|
$not : boolean | string | number | WhereOptions;
|
|
$notIn : Array<string | number> | literal;
|
|
$gte : number | string | Date;
|
|
$gt : number | string | Date;
|
|
$lte : number | string | Date;
|
|
$lt : number | string | Date;
|
|
$like : string | WherePGStatement;
|
|
$iLike : string | WherePGStatement;
|
|
$ilike : string | WherePGStatement;
|
|
$notLike : string | WherePGStatement;
|
|
$notILike : string | WherePGStatement;
|
|
$between : [number, number];
|
|
".." : [number, number];
|
|
$notBetween: [number, number];
|
|
"!.." : [number, number];
|
|
$overlap : [number, number];
|
|
"&&" : [number, number];
|
|
$contains: any;
|
|
"@>": any;
|
|
$contained: any;
|
|
"<@": any;
|
|
}
|
|
|
|
/**
|
|
* A hash of attributes to describe your search. See above for examples.
|
|
*
|
|
* We did put Object in the end, because there where query might be a JSON Blob. It cripples a bit the
|
|
* typesafety, but there is no way to pass the tests if we just remove it.
|
|
*/
|
|
interface WhereOptions {
|
|
[field: string]: string | number | WhereLogic | WhereOptions | col | and | or | WhereGeometryOptions | Array<string | number> | Object;
|
|
}
|
|
|
|
/**
|
|
* Through options for Include Options
|
|
*/
|
|
interface IncludeThroughOptions {
|
|
|
|
/**
|
|
* Filter on the join model for belongsToMany relations
|
|
*/
|
|
where? : WhereOptions;
|
|
|
|
/**
|
|
* A list of attributes to select from the join model for belongsToMany relations
|
|
*/
|
|
attributes? : string[];
|
|
|
|
}
|
|
|
|
/**
|
|
* Association Object for Include Options
|
|
*/
|
|
interface IncludeAssociation {
|
|
source: Model<any, any>;
|
|
target: Model<any, any>;
|
|
identifier: string;
|
|
}
|
|
|
|
/**
|
|
* Complex include options
|
|
*/
|
|
interface IncludeOptions {
|
|
|
|
/**
|
|
* The model you want to eagerly load
|
|
*/
|
|
model? : Model<any, any>;
|
|
|
|
/**
|
|
* The alias of the relation, in case the model you want to eagerly load is aliassed. For `hasOne` /
|
|
* `belongsTo`, this should be the singular name, and for `hasMany`, it should be the plural
|
|
*/
|
|
as? : string;
|
|
|
|
/**
|
|
* The association you want to eagerly load. (This can be used instead of providing a model/as pair)
|
|
*/
|
|
association? : IncludeAssociation;
|
|
|
|
/**
|
|
* Where clauses to apply to the child models. Note that this converts the eager load to an inner join,
|
|
* unless you explicitly set `required: false`
|
|
*/
|
|
where? : WhereOptions;
|
|
|
|
/**
|
|
* A list of attributes to select from the child model
|
|
*/
|
|
attributes? : string[];
|
|
|
|
/**
|
|
* If true, converts to an inner join, which means that the parent model will only be loaded if it has any
|
|
* matching children. True if `include.where` is set, false otherwise.
|
|
*/
|
|
required? : boolean;
|
|
|
|
/**
|
|
* Through Options
|
|
*/
|
|
through? : IncludeThroughOptions;
|
|
|
|
/**
|
|
* Load further nested related models
|
|
*/
|
|
include? : Array<Model<any, any> | IncludeOptions>;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options that are passed to any model creating a SELECT query
|
|
*
|
|
* A hash of options to describe the scope of the search
|
|
*/
|
|
interface FindOptions {
|
|
|
|
/**
|
|
* A hash of attributes to describe your search. See above for examples.
|
|
*/
|
|
where? : WhereOptions | Array<col | and | or | string>;
|
|
|
|
/**
|
|
* A list of the attributes that you want to select. To rename an attribute, you can pass an array, with
|
|
* two elements - the first is the name of the attribute in the DB (or some kind of expression such as
|
|
* `Sequelize.literal`, `Sequelize.fn` and so on), and the second is the name you want the attribute to
|
|
* have in the returned instance
|
|
*/
|
|
attributes? : Array<string | [string, string]>;
|
|
|
|
/**
|
|
* If true, only non-deleted records will be returned. If false, both deleted and non-deleted records will
|
|
* be returned. Only applies if `options.paranoid` is true for the model.
|
|
*/
|
|
paranoid?: boolean;
|
|
|
|
/**
|
|
* A list of associations to eagerly load using a left join. Supported is either
|
|
* `{ include: [ Model1, Model2, ...]}` or `{ include: [{ model: Model1, as: 'Alias' }]}`.
|
|
* If your association are set up with an `as` (eg. `X.hasMany(Y, { as: 'Z }`, you need to specify Z in
|
|
* the as attribute when eager loading Y).
|
|
*/
|
|
include?: Array<Model<any, any> | IncludeOptions>;
|
|
|
|
/**
|
|
* Specifies an ordering. If a string is provided, it will be escaped. Using an array, you can provide
|
|
* several columns / functions to order by. Each element can be further wrapped in a two-element array. The
|
|
* first element is the column / function to order by, the second is the direction. For example:
|
|
* `order: [['name', 'DESC']]`. In this way the column will be escaped, but the direction will not.
|
|
*/
|
|
order?: string | col | literal | Array<string | number | Model<any, any> | { model : Model<any, any>, as? : string}> | Array<string | col | literal | Array<string | number | Model<any, any> | { model : Model<any, any>, as? : string}>>;
|
|
|
|
/**
|
|
* Limit the results
|
|
*/
|
|
limit?: number;
|
|
|
|
/**
|
|
* Skip the results;
|
|
*/
|
|
offset?: number;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
/**
|
|
* Lock the selected rows. Possible options are transaction.LOCK.UPDATE and transaction.LOCK.SHARE.
|
|
* Postgres also supports transaction.LOCK.KEY_SHARE, transaction.LOCK.NO_KEY_UPDATE and specific model
|
|
* locks with joins. See [transaction.LOCK for an example](transaction#lock)
|
|
*/
|
|
lock? : string | { level: string, of: Model<any, any> };
|
|
|
|
/**
|
|
* Return raw result. See sequelize.query for more information.
|
|
*/
|
|
raw? : boolean;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* having ?!?
|
|
*/
|
|
having? : WhereOptions;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options for Model.count method
|
|
*/
|
|
interface CountOptions {
|
|
|
|
/**
|
|
* A hash of search attributes.
|
|
*/
|
|
where? : WhereOptions | string[];
|
|
|
|
/**
|
|
* Include options. See `find` for details
|
|
*/
|
|
include?: Array<Model<any, any> | IncludeOptions>;
|
|
|
|
/**
|
|
* Apply COUNT(DISTINCT(col))
|
|
*/
|
|
distinct? : boolean;
|
|
|
|
/**
|
|
* Used in conjustion with `group`
|
|
*/
|
|
attributes? : Array<string | [string, string]>;
|
|
|
|
/**
|
|
* For creating complex counts. Will return multiple rows as needed.
|
|
*
|
|
* TODO: Check?
|
|
*/
|
|
group? : Object;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
transaction?: Transaction;
|
|
}
|
|
|
|
/**
|
|
* Options for Model.build method
|
|
*/
|
|
interface BuildOptions {
|
|
|
|
/**
|
|
* If set to true, values will ignore field and virtual setters.
|
|
*/
|
|
raw? : boolean;
|
|
|
|
/**
|
|
* Is this record new
|
|
*/
|
|
isNewRecord? : boolean;
|
|
|
|
/**
|
|
* an array of include options - Used to build prefetched/included model instances. See `set`
|
|
*
|
|
* TODO: See set
|
|
*/
|
|
include? : Array<Model<any, any> | IncludeOptions>;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options for Model.create method
|
|
*/
|
|
interface CreateOptions extends BuildOptions {
|
|
|
|
/**
|
|
* If set, only columns matching those in fields will be saved
|
|
*/
|
|
fields? : string[];
|
|
|
|
/**
|
|
* On Duplicate
|
|
*/
|
|
onDuplicate? : string;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
silent? : boolean;
|
|
|
|
returning? : boolean;
|
|
}
|
|
|
|
/**
|
|
* Options for Model.findOrInitialize method
|
|
*/
|
|
interface FindOrInitializeOptions<TAttributes> {
|
|
|
|
/**
|
|
* A hash of search attributes.
|
|
*/
|
|
where : string | WhereOptions;
|
|
|
|
/**
|
|
* Default values to use if building a new instance
|
|
*/
|
|
defaults? : TAttributes;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options for Model.upsert method
|
|
*/
|
|
interface UpsertOptions {
|
|
|
|
/**
|
|
* Run validations before the row is inserted
|
|
*/
|
|
validate? : boolean;
|
|
|
|
/**
|
|
* The fields to insert / update. Defaults to all fields
|
|
*/
|
|
fields? : string[];
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
/**
|
|
* An optional parameter to specify the schema search_path (Postgres only)
|
|
*/
|
|
searchPath? : string;
|
|
|
|
/**
|
|
* Print query execution time in milliseconds when logging SQL.
|
|
*/
|
|
benchmark? : boolean;
|
|
}
|
|
|
|
/**
|
|
* Options for Model.bulkCreate method
|
|
*/
|
|
interface BulkCreateOptions {
|
|
|
|
/**
|
|
* Fields to insert (defaults to all fields)
|
|
*/
|
|
fields? : string[];
|
|
|
|
/**
|
|
* Should each row be subject to validation before it is inserted. The whole insert will fail if one row
|
|
* fails validation
|
|
*/
|
|
validate? : boolean;
|
|
|
|
/**
|
|
* Run before / after bulk create hooks?
|
|
*/
|
|
hooks? : boolean;
|
|
|
|
/**
|
|
* Run before / after create hooks for each individual Instance? BulkCreate hooks will still be run if
|
|
* options.hooks is true.
|
|
*/
|
|
individualHooks? : boolean;
|
|
|
|
/**
|
|
* Ignore duplicate values for primary keys? (not supported by postgres)
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
ignoreDuplicates? : boolean;
|
|
|
|
/**
|
|
* Fields to update if row key already exists (on duplicate key update)? (only supported by mysql &
|
|
* mariadb). By default, all fields are updated.
|
|
*/
|
|
updateOnDuplicate? : string[];
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
}
|
|
|
|
/**
|
|
* The options passed to Model.destroy in addition to truncate
|
|
*/
|
|
interface TruncateOptions {
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
/**
|
|
* Only used in conjuction with TRUNCATE. Truncates all tables that have foreign-key references to the
|
|
* named table, or to any tables added to the group due to CASCADE.
|
|
*
|
|
* Defaults to false;
|
|
*/
|
|
cascade? : boolean;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Model.destroy
|
|
*/
|
|
interface DestroyOptions extends TruncateOptions {
|
|
|
|
/**
|
|
* Filter the destroy
|
|
*/
|
|
where? : WhereOptions;
|
|
|
|
/**
|
|
* Run before / after bulk destroy hooks?
|
|
*/
|
|
hooks? : boolean;
|
|
|
|
/**
|
|
* If set to true, destroy will SELECT all records matching the where parameter and will execute before /
|
|
* after destroy hooks on each row
|
|
*/
|
|
individualHooks? : boolean;
|
|
|
|
/**
|
|
* How many rows to delete
|
|
*/
|
|
limit? : number;
|
|
|
|
/**
|
|
* Delete instead of setting deletedAt to current timestamp (only applicable if `paranoid` is enabled)
|
|
*/
|
|
force? : boolean;
|
|
|
|
/**
|
|
* If set to true, dialects that support it will use TRUNCATE instead of DELETE FROM. If a table is
|
|
* truncated the where and limit options are ignored
|
|
*/
|
|
truncate? : boolean;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options for Model.restore
|
|
*/
|
|
interface RestoreOptions {
|
|
|
|
/**
|
|
* Filter the restore
|
|
*/
|
|
where? : WhereOptions;
|
|
|
|
/**
|
|
* Run before / after bulk restore hooks?
|
|
*/
|
|
hooks? : boolean;
|
|
|
|
/**
|
|
* If set to true, restore will find all records within the where parameter and will execute before / after
|
|
* bulkRestore hooks on each row
|
|
*/
|
|
individualHooks? : boolean;
|
|
|
|
/**
|
|
* How many rows to undelete
|
|
*/
|
|
limit? : number;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Model.update
|
|
*/
|
|
interface UpdateOptions {
|
|
|
|
/**
|
|
* Options to describe the scope of the search.
|
|
*/
|
|
where: WhereOptions;
|
|
|
|
/**
|
|
* Fields to update (defaults to all fields)
|
|
*/
|
|
fields? : string[];
|
|
|
|
/**
|
|
* Should each row be subject to validation before it is inserted. The whole insert will fail if one row
|
|
* fails validation.
|
|
*
|
|
* Defaults to true
|
|
*/
|
|
validate? : boolean;
|
|
|
|
/**
|
|
* Run before / after bulk update hooks?
|
|
*
|
|
* Defaults to true
|
|
*/
|
|
hooks? : boolean;
|
|
|
|
/**
|
|
* Whether or not to update the side effects of any virtual setters.
|
|
*
|
|
* Defaults to true
|
|
*/
|
|
sideEffects? : boolean;
|
|
|
|
/**
|
|
* Run before / after update hooks?. If true, this will execute a SELECT followed by individual UPDATEs.
|
|
* A select is needed, because the row data needs to be passed to the hooks
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
individualHooks? : boolean;
|
|
|
|
/**
|
|
* Return the affected rows (only for postgres)
|
|
*/
|
|
returning? : boolean;
|
|
|
|
/**
|
|
* How many rows to update (only for mysql and mariadb)
|
|
*/
|
|
limit? : number;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* Transaction to run query under
|
|
*/
|
|
transaction? : Transaction;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options used for Model.aggregate
|
|
*/
|
|
interface AggregateOptions extends QueryOptions {
|
|
|
|
/**
|
|
* A hash of search attributes.
|
|
*/
|
|
where?: WhereOptions;
|
|
|
|
/**
|
|
* The type of the result. If `field` is a field in this Model, the default will be the type of that field,
|
|
* otherwise defaults to float.
|
|
*/
|
|
dataType? : DataTypeAbstract | string;
|
|
|
|
/**
|
|
* Applies DISTINCT to the field being aggregated over
|
|
*/
|
|
distinct? : boolean;
|
|
|
|
}
|
|
|
|
/**
|
|
* A Model represents a table in the database. Sometimes you might also see it referred to as model, or simply
|
|
* as factory. This class should _not_ be instantiated directly, it is created using `sequelize.define`, and
|
|
* already created models can be loaded using `sequelize.import`
|
|
*/
|
|
interface Model<TInstance, TAttributes> extends Hooks<TInstance>, Associations {
|
|
|
|
/**
|
|
* The Instance class
|
|
*/
|
|
Instance() : TInstance;
|
|
|
|
/**
|
|
* Remove attribute from model definition
|
|
*
|
|
* @param attribute
|
|
*/
|
|
removeAttribute( attribute : string ) : void;
|
|
|
|
/**
|
|
* Sync this Model to the DB, that is create the table. Upon success, the callback will be called with the
|
|
* model instance (this)
|
|
*/
|
|
sync( options? : SyncOptions ) : Promise<this>;
|
|
|
|
/**
|
|
* Drop the table represented by this Model
|
|
*
|
|
* @param options
|
|
*/
|
|
drop( options? : DropOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Apply a schema to this model. For postgres, this will actually place the schema in front of the table
|
|
* name
|
|
* - `"schema"."tableName"`, while the schema will be prepended to the table name for mysql and
|
|
* sqlite - `'schema.tablename'`.
|
|
*
|
|
* @param schema The name of the schema
|
|
* @param options
|
|
*/
|
|
schema( schema : string, options? : SchemaOptions ) : this;
|
|
|
|
/**
|
|
* Get the tablename of the model, taking schema into account. The method will return The name as a string
|
|
* if the model has no schema, or an object with `tableName`, `schema` and `delimiter` properties.
|
|
*
|
|
* @param options The hash of options from any query. You can use one model to access tables with matching
|
|
* schemas by overriding `getTableName` and using custom key/values to alter the name of the table.
|
|
* (eg.
|
|
* subscribers_1, subscribers_2)
|
|
* @param options.logging=false A function that gets executed while running the query to log the sql.
|
|
*/
|
|
getTableName( options? : { logging : Function } ) : string | Object;
|
|
|
|
/**
|
|
* Apply a scope created in `define` to the model. First let's look at how to create scopes:
|
|
* ```js
|
|
* var Model = sequelize.define('model', attributes, {
|
|
* defaultScope: {
|
|
* where: {
|
|
* username: 'dan'
|
|
* },
|
|
* limit: 12
|
|
* },
|
|
* scopes: {
|
|
* isALie: {
|
|
* where: {
|
|
* stuff: 'cake'
|
|
* }
|
|
* },
|
|
* complexFunction: function(email, accessLevel) {
|
|
* return {
|
|
* where: {
|
|
* email: {
|
|
* $like: email
|
|
* },
|
|
* accesss_level {
|
|
* $gte: accessLevel
|
|
* }
|
|
* }
|
|
* }
|
|
* }
|
|
* }
|
|
* })
|
|
* ```
|
|
* Now, since you defined a default scope, every time you do Model.find, the default scope is appended to
|
|
* your query. Here's a couple of examples:
|
|
* ```js
|
|
* Model.findAll() // WHERE username = 'dan'
|
|
* Model.findAll({ where: { age: { gt: 12 } } }) // WHERE age > 12 AND username = 'dan'
|
|
* ```
|
|
*
|
|
* To invoke scope functions you can do:
|
|
* ```js
|
|
* Model.scope({ method: ['complexFunction' 'dan@sequelize.com', 42]}).findAll()
|
|
* // WHERE email like 'dan@sequelize.com%' AND access_level >= 42
|
|
* ```
|
|
*
|
|
* @return Model A reference to the model, with the scope(s) applied. Calling scope again on the returned
|
|
* model will clear the previous scope.
|
|
*/
|
|
scope( options? : string | string[] | ScopeOptions | WhereOptions ) : this;
|
|
|
|
/**
|
|
* Search for multiple instances.
|
|
*
|
|
* __Simple search using AND and =__
|
|
* ```js
|
|
* Model.findAll({
|
|
* where: {
|
|
* attr1: 42,
|
|
* attr2: 'cake'
|
|
* }
|
|
* })
|
|
* ```
|
|
* ```sql
|
|
* WHERE attr1 = 42 AND attr2 = 'cake'
|
|
*```
|
|
*
|
|
* __Using greater than, less than etc.__
|
|
* ```js
|
|
*
|
|
* Model.findAll({
|
|
* where: {
|
|
* attr1: {
|
|
* gt: 50
|
|
* },
|
|
* attr2: {
|
|
* lte: 45
|
|
* },
|
|
* attr3: {
|
|
* in: [1,2,3]
|
|
* },
|
|
* attr4: {
|
|
* ne: 5
|
|
* }
|
|
* }
|
|
* })
|
|
* ```
|
|
* ```sql
|
|
* WHERE attr1 > 50 AND attr2 <= 45 AND attr3 IN (1,2,3) AND attr4 != 5
|
|
* ```
|
|
* Possible options are: `$ne, $in, $not, $notIn, $gte, $gt, $lte, $lt, $like, $ilike/$iLike, $notLike,
|
|
* $notILike, '..'/$between, '!..'/$notBetween, '&&'/$overlap, '@>'/$contains, '<@'/$contained`
|
|
*
|
|
* __Queries using OR__
|
|
* ```js
|
|
* Model.findAll({
|
|
* where: Sequelize.and(
|
|
* { name: 'a project' },
|
|
* Sequelize.or(
|
|
* { id: [1,2,3] },
|
|
* { id: { gt: 10 } }
|
|
* )
|
|
* )
|
|
* })
|
|
* ```
|
|
* ```sql
|
|
* WHERE name = 'a project' AND (id` IN (1,2,3) OR id > 10)
|
|
* ```
|
|
*
|
|
* The success listener is called with an array of instances if the query succeeds.
|
|
*
|
|
* @see {Sequelize#query}
|
|
*/
|
|
findAll( options? : FindOptions ) : Promise<TInstance[]>;
|
|
all( optionz? : FindOptions ) : Promise<TInstance[]>;
|
|
|
|
/**
|
|
* Search for a single instance by its primary key. This applies LIMIT 1, so the listener will
|
|
* always be called with a single instance.
|
|
*/
|
|
findById( identifier? : number | string, options? : FindOptions ) : Promise<TInstance>;
|
|
findByPrimary( identifier? : number | string, options? : FindOptions ) : Promise<TInstance>;
|
|
|
|
/**
|
|
* Search for a single instance. This applies LIMIT 1, so the listener will always be called with a single
|
|
* instance.
|
|
*/
|
|
findOne( options? : FindOptions ) : Promise<TInstance>;
|
|
find( optionz? : FindOptions ) : Promise<TInstance>;
|
|
|
|
/**
|
|
* Run an aggregation method on the specified field
|
|
*
|
|
* @param field The field to aggregate over. Can be a field name or *
|
|
* @param aggregateFunction The function to use for aggregation, e.g. sum, max etc.
|
|
* @param options Query options. See sequelize.query for full options
|
|
* @return Returns the aggregate result cast to `options.dataType`, unless `options.plain` is false, in
|
|
* which case the complete data result is returned.
|
|
*/
|
|
aggregate( field : string, aggregateFunction : Function, options? : AggregateOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Count the number of records matching the provided where clause.
|
|
*
|
|
* If you provide an `include` option, the number of matching associations will be counted instead.
|
|
*/
|
|
count( options? : CountOptions ) : Promise<number>;
|
|
|
|
/**
|
|
* Find all the rows matching your query, within a specified offset / limit, and get the total number of
|
|
* rows matching your query. This is very usefull for paging
|
|
*
|
|
* ```js
|
|
* Model.findAndCountAll({
|
|
* where: ...,
|
|
* limit: 12,
|
|
* offset: 12
|
|
* }).then(function (result) {
|
|
* ...
|
|
* })
|
|
* ```
|
|
* In the above example, `result.rows` will contain rows 13 through 24, while `result.count` will return
|
|
* the
|
|
* total number of rows that matched your query.
|
|
*
|
|
* When you add includes, only those which are required (either because they have a where clause, or
|
|
* because
|
|
* `required` is explicitly set to true on the include) will be added to the count part.
|
|
*
|
|
* Suppose you want to find all users who have a profile attached:
|
|
* ```js
|
|
* User.findAndCountAll({
|
|
* include: [
|
|
* { model: Profile, required: true}
|
|
* ],
|
|
* limit 3
|
|
* });
|
|
* ```
|
|
* Because the include for `Profile` has `required` set it will result in an inner join, and only the users
|
|
* who have a profile will be counted. If we remove `required` from the include, both users with and
|
|
* without
|
|
* profiles will be counted
|
|
*/
|
|
findAndCount( options? : FindOptions ) : Promise<{ rows : TInstance[], count : number }>;
|
|
findAndCountAll( options? : FindOptions ) : Promise<{ rows : TInstance[], count : number }>;
|
|
|
|
/**
|
|
* Find the maximum value of field
|
|
*/
|
|
max( field : string, options? : AggregateOptions ) : Promise<any>;
|
|
|
|
/**
|
|
* Find the minimum value of field
|
|
*/
|
|
min( field : string, options? : AggregateOptions ) : Promise<any>;
|
|
|
|
/**
|
|
* Find the sum of field
|
|
*/
|
|
sum( field : string, options? : AggregateOptions ) : Promise<number>;
|
|
|
|
/**
|
|
* Builds a new model instance. Values is an object of key value pairs, must be defined but can be empty.
|
|
*/
|
|
build( record? : TAttributes, options? : BuildOptions ) : TInstance;
|
|
|
|
/**
|
|
* Undocumented bulkBuild
|
|
*/
|
|
bulkBuild( records : TAttributes[], options? : BuildOptions ) : TInstance[];
|
|
|
|
/**
|
|
* Builds a new model instance and calls save on it.
|
|
*/
|
|
create( values? : TAttributes, options? : CreateOptions ) : Promise<TInstance>;
|
|
|
|
/**
|
|
* Find a row that matches the query, or build (but don't save) the row if none is found.
|
|
* The successfull result of the promise will be (instance, initialized) - Make sure to use .spread()
|
|
*/
|
|
findOrInitialize( options : FindOrInitializeOptions<TAttributes> ) : Promise<TInstance>;
|
|
findOrBuild( options : FindOrInitializeOptions<TAttributes> ) : Promise<TInstance>;
|
|
|
|
/**
|
|
* Find a row that matches the query, or build and save the row if none is found
|
|
* The successful result of the promise will be (instance, created) - Make sure to use .spread()
|
|
*
|
|
* If no transaction is passed in the `options` object, a new transaction will be created internally, to
|
|
* prevent the race condition where a matching row is created by another connection after the find but
|
|
* before the insert call. However, it is not always possible to handle this case in SQLite, specifically
|
|
* if one transaction inserts and another tries to select before the first one has comitted. In this case,
|
|
* an instance of sequelize.TimeoutError will be thrown instead. If a transaction is created, a savepoint
|
|
* will be created instead, and any unique constraint violation will be handled internally.
|
|
*/
|
|
findOrCreate( options : FindOrInitializeOptions<TAttributes> ) : Promise<TInstance>;
|
|
|
|
/**
|
|
* Insert or update a single row. An update will be executed if a row which matches the supplied values on
|
|
* either the primary key or a unique key is found. Note that the unique index must be defined in your
|
|
* sequelize model and not just in the table. Otherwise you may experience a unique constraint violation,
|
|
* because sequelize fails to identify the row that should be updated.
|
|
*
|
|
* **Implementation details:**
|
|
*
|
|
* * MySQL - Implemented as a single query `INSERT values ON DUPLICATE KEY UPDATE values`
|
|
* * PostgreSQL - Implemented as a temporary function with exception handling: INSERT EXCEPTION WHEN
|
|
* unique_constraint UPDATE
|
|
* * SQLite - Implemented as two queries `INSERT; UPDATE`. This means that the update is executed
|
|
* regardless
|
|
* of whether the row already existed or not
|
|
*
|
|
* **Note** that SQLite returns undefined for created, no matter if the row was created or updated. This is
|
|
* because SQLite always runs INSERT OR IGNORE + UPDATE, in a single query, so there is no way to know
|
|
* whether the row was inserted or not.
|
|
*/
|
|
upsert( values : TAttributes, options? : UpsertOptions ) : Promise<boolean>;
|
|
insertOrUpdate( values : TAttributes, options? : UpsertOptions ) : Promise<boolean>;
|
|
|
|
/**
|
|
* Create and insert multiple instances in bulk.
|
|
*
|
|
* The success handler is passed an array of instances, but please notice that these may not completely
|
|
* represent the state of the rows in the DB. This is because MySQL and SQLite do not make it easy to
|
|
* obtain
|
|
* back automatically generated IDs and other default values in a way that can be mapped to multiple
|
|
* records. To obtain Instances for the newly created values, you will need to query for them again.
|
|
*
|
|
* @param records List of objects (key/value pairs) to create instances from
|
|
*/
|
|
bulkCreate( records : TAttributes[], options? : BulkCreateOptions ) : Promise<TInstance[]>;
|
|
|
|
/**
|
|
* Truncate all instances of the model. This is a convenient method for Model.destroy({ truncate: true }).
|
|
*/
|
|
truncate( options? : TruncateOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Delete multiple instances, or set their deletedAt timestamp to the current time if `paranoid` is enabled.
|
|
*
|
|
* @return Promise<number> The number of destroyed rows
|
|
*/
|
|
destroy( options? : DestroyOptions ) : Promise<number>;
|
|
|
|
/**
|
|
* Restore multiple instances if `paranoid` is enabled.
|
|
*/
|
|
restore( options? : RestoreOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Update multiple instances that match the where options. The promise returns an array with one or two
|
|
* elements. The first element is always the number of affected rows, while the second element is the actual
|
|
* affected rows (only supported in postgres with `options.returning` true.)
|
|
*/
|
|
update( values : TAttributes, options : UpdateOptions ) : Promise<[number, TInstance[]]>;
|
|
|
|
/**
|
|
* Run a describe query on the table. The result will be return to the listener as a hash of attributes and
|
|
* their types.
|
|
*/
|
|
describe() : Promise<Object>;
|
|
|
|
/**
|
|
* Unscope the model
|
|
*/
|
|
unscoped() : this;
|
|
|
|
}
|
|
|
|
//
|
|
// Query Interface
|
|
// ~~~~~~~~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/query-interface.js
|
|
//
|
|
|
|
/**
|
|
* Most of the methods accept options and use only the logger property of the options. That's why the most used
|
|
* interface type for options in a method is separated here as another interface.
|
|
*/
|
|
interface QueryInterfaceOptions {
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
}
|
|
|
|
/**
|
|
* The interface that Sequelize uses to talk to all databases.
|
|
*
|
|
* This interface is available through sequelize.QueryInterface. It should not be commonly used, but it's
|
|
* referenced anyway, so it can be used.
|
|
*/
|
|
interface QueryInterface {
|
|
|
|
/**
|
|
* Returns the dialect-specific sql generator.
|
|
*
|
|
* We don't have a definition for the QueryGenerator, because I doubt it is commonly in use separately.
|
|
*/
|
|
QueryGenerator: any;
|
|
|
|
/**
|
|
* Returns the current sequelize instance.
|
|
*/
|
|
sequelize: Sequelize;
|
|
|
|
/**
|
|
* Queries the schema (table list).
|
|
*
|
|
* @param schema The schema to query. Applies only to Postgres.
|
|
*/
|
|
createSchema( schema? : string, options? : QueryInterfaceOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Drops the specified schema (table).
|
|
*
|
|
* @param schema The schema to query. Applies only to Postgres.
|
|
*/
|
|
dropSchema( schema? : string, options? : QueryInterfaceOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Drops all tables.
|
|
*/
|
|
dropAllSchemas( options? : QueryInterfaceOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Queries all table names in the database.
|
|
*
|
|
* @param options
|
|
*/
|
|
showAllSchemas( options? : QueryOptions ): Promise<Object>;
|
|
|
|
/**
|
|
* Return database version
|
|
*/
|
|
databaseVersion( options? : QueryInterfaceOptions ) : Promise<string>;
|
|
|
|
/**
|
|
* Creates a table with specified attributes.
|
|
*
|
|
* @param tableName Name of table to create
|
|
* @param attributes Hash of attributes, key is attribute name, value is data type
|
|
* @param options Query options.
|
|
*/
|
|
createTable( tableName : string | { schema? : string, tableName? : string }, attributes : DefineAttributes,
|
|
options? : QueryOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Drops the specified table.
|
|
*
|
|
* @param tableName Table name.
|
|
* @param options Query options, particularly "force".
|
|
*/
|
|
dropTable( tableName : string, options? : QueryOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Drops all tables.
|
|
*
|
|
* @param options
|
|
*/
|
|
dropAllTables( options? : QueryOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Drops all defined enums
|
|
*
|
|
* @param options
|
|
*/
|
|
dropAllEnums( options? : QueryOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Renames a table
|
|
*/
|
|
renameTable( before : string, after : string, options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Returns all tables
|
|
*/
|
|
showAllTables( options? : QueryOptions ) : Promise<string[]>;
|
|
|
|
/**
|
|
* Describe a table
|
|
*/
|
|
describeTable( tableName : string | { schema? : string, tableName? : string },
|
|
options? : string | { schema? : string, schemaDelimeter? : string, logging? : boolean | Function } ) : Promise<Object>;
|
|
|
|
/**
|
|
* Adds a new column to a table
|
|
*/
|
|
addColumn( table : string, key : string, attribute : DefineAttributeColumnOptions | DataTypeAbstract,
|
|
options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Removes a column from a table
|
|
*/
|
|
removeColumn( table : string, attribute : string, options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Changes a column
|
|
*/
|
|
changeColumn( tableName : string | { schema? : string, tableName? : string }, attributeName : string,
|
|
dataTypeOrOptions? : string | DataTypeAbstract | DefineAttributeColumnOptions,
|
|
options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Renames a column
|
|
*/
|
|
renameColumn( tableName : string | { schema? : string, tableName? : string }, attrNameBefore : string,
|
|
attrNameAfter : string,
|
|
options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Adds a new index to a table
|
|
*/
|
|
addIndex( tableName : string | Object, attributes : string[], options? : QueryOptions,
|
|
rawTablename? : string ) : Promise<void>;
|
|
|
|
/**
|
|
* Shows the index of a table
|
|
*/
|
|
showIndex( tableName : string | Object, options? : QueryOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Put a name to an index
|
|
*/
|
|
nameIndexes( indexes : string[], rawTablename : string ) : Promise<void>;
|
|
|
|
/**
|
|
* Returns all foreign key constraints of a table
|
|
*/
|
|
getForeignKeysForTables( tableNames : string, options? : QueryInterfaceOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Removes an index of a table
|
|
*/
|
|
removeIndex( tableName : string, indexNameOrAttributes : string[] | string,
|
|
options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Inserts a new record
|
|
*/
|
|
insert( instance : Instance<any>, tableName : string, values : Object,
|
|
options? : QueryOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Inserts or Updates a record in the database
|
|
*/
|
|
upsert( tableName : string, values : Object, updateValues : Object, model : Model<any, any>,
|
|
options? : QueryOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Inserts multiple records at once
|
|
*/
|
|
bulkInsert( tableName : string, records : Object[], options? : QueryOptions,
|
|
attributes? : string[] | string ) : Promise<Object>;
|
|
|
|
/**
|
|
* Updates a row
|
|
*/
|
|
update( instance : Instance<any>, tableName : string, values : Object, identifier : Object,
|
|
options? : QueryOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Updates multiple rows at once
|
|
*/
|
|
bulkUpdate( tableName : string, values : Object, identifier : Object, options? : QueryOptions,
|
|
attributes? : string[] | string ) : Promise<Object>;
|
|
|
|
/**
|
|
* Deletes a row
|
|
*/
|
|
"delete"( instance : Instance<any>, tableName : string, identifier : Object,
|
|
options? : QueryOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Deletes multiple rows at once
|
|
*/
|
|
bulkDelete( tableName : string, identifier : Object, options? : QueryOptions,
|
|
model? : Model<any, any> ) : Promise<Object>;
|
|
|
|
/**
|
|
* Returns selected rows
|
|
*/
|
|
select( model : Model<any, any>, tableName : string, options? : QueryOptions ) : Promise<Object[]>;
|
|
|
|
/**
|
|
* Increments a row value
|
|
*/
|
|
increment( instance : Instance<any>, tableName : string, values : Object, identifier : Object,
|
|
options? : QueryOptions ) : Promise<Object>;
|
|
|
|
/**
|
|
* Selects raw without parsing the string into an object
|
|
*/
|
|
rawSelect( tableName : string, options : QueryOptions, attributeSelector : string | string[],
|
|
model? : Model<any, any> ) : Promise<string[]>;
|
|
|
|
/**
|
|
* Postgres only. Creates a trigger on specified table to call the specified function with supplied
|
|
* parameters.
|
|
*/
|
|
createTrigger( tableName : string, triggerName : string, timingType : string, fireOnArray : any[],
|
|
functionName : string, functionParams : any[], optionsArray : string[],
|
|
options? : QueryInterfaceOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Postgres only. Drops the specified trigger.
|
|
*/
|
|
dropTrigger( tableName : string, triggerName : string, options? : QueryInterfaceOptions ): Promise<void>;
|
|
|
|
/**
|
|
* Postgres only. Renames a trigger
|
|
*/
|
|
renameTrigger( tableName : string, oldTriggerName : string, newTriggerName : string,
|
|
options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Postgres only. Create a function
|
|
*/
|
|
createFunction( functionName : string, params : any[], returnType : string, language : string,
|
|
body : string, options? : QueryOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Postgres only. Drops a function
|
|
*/
|
|
dropFunction( functionName : string, params : any[],
|
|
options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Postgres only. Rename a function
|
|
*/
|
|
renameFunction( oldFunctionName : string, params : any[], newFunctionName : string,
|
|
options? : QueryInterfaceOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Escape an identifier (e.g. a table or attribute name). If force is true, the identifier will be quoted
|
|
* even if the `quoteIdentifiers` option is false.
|
|
*/
|
|
quoteIdentifier( identifier : string, force : boolean ) : string;
|
|
|
|
/**
|
|
* Escape a table name
|
|
*/
|
|
quoteTable( identifier : string ) : string;
|
|
|
|
/**
|
|
* Split an identifier into .-separated tokens and quote each part. If force is true, the identifier will be
|
|
* quoted even if the `quoteIdentifiers` option is false.
|
|
*/
|
|
quoteIdentifiers( identifiers : string, force : boolean ) : string;
|
|
|
|
/**
|
|
* Escape a value (e.g. a string, number or date)
|
|
*/
|
|
escape( value? : string | number | Date ) : string;
|
|
|
|
/**
|
|
* Set option for autocommit of a transaction
|
|
*/
|
|
setAutocommit( transaction : Transaction, value : boolean, options? : QueryOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Set the isolation level of a transaction
|
|
*/
|
|
setIsolationLevel( transaction : Transaction, value : string, options? : QueryOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Begin a new transaction
|
|
*/
|
|
startTransaction( transaction : Transaction, options? : QueryOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Defer constraints
|
|
*/
|
|
deferConstraints( transaction : Transaction, options? : QueryOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Commit an already started transaction
|
|
*/
|
|
commitTransaction( transaction : Transaction, options? : QueryOptions ) : Promise<void>;
|
|
|
|
/**
|
|
* Rollback ( revert ) a transaction that has'nt been commited
|
|
*/
|
|
rollbackTransaction( transaction : Transaction, options? : QueryOptions ) : Promise<void>;
|
|
|
|
}
|
|
|
|
//
|
|
// Query Types
|
|
// ~~~~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/query-types.js
|
|
//
|
|
|
|
interface QueryTypes {
|
|
SELECT: string; // 'SELECT'
|
|
INSERT: string; // 'INSERT'
|
|
UPDATE: string; // 'UPDATE'
|
|
BULKUPDATE: string; // 'BULKUPDATE'
|
|
BULKDELETE: string; // 'BULKDELETE'
|
|
DELETE: string; // 'DELETE'
|
|
UPSERT: string; // 'UPSERT'
|
|
VERSION: string; // 'VERSION'
|
|
SHOWTABLES: string; // 'SHOWTABLES'
|
|
SHOWINDEXES: string; // 'SHOWINDEXES'
|
|
DESCRIBE: string; // 'DESCRIBE'
|
|
RAW: string; // 'RAW'
|
|
FOREIGNKEYS: string; // 'FOREIGNKEYS'
|
|
}
|
|
|
|
//
|
|
// Sequelize
|
|
// ~~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/sequelize.js
|
|
//
|
|
|
|
/**
|
|
* General column options
|
|
*
|
|
* @see Define
|
|
* @see AssociationForeignKeyOptions
|
|
*/
|
|
interface ColumnOptions {
|
|
|
|
/**
|
|
* If false, the column will have a NOT NULL constraint, and a not null validation will be run before an
|
|
* instance is saved.
|
|
*/
|
|
allowNull?: boolean;
|
|
|
|
/**
|
|
* If set, sequelize will map the attribute name to a different name in the database
|
|
*/
|
|
field? : string;
|
|
|
|
/**
|
|
* A literal default value, a JavaScript function, or an SQL function (see `sequelize.fn`)
|
|
*/
|
|
defaultValue?: any;
|
|
|
|
}
|
|
|
|
/**
|
|
* References options for the column's attributes
|
|
*
|
|
* @see AttributeColumnOptions
|
|
*/
|
|
interface DefineAttributeColumnReferencesOptions {
|
|
|
|
/**
|
|
* If this column references another table, provide it here as a Model, or a string
|
|
*/
|
|
model?: string | Model<any, any>;
|
|
|
|
/**
|
|
* The column of the foreign table that this column references
|
|
*/
|
|
key? : string;
|
|
|
|
/**
|
|
* When to check for the foreign key constraing
|
|
*
|
|
* PostgreSQL only
|
|
*/
|
|
deferrable? : Deferrable;
|
|
|
|
}
|
|
|
|
/**
|
|
* Column options for the model schema attributes
|
|
*
|
|
* @see Attributes
|
|
*/
|
|
interface DefineAttributeColumnOptions extends ColumnOptions {
|
|
|
|
/**
|
|
* A string or a data type
|
|
*/
|
|
type: string | DataTypeAbstract;
|
|
|
|
/**
|
|
* If true, the column will get a unique constraint. If a string is provided, the column will be part of a
|
|
* composite unique index. If multiple columns have the same string, they will be part of the same unique
|
|
* index
|
|
*/
|
|
unique?: boolean | string | { name: string, msg: string };
|
|
|
|
/**
|
|
* Primary key flag
|
|
*/
|
|
primaryKey?: boolean;
|
|
|
|
/**
|
|
* Is this field an auto increment field
|
|
*/
|
|
autoIncrement?: boolean;
|
|
|
|
/**
|
|
* Comment for the database
|
|
*/
|
|
comment?: string;
|
|
|
|
/**
|
|
* An object with reference configurations
|
|
*/
|
|
references? : DefineAttributeColumnReferencesOptions;
|
|
|
|
/**
|
|
* What should happen when the referenced key is updated. One of CASCADE, RESTRICT, SET DEFAULT, SET NULL or
|
|
* NO ACTION
|
|
*/
|
|
onUpdate? : string;
|
|
|
|
/**
|
|
* What should happen when the referenced key is deleted. One of CASCADE, RESTRICT, SET DEFAULT, SET NULL or
|
|
* NO ACTION
|
|
*/
|
|
onDelete? : string;
|
|
|
|
/**
|
|
* Provide a custom getter for this column. Use `this.getDataValue(String)` to manipulate the underlying
|
|
* values.
|
|
*/
|
|
get? : () => any;
|
|
|
|
/**
|
|
* Provide a custom setter for this column. Use `this.setDataValue(String, Value)` to manipulate the
|
|
* underlying values.
|
|
*/
|
|
set? : ( val : any ) => void;
|
|
|
|
/**
|
|
* An object of validations to execute for this column every time the model is saved. Can be either the
|
|
* name of a validation provided by validator.js, a validation function provided by extending validator.js
|
|
* (see the
|
|
* `DAOValidator` property for more details), or a custom validation function. Custom validation functions
|
|
* are called with the value of the field, and can possibly take a second callback argument, to signal that
|
|
* they are asynchronous. If the validator is sync, it should throw in the case of a failed validation, it
|
|
* it is async, the callback should be called with the error text.
|
|
*/
|
|
validate? : DefineValidateOptions;
|
|
|
|
/**
|
|
* Usage in object notation
|
|
*
|
|
* ```js
|
|
* sequelize.define('model', {
|
|
* states: {
|
|
* type: Sequelize.ENUM,
|
|
* values: ['active', 'pending', 'deleted']
|
|
* }
|
|
* })
|
|
* ```
|
|
*/
|
|
values? : string[];
|
|
|
|
}
|
|
|
|
/**
|
|
* Interface for Attributes provided for a column
|
|
*
|
|
* @see Sequelize.define
|
|
*/
|
|
interface DefineAttributes {
|
|
|
|
/**
|
|
* The description of a database column
|
|
*/
|
|
[name : string] : string | DataTypeAbstract | DefineAttributeColumnOptions;
|
|
|
|
}
|
|
|
|
/**
|
|
* Interface for query options
|
|
*
|
|
* @see Options
|
|
*/
|
|
interface QueryOptions {
|
|
|
|
/**
|
|
* If true, sequelize will not try to format the results of the query, or build an instance of a model from
|
|
* the result
|
|
*/
|
|
raw?: boolean;
|
|
|
|
/**
|
|
* The transaction that the query should be executed under
|
|
*/
|
|
transaction?: Transaction;
|
|
|
|
/**
|
|
* The type of query you are executing. The query type affects how results are formatted before they are
|
|
* passed back. The type is a string, but `Sequelize.QueryTypes` is provided as convenience shortcuts.
|
|
*/
|
|
type?: string;
|
|
|
|
/**
|
|
* If true, transforms objects with `.` separated property names into nested objects using
|
|
* [dottie.js](https://github.com/mickhansen/dottie.js). For example { 'user.username': 'john' } becomes
|
|
* { user: { username: 'john' }}. When `nest` is true, the query type is assumed to be `'SELECT'`,
|
|
* unless otherwise specified
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
nest?: boolean;
|
|
|
|
/**
|
|
* Sets the query type to `SELECT` and return a single row
|
|
*/
|
|
plain?: boolean;
|
|
|
|
/**
|
|
* Either an object of named parameter replacements in the format `:param` or an array of unnamed
|
|
* replacements to replace `?` in your SQL.
|
|
*/
|
|
replacements? : Object | string[];
|
|
|
|
/**
|
|
* Force the query to use the write pool, regardless of the query type.
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
useMaster? : boolean;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging? : Function;
|
|
|
|
/**
|
|
* A sequelize instance used to build the return instance
|
|
*/
|
|
instance? : Instance<any>;
|
|
|
|
/**
|
|
* A sequelize model used to build the returned model instances (used to be called callee)
|
|
*/
|
|
model? : Model<any, any>;
|
|
|
|
// TODO: force, cascade
|
|
|
|
}
|
|
|
|
/**
|
|
* Model validations, allow you to specify format/content/inheritance validations for each attribute of the
|
|
* model.
|
|
*
|
|
* Validations are automatically run on create, update and save. You can also call validate() to manually
|
|
* validate an instance.
|
|
*
|
|
* The validations are implemented by validator.js.
|
|
*/
|
|
interface DefineValidateOptions {
|
|
|
|
/**
|
|
* is: ["^[a-z]+$",'i'] // will only allow letters
|
|
* is: /^[a-z]+$/i // same as the previous example using real RegExp
|
|
*/
|
|
is?: string | Array<string | RegExp> | RegExp | { msg: string, args : string | Array<string | RegExp> | RegExp };
|
|
|
|
/**
|
|
* not: ["[a-z]",'i'] // will not allow letters
|
|
*/
|
|
not?: string | Array<string | RegExp> | RegExp | { msg: string, args : string | Array<string | RegExp> | RegExp };
|
|
|
|
/**
|
|
* checks for email format (foo@bar.com)
|
|
*/
|
|
isEmail?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for url format (http://foo.com)
|
|
*/
|
|
isUrl?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for IPv4 (129.89.23.1) or IPv6 format
|
|
*/
|
|
isIP?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for IPv4 (129.89.23.1)
|
|
*/
|
|
isIPv4?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for IPv6 format
|
|
*/
|
|
isIPv6?: boolean | { msg: string };
|
|
|
|
/**
|
|
* will only allow letters
|
|
*/
|
|
isAlpha?: boolean | { msg: string };
|
|
|
|
/**
|
|
* will only allow alphanumeric characters, so "_abc" will fail
|
|
*/
|
|
isAlphanumeric?: boolean | { msg: string };
|
|
|
|
/**
|
|
* will only allow numbers
|
|
*/
|
|
isNumeric?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for valid integers
|
|
*/
|
|
isInt?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for valid floating point numbers
|
|
*/
|
|
isFloat?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for any numbers
|
|
*/
|
|
isDecimal?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for lowercase
|
|
*/
|
|
isLowercase?: boolean | { msg: string };
|
|
|
|
/**
|
|
* checks for uppercase
|
|
*/
|
|
isUppercase?: boolean | { msg: string };
|
|
|
|
/**
|
|
* won't allow null
|
|
*/
|
|
notNull?: boolean | { msg: string };
|
|
|
|
/**
|
|
* only allows null
|
|
*/
|
|
isNull?: boolean | { msg: string };
|
|
|
|
/**
|
|
* don't allow empty strings
|
|
*/
|
|
notEmpty?: boolean | { msg: string };
|
|
|
|
/**
|
|
* only allow a specific value
|
|
*/
|
|
equals? : string | { msg: string };
|
|
|
|
/**
|
|
* force specific substrings
|
|
*/
|
|
contains? : string | { msg: string };
|
|
|
|
/**
|
|
* check the value is not one of these
|
|
*/
|
|
notIn? : string[][] | { msg: string, args: string[][] };
|
|
|
|
/**
|
|
* check the value is one of these
|
|
*/
|
|
isIn? : string[][] | { msg: string, args: string[][] };
|
|
|
|
/**
|
|
* don't allow specific substrings
|
|
*/
|
|
notContains? : string[] | string | { msg: string, args: string[] | string };
|
|
|
|
/**
|
|
* only allow values with length between 2 and 10
|
|
*/
|
|
len?: [number, number] | { msg: string, args: [number, number] };
|
|
|
|
/**
|
|
* only allow uuids
|
|
*/
|
|
isUUID?: number | { msg: string, args: number };
|
|
|
|
/**
|
|
* only allow date strings
|
|
*/
|
|
isDate?: boolean | { msg: string, args: boolean };
|
|
|
|
/**
|
|
* only allow date strings after a specific date
|
|
*/
|
|
isAfter?: string | { msg: string, args: string };
|
|
|
|
/**
|
|
* only allow date strings before a specific date
|
|
*/
|
|
isBefore?: string | { msg: string, args: string };
|
|
|
|
/**
|
|
* only allow values
|
|
*/
|
|
max?: number | { msg: string, args: number };
|
|
|
|
/**
|
|
* only allow values >= 23
|
|
*/
|
|
min?: number | { msg: string, args: number };
|
|
|
|
/**
|
|
* only allow arrays
|
|
*/
|
|
isArray?: boolean | { msg: string, args: boolean };
|
|
|
|
/**
|
|
* check for valid credit card numbers
|
|
*/
|
|
isCreditCard?: boolean | { msg: string, args: boolean };
|
|
|
|
/**
|
|
* custom validations are also possible
|
|
*
|
|
* Implementation notes :
|
|
*
|
|
* We can't enforce any other method to be a function, so :
|
|
*
|
|
* ```typescript
|
|
* [name: string] : ( value : any ) => boolean;
|
|
* ```
|
|
*
|
|
* doesn't work in combination with the properties above
|
|
*
|
|
* @see https://github.com/Microsoft/TypeScript/issues/1889
|
|
*/
|
|
[name: string] : any;
|
|
|
|
}
|
|
|
|
/**
|
|
* Interface for indexes property in DefineOptions
|
|
*
|
|
* @see DefineOptions
|
|
*/
|
|
interface DefineIndexesOptions {
|
|
|
|
/**
|
|
* The name of the index. Defaults to model name + _ + fields concatenated
|
|
*/
|
|
name? : string;
|
|
|
|
/**
|
|
* Index type. Only used by mysql. One of `UNIQUE`, `FULLTEXT` and `SPATIAL`
|
|
*/
|
|
index? : string;
|
|
|
|
/**
|
|
* The method to create the index by (`USING` statement in SQL). BTREE and HASH are supported by mysql and
|
|
* postgres, and postgres additionally supports GIST and GIN.
|
|
*/
|
|
method? : string;
|
|
|
|
/**
|
|
* Should the index by unique? Can also be triggered by setting type to `UNIQUE`
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
unique? : boolean;
|
|
|
|
/**
|
|
* PostgreSQL will build the index without taking any write locks. Postgres only
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
concurrently? : boolean;
|
|
|
|
/**
|
|
* An array of the fields to index. Each field can either be a string containing the name of the field,
|
|
* a sequelize object (e.g `sequelize.fn`), or an object with the following attributes: `attribute`
|
|
* (field name), `length` (create a prefix index of length chars), `order` (the direction the column
|
|
* should be sorted in), `collate` (the collation (sort order) for the column)
|
|
*/
|
|
fields? : Array<string|{ attribute: string, length: number, order: string, collate: string }>;
|
|
|
|
}
|
|
|
|
/**
|
|
* Interface for name property in DefineOptions
|
|
*
|
|
* @see DefineOptions
|
|
*/
|
|
interface DefineNameOptions {
|
|
|
|
/**
|
|
* Singular model name
|
|
*/
|
|
singular? : string;
|
|
|
|
/**
|
|
* Plural model name
|
|
*/
|
|
plural? : string;
|
|
|
|
}
|
|
|
|
/**
|
|
* Interface for getterMethods in DefineOptions
|
|
*
|
|
* @see DefineOptions
|
|
*/
|
|
interface DefineGetterMethodsOptions {
|
|
[name: string] : () => any;
|
|
}
|
|
|
|
/**
|
|
* Interface for setterMethods in DefineOptions
|
|
*
|
|
* @see DefineOptions
|
|
*/
|
|
interface DefineSetterMethodsOptions {
|
|
[name: string] : ( val : any ) => void;
|
|
}
|
|
|
|
/**
|
|
* Interface for Define Scope Options
|
|
*
|
|
* @see DefineOptions
|
|
*/
|
|
interface DefineScopeOptions {
|
|
|
|
/**
|
|
* Name of the scope and it's query
|
|
*/
|
|
[scopeName: string] : FindOptions | Function;
|
|
|
|
}
|
|
|
|
/**
|
|
* Options for model definition
|
|
*
|
|
* @see Sequelize.define
|
|
*/
|
|
interface DefineOptions<TInstance> {
|
|
|
|
/**
|
|
* Define the default search scope to use for this model. Scopes have the same form as the options passed to
|
|
* find / findAll.
|
|
*/
|
|
defaultScope?: FindOptions;
|
|
|
|
/**
|
|
* More scopes, defined in the same way as defaultScope above. See `Model.scope` for more information about
|
|
* how scopes are defined, and what you can do with them
|
|
*/
|
|
scopes?: DefineScopeOptions;
|
|
|
|
/**
|
|
* Don't persits null values. This means that all columns with null values will not be saved.
|
|
*/
|
|
omitNull?: boolean;
|
|
|
|
/**
|
|
* Adds createdAt and updatedAt timestamps to the model. Default true.
|
|
*/
|
|
timestamps?: boolean;
|
|
|
|
/**
|
|
* Calling destroy will not delete the model, but instead set a deletedAt timestamp if this is true. Needs
|
|
* timestamps=true to work. Default false.
|
|
*/
|
|
paranoid?: boolean;
|
|
|
|
/**
|
|
* Converts all camelCased columns to underscored if true. Default false.
|
|
*/
|
|
underscored?: boolean;
|
|
|
|
/**
|
|
* Converts camelCased model names to underscored tablenames if true. Default false.
|
|
*/
|
|
underscoredAll?: boolean;
|
|
|
|
/**
|
|
* If freezeTableName is true, sequelize will not try to alter the DAO name to get the table name.
|
|
* Otherwise, the dao name will be pluralized. Default false.
|
|
*/
|
|
freezeTableName?: boolean;
|
|
|
|
/**
|
|
* An object with two attributes, `singular` and `plural`, which are used when this model is associated to
|
|
* others.
|
|
*/
|
|
name?: DefineNameOptions;
|
|
|
|
/**
|
|
* Indexes for the provided database table
|
|
*/
|
|
indexes? : DefineIndexesOptions[];
|
|
|
|
/**
|
|
* Override the name of the createdAt column if a string is provided, or disable it if false. Timestamps
|
|
* must be true. Not affected by underscored setting.
|
|
*/
|
|
createdAt? : string | boolean;
|
|
|
|
/**
|
|
* Override the name of the deletedAt column if a string is provided, or disable it if false. Timestamps
|
|
* must be true. Not affected by underscored setting.
|
|
*/
|
|
deletedAt? : string | boolean;
|
|
|
|
/**
|
|
* Override the name of the updatedAt column if a string is provided, or disable it if false. Timestamps
|
|
* must be true. Not affected by underscored setting.
|
|
*/
|
|
updatedAt? : string | boolean;
|
|
|
|
/**
|
|
* Defaults to pluralized model name, unless freezeTableName is true, in which case it uses model name
|
|
* verbatim
|
|
*/
|
|
tableName? : string;
|
|
|
|
/**
|
|
* Provide getter functions that work like those defined per column. If you provide a getter method with
|
|
* the
|
|
* same name as a column, it will be used to access the value of that column. If you provide a name that
|
|
* does not match a column, this function will act as a virtual getter, that can fetch multiple other
|
|
* values
|
|
*/
|
|
getterMethods? : DefineGetterMethodsOptions;
|
|
|
|
/**
|
|
* Provide setter functions that work like those defined per column. If you provide a setter method with
|
|
* the
|
|
* same name as a column, it will be used to update the value of that column. If you provide a name that
|
|
* does not match a column, this function will act as a virtual setter, that can act on and set other
|
|
* values, but will not be persisted
|
|
*/
|
|
setterMethods? : DefineSetterMethodsOptions;
|
|
|
|
/**
|
|
* Provide functions that are added to each instance (DAO). If you override methods provided by sequelize,
|
|
* you can access the original method using `this.constructor.super_.prototype`, e.g.
|
|
* `this.constructor.super_.prototype.toJSON.apply(this, arguments)`
|
|
*/
|
|
instanceMethods? : Object;
|
|
|
|
/**
|
|
* Provide functions that are added to the model (Model). If you override methods provided by sequelize,
|
|
* you can access the original method using `this.constructor.prototype`, e.g.
|
|
* `this.constructor.prototype.find.apply(this, arguments)`
|
|
*/
|
|
classMethods? : Object;
|
|
|
|
schema? : string;
|
|
|
|
/**
|
|
* You can also change the database engine, e.g. to MyISAM. InnoDB is the default.
|
|
*/
|
|
engine? : string;
|
|
|
|
charset? : string;
|
|
|
|
/**
|
|
* Finaly you can specify a comment for the table in MySQL and PG
|
|
*/
|
|
comment? : string;
|
|
|
|
collate? : string;
|
|
|
|
/**
|
|
* Set the initial AUTO_INCREMENT value for the table in MySQL.
|
|
*/
|
|
initialAutoIncrement? : string;
|
|
|
|
/**
|
|
* An object of hook function that are called before and after certain lifecycle events.
|
|
* The possible hooks are: beforeValidate, afterValidate, beforeBulkCreate, beforeBulkDestroy,
|
|
* beforeBulkUpdate, beforeCreate, beforeDestroy, beforeUpdate, afterCreate, afterDestroy, afterUpdate,
|
|
* afterBulkCreate, afterBulkDestory and afterBulkUpdate. See Hooks for more information about hook
|
|
* functions and their signatures. Each property can either be a function, or an array of functions.
|
|
*/
|
|
hooks? : HooksDefineOptions<TInstance>;
|
|
|
|
/**
|
|
* An object of model wide validations. Validations have access to all model values via `this`. If the
|
|
* validator function takes an argument, it is asumed to be async, and is called with a callback that
|
|
* accepts an optional error.
|
|
*/
|
|
validate? : DefineValidateOptions;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sync Options
|
|
*
|
|
* @see Sequelize.sync
|
|
*/
|
|
interface SyncOptions {
|
|
|
|
/**
|
|
* If force is true, each DAO will do DROP TABLE IF EXISTS ..., before it tries to create its own table
|
|
*/
|
|
force?: boolean;
|
|
|
|
/**
|
|
* Match a regex against the database name before syncing, a safety check for cases where force: true is
|
|
* used in tests but not live code
|
|
*/
|
|
match?: RegExp;
|
|
|
|
/**
|
|
* A function that logs sql queries, or false for no logging
|
|
*/
|
|
logging?: Function | boolean;
|
|
|
|
/**
|
|
* The schema that the tables should be created in. This can be overriden for each table in sequelize.define
|
|
*/
|
|
schema?: string;
|
|
|
|
}
|
|
|
|
interface SetOptions { }
|
|
|
|
/**
|
|
* Connection Pool options
|
|
*
|
|
* @see Options
|
|
*/
|
|
interface PoolOptions {
|
|
|
|
/**
|
|
* Maximum connections of the pool
|
|
*/
|
|
maxConnections?: number;
|
|
|
|
/**
|
|
* Minimum connections of the pool
|
|
*/
|
|
minConnections?: number;
|
|
|
|
/**
|
|
* The maximum time, in milliseconds, that a connection can be idle before being released.
|
|
*/
|
|
maxIdleTime?: number;
|
|
|
|
/**
|
|
* A function that validates a connection. Called with client. The default function checks that client is an
|
|
* object, and that its state is not disconnected.
|
|
*/
|
|
validateConnection?: ( client? : any ) => boolean;
|
|
|
|
}
|
|
|
|
/**
|
|
* Interface for replication Options in the sequelize constructor
|
|
*
|
|
* @see Options
|
|
*/
|
|
interface ReplicationOptions {
|
|
|
|
read?: {
|
|
host?: string;
|
|
port?: string | number;
|
|
username?: string;
|
|
password?: string;
|
|
database?: string;
|
|
};
|
|
|
|
write?: {
|
|
host?: string;
|
|
port?: string | number;
|
|
username?: string;
|
|
password?: string;
|
|
database?: string;
|
|
};
|
|
|
|
}
|
|
|
|
/**
|
|
* Options for the constructor of Sequelize main class
|
|
*/
|
|
interface Options {
|
|
|
|
/**
|
|
* The dialect of the database you are connecting to. One of mysql, postgres, sqlite, mariadb and mssql.
|
|
*
|
|
* Defaults to 'mysql'
|
|
*/
|
|
dialect?: string;
|
|
|
|
/**
|
|
* If specified, load the dialect library from this path. For example, if you want to use pg.js instead of
|
|
* pg when connecting to a pg database, you should specify 'pg.js' here
|
|
*/
|
|
dialectModulePath?: string;
|
|
|
|
/**
|
|
* An object of additional options, which are passed directly to the connection library
|
|
*/
|
|
dialectOptions? : Object;
|
|
|
|
/**
|
|
* Only used by sqlite.
|
|
*
|
|
* Defaults to ':memory:'
|
|
*/
|
|
storage? : string;
|
|
|
|
/**
|
|
* The host of the relational database.
|
|
*
|
|
* Defaults to 'localhost'
|
|
*/
|
|
host? : string;
|
|
|
|
/**
|
|
* The port of the relational database.
|
|
*/
|
|
port? : number;
|
|
|
|
/**
|
|
* The protocol of the relational database.
|
|
*
|
|
* Defaults to 'tcp'
|
|
*/
|
|
protocol? : string;
|
|
|
|
/**
|
|
* Default options for model definitions. See sequelize.define for options
|
|
*/
|
|
define? : DefineOptions<any>;
|
|
|
|
/**
|
|
* Default options for sequelize.query
|
|
*/
|
|
query? : QueryOptions;
|
|
|
|
/**
|
|
* Default options for sequelize.set
|
|
*/
|
|
set? : SetOptions;
|
|
|
|
/**
|
|
* Default options for sequelize.sync
|
|
*/
|
|
sync? : SyncOptions;
|
|
|
|
/**
|
|
* The timezone used when converting a date from the database into a JavaScript date. The timezone is also
|
|
* used to SET TIMEZONE when connecting to the server, to ensure that the result of NOW, CURRENT_TIMESTAMP
|
|
* and other time related functions have in the right timezone. For best cross platform performance use the
|
|
* format
|
|
* +/-HH:MM. Will also accept string versions of timezones used by moment.js (e.g. 'America/Los_Angeles');
|
|
* this is useful to capture daylight savings time changes.
|
|
*
|
|
* Defaults to '+00:00'
|
|
*/
|
|
timezone? : string;
|
|
|
|
/**
|
|
* A function that gets executed everytime Sequelize would log something.
|
|
*
|
|
* Defaults to console.log
|
|
*/
|
|
logging? : boolean | Function;
|
|
|
|
/**
|
|
* A flag that defines if null values should be passed to SQL queries or not.
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
omitNull? : boolean;
|
|
|
|
/**
|
|
* A flag that defines if native library shall be used or not. Currently only has an effect for postgres
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
native? : boolean;
|
|
|
|
/**
|
|
* Use read / write replication. To enable replication, pass an object, with two properties, read and write.
|
|
* Write should be an object (a single server for handling writes), and read an array of object (several
|
|
* servers to handle reads). Each read/write server can have the following properties: `host`, `port`,
|
|
* `username`, `password`, `database`
|
|
*
|
|
* Defaults to false
|
|
*/
|
|
replication? : ReplicationOptions;
|
|
|
|
/**
|
|
* Connection pool options
|
|
*/
|
|
pool? : PoolOptions;
|
|
|
|
/**
|
|
* Set to `false` to make table names and attributes case-insensitive on Postgres and skip double quoting of
|
|
* them.
|
|
*
|
|
* Defaults to true
|
|
*/
|
|
quoteIdentifiers? : boolean;
|
|
|
|
/**
|
|
* Set the default transaction isolation level. See `Sequelize.Transaction.ISOLATION_LEVELS` for possible
|
|
* options.
|
|
*
|
|
* Defaults to 'REPEATABLE_READ'
|
|
*/
|
|
isolationLevel? : string;
|
|
|
|
/**
|
|
* Set the default transaction type. See `Sequelize.Transaction.TYPES` for possible
|
|
* options.
|
|
*
|
|
* Defaults to 'DEFERRED'
|
|
*/
|
|
transactionType? : string;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sequelize methods that are available both for the static and the instance class of Sequelize
|
|
*/
|
|
interface SequelizeStaticAndInstance extends Errors {
|
|
|
|
/**
|
|
* A reference to sequelize utilities. Most users will not need to use these utils directly. However, you
|
|
* might want to use `Sequelize.Utils._`, which is a reference to the lodash library, if you don't already
|
|
* have it imported in your project.
|
|
*/
|
|
Utils: Utils;
|
|
|
|
/**
|
|
* A modified version of bluebird promises, that allows listening for sql events
|
|
*/
|
|
Promise: typeof Promise;
|
|
|
|
/**
|
|
* Available query types for use with `sequelize.query`
|
|
*/
|
|
QueryTypes: QueryTypes;
|
|
|
|
/**
|
|
* Exposes the validator.js object, so you can extend it with custom validation functions.
|
|
* The validator is exposed both on the instance, and on the constructor.
|
|
*/
|
|
Validator: Validator;
|
|
|
|
/**
|
|
* A Model represents a table in the database. Sometimes you might also see it referred to as model, or
|
|
* simply as factory. This class should not be instantiated directly, it is created using sequelize.define,
|
|
* and already created models can be loaded using sequelize.import
|
|
*/
|
|
Model: Model<any, any>;
|
|
|
|
/**
|
|
* A reference to the sequelize transaction class. Use this to access isolationLevels when creating a
|
|
* transaction
|
|
*/
|
|
Transaction : TransactionStatic;
|
|
|
|
/**
|
|
* A reference to the deferrable collection. Use this to access the different deferrable options.
|
|
*/
|
|
Deferrable : Deferrable;
|
|
|
|
/**
|
|
* A reference to the sequelize instance class.
|
|
*/
|
|
Instance : Instance<any>;
|
|
|
|
/**
|
|
* Creates a object representing a database function. This can be used in search queries, both in where and
|
|
* order parts, and as default values in column definitions. If you want to refer to columns in your
|
|
* function, you should use `sequelize.col`, so that the columns are properly interpreted as columns and
|
|
* not a strings.
|
|
*
|
|
* Convert a user's username to upper case
|
|
* ```js
|
|
* instance.updateAttributes({
|
|
* username: self.sequelize.fn('upper', self.sequelize.col('username'))
|
|
* })
|
|
* ```
|
|
* @param fn The function you want to call
|
|
* @param args All further arguments will be passed as arguments to the function
|
|
*/
|
|
fn( fn : string, ...args : any[] ) : fn;
|
|
|
|
/**
|
|
* Creates a object representing a column in the DB. This is often useful in conjunction with
|
|
* `sequelize.fn`, since raw string arguments to fn will be escaped.
|
|
*
|
|
* @param col The name of the column
|
|
*/
|
|
col( col : string ) : col;
|
|
|
|
/**
|
|
* Creates a object representing a call to the cast function.
|
|
*
|
|
* @param val The value to cast
|
|
* @param type The type to cast it to
|
|
*/
|
|
cast( val : any, type : string ) : cast;
|
|
|
|
/**
|
|
* Creates a object representing a literal, i.e. something that will not be escaped.
|
|
*
|
|
* @param val
|
|
*/
|
|
literal( val : any ) : literal;
|
|
asIs( val : any ) : literal;
|
|
|
|
/**
|
|
* An AND query
|
|
*
|
|
* @param args Each argument will be joined by AND
|
|
*/
|
|
and( ...args : Array<string | Object> ) : and;
|
|
|
|
/**
|
|
* An OR query
|
|
*
|
|
* @param args Each argument will be joined by OR
|
|
*/
|
|
or( ...args : Array<string | Object> ) : or;
|
|
|
|
/**
|
|
* Creates an object representing nested where conditions for postgres's json data-type.
|
|
*
|
|
* @param conditionsOrPath A hash containing strings/numbers or other nested hash, a string using dot
|
|
* notation or a string using postgres json syntax.
|
|
* @param value An optional value to compare against. Produces a string of the form "<json path> =
|
|
* '<value>'".
|
|
*/
|
|
json( conditionsOrPath : string | Object, value? : string | number | boolean ) : json;
|
|
|
|
/**
|
|
* A way of specifying attr = condition.
|
|
*
|
|
* The attr can either be an object taken from `Model.rawAttributes` (for example `Model.rawAttributes.id`
|
|
* or
|
|
* `Model.rawAttributes.name`). The attribute should be defined in your model definition. The attribute can
|
|
* also be an object from one of the sequelize utility functions (`sequelize.fn`, `sequelize.col` etc.)
|
|
*
|
|
* For string attributes, use the regular `{ where: { attr: something }}` syntax. If you don't want your
|
|
* string to be escaped, use `sequelize.literal`.
|
|
*
|
|
* @param attr The attribute, which can be either an attribute object from `Model.rawAttributes` or a
|
|
* sequelize object, for example an instance of `sequelize.fn`. For simple string attributes, use the
|
|
* POJO syntax
|
|
* @param comparator Comparator
|
|
* @param logic The condition. Can be both a simply type, or a further condition (`.or`, `.and`, `.literal`
|
|
* etc.)
|
|
*/
|
|
where( attr : Object, comparator : string, logic : string | Object ) : where;
|
|
where( attr : Object, logic : string | Object ) : where;
|
|
condition( attr : Object, logic : string | Object ) : where;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sequelize methods available only for the static class ( basically this is the constructor and some extends )
|
|
*/
|
|
interface SequelizeStatic extends SequelizeStaticAndInstance, DataTypes {
|
|
|
|
/**
|
|
* Instantiate sequelize with name of database, username and password
|
|
*
|
|
* #### Example usage
|
|
*
|
|
* ```javascript
|
|
* // without password and options
|
|
* var sequelize = new Sequelize('database', 'username')
|
|
*
|
|
* // without options
|
|
* var sequelize = new Sequelize('database', 'username', 'password')
|
|
*
|
|
* // without password / with blank password
|
|
* var sequelize = new Sequelize('database', 'username', null, {})
|
|
*
|
|
* // with password and options
|
|
* var sequelize = new Sequelize('my_database', 'john', 'doe', {})
|
|
*
|
|
* // with uri (see below)
|
|
* var sequelize = new Sequelize('mysql://localhost:3306/database', {})
|
|
* ```
|
|
*
|
|
* @param database The name of the database
|
|
* @param username The username which is used to authenticate against the
|
|
* database.
|
|
* @param password The password which is used to authenticate against the
|
|
* database.
|
|
* @param options An object with options.
|
|
*/
|
|
new ( database : string, username : string, password : string, options? : Options ) : Sequelize;
|
|
new ( database : string, username : string, options? : Options ) : Sequelize;
|
|
|
|
/**
|
|
* Instantiate sequelize with an URI
|
|
* @name Sequelize
|
|
* @constructor
|
|
*
|
|
* @param uri A full database URI
|
|
* @param options See above for possible options
|
|
*/
|
|
new ( uri : string, options? : Options ) : Sequelize;
|
|
|
|
/**
|
|
* Provide access to continuation-local-storage (http://docs.sequelizejs.com/en/latest/api/sequelize/#transactionoptions-promise)
|
|
*/
|
|
cls: any;
|
|
|
|
}
|
|
|
|
interface QueryOptionsTransactionRequired { }
|
|
interface ModelsHashInterface {
|
|
[name: string]: Model<any, any>;
|
|
}
|
|
|
|
/**
|
|
* This is the main class, the entry point to sequelize. To use it, you just need to
|
|
* import sequelize:
|
|
*
|
|
* ```js
|
|
* var Sequelize = require('sequelize');
|
|
* ```
|
|
*
|
|
* In addition to sequelize, the connection library for the dialect you want to use
|
|
* should also be installed in your project. You don't need to import it however, as
|
|
* sequelize will take care of that.
|
|
*/
|
|
interface Sequelize extends SequelizeStaticAndInstance, Hooks<any> {
|
|
|
|
/**
|
|
* A reference to Sequelize constructor from sequelize. Useful for accessing DataTypes, Errors etc.
|
|
*/
|
|
Sequelize: SequelizeStatic;
|
|
|
|
/**
|
|
* Defined models.
|
|
*/
|
|
models: ModelsHashInterface;
|
|
|
|
/**
|
|
* Returns the specified dialect.
|
|
*/
|
|
getDialect() : string;
|
|
|
|
/**
|
|
* Returns an instance of QueryInterface.
|
|
*/
|
|
getQueryInterface(): QueryInterface;
|
|
|
|
/**
|
|
* Define a new model, representing a table in the DB.
|
|
*
|
|
* The table columns are define by the hash that is given as the second argument. Each attribute of the
|
|
* hash
|
|
* represents a column. A short table definition might look like this:
|
|
*
|
|
* ```js
|
|
* sequelize.define('modelName', {
|
|
* columnA: {
|
|
* type: Sequelize.BOOLEAN,
|
|
* validate: {
|
|
* is: ["[a-z]",'i'], // will only allow letters
|
|
* max: 23, // only allow values <= 23
|
|
* isIn: {
|
|
* args: [['en', 'zh']],
|
|
* msg: "Must be English or Chinese"
|
|
* }
|
|
* },
|
|
* field: 'column_a'
|
|
* // Other attributes here
|
|
* },
|
|
* columnB: Sequelize.STRING,
|
|
* columnC: 'MY VERY OWN COLUMN TYPE'
|
|
* })
|
|
*
|
|
* sequelize.models.modelName // The model will now be available in models under the name given to define
|
|
* ```
|
|
*
|
|
* As shown above, column definitions can be either strings, a reference to one of the datatypes that are
|
|
* predefined on the Sequelize constructor, or an object that allows you to specify both the type of the
|
|
* column, and other attributes such as default values, foreign key constraints and custom setters and
|
|
* getters.
|
|
*
|
|
* For a list of possible data types, see
|
|
* http://docs.sequelizejs.com/en/latest/docs/models-definition/#data-types
|
|
*
|
|
* For more about getters and setters, see
|
|
* http://docs.sequelizejs.com/en/latest/docs/models-definition/#getters-setters
|
|
*
|
|
* For more about instance and class methods, see
|
|
* http://docs.sequelizejs.com/en/latest/docs/models-definition/#expansion-of-models
|
|
*
|
|
* For more about validation, see
|
|
* http://docs.sequelizejs.com/en/latest/docs/models-definition/#validations
|
|
*
|
|
* @param modelName The name of the model. The model will be stored in `sequelize.models` under this name
|
|
* @param attributes An object, where each attribute is a column of the table. Each column can be either a
|
|
* DataType, a string or a type-description object, with the properties described below:
|
|
* @param options These options are merged with the default define options provided to the Sequelize
|
|
* constructor
|
|
*/
|
|
define<TInstance, TAttributes>( modelName : string, attributes : DefineAttributes,
|
|
options? : DefineOptions<TInstance> ) : Model<TInstance, TAttributes>;
|
|
|
|
/**
|
|
* Fetch a Model which is already defined
|
|
*
|
|
* @param modelName The name of a model defined with Sequelize.define
|
|
*/
|
|
model<TInstance, TAttributes>( modelName : string ) : Model<TInstance, TAttributes>;
|
|
|
|
/**
|
|
* Checks whether a model with the given name is defined
|
|
*
|
|
* @param modelName The name of a model defined with Sequelize.define
|
|
*/
|
|
isDefined( modelName : string ) : boolean;
|
|
|
|
/**
|
|
* Imports a model defined in another file
|
|
*
|
|
* Imported models are cached, so multiple calls to import with the same path will not load the file
|
|
* multiple times
|
|
*
|
|
* See https://github.com/sequelize/sequelize/blob/master/examples/using-multiple-model-files/Task.js for a
|
|
* short example of how to define your models in separate files so that they can be imported by
|
|
* sequelize.import
|
|
*
|
|
* @param path The path to the file that holds the model you want to import. If the part is relative, it
|
|
* will be resolved relatively to the calling file
|
|
*
|
|
* @param defineFunction An optional function that provides model definitions. Useful if you do not
|
|
* want to use the module root as the define function
|
|
*/
|
|
import<TInstance, TAttributes>( path : string, defineFunction? : (sequelize: Sequelize, dataTypes: DataTypes) => Model<TInstance, TAttributes> ) : Model<TInstance, TAttributes>;
|
|
|
|
/**
|
|
* Execute a query on the DB, with the posibility to bypass all the sequelize goodness.
|
|
*
|
|
* By default, the function will return two arguments: an array of results, and a metadata object,
|
|
* containing number of affected rows etc. Use `.spread` to access the results.
|
|
*
|
|
* If you are running a type of query where you don't need the metadata, for example a `SELECT` query, you
|
|
* can pass in a query type to make sequelize format the results:
|
|
*
|
|
* ```js
|
|
* sequelize.query('SELECT...').spread(function (results, metadata) {
|
|
* // Raw query - use spread
|
|
* });
|
|
*
|
|
* sequelize.query('SELECT...', { type: sequelize.QueryTypes.SELECT }).then(function (results) {
|
|
* // SELECT query - use then
|
|
* })
|
|
* ```
|
|
*
|
|
* @param sql
|
|
* @param options Query options
|
|
*/
|
|
query( sql : string | { query: string, values: any[] }, options? : QueryOptions ) : Promise<any>;
|
|
|
|
/**
|
|
* Execute a query which would set an environment or user variable. The variables are set per connection,
|
|
* so this function needs a transaction.
|
|
*
|
|
* Only works for MySQL.
|
|
*
|
|
* @param variables Object with multiple variables.
|
|
* @param options Query options.
|
|
*/
|
|
set( variables : Object, options : QueryOptionsTransactionRequired ) : Promise<any>;
|
|
|
|
/**
|
|
* Escape value.
|
|
*
|
|
* @param value Value that needs to be escaped
|
|
*/
|
|
escape( value : string ) : string;
|
|
|
|
/**
|
|
* Create a new database schema.
|
|
*
|
|
* Note,that this is a schema in the
|
|
* [postgres sense of the word](http://www.postgresql.org/docs/9.1/static/ddl-schemas.html),
|
|
* not a database table. In mysql and sqlite, this command will do nothing.
|
|
*
|
|
* @param schema Name of the schema
|
|
* @param options Options supplied
|
|
* @param options.logging A function that logs sql queries, or false for no logging
|
|
*/
|
|
createSchema( schema : string, options : { logging? : boolean | Function } ) : Promise<any>;
|
|
|
|
/**
|
|
* Show all defined schemas
|
|
*
|
|
* Note,that this is a schema in the
|
|
* [postgres sense of the word](http://www.postgresql.org/docs/9.1/static/ddl-schemas.html),
|
|
* not a database table. In mysql and sqlite, this will show all tables.
|
|
*
|
|
* @param options Options supplied
|
|
* @param options.logging A function that logs sql queries, or false for no logging
|
|
*/
|
|
showAllSchemas( options : { logging? : boolean | Function } ) : Promise<any>;
|
|
|
|
/**
|
|
* Drop a single schema
|
|
*
|
|
* Note,that this is a schema in the
|
|
* [postgres sense of the word](http://www.postgresql.org/docs/9.1/static/ddl-schemas.html),
|
|
* not a database table. In mysql and sqlite, this drop a table matching the schema name
|
|
*
|
|
* @param schema Name of the schema
|
|
* @param options Options supplied
|
|
* @param options.logging A function that logs sql queries, or false for no logging
|
|
*/
|
|
dropSchema( schema : string, options : { logging? : boolean | Function } ) : Promise<any>;
|
|
|
|
/**
|
|
* Drop all schemas
|
|
*
|
|
* Note,that this is a schema in the
|
|
* [postgres sense of the word](http://www.postgresql.org/docs/9.1/static/ddl-schemas.html),
|
|
* not a database table. In mysql and sqlite, this is the equivalent of drop all tables.
|
|
*
|
|
* @param options Options supplied
|
|
* @param options.logging A function that logs sql queries, or false for no logging
|
|
*/
|
|
dropAllSchemas( options : { logging? : boolean | Function } ) : Promise<any>;
|
|
|
|
/**
|
|
* Sync all defined models to the DB.
|
|
*
|
|
* @param options Sync Options
|
|
*/
|
|
sync( options? : SyncOptions ) : Promise<any>;
|
|
|
|
/**
|
|
* Truncate all tables defined through the sequelize models. This is done
|
|
* by calling Model.truncate() on each model.
|
|
*
|
|
* @param {object} [options] The options passed to Model.destroy in addition to truncate
|
|
* @param {Boolean|function} [options.transaction]
|
|
* @param {Boolean|function} [options.logging] A function that logs sql queries, or false for no logging
|
|
*/
|
|
truncate( options? : DestroyOptions ) : Promise<any>;
|
|
|
|
/**
|
|
* Drop all tables defined through this sequelize instance. This is done by calling Model.drop on each model
|
|
* @see {Model#drop} for options
|
|
*
|
|
* @param options The options passed to each call to Model.drop
|
|
*/
|
|
drop( options? : DropOptions ) : Promise<any>;
|
|
|
|
/**
|
|
* Test the connection by trying to authenticate
|
|
*
|
|
* @param options Query Options for authentication
|
|
*/
|
|
authenticate( options? : QueryOptions ) : Promise<void>;
|
|
validate( options? : QueryOptions ) : Promise<ValidationError>;
|
|
|
|
/**
|
|
* Start a transaction. When using transactions, you should pass the transaction in the options argument
|
|
* in order for the query to happen under that transaction
|
|
*
|
|
* ```js
|
|
* sequelize.transaction().then(function (t) {
|
|
* return User.find(..., { transaction: t}).then(function (user) {
|
|
* return user.updateAttributes(..., { transaction: t});
|
|
* })
|
|
* .then(t.commit.bind(t))
|
|
* .catch(t.rollback.bind(t));
|
|
* })
|
|
* ```
|
|
*
|
|
* A syntax for automatically committing or rolling back based on the promise chain resolution is also
|
|
* supported:
|
|
*
|
|
* ```js
|
|
* sequelize.transaction(function (t) { // Note that we use a callback rather than a promise.then()
|
|
* return User.find(..., { transaction: t}).then(function (user) {
|
|
* return user.updateAttributes(..., { transaction: t});
|
|
* });
|
|
* }).then(function () {
|
|
* // Commited
|
|
* }).catch(function (err) {
|
|
* // Rolled back
|
|
* console.error(err);
|
|
* });
|
|
* ```
|
|
*
|
|
* If you have [CLS](https://github.com/othiym23/node-continuation-local-storage) enabled, the transaction
|
|
* will automatically be passed to any query that runs witin the callback. To enable CLS, add it do your
|
|
* project, create a namespace and set it on the sequelize constructor:
|
|
*
|
|
* ```js
|
|
* var cls = require('continuation-local-storage'),
|
|
* ns = cls.createNamespace('....');
|
|
* var Sequelize = require('sequelize');
|
|
* Sequelize.cls = ns;
|
|
* ```
|
|
* Note, that CLS is enabled for all sequelize instances, and all instances will share the same namespace
|
|
*
|
|
* @param options Transaction Options
|
|
* @param autoCallback Callback for the transaction
|
|
*/
|
|
transaction( options : TransactionOptions,
|
|
autoCallback : ( t : Transaction ) => Promise<any> ) : Promise<any>;
|
|
transaction( autoCallback : ( t : Transaction ) => Promise<any> ) : Promise<any>;
|
|
transaction() : Promise<Transaction>;
|
|
|
|
/**
|
|
* Close all connections used by this sequelize instance, and free all references so the instance can be
|
|
* garbage collected.
|
|
*
|
|
* Normally this is done on process exit, so you only need to call this method if you are creating multiple
|
|
* instances, and want to garbage collect some of them.
|
|
*/
|
|
close() : void;
|
|
|
|
/**
|
|
* Returns the database version
|
|
*/
|
|
databaseVersion() : Promise<string>;
|
|
|
|
}
|
|
|
|
//
|
|
// Validator
|
|
// ~~~~~~~~~~~
|
|
|
|
/**
|
|
* Validator Interface
|
|
*/
|
|
interface Validator extends ValidatorJS.ValidatorStatic {
|
|
|
|
notEmpty( str : string ) : boolean;
|
|
len( str : string, min : number, max : number ) : boolean;
|
|
isUrl( str : string ) : boolean;
|
|
isIPv6( str : string ) : boolean;
|
|
isIPv4( str : string ) : boolean;
|
|
notIn( str : string, values : string[] ) : boolean;
|
|
regex( str : string, pattern : string, modifiers : string ) : boolean;
|
|
notRegex( str : string, pattern : string, modifiers : string ) : boolean;
|
|
isDecimal( str : string ) : boolean;
|
|
min( str : string, val : number ) : boolean;
|
|
max( str : string, val : number ) : boolean;
|
|
not( str : string, pattern : string, modifiers : string ) : boolean;
|
|
contains( str : string, element : string[] ) : boolean;
|
|
notContains( str : string, element : string[] ) : boolean;
|
|
is( str : string, pattern : string, modifiers : string ) : boolean;
|
|
|
|
}
|
|
|
|
//
|
|
// Transaction
|
|
// ~~~~~~~~~~~~~
|
|
//
|
|
// https://github.com/sequelize/sequelize/blob/v3.4.1/lib/transaction.js
|
|
//
|
|
|
|
/**
|
|
* The transaction object is used to identify a running transaction. It is created by calling
|
|
* `Sequelize.transaction()`.
|
|
*
|
|
* To run a query under a transaction, you should pass the transaction in the options object.
|
|
*/
|
|
interface Transaction {
|
|
|
|
/**
|
|
* Possible options for row locking. Used in conjuction with `find` calls:
|
|
*
|
|
* @see TransactionStatic
|
|
*/
|
|
LOCK : TransactionLock;
|
|
|
|
/**
|
|
* Commit the transaction
|
|
*/
|
|
commit() : Promise<void>;
|
|
|
|
/**
|
|
* Rollback (abort) the transaction
|
|
*/
|
|
rollback() : Promise<void>;
|
|
|
|
}
|
|
|
|
/**
|
|
* The transaction static object
|
|
*
|
|
* @see Transaction
|
|
*/
|
|
interface TransactionStatic {
|
|
|
|
/**
|
|
* Isolations levels can be set per-transaction by passing `options.isolationLevel` to
|
|
* `sequelize.transaction`. Default to `REPEATABLE_READ` but you can override the default isolation level
|
|
* by passing
|
|
* `options.isolationLevel` in `new Sequelize`.
|
|
*
|
|
* The possible isolations levels to use when starting a transaction:
|
|
*
|
|
* ```js
|
|
* {
|
|
* READ_UNCOMMITTED: "READ UNCOMMITTED",
|
|
* READ_COMMITTED: "READ COMMITTED",
|
|
* REPEATABLE_READ: "REPEATABLE READ",
|
|
* SERIALIZABLE: "SERIALIZABLE"
|
|
* }
|
|
* ```
|
|
*
|
|
* Pass in the desired level as the first argument:
|
|
*
|
|
* ```js
|
|
* return sequelize.transaction({
|
|
* isolationLevel: Sequelize.Transaction.SERIALIZABLE
|
|
* }, function (t) {
|
|
*
|
|
* // your transactions
|
|
*
|
|
* }).then(function(result) {
|
|
* // transaction has been committed. Do something after the commit if required.
|
|
* }).catch(function(err) {
|
|
* // do something with the err.
|
|
* });
|
|
* ```
|
|
*
|
|
* @see ISOLATION_LEVELS
|
|
*/
|
|
ISOLATION_LEVELS : TransactionIsolationLevels;
|
|
|
|
/**
|
|
* Transaction type can be set per-transaction by passing `options.type` to
|
|
* `sequelize.transaction`. Default to `DEFERRED` but you can override the default isolation level
|
|
* by passing `options.transactionType` in `new Sequelize`.
|
|
*
|
|
* The transaction types to use when starting a transaction:
|
|
*
|
|
* ```js
|
|
* {
|
|
* DEFERRED: "DEFERRED",
|
|
* IMMEDIATE: "IMMEDIATE",
|
|
* EXCLUSIVE: "EXCLUSIVE"
|
|
* }
|
|
* ```
|
|
*
|
|
* Pass in the transaction type the first argument:
|
|
*
|
|
* ```js
|
|
* return sequelize.transaction({
|
|
* type: Sequelize.Transaction.EXCLUSIVE
|
|
* }, function (t) {
|
|
*
|
|
* // your transactions
|
|
*
|
|
* }).then(function(result) {
|
|
* // transaction has been committed. Do something after the commit if required.
|
|
* }).catch(function(err) {
|
|
* // do something with the err.
|
|
* });
|
|
* ```
|
|
*
|
|
* @see Sequelize.Transaction.TYPES
|
|
*/
|
|
TYPES : TransactionTypes;
|
|
|
|
/**
|
|
* Possible options for row locking. Used in conjuction with `find` calls:
|
|
*
|
|
* ```js
|
|
* t1 // is a transaction
|
|
* t1.LOCK.UPDATE,
|
|
* t1.LOCK.SHARE,
|
|
* t1.LOCK.KEY_SHARE, // Postgres 9.3+ only
|
|
* t1.LOCK.NO_KEY_UPDATE // Postgres 9.3+ only
|
|
* ```
|
|
*
|
|
* Usage:
|
|
* ```js
|
|
* t1 // is a transaction
|
|
* Model.findAll({
|
|
* where: ...,
|
|
* transaction: t1,
|
|
* lock: t1.LOCK...
|
|
* });
|
|
* ```
|
|
*
|
|
* Postgres also supports specific locks while eager loading by using OF:
|
|
* ```js
|
|
* UserModel.findAll({
|
|
* where: ...,
|
|
* include: [TaskModel, ...],
|
|
* transaction: t1,
|
|
* lock: {
|
|
* level: t1.LOCK...,
|
|
* of: UserModel
|
|
* }
|
|
* });
|
|
* ```
|
|
* UserModel will be locked but TaskModel won't!
|
|
*/
|
|
LOCK : TransactionLock;
|
|
|
|
}
|
|
|
|
/**
|
|
* Isolations levels can be set per-transaction by passing `options.isolationLevel` to `sequelize.transaction`.
|
|
* Default to `REPEATABLE_READ` but you can override the default isolation level by passing
|
|
* `options.isolationLevel` in `new Sequelize`.
|
|
*/
|
|
interface TransactionIsolationLevels {
|
|
READ_UNCOMMITTED: string; // 'READ UNCOMMITTED'
|
|
READ_COMMITTED: string; // 'READ COMMITTED'
|
|
REPEATABLE_READ: string; // 'REPEATABLE READ'
|
|
SERIALIZABLE: string; // 'SERIALIZABLE'
|
|
}
|
|
|
|
/**
|
|
* Transaction type can be set per-transaction by passing `options.type` to `sequelize.transaction`.
|
|
* Default to `DEFERRED` but you can override the default isolation level by passing
|
|
* `options.transactionType` in `new Sequelize`.
|
|
*/
|
|
interface TransactionTypes {
|
|
DEFERRED: string; // 'DEFERRED'
|
|
IMMEDIATE: string; // 'IMMEDIATE'
|
|
EXCLUSIVE: string; // 'EXCLUSIVE'
|
|
}
|
|
|
|
/**
|
|
* Possible options for row locking. Used in conjuction with `find` calls:
|
|
*/
|
|
interface TransactionLock {
|
|
UPDATE: string; // 'UPDATE'
|
|
SHARE: string; // 'SHARE'
|
|
KEY_SHARE: string; // 'KEY SHARE'
|
|
NO_KEY_UPDATE: string; // 'NO KEY UPDATE'
|
|
}
|
|
|
|
/**
|
|
* Options provided when the transaction is created
|
|
*
|
|
* @see sequelize.transaction()
|
|
*/
|
|
interface TransactionOptions {
|
|
|
|
autocommit?: boolean;
|
|
|
|
/**
|
|
* See `Sequelize.Transaction.ISOLATION_LEVELS` for possible options
|
|
*/
|
|
isolationLevel?: string;
|
|
|
|
/**
|
|
* See `Sequelize.Transaction.TYPES` for possible options
|
|
*/
|
|
type?: string;
|
|
|
|
/**
|
|
* A function that gets executed while running the query to log the sql.
|
|
*/
|
|
logging?: Function;
|
|
|
|
}
|
|
|
|
//
|
|
// Utils
|
|
// ~~~~~~~
|
|
|
|
interface fn {
|
|
clone : fnStatic;
|
|
}
|
|
|
|
interface fnStatic {
|
|
/**
|
|
* @param fn The function you want to call
|
|
* @param args All further arguments will be passed as arguments to the function
|
|
*/
|
|
new ( fn : string, ...args : any[] ) : fn;
|
|
}
|
|
|
|
interface col {
|
|
col: string;
|
|
}
|
|
|
|
interface colStatic {
|
|
/**
|
|
* Creates a object representing a column in the DB. This is often useful in conjunction with
|
|
* `sequelize.fn`, since raw string arguments to fn will be escaped.
|
|
* @see {Sequelize#fn}
|
|
*
|
|
* @param col The name of the column
|
|
*/
|
|
new ( col : string ) : col;
|
|
}
|
|
|
|
interface cast {
|
|
val: any;
|
|
type: string;
|
|
}
|
|
|
|
interface castStatic {
|
|
/**
|
|
* Creates a object representing a call to the cast function.
|
|
*
|
|
* @param val The value to cast
|
|
* @param type The type to cast it to
|
|
*/
|
|
new ( val : any, type : string ) : cast;
|
|
}
|
|
|
|
interface literal {
|
|
val: any;
|
|
}
|
|
|
|
interface literalStatic {
|
|
/**
|
|
* Creates a object representing a literal, i.e. something that will not be escaped.
|
|
*
|
|
* @param val
|
|
*/
|
|
new ( val : any ) : literal;
|
|
}
|
|
|
|
interface and {
|
|
args: any[];
|
|
}
|
|
|
|
interface andStatic {
|
|
/**
|
|
* An AND query
|
|
*
|
|
* @param args Each argument will be joined by AND
|
|
*/
|
|
new ( ...args : Array<string | Object> ) : and;
|
|
}
|
|
|
|
interface or {
|
|
args: any[];
|
|
}
|
|
|
|
interface orStatic {
|
|
/**
|
|
* An OR query
|
|
* @see {Model#find}
|
|
*
|
|
* @param args Each argument will be joined by OR
|
|
*/
|
|
new ( ...args : Array<string | Object> ) : or;
|
|
}
|
|
|
|
interface json {
|
|
conditions?: Object;
|
|
path? : string;
|
|
value? : string | number | boolean;
|
|
}
|
|
|
|
interface jsonStatic {
|
|
/**
|
|
* Creates an object representing nested where conditions for postgres's json data-type.
|
|
* @see {Model#find}
|
|
*
|
|
* @method json
|
|
* @param conditionsOrPath A hash containing strings/numbers or other nested hash, a string using dot
|
|
* notation or a string using postgres json syntax.
|
|
* @param value An optional value to compare against. Produces a string of the form "<json path> =
|
|
* '<value>'".
|
|
*/
|
|
new ( conditionsOrPath : string | Object, value? : string | number | boolean ) : json;
|
|
}
|
|
|
|
interface where {
|
|
attribute : Object;
|
|
comparator? : string;
|
|
logic : string | Object;
|
|
}
|
|
|
|
interface whereStatic {
|
|
/**
|
|
* A way of specifying attr = condition.
|
|
*
|
|
* The attr can either be an object taken from `Model.rawAttributes` (for example `Model.rawAttributes.id`
|
|
* or
|
|
* `Model.rawAttributes.name`). The attribute should be defined in your model definition. The attribute can
|
|
* also be an object from one of the sequelize utility functions (`sequelize.fn`, `sequelize.col` etc.)
|
|
*
|
|
* For string attributes, use the regular `{ where: { attr: something }}` syntax. If you don't want your
|
|
* string to be escaped, use `sequelize.literal`.
|
|
*
|
|
* @param attr The attribute, which can be either an attribute object from `Model.rawAttributes` or a
|
|
* sequelize object, for example an instance of `sequelize.fn`. For simple string attributes, use the
|
|
* POJO syntax
|
|
* @param comparator Comparator
|
|
* @param logic The condition. Can be both a simply type, or a further condition (`.or`, `.and`, `.literal`
|
|
* etc.)
|
|
*/
|
|
new ( attr : Object, comparator : string, logic : string | Object ) : where;
|
|
new ( attr : Object, logic : string | Object ) : where;
|
|
}
|
|
|
|
interface SequelizeLoDash extends _.LoDashStatic {
|
|
|
|
camelizeIf( str : string, condition : boolean ): string;
|
|
underscoredIf( str : string, condition : boolean ): string;
|
|
/**
|
|
* * Returns an array with some falsy values removed. The values null, "", undefined and NaN are considered
|
|
* falsey.
|
|
*
|
|
* @param arr Array to compact.
|
|
*/
|
|
compactLite<T>( arr : T[] ): T[];
|
|
matchesDots( dots : string | string[], value : Object ) : ( item : Object ) => boolean;
|
|
|
|
}
|
|
|
|
interface Utils {
|
|
|
|
_ : SequelizeLoDash;
|
|
|
|
/**
|
|
* Same concept as _.merge, but don't overwrite properties that have already been assigned
|
|
*/
|
|
mergeDefaults : typeof _.merge;
|
|
|
|
lowercaseFirst( str : string ): string;
|
|
uppercaseFirst( str : string ): string;
|
|
spliceStr( str : string, index : number, count : number, add : string ): string;
|
|
camelize( str : string ): string;
|
|
format( arr : any[], dialect? : string ): string;
|
|
formatNamedParameters( sql : string, parameters : any, dialect? : string ): string;
|
|
cloneDeep<T extends Object>( obj : T, fn? : ( value : T ) => any ) : T;
|
|
mapOptionFieldNames<T extends Object>( options : T, Model : Model<any, any> ) : T;
|
|
mapValueFieldNames( dataValues : Object, fields : string[], Model : Model<any, any> ) : Object;
|
|
argsArePrimaryKeys( args : any[], primaryKeys : Object ) : boolean;
|
|
canTreatArrayAsAnd( arr : any[] ) : boolean;
|
|
combineTableNames( tableName1 : string, tableName2 : string ): string;
|
|
singularize( s : string ): string;
|
|
pluralize( s : string ): string;
|
|
removeCommentsFromFunctionString( s : string ): string;
|
|
toDefaultValue( value : DataTypeAbstract ): any;
|
|
toDefaultValue( value : () => DataTypeAbstract ): any;
|
|
|
|
/**
|
|
* Determine if the default value provided exists and can be described
|
|
* in a db schema using the DEFAULT directive.
|
|
*/
|
|
defaultValueSchemable( value : any ) : boolean;
|
|
|
|
removeNullValuesFromHash( hash : Object, omitNull? : boolean, options? : Object ): any;
|
|
inherit( subClass : Object, superClass : Object ): Object;
|
|
stack(): string;
|
|
sliceArgs( args : any[], begin? : number ) : any[];
|
|
now( dialect : string ): Date;
|
|
tick( f : Function ): void;
|
|
addTicks( s : string, tickChar? : string ): string;
|
|
removeTicks( s : string, tickChar? : string ): string;
|
|
|
|
fn: fnStatic;
|
|
col: colStatic;
|
|
cast: castStatic;
|
|
literal: literalStatic;
|
|
and: andStatic;
|
|
or: orStatic;
|
|
json: jsonStatic;
|
|
where: whereStatic;
|
|
|
|
validateParameter( value : Object, expectation : Object, options? : Object ) : boolean;
|
|
formatReferences( obj : Object ) : Object;
|
|
Promise : typeof Promise;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var sequelize : sequelize.SequelizeStatic;
|
|
|
|
export = sequelize;
|
|
|
|
}
|