config-loader(schema/filtering): uses key visibility as fallback

Signed-off-by: dnsaoki2 <dnsaoki@gmail.com>
This commit is contained in:
dnsaoki2
2021-11-29 14:29:52 -03:00
parent 4d61dc97c6
commit 4bea7b81d3
3 changed files with 28 additions and 3 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/config-loader': patch
---
Uses key visibility as fallback in non-object arrays
@@ -20,6 +20,7 @@ import { filterByVisibility, filterErrorsByVisibility } from './filtering';
const data = {
arr: ['f', 'b', 's'],
arrU: ['f', 'b', 't'],
objArr: [
{ f: 1, b: 2, s: 3 },
{ f: 4, b: 5, s: 6 },
@@ -40,6 +41,8 @@ const data = {
const visibility = new Map<string, ConfigVisibility>(
Object.entries({
'/arrU': 'frontend',
'/arrU/2': 'backend',
'/arr/0': 'frontend',
'/arr/1': 'backend',
'/arr/2': 'secret',
@@ -71,6 +74,9 @@ describe('filterByVisibility', () => {
'arr[0]',
'arr[1]',
'arr[2]',
'arrU[0]',
'arrU[1]',
'arrU[2]',
'objArr[0].f',
'objArr[0].b',
'objArr[0].s',
@@ -97,10 +103,12 @@ describe('filterByVisibility', () => {
obj: { f: 'a' },
arrF: [],
objF: {},
arrU: ['f', 'b'],
},
filteredKeys: [
'arr[1]',
'arr[2]',
'arrU[2]',
'objArr[0].b',
'objArr[0].s',
'objArr[1].b',
@@ -120,6 +128,7 @@ describe('filterByVisibility', () => {
{
data: {
arr: ['b'],
arrU: ['t'],
objArr: [{ b: 2 }, { b: 5 }],
obj: { b: {} },
arrF: [{ never: 'here' }],
@@ -132,6 +141,8 @@ describe('filterByVisibility', () => {
filteredKeys: [
'arr[0]',
'arr[2]',
'arrU[0]',
'arrU[1]',
'objArr[0].f',
'objArr[0].s',
'objArr[1].f',
@@ -154,6 +165,9 @@ describe('filterByVisibility', () => {
filteredKeys: [
'arr[0]',
'arr[1]',
'arrU[0]',
'arrU[1]',
'arrU[2]',
'objArr[0].f',
'objArr[0].b',
'objArr[1].f',
@@ -61,11 +61,17 @@ export function filterByVisibility(
const arr = new Array<JsonValue>();
for (const [index, value] of jsonVal.entries()) {
const out = transform(
value,
let path = visibilityPath;
const hasVisibilityInIndex = visibilityByDataPath.get(
`${visibilityPath}/${index}`,
`${filterPath}[${index}]`,
);
if (hasVisibilityInIndex || typeof value === 'object') {
path = `${visibilityPath}/${index}`;
}
const out = transform(value, path, `${filterPath}[${index}]`);
if (out !== undefined) {
arr.push(out);
}