From 06d0cae975668d0eb7966df75a8eeaf10671d887 Mon Sep 17 00:00:00 2001 From: Alan Date: Tue, 12 Mar 2019 07:06:33 +0100 Subject: [PATCH] fix(@angular-devkit/build-angular): fix base href insertion when HTML is in a single line When HTML is in a single line using offset + 1 will cause the insertion of the base href tag in the wrong possition. Fixes #13851 --- .../plugins/index-html-webpack-plugin.ts | 2 +- .../test/browser/base-href_spec_large.ts | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/index-html-webpack-plugin.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/index-html-webpack-plugin.ts index a06ed3964bd5..d9b357152eaa 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/index-html-webpack-plugin.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/index-html-webpack-plugin.ts @@ -200,7 +200,7 @@ export class IndexHtmlWebpackPlugin { treeAdapter.appendChild(baseFragment, baseElement); indexSource.insert( - headElement.__location.startTag.endOffset + 1, + headElement.__location.startTag.endOffset, parse5.serialize(baseFragment, { treeAdapter }), ); } else { diff --git a/packages/angular_devkit/build_angular/test/browser/base-href_spec_large.ts b/packages/angular_devkit/build_angular/test/browser/base-href_spec_large.ts index c70912e862dc..9d323aa59820 100644 --- a/packages/angular_devkit/build_angular/test/browser/base-href_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/browser/base-href_spec_large.ts @@ -7,7 +7,7 @@ */ import { runTargetSpec } from '@angular-devkit/architect/testing'; -import { join, normalize, virtualFs } from '@angular-devkit/core'; +import { join, normalize, tags, virtualFs } from '@angular-devkit/core'; import { tap } from 'rxjs/operators'; import { browserTargetSpec, host } from '../utils'; @@ -35,4 +35,24 @@ describe('Browser Builder base href', () => { }), ).toPromise().then(done, done.fail); }); + + it('should insert base href in the the correct position', (done) => { + host.writeMultipleFiles({ + 'src/index.html': tags.oneLine` + + + `, + }); + + const overrides = { baseHref: '/myUrl' }; + + runTargetSpec(host, browserTargetSpec, overrides).pipe( + tap((buildEvent) => expect(buildEvent.success).toBe(true)), + tap(() => { + const fileName = join(outputPath, 'index.html'); + const content = virtualFs.fileBufferToString(host.scopedSync().read(fileName)); + expect(content).toContain(''); + }), + ).toPromise().then(done, done.fail); + }); });