NIFI-6351 - Allow for consistent angular template/templateUrl inclusion between JS and TS

This closes #26

Signed-off-by: Scott Aslan <scottyaslan@gmail.com>
diff --git a/angular-url-loader.js b/angular-url-loader.js
new file mode 100644
index 0000000..222670e
--- /dev/null
+++ b/angular-url-loader.js
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Removes inline templateUrl properties and replaces them with NodeJS `require` syntax
+ *
+ *   templateUrl: './some-module.html'  ->  template: require('./some-module.html')
+ */
+const templateUrlRegex = /templateUrl\s*:(\s*['"`](.*?)['"`]\s*)/gm;
+module.exports = function (source) {
+    source = source
+        .replace(templateUrlRegex, function(match, quote, url){
+            return 'template: require(\'' + url + '\')';
+        });
+
+    return source;
+};
diff --git a/karma.conf.js b/karma.conf.js
index f075eff..5510fae 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const webpackConfig = require('./webpack.dev');
+const webpackConfig = require('./webpack.karma');
 const path = require('path');
 
 delete webpackConfig.entry;
@@ -62,9 +62,7 @@
         exclude: [],
 
         preprocessors: {
-            'karma-test-shim.js': ['webpack'],
-            'webapp/**/!(*spec|*mock|*stub|*config|*extras).js': ['webpack'],
-            'platform/**/!(*spec|*mock|*stub|*config|*extras).js': ['webpack']
+            'karma-test-shim.js': ['webpack']
         },
 
         // Try Websocket for a faster transmission first. Fallback to polling if necessary.
diff --git a/package-lock.json b/package-lock.json
index adeb8c8..3109591 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11393,6 +11393,16 @@
             "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
             "dev": true
         },
+        "null-loader": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-2.0.0.tgz",
+            "integrity": "sha512-PhEeA3v/tAacxC5dNO1i2yXzGVWWrZ9jTx+TMEJ716amvnBXzvrxIwy9HW7MyJsHe8ACQzpiQgbrAjDRMA7gcg==",
+            "dev": true,
+            "requires": {
+                "loader-utils": "1.2.3",
+                "schema-utils": "1.0.0"
+            }
+        },
         "num2fraction": {
             "version": "1.2.2",
             "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
diff --git a/package.json b/package.json
index 3f35437..3c119a8 100644
--- a/package.json
+++ b/package.json
@@ -121,6 +121,7 @@
         "load-grunt-tasks": "4.0.0",
         "mini-css-extract-plugin": "0.6.0",
         "node-sass": "4.11.0",
+        "null-loader": "2.0.0",
         "optimize-css-assets-webpack-plugin": "5.0.1",
         "sass-loader": "7.1.0",
         "style-loader": "0.23.1",
diff --git a/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js b/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js
index 80c2ad4..3b87190 100644
--- a/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js
+++ b/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js
@@ -16,7 +16,6 @@
  */
 
 import { Component } from '@angular/core';
-import html from './confirm-dialog.component.html';
 
 /**
  * FdsConfirmDialogComponent constructor.
@@ -56,7 +55,7 @@
 FdsConfirmDialogComponent.annotations = [
     new Component({
         selector: 'fds-confirm-dialog',
-        template: html
+        templateUrl: './confirm-dialog.component.html'
     })
 ];
 
diff --git a/platform/core/dialogs/fds-dialog.component.js b/platform/core/dialogs/fds-dialog.component.js
index bf71681..1f3d71b 100644
--- a/platform/core/dialogs/fds-dialog.component.js
+++ b/platform/core/dialogs/fds-dialog.component.js
@@ -20,7 +20,6 @@
     ContentChildren,
     Directive
 } from '@angular/core';
-import html from './fds-dialog.component.html';
 
 export function FdsDialogTitleDirective() {
 }
@@ -88,7 +87,7 @@
 FdsDialogComponent.annotations = [
     new Component({
         selector: 'fds-dialog',
-        template: html,
+        templateUrl: './fds-dialog.component.html',
         queries: {
             dialogTitle: new ContentChildren(FdsDialogTitleDirective),
             dialogContent: new ContentChildren(FdsDialogContentDirective),
diff --git a/platform/core/snackbars/coaster/coaster.component.js b/platform/core/snackbars/coaster/coaster.component.js
index 4c26fb4..22d4358 100644
--- a/platform/core/snackbars/coaster/coaster.component.js
+++ b/platform/core/snackbars/coaster/coaster.component.js
@@ -17,7 +17,6 @@
 
 import { Component } from '@angular/core';
 import $ from 'jquery';
-import html from './coaster.component.html';
 
 /**
  * FdsCoasterComponent constructor.
@@ -62,7 +61,7 @@
 FdsCoasterComponent.annotations = [
     new Component({
         selector: 'fds-coaster',
-        template: html
+        templateUrl: './coaster.component.html'
     })
 ];
 
diff --git a/platform/core/snackbars/fds-snackbar.component.js b/platform/core/snackbars/fds-snackbar.component.js
index 7ed9544..bbc506c 100644
--- a/platform/core/snackbars/fds-snackbar.component.js
+++ b/platform/core/snackbars/fds-snackbar.component.js
@@ -16,7 +16,6 @@
  */
 
 import { Component, Directive, ContentChildren } from '@angular/core';
-import html from './fds-snackbar.component.html';
 
 export function FdsSnackBarTitleDirective() {
 }
@@ -84,7 +83,7 @@
 FdsSnackBarComponent.annotations = [
     new Component({
         selector: 'fds-snackbar',
-        template: html,
+        templateUrl: './fds-snackbar.component.html',
         queries: {
             snackBarTitle: new ContentChildren(FdsSnackBarTitleDirective),
             snackBarContent: new ContentChildren(FdsSnackBarContentDirective),
diff --git a/scripts/clean-install b/scripts/clean-install
index 6802c69..cb86be2 100644
--- a/scripts/clean-install
+++ b/scripts/clean-install
@@ -31,6 +31,7 @@
 cp ./karma-test-shim.js ./target/frontend-working-directory/karma-test-shim.js
 cp Gruntfile.js ./target/frontend-working-directory/Gruntfile.js
 cp ./webapp/gh-pages.* ./target/frontend-working-directory/
+cp angular-url-loader.js ./target/frontend-working-directory/
 cd ./target/frontend-working-directory
 npm install
 
diff --git a/scripts/clean-install-skipTests b/scripts/clean-install-skipTests
index 835b900..dec8b59 100644
--- a/scripts/clean-install-skipTests
+++ b/scripts/clean-install-skipTests
@@ -31,6 +31,7 @@
 cp ./karma-test-shim.js ./target/frontend-working-directory/karma-test-shim.js
 cp Gruntfile.js ./target/frontend-working-directory/Gruntfile.js
 cp ./webapp/gh-pages.* ./target/frontend-working-directory/
+cp angular-url-loader.js ./target/frontend-working-directory/
 cd ./target/frontend-working-directory
 npm install
 
diff --git a/scripts/dev-install b/scripts/dev-install
index 9a7ca27..6c3f318 100644
--- a/scripts/dev-install
+++ b/scripts/dev-install
@@ -28,6 +28,7 @@
 cp ./karma-test-shim.js ./target/frontend-working-directory/karma-test-shim.js
 cp Gruntfile.js ./target/frontend-working-directory/Gruntfile.js
 cp ./webapp/gh-pages.* ./target/frontend-working-directory/
+cp angular-url-loader.js ./target/frontend-working-directory/
 cd ./target/frontend-working-directory
 npm install
 
diff --git a/scripts/dev-install-skipTests b/scripts/dev-install-skipTests
index 50ab03b..307e11d 100644
--- a/scripts/dev-install-skipTests
+++ b/scripts/dev-install-skipTests
@@ -28,6 +28,7 @@
 cp ./karma-test-shim.js ./target/frontend-working-directory/karma-test-shim.js
 cp Gruntfile.js ./target/frontend-working-directory/Gruntfile.js
 cp ./webapp/gh-pages.* ./target/frontend-working-directory/
+cp angular-url-loader.js ./target/frontend-working-directory/
 cd ./target/frontend-working-directory
 npm install
 
diff --git a/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js b/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js
index 9573399..ce4915b 100644
--- a/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js
+++ b/webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js
@@ -20,7 +20,6 @@
     MAT_DIALOG_DATA
 } from '@angular/material';
 import { Component } from '@angular/core';
-import html from './fds-demo-dialog.html';
 
 /**
  * NfRegistryEditBucketPolicy constructor.
@@ -51,7 +50,7 @@
 
 FdsDemoDialog.annotations = [
     new Component({
-        template: html
+        templateUrl: './fds-demo-dialog.html'
     })
 ];
 
diff --git a/webapp/components/flow-design-system/fds-demo.js b/webapp/components/flow-design-system/fds-demo.js
index 9be7930..39e0233 100644
--- a/webapp/components/flow-design-system/fds-demo.js
+++ b/webapp/components/flow-design-system/fds-demo.js
@@ -23,7 +23,6 @@
 import { FdsSnackBarService } from '@flow-design-system/snackbars';
 import FdsService from 'webapp/services/fds.service.js';
 import FdsDemoDialog from 'webapp/components/flow-design-system/dialogs/demo/fds-demo-dialog.js';
-import html from './fds-demo.html';
 
 const NUMBER_FORMAT = function (v) {
     return v;
@@ -1050,7 +1049,7 @@
 
 FdsDemo.annotations = [
     new Component({
-        template: html,
+        templateUrl: './fds-demo.html',
         animations: [animations.slideInLeftAnimation],
         host: {
             '[@routeAnimation]': 'routeAnimation'
diff --git a/webapp/fds.js b/webapp/fds.js
index 90fb2ac..1119ecd 100644
--- a/webapp/fds.js
+++ b/webapp/fds.js
@@ -22,7 +22,6 @@
 } from '@angular/core';
 import FdsService from 'webapp/services/fds.service.js';
 import animations from '@flow-design-system/common/animations';
-import html from './fds.html';
 
 /**
  * Fds constructor.
@@ -59,7 +58,7 @@
 Fds.annotations = [
     new Component({
         selector: 'fds-app',
-        template: html,
+        templateUrl: './fds.html',
         queries: {
             sidenav: new ViewChild('sidenav')
         },
diff --git a/webpack.common.js b/webpack.common.js
index 906fefd..37f6867 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -21,6 +21,7 @@
 const FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries');
 const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 const HtmlWebpackPlugin = require('html-webpack-plugin');
+const loaders = require('./webpack.loader');
 
 module.exports = {
     // Deployment target
@@ -58,73 +59,10 @@
 
     module: {
         rules: [
-            {
-                test: /\.tsx?$/,
-                include: [
-                    path.resolve(__dirname, 'webapp'),
-                    path.resolve(__dirname, 'platform')
-                ],
-                use: ['cache-loader', 'ts-loader']
-            },
-            {
-                test: /\.js$/,
-                include: [
-                    path.resolve(__dirname, 'webapp'),
-                    path.resolve(__dirname, 'platform')
-                ],
-                use: [
-                    {
-                        loader: 'cache-loader'
-                    },
-                    {
-                        loader: 'babel-loader',
-                        options: {
-                            presets: ['@babel/preset-env']
-                        }
-                    }
-                ]
-            },
-            {
-                test: /\.js$/,
-                include: [
-                    path.resolve(__dirname, 'webapp'),
-                    path.resolve(__dirname, 'platform')
-                ],
-                enforce: 'post',
-                use: [
-                    {
-                        loader: 'cache-loader'
-                    },
-                    {
-                        loader: 'istanbul-instrumenter-loader',
-                        options: { esModules: true }
-                    }
-                ]
-            },
-            {
-                test: /\.(html)$/,
-                use: ['cache-loader', 'html-loader']
-            },
-            {
-                test: /\.scss$/,
-                use: [
-                    {
-                        // Create CSS files separately
-                        loader: MiniCssExtractPlugin.loader
-                    },
-                    {
-                        // Translate CSS into CommonJS
-                        loader: 'css-loader',
-                        options: {
-                            url: false
-                        }
-                    },
-                    {
-                        // Compile Sass to CSS
-                        loader: 'sass-loader'
-                    }
-                ]
-            }
+            loaders.ts,
+            loaders.js,
+            loaders.html,
+            loaders.scss
         ]
     },
 
diff --git a/webpack.dev.js b/webpack.dev.js
index 7d21a62..4b819ff 100644
--- a/webpack.dev.js
+++ b/webpack.dev.js
@@ -1,21 +1,18 @@
 /*
- * (c) 2018-2019 Cloudera, Inc. All rights reserved.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- *  This code is provided to you pursuant to your written agreement with Cloudera, which may be the terms of the
- *  Affero General Public License version 3 (AGPLv3), or pursuant to a written agreement with a third party authorized
- *  to distribute this code.  If you do not have a written agreement with Cloudera or with an authorized and
- *  properly licensed third party, you do not have any rights to this code.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  If this code is provided to you under the terms of the AGPLv3:
- *   (A) CLOUDERA PROVIDES THIS CODE TO YOU WITHOUT WARRANTIES OF ANY KIND;
- *   (B) CLOUDERA DISCLAIMS ANY AND ALL EXPRESS AND IMPLIED WARRANTIES WITH RESPECT TO THIS CODE, INCLUDING BUT NOT
- *       LIMITED TO IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE;
- *   (C) CLOUDERA IS NOT LIABLE TO YOU, AND WILL NOT DEFEND, INDEMNIFY, OR HOLD YOU HARMLESS FOR ANY CLAIMS ARISING
- *       FROM OR RELATED TO THE CODE; AND
- *   (D) WITH RESPECT TO YOUR EXERCISE OF ANY RIGHTS GRANTED TO YOU FOR THE CODE, CLOUDERA IS NOT LIABLE FOR ANY
- *       DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED
- *       TO, DAMAGES RELATED TO LOST REVENUE, LOST PROFITS, LOSS OF INCOME, LOSS OF BUSINESS ADVANTAGE OR
- *       UNAVAILABILITY, OR LOSS OR CORRUPTION OF DATA.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 
 const webpack = require('webpack');
@@ -66,7 +63,7 @@
 
         // generate a file with all bundled packages licenses' in it. This can be used to add to the LICENSE file
         new LicenseWebpackPlugin({
-            outputFilename: '../../target/thirdPartyLicenses.txt',
+            outputFilename: './target/thirdPartyLicenses.txt',
             unacceptableLicenseTest: (licenseType) => (licenseType === 'GPL' || licenseType === 'AGPL' || licenseType === 'LGPL' || licenseType === 'NGPL'),
             renderLicenses: (modules) => {
                 const licTextArray = modules.map((lic) => {
diff --git a/webpack.karma.js b/webpack.karma.js
new file mode 100644
index 0000000..599ae74
--- /dev/null
+++ b/webpack.karma.js
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const merge = require('webpack-merge');
+
+const commonConfig = require('./webpack.common');
+const loaders = require('./webpack.loader');
+
+delete commonConfig.entry;
+delete commonConfig.optimization;
+delete commonConfig.devServer;
+delete commonConfig.devtool;
+delete commonConfig.module.rules;
+
+module.exports = merge(commonConfig, {
+    mode: 'none',
+
+    module: {
+        rules: [
+            loaders.tsDev,
+            loaders.jsDev,
+            loaders.html,
+            loaders.ignoreScss
+        ]
+    }
+});
diff --git a/webpack.loader.js b/webpack.loader.js
new file mode 100644
index 0000000..e697972
--- /dev/null
+++ b/webpack.loader.js
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+const path = require('path');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+
+module.exports = {
+    ts: {
+        test: /\.tsx?$/,
+        include: [
+            path.resolve(__dirname, 'webapp'),
+            path.resolve(__dirname, 'platform')
+        ],
+        use: [
+            {
+                loader: 'cache-loader'
+            },
+            {
+                loader: path.resolve(__dirname, 'angular-url-loader')
+            },
+            {
+                loader: 'ts-loader'
+            }
+        ]
+    },
+
+    tsDev: {
+        test: /\.tsx?$/,
+        include: [
+            path.resolve(__dirname, 'webapp'),
+            path.resolve(__dirname, 'platform')
+        ],
+        // prevent these files/patterns from being included in the coverage report
+        exclude: [
+            /\.spec\.tsx?$/
+        ],
+        use: [
+            {
+                loader: 'cache-loader'
+            },
+            {
+                // Instrument TS files with istanbul-lib-instrument for subsequent code coverage reporting
+                loader: 'istanbul-instrumenter-loader',
+                options: { esModules: true }
+            },
+            {
+                loader: path.resolve(__dirname, 'angular-url-loader')
+            },
+            {
+                loader: 'ts-loader'
+            }
+        ]
+    },
+
+    js: {
+        test: /\.js$/,
+        include: [
+            path.resolve(__dirname, 'webapp'),
+            path.resolve(__dirname, 'platform')
+        ],
+        use: [
+            {
+                loader: 'cache-loader'
+            },
+            {
+                loader: path.resolve(__dirname, 'angular-url-loader')
+            },
+            {
+                loader: 'babel-loader',
+                options: {
+                    presets: ['@babel/preset-env']
+                }
+            }
+        ]
+    },
+
+    jsDev: {
+        test: /\.js$/,
+        include: [
+            path.resolve(__dirname, 'webapp'),
+            path.resolve(__dirname, 'platform')
+        ],
+        enforce: 'post',
+        // prevent these files/patterns from being included in the coverage report
+        exclude: [
+            /\.spec\.js$/,
+            path.resolve(__dirname, 'platform/core/core.testbed-factory.js')
+        ],
+        use: [
+            {
+                loader: 'cache-loader'
+            },
+            {
+                // Instrument JS files with istanbul-lib-instrument for subsequent code coverage reporting
+                loader: 'istanbul-instrumenter-loader',
+                options: {esModules: true}
+            },
+            {
+                loader: path.resolve(__dirname, 'angular-url-loader')
+            },
+            {
+                loader: 'babel-loader',
+                options: {
+                    presets: ['@babel/preset-env']
+                }
+            }
+        ]
+    },
+
+    html: {
+        test: /\.(html)$/,
+        use: ['cache-loader', 'html-loader']
+    },
+
+    scss: {
+        test: /\.scss$/,
+        use: [
+            {
+                // Create CSS files separately
+                loader: MiniCssExtractPlugin.loader
+            },
+            {
+                // Translate CSS into CommonJS
+                loader: 'css-loader',
+                options: {
+                    url: false
+                }
+            },
+            {
+                // Compile Sass to CSS
+                loader: 'sass-loader'
+            }
+        ]
+    },
+    ignoreScss: {
+        test: /\.scss$/,
+        use: 'null-loader'
+    }
+};
diff --git a/webpack.prod.js b/webpack.prod.js
index 97dc560..299dc08 100644
--- a/webpack.prod.js
+++ b/webpack.prod.js
@@ -1,21 +1,18 @@
 /*
- * (c) 2018-2019 Cloudera, Inc. All rights reserved.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
- *  This code is provided to you pursuant to your written agreement with Cloudera, which may be the terms of the
- *  Affero General Public License version 3 (AGPLv3), or pursuant to a written agreement with a third party authorized
- *  to distribute this code.  If you do not have a written agreement with Cloudera or with an authorized and
- *  properly licensed third party, you do not have any rights to this code.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  If this code is provided to you under the terms of the AGPLv3:
- *   (A) CLOUDERA PROVIDES THIS CODE TO YOU WITHOUT WARRANTIES OF ANY KIND;
- *   (B) CLOUDERA DISCLAIMS ANY AND ALL EXPRESS AND IMPLIED WARRANTIES WITH RESPECT TO THIS CODE, INCLUDING BUT NOT
- *       LIMITED TO IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE;
- *   (C) CLOUDERA IS NOT LIABLE TO YOU, AND WILL NOT DEFEND, INDEMNIFY, OR HOLD YOU HARMLESS FOR ANY CLAIMS ARISING
- *       FROM OR RELATED TO THE CODE; AND
- *   (D) WITH RESPECT TO YOUR EXERCISE OF ANY RIGHTS GRANTED TO YOU FOR THE CODE, CLOUDERA IS NOT LIABLE FOR ANY
- *       DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED
- *       TO, DAMAGES RELATED TO LOST REVENUE, LOST PROFITS, LOSS OF INCOME, LOSS OF BUSINESS ADVANTAGE OR
- *       UNAVAILABILITY, OR LOSS OR CORRUPTION OF DATA.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 
 const merge = require('webpack-merge');