Skip to content

Commit 31b84f0

Browse files
committed
fix: use lazy loading to avoid browserDocument edge case
Fix #5842
1 parent a5b3899 commit 31b84f0

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

lib/schema/array.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ var Types = {
1515
ObjectId: require('./objectid'),
1616
Buffer: require('./buffer')
1717
};
18-
var MongooseArray = require('../types').Array;
19-
var EmbeddedDoc = require('../types').Embedded;
2018
var Mixed = require('./mixed');
2119
var cast = require('../cast');
2220
var util = require('util');
2321
var utils = require('../utils');
2422
var castToNumber = require('./operators/helpers').castToNumber;
2523
var geospatial = require('./operators/geospatial');
2624

25+
var MongooseArray;
26+
var EmbeddedDoc;
27+
2728
/**
2829
* Array SchemaType constructor
2930
*
@@ -35,6 +36,9 @@ var geospatial = require('./operators/geospatial');
3536
*/
3637

3738
function SchemaArray(key, cast, options, schemaOptions) {
39+
// lazy load
40+
EmbeddedDoc || (EmbeddedDoc = require('../types').Embedded);
41+
3842
var typeKey = 'type';
3943
if (schemaOptions && schemaOptions.typeKey) {
4044
typeKey = schemaOptions.typeKey;
@@ -155,6 +159,9 @@ SchemaArray.prototype.applyGetters = function(value, scope) {
155159
*/
156160

157161
SchemaArray.prototype.cast = function(value, doc, init) {
162+
// lazy load
163+
MongooseArray || (MongooseArray = require('../types').Array);
164+
158165
if (Array.isArray(value)) {
159166
if (!value.length && doc) {
160167
var indexes = doc.schema.indexedPaths();

lib/schema/buffer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
var handleBitwiseOperator = require('./operators/bitwise');
66
var utils = require('../utils');
77

8-
var MongooseBuffer = require('../types').Buffer;
8+
var MongooseBuffer = require('../types/buffer');
99
var SchemaType = require('../schematype');
1010

1111
var Binary = MongooseBuffer.Binary;

lib/schema/documentarray.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ var ArrayType = require('./array');
88
var CastError = require('../error/cast');
99
var Document = require('../document');
1010
var EventEmitter = require('events').EventEmitter;
11-
var MongooseDocumentArray = require('../types/documentarray');
1211
var SchemaType = require('../schematype');
13-
var Subdocument = require('../types/embedded');
1412
var discriminator = require('../services/model/discriminator');
1513
var util = require('util');
1614
var utils = require('../utils');
1715

16+
var MongooseDocumentArray;
17+
var Subdocument;
18+
1819
/**
1920
* SubdocsArray SchemaType constructor
2021
*
@@ -66,6 +67,8 @@ DocumentArray.prototype.constructor = DocumentArray;
6667
*/
6768

6869
function _createConstructor(schema, options) {
70+
Subdocument || (Subdocument = require('../types/embedded'));
71+
6972
// compile an embedded document for this schema
7073
function EmbeddedDocument() {
7174
Subdocument.apply(this, arguments);
@@ -130,6 +133,9 @@ DocumentArray.prototype.discriminator = function(name, schema) {
130133
*/
131134

132135
DocumentArray.prototype.doValidate = function(array, fn, scope, options) {
136+
// lazy load
137+
MongooseDocumentArray || (MongooseDocumentArray = require('../types/documentarray'));
138+
133139
var _this = this;
134140
SchemaType.prototype.doValidate.call(this, array, function(err) {
135141
if (err) {
@@ -251,6 +257,9 @@ DocumentArray.prototype.doValidateSync = function(array, scope) {
251257
*/
252258

253259
DocumentArray.prototype.cast = function(value, doc, init, prev, options) {
260+
// lazy load
261+
MongooseDocumentArray || (MongooseDocumentArray = require('../types/documentarray'));
262+
254263
var selected;
255264
var subdoc;
256265
var i;

lib/schema/embedded.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
var $exists = require('./operators/exists');
88
var EventEmitter = require('events').EventEmitter;
99
var SchemaType = require('../schematype');
10-
var Subdocument = require('../types/subdocument');
1110
var castToNumber = require('./operators/helpers').castToNumber;
1211
var discriminator = require('../services/model/discriminator');
1312
var geospatial = require('./operators/geospatial');
1413

14+
var Subdocument;
15+
1516
module.exports = Embedded;
1617

1718
/**
@@ -43,6 +44,9 @@ Embedded.prototype = Object.create(SchemaType.prototype);
4344
*/
4445

4546
function _createConstructor(schema) {
47+
// lazy load
48+
Subdocument || (Subdocument = require('../types/subdocument'));
49+
4650
var _embedded = function SingleNested(value, path, parent) {
4751
var _this = this;
4852

0 commit comments

Comments
 (0)