| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- "use strict";
- const _ = require("lodash");
- const HasOne = require("./has-one");
- const HasMany = require("./has-many");
- const BelongsToMany = require("./belongs-to-many");
- const BelongsTo = require("./belongs-to");
- function isModel(model, sequelize) {
- return model && model.prototype && model.prototype instanceof sequelize.Sequelize.Model;
- }
- const Mixin = {
- hasMany(target, options = {}) {
- if (!isModel(target, this.sequelize)) {
- throw new Error(`${this.name}.hasMany called with something that's not a subclass of Sequelize.Model`);
- }
- const source = this;
- options.hooks = options.hooks === void 0 ? false : Boolean(options.hooks);
- options.useHooks = options.hooks;
- Object.assign(options, _.omit(source.options, ["hooks"]));
- if (options.useHooks) {
- this.runHooks("beforeAssociate", { source, target, type: HasMany }, options);
- }
- const association = new HasMany(source, target, options);
- source.associations[association.associationAccessor] = association;
- association._injectAttributes();
- association.mixin(source.prototype);
- if (options.useHooks) {
- this.runHooks("afterAssociate", { source, target, type: HasMany, association }, options);
- }
- return association;
- },
- belongsToMany(target, options = {}) {
- if (!isModel(target, this.sequelize)) {
- throw new Error(`${this.name}.belongsToMany called with something that's not a subclass of Sequelize.Model`);
- }
- const source = this;
- options.hooks = options.hooks === void 0 ? false : Boolean(options.hooks);
- options.useHooks = options.hooks;
- options.timestamps = options.timestamps === void 0 ? this.sequelize.options.timestamps : options.timestamps;
- Object.assign(options, _.omit(source.options, ["hooks", "timestamps", "scopes", "defaultScope"]));
- if (options.useHooks) {
- this.runHooks("beforeAssociate", { source, target, type: BelongsToMany }, options);
- }
- const association = new BelongsToMany(source, target, options);
- source.associations[association.associationAccessor] = association;
- association._injectAttributes();
- association.mixin(source.prototype);
- if (options.useHooks) {
- this.runHooks("afterAssociate", { source, target, type: BelongsToMany, association }, options);
- }
- return association;
- },
- getAssociations(target) {
- return Object.values(this.associations).filter((association) => association.target.name === target.name);
- },
- getAssociationForAlias(target, alias) {
- return this.getAssociations(target).find((association) => association.verifyAssociationAlias(alias)) || null;
- }
- };
- function singleLinked(Type) {
- return function(target, options = {}) {
- const source = this;
- if (!isModel(target, source.sequelize)) {
- throw new Error(`${source.name}.${_.lowerFirst(Type.name)} called with something that's not a subclass of Sequelize.Model`);
- }
- options.hooks = options.hooks === void 0 ? false : Boolean(options.hooks);
- options.useHooks = options.hooks;
- if (options.useHooks) {
- source.runHooks("beforeAssociate", { source, target, type: Type }, options);
- }
- const association = new Type(source, target, Object.assign(options, source.options));
- source.associations[association.associationAccessor] = association;
- association._injectAttributes();
- association.mixin(source.prototype);
- if (options.useHooks) {
- source.runHooks("afterAssociate", { source, target, type: Type, association }, options);
- }
- return association;
- };
- }
- Mixin.hasOne = singleLinked(HasOne);
- Mixin.belongsTo = singleLinked(BelongsTo);
- module.exports = Mixin;
- module.exports.Mixin = Mixin;
- module.exports.default = Mixin;
- //# sourceMappingURL=mixin.js.map
|