objection
Version:
An SQL-friendly ORM for Node.js
35 lines (30 loc) • 1.06 kB
JavaScript
/**
* @param {Array.<Model|Object>|Model|Object} models
* @param {Constructor.<Model>} modelClass
* @param {function(model, modelClass, parent, relation)} visitor
*/
export function visitModels(models, modelClass, visitor) {
doVisit(models, modelClass, null, null, visitor);
}
function doVisit(models, modelClass, parent, rel, visitor) {
if (Array.isArray(models)) {
visitMany(models, modelClass, parent, rel, visitor);
} else if (models) {
visitOne(models, modelClass, parent, rel, visitor);
}
}
function visitMany(models, modelClass, parent, rel, visitor) {
for (let i = 0, l = models.length; i < l; ++i) {
visitOne(models[i], modelClass, parent, rel, visitor);
}
}
function visitOne(model, modelClass, parent, rel, visitor) {
if (model) {
visitor(model, modelClass, parent, rel);
}
const relations = modelClass.getRelationArray();
for (let i = 0, l = relations.length; i < l; ++i) {
const relation = relations[i];
doVisit(model[relation.name], relation.relatedModelClass, model, relation, visitor);
}
}