|
|
@@ -125,36 +125,36 @@ export function projectData(schemaOrFactory, data, options) {
|
|
|
// (исключая ключи прототипа Object.keys(x))
|
|
|
const fields = Object.keys(strict ? schema : data);
|
|
|
for (const field of fields) {
|
|
|
- // если свойство отсутствует в исходных
|
|
|
- // данных, то свойство игнорируется
|
|
|
+ // если поле отсутствует в исходных
|
|
|
+ // данных, то поле игнорируется
|
|
|
if (!(field in data)) {
|
|
|
continue;
|
|
|
}
|
|
|
- // если свойство принадлежит прототипу,
|
|
|
- // то свойство игнорируется
|
|
|
+ // если поле принадлежит прототипу,
|
|
|
+ // то поле игнорируется
|
|
|
if (!Object.prototype.hasOwnProperty.call(data, field)) {
|
|
|
continue;
|
|
|
}
|
|
|
- const propOptionsOrBoolean = schema[field];
|
|
|
- // проверка доступности свойства для данной
|
|
|
+ const fieldOptionsOrBoolean = schema[field];
|
|
|
+ // проверка доступности поля для данной
|
|
|
// области проекции (если определена)
|
|
|
- if (_shouldSelect(propOptionsOrBoolean, strict, scope)) {
|
|
|
+ if (_shouldSelect(fieldOptionsOrBoolean, strict, scope)) {
|
|
|
const value = data[field];
|
|
|
// если определена вложенная схема,
|
|
|
// то проекция применяется рекурсивно
|
|
|
if (
|
|
|
- propOptionsOrBoolean &&
|
|
|
- typeof propOptionsOrBoolean === 'object' &&
|
|
|
- propOptionsOrBoolean.schema
|
|
|
+ fieldOptionsOrBoolean &&
|
|
|
+ typeof fieldOptionsOrBoolean === 'object' &&
|
|
|
+ fieldOptionsOrBoolean.schema
|
|
|
) {
|
|
|
result[field] = projectData(
|
|
|
- propOptionsOrBoolean.schema,
|
|
|
+ fieldOptionsOrBoolean.schema,
|
|
|
value,
|
|
|
options,
|
|
|
);
|
|
|
}
|
|
|
// иначе значение присваивается
|
|
|
- // свойству без изменений
|
|
|
+ // полю без изменений
|
|
|
else {
|
|
|
result[field] = value;
|
|
|
}
|
|
|
@@ -166,33 +166,33 @@ export function projectData(schemaOrFactory, data, options) {
|
|
|
/**
|
|
|
* Should select (internal).
|
|
|
*
|
|
|
- * Определяет, следует ли включать свойство в результат.
|
|
|
+ * Определяет, следует ли включать поле в результат.
|
|
|
* Приоритет: правило для области -> общее правило -> по умолчанию true.
|
|
|
*
|
|
|
- * @param {object|boolean|undefined} propOptionsOrBoolean
|
|
|
+ * @param {object|boolean|undefined} fieldOptionsOrBoolean
|
|
|
* @param {boolean|undefined} strict
|
|
|
* @param {string|undefined} scope
|
|
|
* @returns {boolean}
|
|
|
*/
|
|
|
-function _shouldSelect(propOptionsOrBoolean, strict, scope) {
|
|
|
- // если настройки свойства являются логическим значением,
|
|
|
+function _shouldSelect(fieldOptionsOrBoolean, strict, scope) {
|
|
|
+ // если настройки поля являются логическим значением,
|
|
|
// то значение используется как индикатор видимости
|
|
|
- if (typeof propOptionsOrBoolean === 'boolean') {
|
|
|
- return propOptionsOrBoolean;
|
|
|
+ if (typeof fieldOptionsOrBoolean === 'boolean') {
|
|
|
+ return fieldOptionsOrBoolean;
|
|
|
}
|
|
|
- // если настройки свойства являются объектом,
|
|
|
+ // если настройки поля являются объектом,
|
|
|
// то проверяется правило области и общее правило
|
|
|
- if (typeof propOptionsOrBoolean === 'object') {
|
|
|
- const propOptions = propOptionsOrBoolean;
|
|
|
+ if (typeof fieldOptionsOrBoolean === 'object') {
|
|
|
+ const fieldOptions = fieldOptionsOrBoolean;
|
|
|
// если определена область проекции,
|
|
|
// то выполняется проверка правила области
|
|
|
if (
|
|
|
scope &&
|
|
|
- propOptions.scopes &&
|
|
|
- typeof propOptions.scopes === 'object' &&
|
|
|
- propOptions.scopes[scope] != null
|
|
|
+ fieldOptions.scopes &&
|
|
|
+ typeof fieldOptions.scopes === 'object' &&
|
|
|
+ fieldOptions.scopes[scope] != null
|
|
|
) {
|
|
|
- const scopeOptionsOrBoolean = propOptions.scopes[scope];
|
|
|
+ const scopeOptionsOrBoolean = fieldOptions.scopes[scope];
|
|
|
// если настройки области являются логическим значением,
|
|
|
// то значение используется как индикатор видимости
|
|
|
if (typeof scopeOptionsOrBoolean === 'boolean') {
|
|
|
@@ -210,11 +210,11 @@ function _shouldSelect(propOptionsOrBoolean, strict, scope) {
|
|
|
}
|
|
|
// если область проекции не указана,
|
|
|
// то проверяется общее правило
|
|
|
- if (typeof propOptionsOrBoolean.select === 'boolean') {
|
|
|
- return propOptionsOrBoolean.select;
|
|
|
+ if (typeof fieldOptionsOrBoolean.select === 'boolean') {
|
|
|
+ return fieldOptionsOrBoolean.select;
|
|
|
}
|
|
|
}
|
|
|
- // если для свойства нет правил, то свойство
|
|
|
- // по умолчанию доступно (недоступно в режиме strict)
|
|
|
+ // если для поля нет правил, то поле доступно
|
|
|
+ // по умолчанию (недоступно в режиме strict)
|
|
|
return !strict;
|
|
|
}
|