From 6ef90653922ede32f71e24cae0571a95610c2b01 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 21 Apr 2020 09:57:52 +0200 Subject: [PATCH] fix(@angular-devkit/core): workspace reader spread/rest operator usage with falsy values Spread and Rest uses `[[GetOwnProperty]]`. Previously, properties with falsy values were being removed when using the spread operator due to an incorrect check. https://tc39.es/proposal-object-rest-spread/#AbstractOperations-CopyDataProperties Fixes #17021 --- .../angular_devkit/core/src/workspace/json/reader_spec.ts | 7 +++++++ .../angular_devkit/core/src/workspace/json/utilities.ts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/angular_devkit/core/src/workspace/json/reader_spec.ts b/packages/angular_devkit/core/src/workspace/json/reader_spec.ts index c21550b07d07..2503a4998b4b 100644 --- a/packages/angular_devkit/core/src/workspace/json/reader_spec.ts +++ b/packages/angular_devkit/core/src/workspace/json/reader_spec.ts @@ -86,6 +86,13 @@ describe('readJsonWorkpace Parsing', () => { ); }); + it(`doesn't remove falsy values when using the spread operator`, async () => { + const host = createTestHost(representativeFile); + const workspace = await readJsonWorkspace('', host); + const prodConfig = workspace.projects.get('my-app')!.targets.get('build')!.configurations!.production!; + expect({ ...prodConfig }).toEqual(prodConfig); + }); + it('parses extensions only into extensions object', async () => { const host = createTestHost(representativeFile); diff --git a/packages/angular_devkit/core/src/workspace/json/utilities.ts b/packages/angular_devkit/core/src/workspace/json/utilities.ts index 24a737f57479..c101eda1ae14 100644 --- a/packages/angular_devkit/core/src/workspace/json/utilities.ts +++ b/packages/angular_devkit/core/src/workspace/json/utilities.ts @@ -148,7 +148,7 @@ function create( const propertyPath = path + '/' + escapeKey(p); const cacheEntry = cache.get(propertyPath); if (cacheEntry) { - if (cacheEntry.value) { + if (cacheEntry.value !== undefined) { return createPropertyDescriptor(cacheEntry.value); }