You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
849 B
37 lines
849 B
'use strict'; |
|
|
|
const numberRE = /^\d+$/; |
|
|
|
/** |
|
* Behaves like `Schema#path()`, except for it also digs into arrays without |
|
* needing to put `.0.`, so `getPath(schema, 'docArr.elProp')` works. |
|
* @api private |
|
*/ |
|
|
|
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 (isArray && numberRE.test(piece)) { |
|
continue; |
|
} |
|
cur = cur.length === 0 ? piece : cur + '.' + piece; |
|
|
|
schematype = schema.path(cur); |
|
if (schematype != null && schematype.schema) { |
|
schema = schematype.schema; |
|
cur = ''; |
|
if (!isArray && schematype.$isMongooseDocumentArray) { |
|
isArray = true; |
|
} |
|
} |
|
} |
|
|
|
return schematype; |
|
};
|
|
|