From 5f13d06cb360bcd895971008556e2b049d5c96ee Mon Sep 17 00:00:00 2001
From: Alan Agius <alan.agius@betssongroup.com>
Date: Mon, 8 Apr 2019 11:42:18 +0200
Subject: [PATCH] fix(@angular-devkit/build-angular): ignore bundle budgets
 when running karma or devserver

Fixes #14100
---
 .../build_angular/src/dev-server/index.ts     |  3 ++
 .../build_angular/src/karma/index.ts          |  7 ++--
 .../test/dev-server/budgets_spec_large.ts     | 35 +++++++++++++++++++
 .../test/dev-server/proxy_spec_large.ts       |  1 -
 4 files changed, 42 insertions(+), 4 deletions(-)
 create mode 100644 packages/angular_devkit/build_angular/test/dev-server/budgets_spec_large.ts

diff --git a/packages/angular_devkit/build_angular/src/dev-server/index.ts b/packages/angular_devkit/build_angular/src/dev-server/index.ts
index d5e4132f1872..83809682b2e4 100644
--- a/packages/angular_devkit/build_angular/src/dev-server/index.ts
+++ b/packages/angular_devkit/build_angular/src/dev-server/index.ts
@@ -106,6 +106,9 @@ export function serveWebpackBrowser(
       [key]: options[key],
     }), {});
 
+    // In dev server we should not have budgets because of extra libs such as socks-js
+    overrides.budgets = undefined;
+
     const browserName = await context.getBuilderNameForTarget(browserTarget);
     const browserOptions = await context.validateOptions<json.JsonObject & BrowserBuilderSchema>(
       { ...rawBrowserOptions, ...overrides },
diff --git a/packages/angular_devkit/build_angular/src/karma/index.ts b/packages/angular_devkit/build_angular/src/karma/index.ts
index 0ef51c86acc5..3f55d93e25f5 100644
--- a/packages/angular_devkit/build_angular/src/karma/index.ts
+++ b/packages/angular_devkit/build_angular/src/karma/index.ts
@@ -36,9 +36,10 @@ async function initialize(
   // tslint:disable-next-line:no-implicit-dependencies
 ): Promise<[typeof import ('karma'), webpack.Configuration]> {
   const { config } = await generateBrowserWebpackConfigFromContext(
-    // only one property is missing:
-    // * `index` which is not used for tests
-    { ...options as unknown as BrowserBuilderOptions, outputPath: '' },
+    // only two properties are missing:
+    // * `outputPath` which is fixed for tests
+    // * `budgets` which might be incorrect due to extra dev libs
+    { ...options as unknown as BrowserBuilderOptions, outputPath: '', budgets: undefined },
     context,
     wco => [
       getCommonConfig(wco),
diff --git a/packages/angular_devkit/build_angular/test/dev-server/budgets_spec_large.ts b/packages/angular_devkit/build_angular/test/dev-server/budgets_spec_large.ts
new file mode 100644
index 000000000000..154912995861
--- /dev/null
+++ b/packages/angular_devkit/build_angular/test/dev-server/budgets_spec_large.ts
@@ -0,0 +1,35 @@
+/**
+ * @license
+ * Copyright Google Inc. All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+import { normalize, virtualFs } from '@angular-devkit/core';
+import { createArchitect, host } from '../utils';
+
+describe('Dev Server Builder bundle budgets', () => {
+  const targetSpec = { project: 'app', target: 'serve' };
+
+  beforeEach(async () => host.initialize().toPromise());
+  afterEach(async () => host.restore().toPromise());
+
+  it('should ignore budgets', async () => {
+    const config = host.scopedSync().read(normalize('angular.json'));
+    const jsonConfig = JSON.parse(virtualFs.fileBufferToString(config));
+    const buildOptions = jsonConfig.projects.app.targets.build.options;
+
+    buildOptions.budgets = [{ type: 'all', maximumError: '100b' }],
+    buildOptions.optimization = true;
+
+    host.writeMultipleFiles({
+      'angular.json': JSON.stringify(jsonConfig),
+    });
+
+    const architect = (await createArchitect(host.root())).architect;
+    const run = await architect.scheduleTarget(targetSpec);
+    const output = await run.result;
+    expect(output.success).toBe(true);
+    await run.stop();
+  });
+});
diff --git a/packages/angular_devkit/build_angular/test/dev-server/proxy_spec_large.ts b/packages/angular_devkit/build_angular/test/dev-server/proxy_spec_large.ts
index 113e255a0049..7ac09c879aa6 100644
--- a/packages/angular_devkit/build_angular/test/dev-server/proxy_spec_large.ts
+++ b/packages/angular_devkit/build_angular/test/dev-server/proxy_spec_large.ts
@@ -63,7 +63,6 @@ describe('Dev Server Builder proxy', () => {
   }, 30000);
 
   it('errors out with a missing proxy file', async () => {
-    const overrides: Partial<DevServerBuilderOptions> = { proxyConfig: '../proxy.config.json' };
     const run = await architect.scheduleTarget(target, { proxyConfig: 'INVALID.json' });
     runs.push(run);