Skip to content

Commit

Permalink
fix(hooks): defer applying embedded discriminator hooks until top-lev…
Browse files Browse the repository at this point in the history
…el model is compiled

Re: #5706
  • Loading branch information
vkarpov15 committed Nov 8, 2017
1 parent 54d9189 commit b4cf78f
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 8 deletions.
3 changes: 0 additions & 3 deletions lib/schema/documentarray.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ var EventEmitter = require('events').EventEmitter;
var MongooseDocumentArray = require('../types/documentarray');
var SchemaType = require('../schematype');
var Subdocument = require('../types/embedded');
var applyHooks = require('../services/model/applyHooks');
var discriminator = require('../services/model/discriminator');
var util = require('util');
var utils = require('../utils');
Expand Down Expand Up @@ -120,8 +119,6 @@ DocumentArray.prototype.discriminator = function(name, schema) {

this.casterConstructor.discriminators[name] = EmbeddedDocument;

applyHooks(EmbeddedDocument, schema);

return this.casterConstructor.discriminators[name];
};

Expand Down
3 changes: 0 additions & 3 deletions lib/schema/embedded.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ var $exists = require('./operators/exists');
var EventEmitter = require('events').EventEmitter;
var SchemaType = require('../schematype');
var Subdocument = require('../types/subdocument');
var applyHooks = require('../services/model/applyHooks');
var castToNumber = require('./operators/helpers').castToNumber;
var discriminator = require('../services/model/discriminator');
var geospatial = require('./operators/geospatial');
Expand Down Expand Up @@ -255,7 +254,5 @@ Embedded.prototype.discriminator = function(name, schema) {

this.caster.discriminators[name] = _createConstructor(schema);

applyHooks(this.caster.discriminators[name], schema);

return this.caster.discriminators[name];
};
12 changes: 10 additions & 2 deletions lib/services/model/applyHooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@ function applyHooks(model, schema) {

model.$appliedHooks = true;
for (i = 0; i < schema.childSchemas.length; ++i) {
if (schema.childSchemas[i].model.$appliedHooks) {
var childModel = schema.childSchemas[i].model;
if (childModel.$appliedHooks) {
continue;
}
applyHooks(schema.childSchemas[i].model, schema.childSchemas[i].schema);
if (childModel.discriminators != null) {
keys = Object.keys(childModel.discriminators);
for (j = 0; j < keys.length; ++j) {
applyHooks(childModel.discriminators[keys[j]],
childModel.discriminators[keys[j]].schema);
}
}
applyHooks(childModel, schema.childSchemas[i].schema);
}

if (!q.length) {
Expand Down

0 comments on commit b4cf78f

Please sign in to comment.