gx
chenyc
2025-06-12 7b72ac13a83764a662159d4a49b7fffb90476ecb
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
'use strict';
 
/*!
 * Behaves like `Schema#path()`, except for it also digs into arrays without
 * needing to put `.0.`, so `getPath(schema, 'docArr.elProp')` works.
 */
 
module.exports = function getPath(schema, path) {
  let schematype = schema.path(path);
  if (schematype != null) {
    return schematype;
  }
 
  const pieces = path.split('.');
  let cur = '';
  let isArray = false;
 
  for (const piece of pieces) {
    if (/^\d+$/.test(piece) && isArray) {
      continue;
    }
    cur = cur.length === 0 ? piece : cur + '.' + piece;
 
    schematype = schema.path(cur);
    if (schematype != null && schematype.schema) {
      schema = schematype.schema;
      cur = '';
      if (schematype.$isMongooseDocumentArray) {
        isArray = true;
      }
    }
  }
 
  return schematype;
};