deno.land / x / mongoose@6.7.5 / lib / helpers / document / getEmbeddedDiscriminatorPath.js

getEmbeddedDiscriminatorPath.js
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
'use strict';
const get = require('../get');const getSchemaDiscriminatorByValue = require('../discriminator/getSchemaDiscriminatorByValue');
/** * Like `schema.path()`, except with a document, because impossible to * determine path type without knowing the embedded discriminator key. * @param {Document} doc * @param {String} path * @param {Object} [options] * @api private */
module.exports = function getEmbeddedDiscriminatorPath(doc, path, options) { options = options || {}; const typeOnly = options.typeOnly; const parts = path.indexOf('.') === -1 ? [path] : path.split('.'); let schemaType = null; let type = 'adhocOrUndefined';
const schema = getSchemaDiscriminatorByValue(doc.schema, doc.get(doc.schema.options.discriminatorKey)) || doc.schema;
for (let i = 0; i < parts.length; ++i) { const subpath = parts.slice(0, i + 1).join('.'); schemaType = schema.path(subpath); if (schemaType == null) { type = 'adhocOrUndefined'; continue; } if (schemaType.instance === 'Mixed') { return typeOnly ? 'real' : schemaType; } type = schema.pathType(subpath); if ((schemaType.$isSingleNested || schemaType.$isMongooseDocumentArrayElement) && schemaType.schema.discriminators != null) { const discriminators = schemaType.schema.discriminators; const discriminatorKey = doc.get(subpath + '.' + get(schemaType, 'schema.options.discriminatorKey')); if (discriminatorKey == null || discriminators[discriminatorKey] == null) { continue; } const rest = parts.slice(i + 1).join('.'); return getEmbeddedDiscriminatorPath(doc.get(subpath), rest, options); } }
// Are we getting the whole schema or just the type, 'real', 'nested', etc. return typeOnly ? type : schemaType;};
mongoose

Version Info

Tagged at
a year ago