From 8ed298d7d5883bf3e7b523b369d99392af55da3d Mon Sep 17 00:00:00 2001
From: Alan <alan.agius4@gmail.com>
Date: Fri, 19 Jul 2019 15:16:45 +0200
Subject: [PATCH] fix(@angular-devkit/build-angular): fix sourcemaps for vscode
 breakpoints

`namespace` is always empty which is breaking sourcemaps since when sources start with `/` vscode will not be able to resolve them unless users configure `sourceMapPathOverrides`.

Fixes #15116
---
 .../models/webpack-configs/utils.ts             |  2 +-
 .../test/browser/source-map_spec_large.ts       | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/utils.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/utils.ts
index b43c4d287073..298a10c7bb60 100644
--- a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/utils.ts
+++ b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/utils.ts
@@ -95,7 +95,7 @@ export function getSourceMapDevTool(
   return new SourceMapDevToolPlugin({
     filename: inlineSourceMap ? undefined : '[file].map',
     include,
-    moduleFilenameTemplate: '[namespace]/[resource-path]',
+    moduleFilenameTemplate: '[resource-path]',
     append: hiddenSourceMap ? false : undefined,
   });
 }
diff --git a/packages/angular_devkit/build_angular/test/browser/source-map_spec_large.ts b/packages/angular_devkit/build_angular/test/browser/source-map_spec_large.ts
index 992dc61e0e04..df9688e1d3b1 100644
--- a/packages/angular_devkit/build_angular/test/browser/source-map_spec_large.ts
+++ b/packages/angular_devkit/build_angular/test/browser/source-map_spec_large.ts
@@ -36,6 +36,23 @@ describe('Browser Builder source map', () => {
     expect(await files['styles.css.map']).not.toBeUndefined();
   });
 
+  it(`sourcemaps sources should not start with '/'`, async () => {
+    // If sourcemaps sources start with a '/' it will break VS code breakpoints
+    // Unless 'sourceMapPathOverrides' are provided
+    const overrides = {
+      sourceMap: true,
+    };
+
+    const { files } = await browserBuild(architect, host, target, overrides);
+    const mainJSMap = await files['main.js.map'];
+    expect(mainJSMap).not.toBeUndefined();
+
+    const sources: string[] = JSON.parse(mainJSMap).sources;
+    for (const source of sources) {
+      expect(source.startsWith('/')).toBe(false, `${source} started with an '/'.`);
+    }
+  });
+
   it('works with outputHashing', async () => {
     const { files } = await browserBuild(architect, host, target, {
       sourceMap: true,