| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- "use strict";
- const Toposort = require("toposort-class");
- const _ = require("lodash");
- class ModelManager {
- constructor(sequelize) {
- this.models = [];
- this.sequelize = sequelize;
- }
- addModel(model) {
- this.models.push(model);
- this.sequelize.models[model.name] = model;
- return model;
- }
- removeModel(modelToRemove) {
- this.models = this.models.filter((model) => model.name !== modelToRemove.name);
- delete this.sequelize.models[modelToRemove.name];
- }
- getModel(against, options) {
- options = _.defaults(options || {}, {
- attribute: "name"
- });
- return this.models.find((model) => model[options.attribute] === against);
- }
- get all() {
- return this.models;
- }
- getModelsTopoSortedByForeignKey() {
- const models = /* @__PURE__ */ new Map();
- const sorter = new Toposort();
- for (const model of this.models) {
- let deps = [];
- let tableName = model.getTableName();
- if (_.isObject(tableName)) {
- tableName = `${tableName.schema}.${tableName.tableName}`;
- }
- models.set(tableName, model);
- for (const attrName in model.rawAttributes) {
- if (Object.prototype.hasOwnProperty.call(model.rawAttributes, attrName)) {
- const attribute = model.rawAttributes[attrName];
- if (attribute.references) {
- let dep = attribute.references.model;
- if (_.isObject(dep)) {
- dep = `${dep.schema}.${dep.tableName}`;
- }
- deps.push(dep);
- }
- }
- }
- deps = deps.filter((dep) => tableName !== dep);
- sorter.add(tableName, deps);
- }
- let sorted;
- try {
- sorted = sorter.sort();
- } catch (e) {
- if (!e.message.startsWith("Cyclic dependency found.")) {
- throw e;
- }
- return null;
- }
- return sorted.map((modelName) => {
- return models.get(modelName);
- }).filter(Boolean);
- }
- forEachModel(iterator, options) {
- const sortedModels = this.getModelsTopoSortedByForeignKey();
- if (sortedModels == null) {
- throw new Error("Cyclic dependency found.");
- }
- options = _.defaults(options || {}, {
- reverse: true
- });
- if (options.reverse) {
- sortedModels.reverse();
- }
- for (const model of sortedModels) {
- iterator(model);
- }
- }
- }
- module.exports = ModelManager;
- module.exports.ModelManager = ModelManager;
- module.exports.default = ModelManager;
- //# sourceMappingURL=model-manager.js.map
|