@backstage/config
Advanced tools
Comparing version 0.1.5 to 0.1.6
# @backstage/config | ||
## 0.1.6 | ||
### Patch Changes | ||
- e9d3983ee: Add warning when trying to access configuration values that have been filtered out by visibility. | ||
## 0.1.5 | ||
@@ -4,0 +10,0 @@ |
@@ -54,4 +54,6 @@ 'use strict'; | ||
} | ||
return configs.reduce((previousReader, {data, context}) => { | ||
return new ConfigReader(data, context, previousReader); | ||
return configs.reduce((previousReader, {data, context, filteredKeys}) => { | ||
const reader = new ConfigReader(data, context, previousReader); | ||
reader.filteredKeys = filteredKeys; | ||
return reader; | ||
}, void 0); | ||
@@ -81,6 +83,14 @@ } | ||
getOptional(key) { | ||
var _a; | ||
var _a, _b; | ||
const value = this.readValue(key); | ||
const fallbackValue = (_a = this.fallback) == null ? void 0 : _a.getOptional(key); | ||
if (value === void 0) { | ||
if (process.env.NODE_ENV === "development") { | ||
if (fallbackValue === void 0 && key) { | ||
const fullKey = this.fullKey(key); | ||
if ((_b = this.filteredKeys) == null ? void 0 : _b.includes(fullKey)) { | ||
console.warn(`Failed to read configuration value at '${fullKey}' as it is not visible. See https://backstage.io/docs/conf/defining#visibility for instructions on how to make it visible.`); | ||
} | ||
} | ||
} | ||
return fallbackValue; | ||
@@ -103,5 +113,4 @@ } else if (fallbackValue === void 0) { | ||
const fallbackConfig = (_a = this.fallback) == null ? void 0 : _a.getOptionalConfig(key); | ||
const prefix = this.fullKey(key); | ||
if (isObject(value)) { | ||
return new ConfigReader(value, this.context, fallbackConfig, prefix); | ||
return this.copy(value, key, fallbackConfig); | ||
} | ||
@@ -121,2 +130,3 @@ if (value !== void 0) { | ||
getOptionalConfigArray(key) { | ||
var _a; | ||
const configs = this.readConfigValue(key, (values) => { | ||
@@ -134,5 +144,11 @@ if (!Array.isArray(values)) { | ||
if (!configs) { | ||
if (process.env.NODE_ENV === "development") { | ||
const fullKey = this.fullKey(key); | ||
if ((_a = this.filteredKeys) == null ? void 0 : _a.some((k) => k.startsWith(fullKey))) { | ||
console.warn(`Failed to read configuration array at '${key}' as it does not have any visible elements. See https://backstage.io/docs/conf/defining#visibility for instructions on how to make it visible.`); | ||
} | ||
} | ||
return void 0; | ||
} | ||
return configs.map((obj, index) => new ConfigReader(obj, this.context, void 0, this.fullKey(`${key}[${index}]`))); | ||
return configs.map((obj, index) => this.copy(obj, `${key}[${index}]`)); | ||
} | ||
@@ -200,7 +216,18 @@ getNumber(key) { | ||
} | ||
copy(data, key, fallback) { | ||
const reader = new ConfigReader(data, this.context, fallback, this.fullKey(key)); | ||
reader.filteredKeys = this.filteredKeys; | ||
return reader; | ||
} | ||
readConfigValue(key, validate) { | ||
var _a; | ||
var _a, _b; | ||
const value = this.readValue(key); | ||
if (value === void 0) { | ||
return (_a = this.fallback) == null ? void 0 : _a.readConfigValue(key, validate); | ||
if (process.env.NODE_ENV === "development") { | ||
const fullKey = this.fullKey(key); | ||
if ((_a = this.filteredKeys) == null ? void 0 : _a.includes(fullKey)) { | ||
console.warn(`Failed to read configuration value at '${fullKey}' as it is not visible. See https://backstage.io/docs/conf/defining#visibility for instructions on how to make it visible.`); | ||
} | ||
} | ||
return (_b = this.fallback) == null ? void 0 : _b.readConfigValue(key, validate); | ||
} | ||
@@ -207,0 +234,0 @@ const result = validate(value); |
@@ -11,2 +11,3 @@ declare type JsonPrimitive = number | string | boolean | null; | ||
data: JsonObject; | ||
filteredKeys?: string[]; | ||
}; | ||
@@ -37,2 +38,10 @@ declare type Config = { | ||
private readonly prefix; | ||
/** | ||
* A set of key paths that where removed from the config due to not being visible. | ||
* | ||
* This was added as a mutable private member to avoid changes to the public API. | ||
* Its only purpose of this is to warn users of missing visibility when running | ||
* the frontend in development mode. | ||
*/ | ||
private filteredKeys?; | ||
static fromConfigs(configs: AppConfig[]): ConfigReader; | ||
@@ -57,2 +66,3 @@ constructor(data: JsonObject | undefined, context?: string, fallback?: ConfigReader | undefined, prefix?: string); | ||
private fullKey; | ||
private copy; | ||
private readConfigValue; | ||
@@ -59,0 +69,0 @@ private readValue; |
@@ -45,4 +45,6 @@ import cloneDeep from 'lodash/cloneDeep'; | ||
} | ||
return configs.reduce((previousReader, {data, context}) => { | ||
return new ConfigReader(data, context, previousReader); | ||
return configs.reduce((previousReader, {data, context, filteredKeys}) => { | ||
const reader = new ConfigReader(data, context, previousReader); | ||
reader.filteredKeys = filteredKeys; | ||
return reader; | ||
}, void 0); | ||
@@ -72,6 +74,14 @@ } | ||
getOptional(key) { | ||
var _a; | ||
var _a, _b; | ||
const value = this.readValue(key); | ||
const fallbackValue = (_a = this.fallback) == null ? void 0 : _a.getOptional(key); | ||
if (value === void 0) { | ||
if (process.env.NODE_ENV === "development") { | ||
if (fallbackValue === void 0 && key) { | ||
const fullKey = this.fullKey(key); | ||
if ((_b = this.filteredKeys) == null ? void 0 : _b.includes(fullKey)) { | ||
console.warn(`Failed to read configuration value at '${fullKey}' as it is not visible. See https://backstage.io/docs/conf/defining#visibility for instructions on how to make it visible.`); | ||
} | ||
} | ||
} | ||
return fallbackValue; | ||
@@ -94,5 +104,4 @@ } else if (fallbackValue === void 0) { | ||
const fallbackConfig = (_a = this.fallback) == null ? void 0 : _a.getOptionalConfig(key); | ||
const prefix = this.fullKey(key); | ||
if (isObject(value)) { | ||
return new ConfigReader(value, this.context, fallbackConfig, prefix); | ||
return this.copy(value, key, fallbackConfig); | ||
} | ||
@@ -112,2 +121,3 @@ if (value !== void 0) { | ||
getOptionalConfigArray(key) { | ||
var _a; | ||
const configs = this.readConfigValue(key, (values) => { | ||
@@ -125,5 +135,11 @@ if (!Array.isArray(values)) { | ||
if (!configs) { | ||
if (process.env.NODE_ENV === "development") { | ||
const fullKey = this.fullKey(key); | ||
if ((_a = this.filteredKeys) == null ? void 0 : _a.some((k) => k.startsWith(fullKey))) { | ||
console.warn(`Failed to read configuration array at '${key}' as it does not have any visible elements. See https://backstage.io/docs/conf/defining#visibility for instructions on how to make it visible.`); | ||
} | ||
} | ||
return void 0; | ||
} | ||
return configs.map((obj, index) => new ConfigReader(obj, this.context, void 0, this.fullKey(`${key}[${index}]`))); | ||
return configs.map((obj, index) => this.copy(obj, `${key}[${index}]`)); | ||
} | ||
@@ -191,7 +207,18 @@ getNumber(key) { | ||
} | ||
copy(data, key, fallback) { | ||
const reader = new ConfigReader(data, this.context, fallback, this.fullKey(key)); | ||
reader.filteredKeys = this.filteredKeys; | ||
return reader; | ||
} | ||
readConfigValue(key, validate) { | ||
var _a; | ||
var _a, _b; | ||
const value = this.readValue(key); | ||
if (value === void 0) { | ||
return (_a = this.fallback) == null ? void 0 : _a.readConfigValue(key, validate); | ||
if (process.env.NODE_ENV === "development") { | ||
const fullKey = this.fullKey(key); | ||
if ((_a = this.filteredKeys) == null ? void 0 : _a.includes(fullKey)) { | ||
console.warn(`Failed to read configuration value at '${fullKey}' as it is not visible. See https://backstage.io/docs/conf/defining#visibility for instructions on how to make it visible.`); | ||
} | ||
} | ||
return (_b = this.fallback) == null ? void 0 : _b.readConfigValue(key, validate); | ||
} | ||
@@ -198,0 +225,0 @@ const result = validate(value); |
{ | ||
"name": "@backstage/config", | ||
"description": "Config API used by Backstage core, backend, and CLI", | ||
"version": "0.1.5", | ||
"version": "0.1.6", | ||
"private": false, | ||
@@ -42,4 +42,4 @@ "publishConfig": { | ||
], | ||
"gitHead": "6bbc3f74fe1a17a172f9c2209d4d6541a9d1c1dd", | ||
"gitHead": "0cbbc971f3894862bf5a248603b5b997f8052da1", | ||
"module": "dist/index.esm.js" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
67133
568
6