@depup/mongoose 9.1.3-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +22 -0
- package/README.md +397 -0
- package/SECURITY.md +1 -0
- package/eslint.config.mjs +198 -0
- package/index.js +64 -0
- package/lib/aggregate.js +1189 -0
- package/lib/cast/bigint.js +46 -0
- package/lib/cast/boolean.js +32 -0
- package/lib/cast/date.js +41 -0
- package/lib/cast/decimal128.js +39 -0
- package/lib/cast/double.js +50 -0
- package/lib/cast/int32.js +36 -0
- package/lib/cast/number.js +42 -0
- package/lib/cast/objectid.js +29 -0
- package/lib/cast/string.js +37 -0
- package/lib/cast/uuid.js +35 -0
- package/lib/cast.js +436 -0
- package/lib/collection.js +321 -0
- package/lib/connection.js +1855 -0
- package/lib/connectionState.js +26 -0
- package/lib/constants.js +73 -0
- package/lib/cursor/aggregationCursor.js +466 -0
- package/lib/cursor/changeStream.js +198 -0
- package/lib/cursor/queryCursor.js +622 -0
- package/lib/document.js +5521 -0
- package/lib/driver.js +15 -0
- package/lib/drivers/SPEC.md +4 -0
- package/lib/drivers/node-mongodb-native/bulkWriteResult.js +5 -0
- package/lib/drivers/node-mongodb-native/collection.js +393 -0
- package/lib/drivers/node-mongodb-native/connection.js +506 -0
- package/lib/drivers/node-mongodb-native/index.js +10 -0
- package/lib/error/browserMissingSchema.js +29 -0
- package/lib/error/bulkSaveIncompleteError.js +44 -0
- package/lib/error/bulkWriteError.js +41 -0
- package/lib/error/cast.js +158 -0
- package/lib/error/createCollectionsError.js +26 -0
- package/lib/error/divergentArray.js +40 -0
- package/lib/error/eachAsyncMultiError.js +41 -0
- package/lib/error/index.js +237 -0
- package/lib/error/invalidSchemaOption.js +32 -0
- package/lib/error/messages.js +47 -0
- package/lib/error/missingSchema.js +33 -0
- package/lib/error/mongooseError.js +13 -0
- package/lib/error/notFound.js +47 -0
- package/lib/error/objectExpected.js +31 -0
- package/lib/error/objectParameter.js +31 -0
- package/lib/error/overwriteModel.js +31 -0
- package/lib/error/parallelSave.js +33 -0
- package/lib/error/parallelValidate.js +33 -0
- package/lib/error/serverSelection.js +62 -0
- package/lib/error/setOptionError.js +103 -0
- package/lib/error/strict.js +35 -0
- package/lib/error/strictPopulate.js +31 -0
- package/lib/error/syncIndexes.js +30 -0
- package/lib/error/validation.js +97 -0
- package/lib/error/validator.js +100 -0
- package/lib/error/version.js +38 -0
- package/lib/helpers/aggregate/prepareDiscriminatorPipeline.js +39 -0
- package/lib/helpers/aggregate/stringifyFunctionOperators.js +50 -0
- package/lib/helpers/arrayDepth.js +33 -0
- package/lib/helpers/clone.js +204 -0
- package/lib/helpers/common.js +127 -0
- package/lib/helpers/createJSONSchemaTypeDefinition.js +24 -0
- package/lib/helpers/cursor/eachAsync.js +225 -0
- package/lib/helpers/discriminator/applyEmbeddedDiscriminators.js +36 -0
- package/lib/helpers/discriminator/areDiscriminatorValuesEqual.js +16 -0
- package/lib/helpers/discriminator/checkEmbeddedDiscriminatorKeyProjection.js +12 -0
- package/lib/helpers/discriminator/getConstructor.js +29 -0
- package/lib/helpers/discriminator/getDiscriminatorByValue.js +28 -0
- package/lib/helpers/discriminator/getSchemaDiscriminatorByValue.js +27 -0
- package/lib/helpers/discriminator/mergeDiscriminatorSchema.js +91 -0
- package/lib/helpers/document/applyDefaults.js +132 -0
- package/lib/helpers/document/applyTimestamps.js +106 -0
- package/lib/helpers/document/applyVirtuals.js +147 -0
- package/lib/helpers/document/cleanModifiedSubpaths.js +45 -0
- package/lib/helpers/document/compile.js +238 -0
- package/lib/helpers/document/getDeepestSubdocumentForPath.js +38 -0
- package/lib/helpers/document/getEmbeddedDiscriminatorPath.js +53 -0
- package/lib/helpers/document/handleSpreadDoc.js +35 -0
- package/lib/helpers/each.js +25 -0
- package/lib/helpers/error/combinePathErrors.js +22 -0
- package/lib/helpers/firstKey.js +8 -0
- package/lib/helpers/get.js +65 -0
- package/lib/helpers/getConstructorName.js +16 -0
- package/lib/helpers/getDefaultBulkwriteResult.js +18 -0
- package/lib/helpers/getFunctionName.js +10 -0
- package/lib/helpers/immediate.js +16 -0
- package/lib/helpers/indexes/applySchemaCollation.js +13 -0
- package/lib/helpers/indexes/decorateDiscriminatorIndexOptions.js +14 -0
- package/lib/helpers/indexes/getRelatedIndexes.js +63 -0
- package/lib/helpers/indexes/isDefaultIdIndex.js +18 -0
- package/lib/helpers/indexes/isIndexEqual.js +95 -0
- package/lib/helpers/indexes/isIndexSpecEqual.js +32 -0
- package/lib/helpers/indexes/isTextIndex.js +16 -0
- package/lib/helpers/indexes/isTimeseriesIndex.js +16 -0
- package/lib/helpers/isAsyncFunction.js +9 -0
- package/lib/helpers/isBsonType.js +15 -0
- package/lib/helpers/isMongooseObject.js +22 -0
- package/lib/helpers/isObject.js +16 -0
- package/lib/helpers/isPOJO.js +12 -0
- package/lib/helpers/isPromise.js +6 -0
- package/lib/helpers/isSimpleValidator.js +22 -0
- package/lib/helpers/minimize.js +41 -0
- package/lib/helpers/model/applyDefaultsToPOJO.js +52 -0
- package/lib/helpers/model/applyHooks.js +140 -0
- package/lib/helpers/model/applyMethods.js +70 -0
- package/lib/helpers/model/applyStaticHooks.js +33 -0
- package/lib/helpers/model/applyStatics.js +13 -0
- package/lib/helpers/model/castBulkWrite.js +316 -0
- package/lib/helpers/model/decorateBulkWriteResult.js +8 -0
- package/lib/helpers/model/discriminator.js +265 -0
- package/lib/helpers/model/pushNestedArrayPaths.js +15 -0
- package/lib/helpers/omitUndefined.js +20 -0
- package/lib/helpers/once.js +12 -0
- package/lib/helpers/parallelLimit.js +37 -0
- package/lib/helpers/path/parentPaths.js +18 -0
- package/lib/helpers/path/setDottedPath.js +33 -0
- package/lib/helpers/pluralize.js +95 -0
- package/lib/helpers/populate/assignRawDocsToIdStructure.js +129 -0
- package/lib/helpers/populate/assignVals.js +360 -0
- package/lib/helpers/populate/createPopulateQueryFilter.js +97 -0
- package/lib/helpers/populate/getModelsMapForPopulate.js +776 -0
- package/lib/helpers/populate/getSchemaTypes.js +228 -0
- package/lib/helpers/populate/getVirtual.js +103 -0
- package/lib/helpers/populate/leanPopulateMap.js +7 -0
- package/lib/helpers/populate/lookupLocalFields.js +40 -0
- package/lib/helpers/populate/markArraySubdocsPopulated.js +49 -0
- package/lib/helpers/populate/modelNamesFromRefPath.js +66 -0
- package/lib/helpers/populate/removeDeselectedForeignField.js +31 -0
- package/lib/helpers/populate/setPopulatedVirtualValue.js +33 -0
- package/lib/helpers/populate/skipPopulateValue.js +10 -0
- package/lib/helpers/populate/validateRef.js +19 -0
- package/lib/helpers/printJestWarning.js +21 -0
- package/lib/helpers/processConnectionOptions.js +65 -0
- package/lib/helpers/projection/applyProjection.js +83 -0
- package/lib/helpers/projection/hasIncludedChildren.js +41 -0
- package/lib/helpers/projection/isDefiningProjection.js +18 -0
- package/lib/helpers/projection/isExclusive.js +37 -0
- package/lib/helpers/projection/isInclusive.js +39 -0
- package/lib/helpers/projection/isNestedProjection.js +8 -0
- package/lib/helpers/projection/isPathExcluded.js +40 -0
- package/lib/helpers/projection/isPathSelectedInclusive.js +28 -0
- package/lib/helpers/projection/isSubpath.js +14 -0
- package/lib/helpers/projection/parseProjection.js +33 -0
- package/lib/helpers/query/applyGlobalOption.js +29 -0
- package/lib/helpers/query/cast$expr.js +287 -0
- package/lib/helpers/query/castFilterPath.js +54 -0
- package/lib/helpers/query/castUpdate.js +643 -0
- package/lib/helpers/query/getEmbeddedDiscriminatorPath.js +103 -0
- package/lib/helpers/query/handleImmutable.js +44 -0
- package/lib/helpers/query/handleReadPreferenceAliases.js +23 -0
- package/lib/helpers/query/hasDollarKeys.js +23 -0
- package/lib/helpers/query/isOperator.js +14 -0
- package/lib/helpers/query/sanitizeFilter.js +38 -0
- package/lib/helpers/query/sanitizeProjection.js +14 -0
- package/lib/helpers/query/selectPopulatedFields.js +62 -0
- package/lib/helpers/query/trusted.js +13 -0
- package/lib/helpers/query/validOps.js +3 -0
- package/lib/helpers/schema/addAutoId.js +7 -0
- package/lib/helpers/schema/applyBuiltinPlugins.js +12 -0
- package/lib/helpers/schema/applyPlugins.js +55 -0
- package/lib/helpers/schema/applyReadConcern.js +20 -0
- package/lib/helpers/schema/applyWriteConcern.js +39 -0
- package/lib/helpers/schema/cleanPositionalOperators.js +12 -0
- package/lib/helpers/schema/getIndexes.js +171 -0
- package/lib/helpers/schema/getKeysInSchemaOrder.js +28 -0
- package/lib/helpers/schema/getPath.js +43 -0
- package/lib/helpers/schema/getSubdocumentStrictValue.js +32 -0
- package/lib/helpers/schema/handleIdOption.js +20 -0
- package/lib/helpers/schema/handleTimestampOption.js +24 -0
- package/lib/helpers/schema/idGetter.js +34 -0
- package/lib/helpers/schema/merge.js +36 -0
- package/lib/helpers/schematype/handleImmutable.js +50 -0
- package/lib/helpers/setDefaultsOnInsert.js +158 -0
- package/lib/helpers/specialProperties.js +3 -0
- package/lib/helpers/symbols.js +20 -0
- package/lib/helpers/timers.js +3 -0
- package/lib/helpers/timestamps/setDocumentTimestamps.js +26 -0
- package/lib/helpers/timestamps/setupTimestamps.js +116 -0
- package/lib/helpers/topology/allServersUnknown.js +12 -0
- package/lib/helpers/topology/isAtlas.js +31 -0
- package/lib/helpers/topology/isSSLError.js +16 -0
- package/lib/helpers/update/applyTimestampsToChildren.js +193 -0
- package/lib/helpers/update/applyTimestampsToUpdate.js +131 -0
- package/lib/helpers/update/castArrayFilters.js +113 -0
- package/lib/helpers/update/decorateUpdateWithVersionKey.js +35 -0
- package/lib/helpers/update/modifiedPaths.js +33 -0
- package/lib/helpers/update/moveImmutableProperties.js +53 -0
- package/lib/helpers/update/removeUnusedArrayFilters.js +32 -0
- package/lib/helpers/update/updatedPathsByArrayFilter.js +27 -0
- package/lib/helpers/updateValidators.js +193 -0
- package/lib/index.js +17 -0
- package/lib/internal.js +46 -0
- package/lib/model.js +5010 -0
- package/lib/modifiedPathsSnapshot.js +9 -0
- package/lib/mongoose.js +1411 -0
- package/lib/options/populateOptions.js +36 -0
- package/lib/options/propertyOptions.js +8 -0
- package/lib/options/saveOptions.js +16 -0
- package/lib/options/schemaArrayOptions.js +78 -0
- package/lib/options/schemaBufferOptions.js +38 -0
- package/lib/options/schemaDateOptions.js +71 -0
- package/lib/options/schemaDocumentArrayOptions.js +68 -0
- package/lib/options/schemaMapOptions.js +43 -0
- package/lib/options/schemaNumberOptions.js +101 -0
- package/lib/options/schemaObjectIdOptions.js +64 -0
- package/lib/options/schemaStringOptions.js +138 -0
- package/lib/options/schemaSubdocumentOptions.js +66 -0
- package/lib/options/schemaTypeOptions.js +244 -0
- package/lib/options/schemaUnionOptions.js +32 -0
- package/lib/options/virtualOptions.js +164 -0
- package/lib/options.js +17 -0
- package/lib/plugins/index.js +6 -0
- package/lib/plugins/saveSubdocs.js +76 -0
- package/lib/plugins/sharding.js +84 -0
- package/lib/plugins/trackTransaction.js +84 -0
- package/lib/plugins/validateBeforeSave.js +41 -0
- package/lib/query.js +5673 -0
- package/lib/queryHelpers.js +387 -0
- package/lib/schema/array.js +699 -0
- package/lib/schema/bigint.js +282 -0
- package/lib/schema/boolean.js +332 -0
- package/lib/schema/buffer.js +343 -0
- package/lib/schema/date.js +467 -0
- package/lib/schema/decimal128.js +263 -0
- package/lib/schema/documentArray.js +656 -0
- package/lib/schema/documentArrayElement.js +137 -0
- package/lib/schema/double.js +246 -0
- package/lib/schema/index.js +32 -0
- package/lib/schema/int32.js +289 -0
- package/lib/schema/map.js +201 -0
- package/lib/schema/mixed.js +146 -0
- package/lib/schema/number.js +510 -0
- package/lib/schema/objectId.js +333 -0
- package/lib/schema/operators/bitwise.js +38 -0
- package/lib/schema/operators/exists.js +12 -0
- package/lib/schema/operators/geospatial.js +107 -0
- package/lib/schema/operators/helpers.js +32 -0
- package/lib/schema/operators/text.js +39 -0
- package/lib/schema/operators/type.js +20 -0
- package/lib/schema/string.js +733 -0
- package/lib/schema/subdocument.js +436 -0
- package/lib/schema/symbols.js +5 -0
- package/lib/schema/union.js +113 -0
- package/lib/schema/uuid.js +305 -0
- package/lib/schema.js +3226 -0
- package/lib/schemaType.js +1835 -0
- package/lib/stateMachine.js +232 -0
- package/lib/types/array/index.js +119 -0
- package/lib/types/array/isMongooseArray.js +5 -0
- package/lib/types/array/methods/index.js +1095 -0
- package/lib/types/arraySubdocument.js +207 -0
- package/lib/types/buffer.js +294 -0
- package/lib/types/decimal128.js +13 -0
- package/lib/types/documentArray/index.js +113 -0
- package/lib/types/documentArray/isMongooseDocumentArray.js +5 -0
- package/lib/types/documentArray/methods/index.js +415 -0
- package/lib/types/double.js +13 -0
- package/lib/types/index.js +23 -0
- package/lib/types/map.js +419 -0
- package/lib/types/objectid.js +41 -0
- package/lib/types/subdocument.js +464 -0
- package/lib/types/uuid.js +13 -0
- package/lib/utils.js +1054 -0
- package/lib/validOptions.js +42 -0
- package/lib/virtualType.js +204 -0
- package/package.json +148 -0
- package/types/aggregate.d.ts +180 -0
- package/types/augmentations.d.ts +9 -0
- package/types/callback.d.ts +8 -0
- package/types/collection.d.ts +49 -0
- package/types/connection.d.ts +297 -0
- package/types/cursor.d.ts +67 -0
- package/types/document.d.ts +374 -0
- package/types/error.d.ts +143 -0
- package/types/expressions.d.ts +3053 -0
- package/types/helpers.d.ts +32 -0
- package/types/index.d.ts +1056 -0
- package/types/indexes.d.ts +97 -0
- package/types/inferhydrateddoctype.d.ts +115 -0
- package/types/inferrawdoctype.d.ts +135 -0
- package/types/inferschematype.d.ts +337 -0
- package/types/middlewares.d.ts +59 -0
- package/types/models.d.ts +1306 -0
- package/types/mongooseoptions.d.ts +228 -0
- package/types/pipelinestage.d.ts +333 -0
- package/types/populate.d.ts +53 -0
- package/types/query.d.ts +934 -0
- package/types/schemaoptions.d.ts +282 -0
- package/types/schematypes.d.ts +654 -0
- package/types/session.d.ts +32 -0
- package/types/types.d.ts +109 -0
- package/types/utility.d.ts +175 -0
- package/types/validation.d.ts +39 -0
- package/types/virtuals.d.ts +14 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module dependencies.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Strict mode error constructor
|
|
11
|
+
*
|
|
12
|
+
* @param {string} type
|
|
13
|
+
* @param {string} value
|
|
14
|
+
* @api private
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
class ObjectExpectedError extends MongooseError {
|
|
18
|
+
|
|
19
|
+
constructor(path, val) {
|
|
20
|
+
const typeDescription = Array.isArray(val) ? 'array' : 'primitive value';
|
|
21
|
+
super('Tried to set nested object field `' + path +
|
|
22
|
+
`\` to ${typeDescription} \`` + val + '`');
|
|
23
|
+
this.path = path;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
Object.defineProperty(ObjectExpectedError.prototype, 'name', {
|
|
28
|
+
value: 'ObjectExpectedError'
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
module.exports = ObjectExpectedError;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module dependencies.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Constructor for errors that happen when a parameter that's expected to be
|
|
11
|
+
* an object isn't an object
|
|
12
|
+
*
|
|
13
|
+
* @param {Any} value
|
|
14
|
+
* @param {String} paramName
|
|
15
|
+
* @param {String} fnName
|
|
16
|
+
* @api private
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
class ObjectParameterError extends MongooseError {
|
|
20
|
+
constructor(value, paramName, fnName) {
|
|
21
|
+
super('Parameter "' + paramName + '" to ' + fnName +
|
|
22
|
+
'() must be an object, got "' + (value == null ? value : value.toString()) + '" (type ' + typeof value + ')');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
Object.defineProperty(ObjectParameterError.prototype, 'name', {
|
|
28
|
+
value: 'ObjectParameterError'
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
module.exports = ObjectParameterError;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
/*!
|
|
3
|
+
* Module dependencies.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
const MongooseError = require('./mongooseError');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* OverwriteModel Error constructor.
|
|
12
|
+
* @param {String} name
|
|
13
|
+
* @api private
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
class OverwriteModelError extends MongooseError {
|
|
17
|
+
|
|
18
|
+
constructor(name) {
|
|
19
|
+
super('Cannot overwrite `' + name + '` model once compiled.');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
Object.defineProperty(OverwriteModelError.prototype, 'name', {
|
|
24
|
+
value: 'OverwriteModelError'
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
/*!
|
|
28
|
+
* exports
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
module.exports = OverwriteModelError;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*!
|
|
4
|
+
* Module dependencies.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* ParallelSave Error constructor.
|
|
12
|
+
*
|
|
13
|
+
* @param {Document} doc
|
|
14
|
+
* @api private
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
class ParallelSaveError extends MongooseError {
|
|
18
|
+
|
|
19
|
+
constructor(doc) {
|
|
20
|
+
const msg = 'Can\'t save() the same doc multiple times in parallel. Document: ';
|
|
21
|
+
super(msg + doc._doc._id);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Object.defineProperty(ParallelSaveError.prototype, 'name', {
|
|
26
|
+
value: 'ParallelSaveError'
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
/*!
|
|
30
|
+
* exports
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
module.exports = ParallelSaveError;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*!
|
|
4
|
+
* Module dependencies.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* ParallelValidate Error constructor.
|
|
12
|
+
*
|
|
13
|
+
* @param {Document} doc
|
|
14
|
+
* @api private
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
class ParallelValidateError extends MongooseError {
|
|
18
|
+
|
|
19
|
+
constructor(doc) {
|
|
20
|
+
const msg = 'Can\'t validate() the same doc multiple times in parallel. Document: ';
|
|
21
|
+
super(msg + doc._doc._id);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Object.defineProperty(ParallelValidateError.prototype, 'name', {
|
|
26
|
+
value: 'ParallelValidateError'
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
/*!
|
|
30
|
+
* exports
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
module.exports = ParallelValidateError;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module dependencies.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
const allServersUnknown = require('../helpers/topology/allServersUnknown');
|
|
9
|
+
const isAtlas = require('../helpers/topology/isAtlas');
|
|
10
|
+
const isSSLError = require('../helpers/topology/isSSLError');
|
|
11
|
+
|
|
12
|
+
/*!
|
|
13
|
+
* ignore
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const atlasMessage = 'Could not connect to any servers in your MongoDB Atlas cluster. ' +
|
|
17
|
+
'One common reason is that you\'re trying to access the database from ' +
|
|
18
|
+
'an IP that isn\'t whitelisted. Make sure your current IP address is on your Atlas ' +
|
|
19
|
+
'cluster\'s IP whitelist: https://www.mongodb.com/docs/atlas/security-whitelist/';
|
|
20
|
+
|
|
21
|
+
const sslMessage = 'Mongoose is connecting with SSL enabled, but the server is ' +
|
|
22
|
+
'not accepting SSL connections. Please ensure that the MongoDB server you are ' +
|
|
23
|
+
'connecting to is configured to accept SSL connections. Learn more: ' +
|
|
24
|
+
'https://mongoosejs.com/docs/tutorials/ssl.html';
|
|
25
|
+
|
|
26
|
+
class MongooseServerSelectionError extends MongooseError {
|
|
27
|
+
/**
|
|
28
|
+
* MongooseServerSelectionError constructor
|
|
29
|
+
*
|
|
30
|
+
* @api private
|
|
31
|
+
*/
|
|
32
|
+
assimilateError(err) {
|
|
33
|
+
const reason = err.reason;
|
|
34
|
+
// Special message for a case that is likely due to IP whitelisting issues.
|
|
35
|
+
const isAtlasWhitelistError = isAtlas(reason) &&
|
|
36
|
+
allServersUnknown(reason) &&
|
|
37
|
+
err.message.indexOf('bad auth') === -1 &&
|
|
38
|
+
err.message.indexOf('Authentication failed') === -1;
|
|
39
|
+
|
|
40
|
+
if (isAtlasWhitelistError) {
|
|
41
|
+
this.message = atlasMessage;
|
|
42
|
+
} else if (isSSLError(reason)) {
|
|
43
|
+
this.message = sslMessage;
|
|
44
|
+
} else {
|
|
45
|
+
this.message = err.message;
|
|
46
|
+
}
|
|
47
|
+
for (const key in err) {
|
|
48
|
+
if (key !== 'name') {
|
|
49
|
+
this[key] = err[key];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
this.cause = reason;
|
|
53
|
+
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
Object.defineProperty(MongooseServerSelectionError.prototype, 'name', {
|
|
59
|
+
value: 'MongooseServerSelectionError'
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
module.exports = MongooseServerSelectionError;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module requirements
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
const util = require('util');
|
|
9
|
+
const combinePathErrors = require('../helpers/error/combinePathErrors');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Mongoose.set Error
|
|
13
|
+
*
|
|
14
|
+
* @api private
|
|
15
|
+
* @inherits MongooseError
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
class SetOptionError extends MongooseError {
|
|
19
|
+
|
|
20
|
+
constructor() {
|
|
21
|
+
super('');
|
|
22
|
+
|
|
23
|
+
this.errors = {};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Console.log helper
|
|
28
|
+
*/
|
|
29
|
+
toString() {
|
|
30
|
+
return combinePathErrors(this);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* inspect helper
|
|
35
|
+
* @api private
|
|
36
|
+
*/
|
|
37
|
+
inspect() {
|
|
38
|
+
return Object.assign(new Error(this.message), this);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* add message
|
|
43
|
+
* @param {String} key
|
|
44
|
+
* @param {String|Error} error
|
|
45
|
+
* @api private
|
|
46
|
+
*/
|
|
47
|
+
addError(key, error) {
|
|
48
|
+
if (error instanceof SetOptionError) {
|
|
49
|
+
const { errors } = error;
|
|
50
|
+
for (const optionKey of Object.keys(errors)) {
|
|
51
|
+
this.addError(optionKey, errors[optionKey]);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
this.errors[key] = error;
|
|
58
|
+
this.message = combinePathErrors(this);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
if (util.inspect.custom) {
|
|
64
|
+
// Avoid Node deprecation warning DEP0079
|
|
65
|
+
SetOptionError.prototype[util.inspect.custom] = SetOptionError.prototype.inspect;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Helper for JSON.stringify
|
|
70
|
+
* Ensure `name` and `message` show up in toJSON output re: gh-9847
|
|
71
|
+
* @api private
|
|
72
|
+
*/
|
|
73
|
+
Object.defineProperty(SetOptionError.prototype, 'toJSON', {
|
|
74
|
+
enumerable: false,
|
|
75
|
+
writable: false,
|
|
76
|
+
configurable: true,
|
|
77
|
+
value: function() {
|
|
78
|
+
return Object.assign({}, this, { name: this.name, message: this.message });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
Object.defineProperty(SetOptionError.prototype, 'name', {
|
|
84
|
+
value: 'SetOptionError'
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
class SetOptionInnerError extends MongooseError {
|
|
88
|
+
/**
|
|
89
|
+
* Error for the "errors" array in "SetOptionError" with consistent message
|
|
90
|
+
* @param {String} key
|
|
91
|
+
*/
|
|
92
|
+
constructor(key) {
|
|
93
|
+
super(`"${key}" is not a valid option to set`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
SetOptionError.SetOptionInnerError = SetOptionInnerError;
|
|
98
|
+
|
|
99
|
+
/*!
|
|
100
|
+
* Module exports
|
|
101
|
+
*/
|
|
102
|
+
|
|
103
|
+
module.exports = SetOptionError;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module dependencies.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Strict mode error constructor
|
|
11
|
+
*
|
|
12
|
+
* @param {String} path
|
|
13
|
+
* @param {String} [msg]
|
|
14
|
+
* @param {Boolean} [immutable]
|
|
15
|
+
* @inherits MongooseError
|
|
16
|
+
* @api private
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class StrictModeError extends MongooseError {
|
|
21
|
+
|
|
22
|
+
constructor(path, msg, immutable) {
|
|
23
|
+
msg = msg || 'Field `' + path + '` is not in schema and strict ' +
|
|
24
|
+
'mode is set to throw.';
|
|
25
|
+
super(msg);
|
|
26
|
+
this.isImmutableError = !!immutable;
|
|
27
|
+
this.path = path;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Object.defineProperty(StrictModeError.prototype, 'name', {
|
|
32
|
+
value: 'StrictModeError'
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
module.exports = StrictModeError;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module dependencies.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Strict mode error constructor
|
|
11
|
+
*
|
|
12
|
+
* @param {String} path
|
|
13
|
+
* @param {String} [msg]
|
|
14
|
+
* @inherits MongooseError
|
|
15
|
+
* @api private
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
class StrictPopulateError extends MongooseError {
|
|
19
|
+
|
|
20
|
+
constructor(path, msg) {
|
|
21
|
+
msg = msg || 'Cannot populate path `' + path + '` because it is not in your schema. ' + 'Set the `strictPopulate` option to false to override.';
|
|
22
|
+
super(msg);
|
|
23
|
+
this.path = path;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
Object.defineProperty(StrictPopulateError.prototype, 'name', {
|
|
28
|
+
value: 'StrictPopulateError'
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
module.exports = StrictPopulateError;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*!
|
|
4
|
+
* Module dependencies.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* SyncIndexes Error constructor.
|
|
11
|
+
*
|
|
12
|
+
* @param {String} message
|
|
13
|
+
* @param {String} errorsMap
|
|
14
|
+
* @inherits MongooseError
|
|
15
|
+
* @api private
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
class SyncIndexesError extends MongooseError {
|
|
19
|
+
constructor(message, errorsMap) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.errors = errorsMap;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Object.defineProperty(SyncIndexesError.prototype, 'name', {
|
|
26
|
+
value: 'SyncIndexesError'
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
module.exports = SyncIndexesError;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module requirements
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
const getConstructorName = require('../helpers/getConstructorName');
|
|
9
|
+
const util = require('util');
|
|
10
|
+
const combinePathErrors = require('../helpers/error/combinePathErrors');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Document Validation Error
|
|
14
|
+
*
|
|
15
|
+
* @api private
|
|
16
|
+
* @param {Document} [instance]
|
|
17
|
+
* @inherits MongooseError
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
class ValidationError extends MongooseError {
|
|
21
|
+
|
|
22
|
+
constructor(instance) {
|
|
23
|
+
let _message;
|
|
24
|
+
if (getConstructorName(instance) === 'model') {
|
|
25
|
+
_message = instance.constructor.modelName + ' validation failed';
|
|
26
|
+
} else {
|
|
27
|
+
_message = 'Validation failed';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
super(_message);
|
|
31
|
+
|
|
32
|
+
this.errors = {};
|
|
33
|
+
this._message = _message;
|
|
34
|
+
|
|
35
|
+
if (instance) {
|
|
36
|
+
instance.$errors = this.errors;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Console.log helper
|
|
42
|
+
*/
|
|
43
|
+
toString() {
|
|
44
|
+
return this.name + ': ' + combinePathErrors(this);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* add message
|
|
49
|
+
* @param {String} path
|
|
50
|
+
* @param {String|Error} error
|
|
51
|
+
* @api private
|
|
52
|
+
*/
|
|
53
|
+
addError(path, error) {
|
|
54
|
+
if (error instanceof ValidationError) {
|
|
55
|
+
const { errors } = error;
|
|
56
|
+
for (const errorPath of Object.keys(errors)) {
|
|
57
|
+
this.addError(`${path}.${errorPath}`, errors[errorPath]);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
this.errors[path] = error;
|
|
64
|
+
this.message = this._message + ': ' + combinePathErrors(this);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
if (util.inspect.custom) {
|
|
70
|
+
// Avoid Node deprecation warning DEP0079
|
|
71
|
+
ValidationError.prototype[util.inspect.custom] = ValidationError.prototype.inspect;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Helper for JSON.stringify
|
|
76
|
+
* Ensure `name` and `message` show up in toJSON output re: gh-9847
|
|
77
|
+
* @api private
|
|
78
|
+
*/
|
|
79
|
+
Object.defineProperty(ValidationError.prototype, 'toJSON', {
|
|
80
|
+
enumerable: false,
|
|
81
|
+
writable: false,
|
|
82
|
+
configurable: true,
|
|
83
|
+
value: function() {
|
|
84
|
+
return Object.assign({}, this, { name: this.name, message: this.message });
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
Object.defineProperty(ValidationError.prototype, 'name', {
|
|
90
|
+
value: 'ValidationError'
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
/*!
|
|
94
|
+
* Module exports
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
module.exports = ValidationError;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Module dependencies.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
'use strict';
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Schema validator error
|
|
11
|
+
*
|
|
12
|
+
* @param {Object} properties
|
|
13
|
+
* @param {Document} doc
|
|
14
|
+
* @api private
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
class ValidatorError extends MongooseError {
|
|
18
|
+
|
|
19
|
+
constructor(properties, doc) {
|
|
20
|
+
let msg = properties.message;
|
|
21
|
+
if (!msg) {
|
|
22
|
+
msg = MongooseError.messages.general.default;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const message = formatMessage(msg, properties, doc);
|
|
26
|
+
super(message);
|
|
27
|
+
|
|
28
|
+
properties = Object.assign({}, properties, { message: message });
|
|
29
|
+
this.properties = properties;
|
|
30
|
+
this.kind = properties.type;
|
|
31
|
+
this.path = properties.path;
|
|
32
|
+
this.value = properties.value;
|
|
33
|
+
this.reason = properties.reason;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* toString helper
|
|
38
|
+
* TODO remove? This defaults to `${this.name}: ${this.message}`
|
|
39
|
+
* @api private
|
|
40
|
+
*/
|
|
41
|
+
toString() {
|
|
42
|
+
return this.message;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Ensure `name` and `message` show up in toJSON output re: gh-9296
|
|
47
|
+
* @api private
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
toJSON() {
|
|
51
|
+
return Object.assign({ name: this.name, message: this.message }, this);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
Object.defineProperty(ValidatorError.prototype, 'name', {
|
|
57
|
+
value: 'ValidatorError'
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The object used to define this validator. Not enumerable to hide
|
|
62
|
+
* it from `require('util').inspect()` output re: gh-3925
|
|
63
|
+
* @api private
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
Object.defineProperty(ValidatorError.prototype, 'properties', {
|
|
67
|
+
enumerable: false,
|
|
68
|
+
writable: true,
|
|
69
|
+
value: null
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Exposed for testing
|
|
73
|
+
ValidatorError.prototype.formatMessage = formatMessage;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Formats error messages
|
|
77
|
+
* @api private
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
function formatMessage(msg, properties, doc) {
|
|
81
|
+
if (typeof msg === 'function') {
|
|
82
|
+
return msg(properties, doc);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const propertyNames = Object.keys(properties);
|
|
86
|
+
for (const propertyName of propertyNames) {
|
|
87
|
+
if (propertyName === 'message') {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
msg = msg.replace('{' + propertyName.toUpperCase() + '}', properties[propertyName]);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return msg;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/*!
|
|
97
|
+
* exports
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
module.exports = ValidatorError;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*!
|
|
4
|
+
* Module dependencies.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const MongooseError = require('./mongooseError');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Version Error constructor.
|
|
11
|
+
*
|
|
12
|
+
* @param {Document} doc
|
|
13
|
+
* @param {Number} currentVersion
|
|
14
|
+
* @param {Array<String>} modifiedPaths
|
|
15
|
+
* @api private
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
class VersionError extends MongooseError {
|
|
19
|
+
|
|
20
|
+
constructor(doc, currentVersion, modifiedPaths) {
|
|
21
|
+
const modifiedPathsStr = modifiedPaths.join(', ');
|
|
22
|
+
super('No matching document found for id "' + doc._doc._id +
|
|
23
|
+
'" version ' + currentVersion + ' modifiedPaths "' + modifiedPathsStr + '"');
|
|
24
|
+
this.version = currentVersion;
|
|
25
|
+
this.modifiedPaths = modifiedPaths;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Object.defineProperty(VersionError.prototype, 'name', {
|
|
31
|
+
value: 'VersionError'
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
/*!
|
|
35
|
+
* exports
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
module.exports = VersionError;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = function prepareDiscriminatorPipeline(pipeline, schema, prefix) {
|
|
4
|
+
const discriminatorMapping = schema?.discriminatorMapping;
|
|
5
|
+
prefix = prefix || '';
|
|
6
|
+
|
|
7
|
+
if (discriminatorMapping && !discriminatorMapping.isRoot) {
|
|
8
|
+
const originalPipeline = pipeline;
|
|
9
|
+
const filterKey = (prefix.length > 0 ? prefix + '.' : prefix) + discriminatorMapping.key;
|
|
10
|
+
const discriminatorValue = discriminatorMapping.value;
|
|
11
|
+
|
|
12
|
+
// If the first pipeline stage is a match and it doesn't specify a `__t`
|
|
13
|
+
// key, add the discriminator key to it. This allows for potential
|
|
14
|
+
// aggregation query optimizations not to be disturbed by this feature.
|
|
15
|
+
if (originalPipeline[0] != null &&
|
|
16
|
+
originalPipeline[0].$match &&
|
|
17
|
+
(originalPipeline[0].$match[filterKey] === undefined || originalPipeline[0].$match[filterKey] === discriminatorValue)) {
|
|
18
|
+
originalPipeline[0].$match[filterKey] = discriminatorValue;
|
|
19
|
+
// `originalPipeline` is a ref, so there's no need for
|
|
20
|
+
// aggregate._pipeline = originalPipeline
|
|
21
|
+
} else if (originalPipeline[0]?.$geoNear) {
|
|
22
|
+
originalPipeline[0].$geoNear.query =
|
|
23
|
+
originalPipeline[0].$geoNear.query || {};
|
|
24
|
+
originalPipeline[0].$geoNear.query[filterKey] = discriminatorValue;
|
|
25
|
+
} else if (originalPipeline[0]?.$search) {
|
|
26
|
+
if (originalPipeline[1]?.$match != null) {
|
|
27
|
+
originalPipeline[1].$match[filterKey] = originalPipeline[1].$match[filterKey] || discriminatorValue;
|
|
28
|
+
} else {
|
|
29
|
+
const match = {};
|
|
30
|
+
match[filterKey] = discriminatorValue;
|
|
31
|
+
originalPipeline.splice(1, 0, { $match: match });
|
|
32
|
+
}
|
|
33
|
+
} else {
|
|
34
|
+
const match = {};
|
|
35
|
+
match[filterKey] = discriminatorValue;
|
|
36
|
+
originalPipeline.unshift({ $match: match });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|