From 29bcac59a256e12e6b0d447db79b59daca85a138 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 8 May 2019 14:04:56 +0300 Subject: [PATCH] fix(@schematics/angular): tsconfig with comments breaks universal schematic Fixes #14371 --- packages/schematics/angular/universal/index.ts | 3 ++- .../schematics/angular/universal/index_spec.ts | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/schematics/angular/universal/index.ts b/packages/schematics/angular/universal/index.ts index 3a0e58a20abc..e6e9a263b89b 100644 --- a/packages/schematics/angular/universal/index.ts +++ b/packages/schematics/angular/universal/index.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ import { + JsonParseMode, Path, basename, join, @@ -206,7 +207,7 @@ function getTsConfigOutDir(host: Tree, tsConfigPath: string): string { throw new SchematicsException(`Could not read ${tsConfigPath}`); } const tsConfigContent = tsConfigBuffer.toString(); - const tsConfig = parseJson(tsConfigContent); + const tsConfig = parseJson(tsConfigContent, JsonParseMode.Loose); if (tsConfig === null || typeof tsConfig !== 'object' || Array.isArray(tsConfig) || tsConfig.compilerOptions === null || typeof tsConfig.compilerOptions !== 'object' || Array.isArray(tsConfig.compilerOptions)) { diff --git a/packages/schematics/angular/universal/index_spec.ts b/packages/schematics/angular/universal/index_spec.ts index 16c6737423bb..1cc9b90c0154 100644 --- a/packages/schematics/angular/universal/index_spec.ts +++ b/packages/schematics/angular/universal/index_spec.ts @@ -10,6 +10,7 @@ import { Schema as ApplicationOptions, Style } from '../application/schema'; import { Schema as WorkspaceOptions } from '../workspace/schema'; import { Schema as UniversalOptions } from './schema'; +// tslint:disable-next-line:no-big-function describe('Universal Schematic', () => { const schematicRunner = new SchematicTestRunner( '@schematics/angular', @@ -82,7 +83,6 @@ describe('Universal Schematic', () => { const tree = await schematicRunner .runSchematicAsync('universal', workspaceUniversalOptions, appTree) .toPromise(); - debugger; const filePath = '/tsconfig.server.json'; expect(tree.exists(filePath)).toEqual(true); const contents = tree.readContent(filePath); @@ -204,4 +204,17 @@ describe('Universal Schematic', () => { expect(schematicRunner.tasks[0].name).toBe('node-package'); expect((schematicRunner.tasks[0].options as {command: string}).command).toBe('install'); }); + + it(`should work when 'tsconfig.app.json' has comments`, async () => { + const appTsConfigPath = '/projects/bar/tsconfig.app.json'; + const appTsConfigContent = appTree.readContent(appTsConfigPath); + appTree.overwrite(appTsConfigPath, '// comment in json file\n' + appTsConfigContent); + + const tree = await schematicRunner.runSchematicAsync('universal', defaultOptions, appTree) + .toPromise(); + + const filePath = '/projects/bar/tsconfig.server.json'; + expect(tree.exists(filePath)).toEqual(true); + }); + });