3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-15 05:41:51 +00:00

Fix for non-object-literals in deepKeyIntersect

This commit is contained in:
Dragory 2019-08-04 16:47:42 +03:00
parent e4f1a6eb15
commit a1aa995a7a
2 changed files with 13 additions and 2 deletions

View file

@ -86,7 +86,10 @@ export class ZeppelinPlugin<TConfig extends {} = IBasePluginConfig> extends Plug
if (decodedOverrideConfig instanceof StrictValidationError) {
throw decodedOverrideConfig;
}
decodedOverrides.push({ ...override, config: deepKeyIntersect(decodedOverrideConfig, override.config || {}) });
decodedOverrides.push({
...override,
config: deepKeyIntersect(decodedOverrideConfig, override.config || {}),
});
}
return {

View file

@ -574,11 +574,19 @@ export class UnknownUser {
}
}
export function isObjectLiteral(obj) {
let deepestPrototype = obj;
while (Object.getPrototypeOf(deepestPrototype) != null) {
deepestPrototype = Object.getPrototypeOf(deepestPrototype);
}
return Object.getPrototypeOf(obj) === deepestPrototype;
}
export function deepKeyIntersect(obj, keyReference) {
const result = {};
for (const [key, value] of Object.entries(obj)) {
if (!keyReference.hasOwnProperty(key)) continue;
if (value != null && typeof value === "object" && typeof keyReference[key] === "object") {
if (value != null && typeof value === "object" && typeof keyReference[key] === "object" && isObjectLiteral(value)) {
result[key] = deepKeyIntersect(value, keyReference[key]);
} else {
result[key] = value;