|
|
@@ -43,6 +43,10 @@ const {projectData} = require('@e22m4u/js-data-projector');
|
|
|
{
|
|
|
foo: true, // поле доступно
|
|
|
bar: false // поле скрыто
|
|
|
+ // объект настроек
|
|
|
+ baz: {}, // поле доступно
|
|
|
+ qux: {select: true}, // поле доступно
|
|
|
+ buz: {select: false}, // поле скрыто
|
|
|
}
|
|
|
```
|
|
|
|
|
|
@@ -50,12 +54,12 @@ const {projectData} = require('@e22m4u/js-data-projector');
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
- name: true, // поле name доступно
|
|
|
- address: { // настройки поля address
|
|
|
- select: true, // поле address доступно
|
|
|
+ name: true, // поле "name" доступно
|
|
|
+ address: { // настройки поля "address"
|
|
|
+ select: true, // поле "address" доступно
|
|
|
schema: { // вложенная схема
|
|
|
- city: true, // поле city доступно
|
|
|
- zip: false // поле zip скрыто
|
|
|
+ city: true, // поле "address.city" доступно
|
|
|
+ zip: false // поле "address.zip" скрыто
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -65,11 +69,11 @@ const {projectData} = require('@e22m4u/js-data-projector');
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
- password: { // настройки поля password
|
|
|
- select: false, // поле password недоступно по умолчанию
|
|
|
- scopes: { // настройки для областей проекции
|
|
|
- input: true, // поле доступно для области 'input'
|
|
|
- output: false // но скрыто для области 'output'
|
|
|
+ password: { // настройки поля "password"
|
|
|
+ select: false, // поле "password" недоступно по умолчанию
|
|
|
+ scopes: { // настройки для областей проекции
|
|
|
+ input: true, // поле доступно для области "input"
|
|
|
+ output: false // но скрыто для области "output"
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -79,9 +83,9 @@ const {projectData} = require('@e22m4u/js-data-projector');
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
- name: true, // поле name доступно
|
|
|
- address: { // настройки поля address
|
|
|
- select: true, // поле address доступно
|
|
|
+ name: true, // поле "name" доступно
|
|
|
+ address: { // настройки поля "address"
|
|
|
+ select: true, // поле "address" доступно
|
|
|
schema: 'address' // имя вложенной схемы
|
|
|
}
|
|
|
}
|
|
|
@@ -104,9 +108,9 @@ const schema = {
|
|
|
};
|
|
|
|
|
|
const data = {
|
|
|
- name: 'Fedor', // будет доступно, явное правило
|
|
|
- password: 'pass123', // будет исключено, явное правило
|
|
|
- extra: 10, // будет доступно в режиме по умолчанию
|
|
|
+ name: 'Fedor', // допускается, явное правило
|
|
|
+ password: 'pass123', // исключается, явное правило
|
|
|
+ extra: 10, // допускается в режиме по умолчанию
|
|
|
};
|
|
|
|
|
|
const result = projectData(data, schema);
|
|
|
@@ -149,7 +153,7 @@ const schema = {
|
|
|
id: false,
|
|
|
name: true,
|
|
|
city: {
|
|
|
- select: true, // правило видимости поля city
|
|
|
+ select: true, // правило видимости поля "city"
|
|
|
schema: { // вложенная схема
|
|
|
id: false,
|
|
|
name: true,
|
|
|
@@ -158,10 +162,10 @@ const schema = {
|
|
|
};
|
|
|
|
|
|
const data = {
|
|
|
- id: 10, // будет скрыто, явное правило
|
|
|
+ id: 10, // исключается, явное правило
|
|
|
name: 'Fedor',
|
|
|
city: {
|
|
|
- id: 20, // будет скрыто, явное правило
|
|
|
+ id: 20, // исключается, явное правило
|
|
|
name: 'Moscow',
|
|
|
},
|
|
|
};
|
|
|
@@ -189,9 +193,9 @@ const schema = {
|
|
|
};
|
|
|
|
|
|
const data = {
|
|
|
- name: 'Fedor', // будет доступно, явное правило
|
|
|
- password: 'pass123', // будет исключено, явное правило
|
|
|
- extra: 10, // будет исключено в строгом режиме
|
|
|
+ name: 'Fedor', // допускается, явное правило
|
|
|
+ password: 'pass123', // исключается, явное правило
|
|
|
+ extra: 10, // исключается в строгом режиме
|
|
|
};
|
|
|
|
|
|
const result = projectData(data, schema, {
|
|
|
@@ -214,19 +218,19 @@ const schema = {
|
|
|
name: true,
|
|
|
password: {
|
|
|
scopes: {
|
|
|
- input: true, // правило для области 'input'
|
|
|
- output: false, // правило для области 'output'
|
|
|
+ input: true, // правило для области "input"
|
|
|
+ output: false, // правило для области "output"
|
|
|
},
|
|
|
},
|
|
|
};
|
|
|
|
|
|
const data = {
|
|
|
- name: 'Fedor', // будет доступно, явное правило
|
|
|
- password: 'pass123', // будет доступно в зависимости от области
|
|
|
+ name: 'Fedor', // допускается, явное правило
|
|
|
+ password: 'pass123', // исключается для области "output"
|
|
|
};
|
|
|
|
|
|
const inputData = projectData(data, schema, {
|
|
|
- scope: 'input', // <= область видимости
|
|
|
+ scope: "input", // <= область видимости
|
|
|
});
|
|
|
console.log(inputData);
|
|
|
// {
|
|
|
@@ -235,7 +239,7 @@ console.log(inputData);
|
|
|
// }
|
|
|
|
|
|
const outputData = projectData(data, schema, {
|
|
|
- scope: 'output', // <= область видимости
|
|
|
+ scope: "output", // <= область видимости
|
|
|
});
|
|
|
console.log(outputData);
|
|
|
// {
|
|
|
@@ -256,8 +260,8 @@ projector.defineSchema({
|
|
|
username: true,
|
|
|
password: {
|
|
|
scopes: {
|
|
|
- input: true, // поле password доступно для "input" области
|
|
|
- output: false, // поле password скрыто для "output" области
|
|
|
+ input: true, // поле "password" доступно для области "input"
|
|
|
+ output: false, // поле "password" скрыто для области "output"
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
@@ -268,7 +272,7 @@ const data = {
|
|
|
password: 'secret123',
|
|
|
}
|
|
|
|
|
|
-// аналог projector.project(data, 'user', {scope: 'input'})
|
|
|
+// аналог projector.project(data, 'user', {scope: "input"})
|
|
|
const input = projector.projectInput(data, 'user');
|
|
|
console.log(input);
|
|
|
// {
|
|
|
@@ -276,7 +280,7 @@ console.log(input);
|
|
|
// password: 'secret123'
|
|
|
// }
|
|
|
|
|
|
-// аналог projector.project(data, 'user', {scope: 'output'})
|
|
|
+// аналог projector.project(data, 'user', {scope: "output"})
|
|
|
const output = projector.projectOutput(data, 'user');
|
|
|
console.log(output);
|
|
|
// {
|
|
|
@@ -466,7 +470,7 @@ projector.defineSchema({
|
|
|
schema: {
|
|
|
name: true,
|
|
|
address: {
|
|
|
- select: true, // видимость поля address
|
|
|
+ select: true, // видимость поля "address"
|
|
|
schema: 'address', // <= имя вложенной схемы
|
|
|
},
|
|
|
},
|