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');