diff --git a/web-console/src/utils/object-change.spec.ts b/web-console/src/utils/object-change.spec.ts index bdfecca7ec1..547d8815926 100644 --- a/web-console/src/utils/object-change.spec.ts +++ b/web-console/src/utils/object-change.spec.ts @@ -18,7 +18,15 @@ import * as JSONBig from 'json-bigint-native'; -import { deepDelete, deepExtend, deepGet, deepSet, makePath, parsePath } from './object-change'; +import { + allowKeys, + deepDelete, + deepExtend, + deepGet, + deepSet, + makePath, + parsePath, +} from './object-change'; describe('object-change', () => { describe('parsePath', () => { @@ -36,6 +44,17 @@ describe('object-change', () => { }); }); + describe('allowKeys', () => { + it('works with bad objects', () => { + expect(allowKeys(null, ['a', 'b', 'c'] as any)).toEqual(null); + expect(allowKeys(undefined as any, ['a', 'b', 'c'] as any)).toEqual(undefined); + }); + + it('works in a normal case', () => { + expect(allowKeys({ a: 1, z: 4 }, ['a', 'b', 'c'] as any)).toEqual({ a: 1 }); + }); + }); + describe('deepGet', () => { const thing = { hello: { diff --git a/web-console/src/utils/object-change.ts b/web-console/src/utils/object-change.ts index 9b29cda5dbf..9eeb8a4b6e9 100644 --- a/web-console/src/utils/object-change.ts +++ b/web-console/src/utils/object-change.ts @@ -160,9 +160,10 @@ export function deepExtend>(target: T, diff: Recor } export function allowKeys(obj: T, keys: (keyof T)[]): T { - const newObj: T = {} as any; + if (!obj || typeof obj !== 'object') return obj; + const newObj = {} as T; for (const key of keys) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { + if (Object.hasOwn(obj, key)) { newObj[key] = obj[key]; } } diff --git a/web-console/src/utils/sampler.ts b/web-console/src/utils/sampler.ts index 6c31f2bb2b6..8b1d25320b7 100644 --- a/web-console/src/utils/sampler.ts +++ b/web-console/src/utils/sampler.ts @@ -134,7 +134,7 @@ export interface SampleEntry { export function getCacheRowsFromSampleResponse(sampleResponse: SampleResponse): CacheRows { return filterMap(sampleResponse.data, d => ({ ...d.input, - ...allowKeys(d.parsed, ALL_POSSIBLE_SYSTEM_FIELDS), + ...allowKeys(d.parsed || {}, ALL_POSSIBLE_SYSTEM_FIELDS), })).slice(0, 20); }