@@ -12,9 +12,9 @@
https://github.com/jantimon/html-webpack-plugin#writing-your-own-templates -->
<% for (var chunk in htmlWebpackPlugin.files.js) { %>
<% if (webpackConfig.mode == 'production') { %>
-
+
<% } else { %>
-
+
<% } %>
<% } %>
{% endblock footer_js %}
diff --git a/core/templates/dev/head/tests/jinja_escaping.html b/core/templates/dev/head/tests/jinja_escaping.html
index 4d0c440729df..93edb4081ba4 100644
--- a/core/templates/dev/head/tests/jinja_escaping.html
+++ b/core/templates/dev/head/tests/jinja_escaping.html
@@ -1,4 +1,4 @@
-{% extends 'dist/base.html' %}
+{% extends 'base.html' %}
{% block content %}
{{DEV_MODE}}
diff --git a/core/tests/data/dummy_assets/assets/hashes.json b/core/tests/data/dummy_assets/assets/hashes.json
new file mode 100644
index 000000000000..2809d7963525
--- /dev/null
+++ b/core/tests/data/dummy_assets/assets/hashes.json
@@ -0,0 +1,10 @@
+{
+ "/hash_test.html": "ijklmopq",
+ "/path_test/hash_test.html": "123456789",
+ "/hash_test.min.js": "zyx12345",
+ "/assets_test/hash_test.json": "987654321",
+ "/pages_test/hash_test.html": "abcd12345",
+ "/images/hash_test.png": "98765fghij",
+ "/videos/hash_test.mp4": "12345cxz",
+ "/interactions/interTest/static/interTest.png": "123654789"
+}
diff --git a/core/tests/data/third_party/js/third_party.js b/core/tests/data/third_party/js/third_party.js
index 5285dbedeeeb..2471f418cc70 100644
--- a/core/tests/data/third_party/js/third_party.js
+++ b/core/tests/data/third_party/js/third_party.js
@@ -23036,7 +23036,7 @@ function detectDisabledThemes($mdThemingProvider) {
* stylesheet file into the `$mdThemingProvider`.
*
* If it's necessary to load an external stylesheet, we suggest using a bundler, which supports including raw content,
- * like [raw-loader](https://github.com/webpack/raw-loader) for `webpack`.
+ * like [raw-loader](https://github.com/webpack_bundles/raw-loader) for `webpack`.
*
*
* myAppModule.config(function($mdThemingProvider) {
diff --git a/core/tests/karma-globals.ts b/core/tests/karma-globals.ts
index e1b4afcf11e2..c08fd0ee0a87 100644
--- a/core/tests/karma-globals.ts
+++ b/core/tests/karma-globals.ts
@@ -138,18 +138,6 @@ var GLOBALS = {
};
-/* hashes for UrlInterpolationService tests */
-var hashes = {
- '/hash_test.html': 'ijklmopq',
- '/path_test/hash_test.html': '123456789',
- '/hash_test.min.js': 'zyx12345',
- '/assets_test/hash_test.json': '987654321',
- '/pages_test/hash_test.html': 'abcd12345',
- '/images/hash_test.png': '98765fghij',
- '/videos/hash_test.mp4': '12345cxz',
- '/interactions/interTest/static/interTest.png': '123654789'
-};
-
/* This function overwrites the translationProvider for a dummy function
* (customLoader). This is necessary to prevent the js test warnings about an
* 'unexpected GET request' when the translationProvider tries to load the
diff --git a/core/tests/karma.conf.ts b/core/tests/karma.conf.ts
index caadccb0a0ca..af6dad573324 100644
--- a/core/tests/karma.conf.ts
+++ b/core/tests/karma.conf.ts
@@ -15,8 +15,6 @@ module.exports = function(config) {
files: [
'local_compiled_js/core/tests/karma-globals.js',
// Constants must be loaded before everything else.
- 'local_compiled_js/assets/constants.js',
- 'local_compiled_js/assets/rich_text_components_definitions.js',
// Since jquery,jquery-ui,angular,angular-mocks and math-expressions
// are not bundled, they will be treated separately.
'third_party/static/jquery-3.4.1/jquery.min.js',
@@ -147,6 +145,8 @@ module.exports = function(config) {
mode: 'development',
resolve: {
modules: [
+ 'core/tests/data/dummy_assets/assets',
+ 'assets',
'core/templates/dev/head',
'extensions',
'node_modules',
diff --git a/core/tests/protractor_desktop/navigation.js b/core/tests/protractor_desktop/navigation.js
index 982f6e5678ab..8e31fca13267 100644
--- a/core/tests/protractor_desktop/navigation.js
+++ b/core/tests/protractor_desktop/navigation.js
@@ -143,10 +143,9 @@ describe('DEV MODE Test', function() {
it('should not show Dev Mode label in prod', function() {
browser.get('/splash');
waitFor.pageToFullyLoad();
- general.isInDevMode().then(function(isInDevMode) {
- expect(element(
- by.css('.protractor-test-dev-mode')).isPresent()).toBe(isInDevMode);
- });
+ expect(element(
+ by.css('.protractor-test-dev-mode')).isPresent())
+ .toBe(general.isInDevMode());
});
});
diff --git a/core/tests/protractor_utils/general.js b/core/tests/protractor_utils/general.js
index ca81ba238e35..0a806ea6e306 100644
--- a/core/tests/protractor_utils/general.js
+++ b/core/tests/protractor_utils/general.js
@@ -70,9 +70,7 @@ var checkForConsoleErrors = function(errorsToIgnore) {
};
var isInDevMode = function() {
- browser.get('/splash');
- waitFor.pageToFullyLoad();
- return browser.executeScript('return constants.DEV_MODE');
+ return browser.params.devMode === 'true';
};
var SERVER_URL_PREFIX = 'http://localhost:9001';
diff --git a/feconf.py b/feconf.py
index a8f36d13edd7..ff39840787dd 100644
--- a/feconf.py
+++ b/feconf.py
@@ -62,15 +62,14 @@
RTE_EXTENSIONS_DIR = (
os.path.join(EXTENSIONS_DIR_PREFIX, 'extensions', 'rich_text_components'))
RTE_EXTENSIONS_DEFINITIONS_PATH = (
- os.path.join('assets', 'rich_text_components_definitions.js'))
+ os.path.join('assets', 'rich_text_components_definitions.ts'))
OBJECT_TEMPLATES_DIR = os.path.join('extensions', 'objects', 'templates')
# Choose production templates folder when we are in production mode.
FRONTEND_TEMPLATES_DIR = (
- os.path.join(
- 'core', 'templates', 'dev', 'head') if constants.DEV_MODE else
- os.path.join('backend_prod_files', 'templates', 'head'))
+ os.path.join('webpack_bundles') if constants.DEV_MODE else
+ os.path.join('backend_prod_files', 'webpack_bundles'))
DEPENDENCIES_TEMPLATES_DIR = (
os.path.join(EXTENSIONS_DIR_PREFIX, 'extensions', 'dependencies'))
diff --git a/package-lock.json b/package-lock.json
index f9475160a244..2332b0f0ee8a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -282,7 +282,7 @@
"@ckeditor/ckeditor5-adapter-ckfinder": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-11.0.4.tgz",
- "integrity": "sha512-/wpdYrCA3J6MlaqXUUrH/fF5b7g+8Xvlq3bUntTM/GcyeqCFeIJqxumaTIXOuXLobfmVqMKYL1lTrL3WetA2MQ==",
+ "integrity": "sha1-2ylREZQ1Ge+maQ+D1EDtQIOzTjE=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1",
@@ -292,7 +292,7 @@
"@ckeditor/ckeditor5-autoformat": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-11.0.4.tgz",
- "integrity": "sha512-lGv3TTs5ny3FBfWJL/8h1F8KngXBF3zXeDsHHLx/4GEAtqPBZJRBY1OdU8EI3VtydqCCFdefeKG7cNWM4Akg0w==",
+ "integrity": "sha1-ha8XI72oFrWAgElfusRUZ9WIbaw=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1"
@@ -301,7 +301,7 @@
"@ckeditor/ckeditor5-basic-styles": {
"version": "11.1.3",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-11.1.3.tgz",
- "integrity": "sha512-6OO/gtEL6QlscX4GsMoSuugSBRLWDWNv3DzlBDH+sUAHwCPN1c7EXK1PONMbYY0OBaNebjAekxPSV7crzrsDLQ==",
+ "integrity": "sha1-0MFMGdSVOzzbY0y6spM6X7vEfY0=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1",
@@ -311,7 +311,7 @@
"@ckeditor/ckeditor5-block-quote": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-11.1.2.tgz",
- "integrity": "sha512-nJFhk2xMcnKjjnXNaNnoz02goOhfGVVevjUGpccRkrjh9jH3NM6yQ2UdOgREUb8I6ZKEkYSkm8qfWi/mRDH9BQ==",
+ "integrity": "sha1-dR/3waXZsshwoKRFLQGC7XCIQgQ=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1",
@@ -322,13 +322,13 @@
"@ckeditor/ckeditor5-build-classic": {
"version": "12.3.1",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-12.3.1.tgz",
- "integrity": "sha512-nlE8wRasM3AF2XkXHJuj91cq46ZvmTBfXePCtjogT8s/niYlFma+Lqu7cAUONxRXh11m1IpgC6i+QOGFZH0p8A==",
+ "integrity": "sha1-s3AR1e4vJZDPjSmkPcXGLxTPC1o=",
"dev": true
},
"@ckeditor/ckeditor5-ckfinder": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-11.0.4.tgz",
- "integrity": "sha512-1ecCEpx75ryoWZo+OIVII4wQ9pT5Kl+dozwMMW9SOQibnLgRORhzx7Eq1xu/mRtxfQ/GjPekQAJMIca1yW9qYQ==",
+ "integrity": "sha1-mevkcoOQwVlBYXqajTcTWrZPb98=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-adapter-ckfinder": "^11.0.4",
@@ -339,7 +339,7 @@
"@ckeditor/ckeditor5-core": {
"version": "12.2.1",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-12.2.1.tgz",
- "integrity": "sha512-1z6t56Evo3u/c11t4xSvxGdN/UB+UJ2PxzbiDf7ul0zBo/CE3Q3dYFjVRSKLKePhQOI1wti4sXCeLQaflh76VQ==",
+ "integrity": "sha1-U/5lxXMJ+y7VgoyOZ6WYBTK35Qo=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-engine": "^13.2.1",
@@ -384,7 +384,7 @@
"@ckeditor/ckeditor5-engine": {
"version": "13.2.1",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-13.2.1.tgz",
- "integrity": "sha512-yGERQGIYZwJtShi+CYuAWV5P1bvLDlMTMjHf+qPKCwXAw9RiWmjuS5MVpeaZRtmAMEGXyol+mf8IvYvXczfo8A==",
+ "integrity": "sha1-lZQdakpTY24XUzcng31Dmo4+t8E=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-utils": "^13.0.1",
@@ -394,7 +394,7 @@
"@ckeditor/ckeditor5-table": {
"version": "13.0.2",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-13.0.2.tgz",
- "integrity": "sha512-T3DAY7E224E04qrxlwYKbhiwGYcTEa6Ev50Xh9fyf/ZsCAfjVt9cwhUvE9Be6hxB/vnkvw6f8/xPWCl/sdVSNA==",
+ "integrity": "sha1-lfmFv7iUQ6p65NDC+la6/4wxceU=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1",
@@ -405,7 +405,7 @@
"@ckeditor/ckeditor5-theme-lark": {
"version": "14.1.1",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-14.1.1.tgz",
- "integrity": "sha512-gXvdg9WcFyktR7RqkyKf3EAana5V18qX5oBjrPCxU0sHrqbDsxa0Up2QU5rxbCT5s+bdtwewnsXslV4zdeGk8g==",
+ "integrity": "sha1-X68UfiWzWTK62edt5oVZGKreGXk=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-ui": "^13.0.2"
@@ -414,7 +414,7 @@
"@ckeditor/ckeditor5-ui": {
"version": "13.0.2",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-13.0.2.tgz",
- "integrity": "sha512-A2Ut+W3rHWNUNR1TwjdBQShl7v270hRlcz3Z77ka/0xlhkQ7TIAVlVHu8q89170fFE4Po8cSqGDZVO9YT3W75A==",
+ "integrity": "sha1-mZeNif9aWtvSisZYZHdQGsLbJmo=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1",
@@ -425,7 +425,7 @@
"@ckeditor/ckeditor5-upload": {
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-11.1.1.tgz",
- "integrity": "sha512-uB8DYTw2BJrNPjSWh6u6udlprVeN2BeQbbZiSiIstJSS3q4vr90FPnhZ5lvtwxvo9lMXLMgGZUwz1Nkulj5oSg==",
+ "integrity": "sha1-1BRN4EvZV9Z3lAw+ngZa/lsCOrc=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1",
@@ -436,7 +436,7 @@
"@ckeditor/ckeditor5-utils": {
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-13.0.1.tgz",
- "integrity": "sha512-u/18fD/lPeoir3R6+chBlm2ZCdvbqXqbx4yelOc4J+wzQUj53n0ZuADZrxXH0lXY/jsU5Lat0wisgmjwOkmGBw==",
+ "integrity": "sha1-/FHI0uZh1szQV0jBxT8ZdYNeHL0=",
"dev": true,
"requires": {
"ckeditor5": "^12.3.1",
@@ -446,7 +446,7 @@
"@ckeditor/ckeditor5-widget": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-11.0.4.tgz",
- "integrity": "sha512-mCT+a/X6SMyz9ZTBpSef8+8A9guP/gvsdGQlgJ5e9i1D5lv2ZnLPu4GfVVEyNbtIIXOkdheNMICQhWI3splz4Q==",
+ "integrity": "sha1-Ttv+A1Yh5d64JsJGlMkCIXcogJE=",
"dev": true,
"requires": {
"@ckeditor/ckeditor5-core": "^12.2.1",
@@ -478,7 +478,7 @@
"@nodelib/fs.scandir": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz",
- "integrity": "sha512-NT/skIZjgotDSiXs0WqYhgcuBKhUMgfekCmCGtkUAiLqZdOnrdjmZr9wRl3ll64J9NF79uZ4fk16Dx0yMc/Xbg==",
+ "integrity": "sha1-f6j+1lSTnho5dT0oa0i0g20A4Os=",
"dev": true,
"requires": {
"@nodelib/fs.stat": "2.0.1",
@@ -494,7 +494,7 @@
"@nodelib/fs.walk": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz",
- "integrity": "sha512-J/DR3+W12uCzAJkw7niXDcqcKBg6+5G5Q/ZpThpGNzAUz70eOR6RV4XnnSN01qHZiVl0eavoxJsBypQoKsV2QQ==",
+ "integrity": "sha1-amRQxeFwEqvYFFDrdJSaTZcNKAc=",
"dev": true,
"requires": {
"@nodelib/fs.scandir": "2.1.1",
@@ -2559,7 +2559,7 @@
"camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "integrity": "sha1-7pePaUeRTMMMa0R0G27R338EP9U=",
"dev": true
},
"camelcase-keys": {
@@ -2583,7 +2583,7 @@
"caniuse-api": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=",
"dev": true,
"requires": {
"browserslist": "^4.0.0",
@@ -2797,7 +2797,7 @@
"ckeditor5": {
"version": "12.3.1",
"resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-12.3.1.tgz",
- "integrity": "sha512-hXXAMvV8zdRIMsa66rUKlU50+/IC7obQxg/myBe8kkYrnrfthGwWFd3j6qHzlEb48B9g1noZX8oqBF9E6D+N2Q==",
+ "integrity": "sha1-cp7wnd3pqZ+9mIqq1hV8ybdD1Bw=",
"dev": true
},
"class-utils": {
@@ -3042,7 +3042,7 @@
"coa": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
- "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=",
"dev": true,
"requires": {
"@types/q": "^1.5.1",
@@ -3086,7 +3086,7 @@
"color": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
- "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
+ "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=",
"dev": true,
"requires": {
"color-convert": "^1.9.1",
@@ -3111,7 +3111,7 @@
"color-string": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
- "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=",
"dev": true,
"requires": {
"color-name": "^1.0.0",
@@ -3414,7 +3414,7 @@
"css-declaration-sorter": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
- "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=",
"dev": true,
"requires": {
"postcss": "^7.0.1",
@@ -3486,13 +3486,13 @@
"css-select-base-adapter": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
- "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+ "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=",
"dev": true
},
"css-tree": {
"version": "1.0.0-alpha.33",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz",
- "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==",
+ "integrity": "sha1-lw4g5akfejeN3Q/FjQtsjU876T4=",
"dev": true,
"requires": {
"mdn-data": "2.0.4",
@@ -3522,13 +3522,13 @@
"cssesc": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
- "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
+ "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
"dev": true
},
"cssnano": {
"version": "4.1.10",
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
- "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+ "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=",
"dev": true,
"requires": {
"cosmiconfig": "^5.0.0",
@@ -3540,7 +3540,7 @@
"cssnano-preset-default": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
- "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=",
"dev": true,
"requires": {
"css-declaration-sorter": "^4.0.1",
@@ -3590,7 +3590,7 @@
"cssnano-util-raw-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
- "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=",
"dev": true,
"requires": {
"postcss": "^7.0.0"
@@ -3599,13 +3599,13 @@
"cssnano-util-same-parent": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
- "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+ "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=",
"dev": true
},
"csso": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
- "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+ "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=",
"dev": true,
"requires": {
"css-tree": "1.0.0-alpha.29"
@@ -3614,7 +3614,7 @@
"css-tree": {
"version": "1.0.0-alpha.29",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
- "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+ "integrity": "sha1-P6nU7zFCy9HDAedmTB81K9gvWjk=",
"dev": true,
"requires": {
"mdn-data": "~1.1.0",
@@ -3624,7 +3624,7 @@
"mdn-data": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
- "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
+ "integrity": "sha1-ULXU/8RXUnZXPE7tuHgIEqhBnwE=",
"dev": true
},
"source-map": {
@@ -3666,302 +3666,6 @@
"type": "^1.0.1"
}
},
- "d3": {
- "version": "5.9.2",
- "resolved": "https://registry.npmjs.org/d3/-/d3-5.9.2.tgz",
- "integrity": "sha512-ydrPot6Lm3nTWH+gJ/Cxf3FcwuvesYQ5uk+j/kXEH/xbuYWYWTMAHTJQkyeuG8Y5WM5RSEYB41EctUrXQQytRQ==",
- "dev": true,
- "requires": {
- "d3-array": "1",
- "d3-axis": "1",
- "d3-brush": "1",
- "d3-chord": "1",
- "d3-collection": "1",
- "d3-color": "1",
- "d3-contour": "1",
- "d3-dispatch": "1",
- "d3-drag": "1",
- "d3-dsv": "1",
- "d3-ease": "1",
- "d3-fetch": "1",
- "d3-force": "1",
- "d3-format": "1",
- "d3-geo": "1",
- "d3-hierarchy": "1",
- "d3-interpolate": "1",
- "d3-path": "1",
- "d3-polygon": "1",
- "d3-quadtree": "1",
- "d3-random": "1",
- "d3-scale": "2",
- "d3-scale-chromatic": "1",
- "d3-selection": "1",
- "d3-shape": "1",
- "d3-time": "1",
- "d3-time-format": "2",
- "d3-timer": "1",
- "d3-transition": "1",
- "d3-voronoi": "1",
- "d3-zoom": "1"
- }
- },
- "d3-array": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
- "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
- "dev": true
- },
- "d3-axis": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz",
- "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==",
- "dev": true
- },
- "d3-brush": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.3.tgz",
- "integrity": "sha512-v8bbYyCFKjyCzFk/tdWqXwDykY8YWqhXYjcYxfILIit085VZOpj4XJKOMccTsvWxgzSLMJQg5SiqHjslsipEDg==",
- "dev": true,
- "requires": {
- "d3-dispatch": "1",
- "d3-drag": "1",
- "d3-interpolate": "1",
- "d3-selection": "1",
- "d3-transition": "1"
- }
- },
- "d3-chord": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz",
- "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==",
- "dev": true,
- "requires": {
- "d3-array": "1",
- "d3-path": "1"
- }
- },
- "d3-collection": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
- "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==",
- "dev": true
- },
- "d3-color": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.3.0.tgz",
- "integrity": "sha512-NHODMBlj59xPAwl2BDiO2Mog6V+PrGRtBfWKqKRrs9MCqlSkIEb0Z/SfY7jW29ReHTDC/j+vwXhnZcXI3+3fbg==",
- "dev": true
- },
- "d3-contour": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz",
- "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==",
- "dev": true,
- "requires": {
- "d3-array": "^1.1.1"
- }
- },
- "d3-dispatch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz",
- "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==",
- "dev": true
- },
- "d3-drag": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.4.tgz",
- "integrity": "sha512-ICPurDETFAelF1CTHdIyiUM4PsyZLaM+7oIBhmyP+cuVjze5vDZ8V//LdOFjg0jGnFIZD/Sfmk0r95PSiu78rw==",
- "dev": true,
- "requires": {
- "d3-dispatch": "1",
- "d3-selection": "1"
- }
- },
- "d3-dsv": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.1.1.tgz",
- "integrity": "sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw==",
- "dev": true,
- "requires": {
- "commander": "2",
- "iconv-lite": "0.4",
- "rw": "1"
- }
- },
- "d3-ease": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.5.tgz",
- "integrity": "sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==",
- "dev": true
- },
- "d3-fetch": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.1.2.tgz",
- "integrity": "sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA==",
- "dev": true,
- "requires": {
- "d3-dsv": "1"
- }
- },
- "d3-force": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz",
- "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==",
- "dev": true,
- "requires": {
- "d3-collection": "1",
- "d3-dispatch": "1",
- "d3-quadtree": "1",
- "d3-timer": "1"
- }
- },
- "d3-format": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz",
- "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==",
- "dev": true
- },
- "d3-geo": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.6.tgz",
- "integrity": "sha512-z0J8InXR9e9wcgNtmVnPTj0TU8nhYT6lD/ak9may2PdKqXIeHUr8UbFLoCtrPYNsjv6YaLvSDQVl578k6nm7GA==",
- "dev": true,
- "requires": {
- "d3-array": "1"
- }
- },
- "d3-hierarchy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz",
- "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==",
- "dev": true
- },
- "d3-interpolate": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz",
- "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==",
- "dev": true,
- "requires": {
- "d3-color": "1"
- }
- },
- "d3-path": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.8.tgz",
- "integrity": "sha512-J6EfUNwcMQ+aM5YPOB8ZbgAZu6wc82f/0WFxrxwV6Ll8wBwLaHLKCqQ5Imub02JriCVVdPjgI+6P3a4EWJCxAg==",
- "dev": true
- },
- "d3-polygon": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.5.tgz",
- "integrity": "sha512-RHhh1ZUJZfhgoqzWWuRhzQJvO7LavchhitSTHGu9oj6uuLFzYZVeBzaWTQ2qSO6bz2w55RMoOCf0MsLCDB6e0w==",
- "dev": true
- },
- "d3-quadtree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.6.tgz",
- "integrity": "sha512-NUgeo9G+ENQCQ1LsRr2qJg3MQ4DJvxcDNCiohdJGHt5gRhBW6orIB5m5FJ9kK3HNL8g9F4ERVoBzcEwQBfXWVA==",
- "dev": true
- },
- "d3-random": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz",
- "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==",
- "dev": true
- },
- "d3-scale": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz",
- "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==",
- "dev": true,
- "requires": {
- "d3-array": "^1.2.0",
- "d3-collection": "1",
- "d3-format": "1",
- "d3-interpolate": "1",
- "d3-time": "1",
- "d3-time-format": "2"
- }
- },
- "d3-scale-chromatic": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz",
- "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==",
- "dev": true,
- "requires": {
- "d3-color": "1",
- "d3-interpolate": "1"
- }
- },
- "d3-selection": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.0.tgz",
- "integrity": "sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==",
- "dev": true
- },
- "d3-shape": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.5.tgz",
- "integrity": "sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg==",
- "dev": true,
- "requires": {
- "d3-path": "1"
- }
- },
- "d3-time": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.11.tgz",
- "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw==",
- "dev": true
- },
- "d3-time-format": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz",
- "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==",
- "dev": true,
- "requires": {
- "d3-time": "1"
- }
- },
- "d3-timer": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz",
- "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==",
- "dev": true
- },
- "d3-transition": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.0.tgz",
- "integrity": "sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==",
- "dev": true,
- "requires": {
- "d3-color": "1",
- "d3-dispatch": "1",
- "d3-ease": "1",
- "d3-interpolate": "1",
- "d3-selection": "^1.1.0",
- "d3-timer": "1"
- }
- },
- "d3-voronoi": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz",
- "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==",
- "dev": true
- },
- "d3-zoom": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz",
- "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==",
- "dev": true,
- "requires": {
- "d3-dispatch": "1",
- "d3-drag": "1",
- "d3-interpolate": "1",
- "d3-selection": "1",
- "d3-transition": "1"
- }
- },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -5118,13 +4822,13 @@
"fastparse": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
- "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+ "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=",
"dev": true
},
"fastq": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz",
- "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==",
+ "integrity": "sha1-Tsijj0rCXyFJJnOtt+rpz+9H0cI=",
"dev": true,
"requires": {
"reusify": "^1.0.0"
@@ -5752,607 +5456,6 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
- "fsevents": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
- "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.12.1",
- "node-pre-gyp": "^0.12.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
- "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
- "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
- "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
- "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
- "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz",
- "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==",
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^4.1.0",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz",
- "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==",
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
- "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
- "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz",
- "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==",
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
- "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "fs-access": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
- "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
- "dev": true,
- "requires": {
- "null-check": "^1.0.0"
- }
- },
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs-mkdirp-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
- "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "through2": "^2.0.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz",
- "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==",
- "dev": true,
- "optional": true
- },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -6931,7 +6034,7 @@
"hex-color-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
- "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=",
"dev": true
},
"hmac-drbg": {
@@ -6975,7 +6078,7 @@
"html-comment-regex": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
- "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+ "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=",
"dev": true
},
"html-minifier": {
@@ -7641,7 +6744,7 @@
"is-resolvable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
"dev": true
},
"is-running": {
@@ -7665,7 +6768,7 @@
"is-svg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
- "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=",
"dev": true,
"requires": {
"html-comment-regex": "^1.1.0"
@@ -8335,7 +7438,6 @@
"requires": {
"anymatch": "^3.0.1",
"braces": "^3.0.2",
- "fsevents": "^2.0.6",
"glob-parent": "^5.0.0",
"is-binary-path": "^2.1.0",
"is-glob": "^4.0.1",
@@ -8629,7 +7731,7 @@
"lodash-es": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz",
- "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==",
+ "integrity": "sha1-Ib2Wg5NUQS8j16EDQOXqxu5FXXg=",
"dev": true
},
"lodash.memoize": {
@@ -9000,7 +8102,7 @@
"mdn-data": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
- "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
+ "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=",
"dev": true
},
"media-typer": {
@@ -9509,7 +8611,7 @@
"normalize-url": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
- "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
"dev": true
},
"now-and-later": {
@@ -9699,7 +8801,7 @@
"object.values": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
- "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "integrity": "sha1-v2gQ712j5TJXkOqqK+IT6oRiTak=",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
@@ -10161,7 +9263,7 @@
"pofile": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pofile/-/pofile-1.1.0.tgz",
- "integrity": "sha512-6XYcNkXWGiJ2CVXogTP7uJ6ZXQCldYLZc16wgRp8tqRaBTTyIfF+TUT3EQJPXTLAT7OTPpTAoaFdoXKfaTRU1w==",
+ "integrity": "sha1-nOhLvvUEPOtPGb3DUg2Fd4+tT5Q=",
"dev": true
},
"posix-character-classes": {
@@ -10195,7 +9297,7 @@
"postcss-calc": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
- "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+ "integrity": "sha1-Ntd7qwI7Dsu5eJ2E3LI8SUEUVDY=",
"dev": true,
"requires": {
"css-unit-converter": "^1.1.1",
@@ -10207,7 +9309,7 @@
"postcss-colormin": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
- "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
"dev": true,
"requires": {
"browserslist": "^4.0.0",
@@ -10220,7 +9322,7 @@
"postcss-convert-values": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
- "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=",
"dev": true,
"requires": {
"postcss": "^7.0.0",
@@ -10230,7 +9332,7 @@
"postcss-discard-comments": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
- "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=",
"dev": true,
"requires": {
"postcss": "^7.0.0"
@@ -10239,7 +9341,7 @@
"postcss-discard-duplicates": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
- "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
"dev": true,
"requires": {
"postcss": "^7.0.0"
@@ -10248,7 +9350,7 @@
"postcss-discard-empty": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
- "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=",
"dev": true,
"requires": {
"postcss": "^7.0.0"
@@ -10257,7 +9359,7 @@
"postcss-discard-overridden": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
- "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=",
"dev": true,
"requires": {
"postcss": "^7.0.0"
@@ -10275,7 +9377,7 @@
"postcss-import": {
"version": "12.0.1",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
- "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
+ "integrity": "sha1-z4x6sLXMq1ZJAkU25WX4QZKLcVM=",
"dev": true,
"requires": {
"postcss": "^7.0.1",
@@ -10287,7 +9389,7 @@
"postcss-js": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.2.tgz",
- "integrity": "sha512-HxXLw1lrczsbVXxyC+t/VIfje9ZeZhkkXE8KpFa3MEKfp2FyHDv29JShYY9eLhYrhLyWWHNIuwkktTfLXu2otw==",
+ "integrity": "sha1-peddP7nYWyjh0r1XlWwRVmXqhUI=",
"dev": true,
"requires": {
"camelcase-css": "^2.0.1",
@@ -10315,7 +9417,7 @@
"postcss-load-config": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
- "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
+ "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=",
"dev": true,
"requires": {
"cosmiconfig": "^5.0.0",
@@ -10325,7 +9427,7 @@
"postcss-loader": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
- "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+ "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
@@ -10353,7 +9455,7 @@
"postcss-merge-longhand": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
- "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=",
"dev": true,
"requires": {
"css-color-names": "0.0.4",
@@ -10365,7 +9467,7 @@
"postcss-merge-rules": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
- "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
"dev": true,
"requires": {
"browserslist": "^4.0.0",
@@ -10392,7 +9494,7 @@
"postcss-minify-font-values": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
- "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=",
"dev": true,
"requires": {
"postcss": "^7.0.0",
@@ -10402,7 +9504,7 @@
"postcss-minify-gradients": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
- "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=",
"dev": true,
"requires": {
"cssnano-util-get-arguments": "^4.0.0",
@@ -10414,7 +9516,7 @@
"postcss-minify-params": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
- "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=",
"dev": true,
"requires": {
"alphanum-sort": "^1.0.0",
@@ -10428,7 +9530,7 @@
"postcss-minify-selectors": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
- "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=",
"dev": true,
"requires": {
"alphanum-sort": "^1.0.0",
@@ -10453,7 +9555,7 @@
"postcss-mixins": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-6.2.2.tgz",
- "integrity": "sha512-QqEZamiAMguYR6d2h73XXEHZgkxs03PlbU0PqgqtdCnbRlMLFNQgsfL/Td0rjIe2SwpLXOQyB9uoiLWa4GR7tg==",
+ "integrity": "sha1-Os6mMnHix122L7gLwcKeGmCaR0I=",
"dev": true,
"requires": {
"globby": "^8.0.1",
@@ -10510,7 +9612,7 @@
"dir-glob": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
- "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+ "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=",
"dev": true,
"requires": {
"arrify": "^1.0.1",
@@ -10578,7 +9680,7 @@
"globby": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
- "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==",
+ "integrity": "sha1-VpdhnM2VxSdduy1vqkIIfBqUHY0=",
"dev": true,
"requires": {
"array-union": "^1.0.1",
@@ -10593,7 +9695,7 @@
"ignore": {
"version": "3.3.10",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
"dev": true
},
"is-number": {
@@ -10640,7 +9742,7 @@
"path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
"dev": true,
"requires": {
"pify": "^3.0.0"
@@ -10767,7 +9869,7 @@
"postcss-normalize-charset": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
- "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=",
"dev": true,
"requires": {
"postcss": "^7.0.0"
@@ -10776,7 +9878,7 @@
"postcss-normalize-display-values": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
- "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=",
"dev": true,
"requires": {
"cssnano-util-get-match": "^4.0.0",
@@ -10787,7 +9889,7 @@
"postcss-normalize-positions": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
- "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=",
"dev": true,
"requires": {
"cssnano-util-get-arguments": "^4.0.0",
@@ -10799,7 +9901,7 @@
"postcss-normalize-repeat-style": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
- "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=",
"dev": true,
"requires": {
"cssnano-util-get-arguments": "^4.0.0",
@@ -10811,7 +9913,7 @@
"postcss-normalize-string": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
- "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=",
"dev": true,
"requires": {
"has": "^1.0.0",
@@ -10822,7 +9924,7 @@
"postcss-normalize-timing-functions": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
- "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=",
"dev": true,
"requires": {
"cssnano-util-get-match": "^4.0.0",
@@ -10833,7 +9935,7 @@
"postcss-normalize-unicode": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
- "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=",
"dev": true,
"requires": {
"browserslist": "^4.0.0",
@@ -10844,7 +9946,7 @@
"postcss-normalize-url": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
- "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=",
"dev": true,
"requires": {
"is-absolute-url": "^2.0.0",
@@ -10856,7 +9958,7 @@
"postcss-normalize-whitespace": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
- "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=",
"dev": true,
"requires": {
"postcss": "^7.0.0",
@@ -10866,7 +9968,7 @@
"postcss-ordered-values": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
- "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=",
"dev": true,
"requires": {
"cssnano-util-get-arguments": "^4.0.0",
@@ -10877,7 +9979,7 @@
"postcss-reduce-initial": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
- "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=",
"dev": true,
"requires": {
"browserslist": "^4.0.0",
@@ -10889,7 +9991,7 @@
"postcss-reduce-transforms": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
- "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=",
"dev": true,
"requires": {
"cssnano-util-get-match": "^4.0.0",
@@ -10969,7 +10071,7 @@
"postcss-simple-vars": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-5.0.2.tgz",
- "integrity": "sha512-xWIufxBoINJv6JiLb7jl5oElgp+6puJwvT5zZHliUSydoLz4DADRB3NDDsYgfKVwojn4TDLiseoC65MuS8oGGg==",
+ "integrity": "sha1-4vgbPQhH3dQWmBa20UG5HVHm4i4=",
"dev": true,
"requires": {
"postcss": "^7.0.14"
@@ -10978,7 +10080,7 @@
"postcss-svgo": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
- "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=",
"dev": true,
"requires": {
"is-svg": "^3.0.0",
@@ -10996,7 +10098,7 @@
"postcss-unique-selectors": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
- "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=",
"dev": true,
"requires": {
"alphanum-sort": "^1.0.0",
@@ -11314,7 +10416,7 @@
"raw-loader": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz",
- "integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==",
+ "integrity": "sha1-Xp05mloiLMDeGPQsO8XklndTKz8=",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
@@ -11324,7 +10426,7 @@
"schema-utils": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.0.1.tgz",
- "integrity": "sha512-HJFKJ4JixDpRur06QHwi8uu2kZbng318ahWEKgBjc0ZklcE4FDvmm2wghb448q0IRaABxIESt8vqPFvwgMB80A==",
+ "integrity": "sha1-HuwuBZVWr4QbfzqDthrxPXo/kZY=",
"dev": true,
"requires": {
"ajv": "^6.1.0",
@@ -11570,7 +10672,7 @@
"reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
- "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
+ "integrity": "sha1-Z648pXyXKiqhZCsQ/jY/4y1J3Ag=",
"dev": true
},
"regenerator-runtime": {
@@ -11932,7 +11034,7 @@
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=",
"dev": true
},
"rfdc": {
@@ -11984,7 +11086,7 @@
"run-parallel": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
- "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+ "integrity": "sha1-yd06fPn0ssS2JE4XOm7YZuYd1nk=",
"dev": true
},
"run-queue": {
@@ -11996,12 +11098,6 @@
"aproba": "^1.1.1"
}
},
- "rw": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
- "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=",
- "dev": true
- },
"rxjs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
@@ -12198,7 +11294,7 @@
"shelljs": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz",
- "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==",
+ "integrity": "sha1-p/MxlSDr8J7oEnWyNorbKGZZsJc=",
"dev": true,
"requires": {
"glob": "^7.0.0",
@@ -12224,7 +11320,7 @@
"is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=",
"dev": true
}
}
@@ -12626,7 +11722,7 @@
"stable": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=",
"dev": true
},
"stack-trace": {
@@ -12913,7 +12009,7 @@
"style-loader": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
- "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
+ "integrity": "sha1-y5FUYG8+dxq2xKtjcCahBJF02SU=",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
@@ -12929,7 +12025,7 @@
"stylehacks": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
- "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+ "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=",
"dev": true,
"requires": {
"browserslist": "^4.0.0",
@@ -13564,7 +12660,7 @@
"svgo": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz",
- "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==",
+ "integrity": "sha1-uuUbqV3tmjOja3xGzpw1mukVQxM=",
"dev": true,
"requires": {
"chalk": "^2.4.1",
@@ -14207,7 +13303,7 @@
"underscore-template-loader": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/underscore-template-loader/-/underscore-template-loader-1.0.0.tgz",
- "integrity": "sha512-4tzm3DY8nLD6mKCQmPk51vu5HW8T61fSGpfkUrlrwF0oOPTinL8Zk7W08xHOmCZ2Sh9bZHVMzVgr/DUM+10iUA==",
+ "integrity": "sha1-4IU+5IUNIuAIl8RjjzYDasCMDX4=",
"dev": true,
"requires": {
"fastparse": "^1.1.1",
@@ -14217,7 +13313,7 @@
"big.js": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
- "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
"dev": true
},
"json5": {
@@ -14589,7 +13685,7 @@
"vendors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz",
- "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==",
+ "integrity": "sha1-pkZ3gavTZiF8BQ+CAuflDMnu+MA=",
"dev": true
},
"verror": {
@@ -15264,6 +14360,15 @@
}
}
},
+ "webpack-merge": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz",
+ "integrity": "sha1-XpI8+ALqKs5P1a8dMkc2imM0ibQ=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.5"
+ }
+ },
"webpack-sources": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
diff --git a/package.json b/package.json
index d1da10dd110b..c44300b7772e 100644
--- a/package.json
+++ b/package.json
@@ -114,6 +114,7 @@
"webdriver-manager": "^12.1.4",
"webpack": "^4.30.0",
"webpack-cli": "^3.3.1",
+ "webpack-merge": "^4.2.1",
"yargs": "^13.2.2",
"zone.js": "^0.9.1"
},
diff --git a/scripts/build.py b/scripts/build.py
index d33e07e0fd70..b33efb88a85d 100644
--- a/scripts/build.py
+++ b/scripts/build.py
@@ -70,9 +70,13 @@
'staging_dir': os.path.join('backend_prod_files', 'templates', 'head', ''),
'out_dir': os.path.join('build', 'templates', 'head', '')
}
+WEBPACK_DIRNAMES_TO_DIRPATHS = {
+ 'staging_dir': os.path.join('backend_prod_files', 'webpack_bundles', ''),
+ 'out_dir': os.path.join('build', 'webpack_bundles', '')
+}
-HASHES_JS_FILENAME = 'hashes.js'
-HASHES_JS_FILEPATH = os.path.join(ASSETS_DEV_DIR, HASHES_JS_FILENAME)
+HASHES_TS_FILENAME = 'hashes.json'
+HASHES_TS_FILEPATH = os.path.join('assets', HASHES_TS_FILENAME)
MANIFEST_FILE_PATH = os.path.join('manifest.json')
REMOVE_WS = re.compile(r'\s{2,}').sub
@@ -117,18 +121,15 @@
'third_party/generated/webfonts/*',
'*.bundle.js',
'*.bundle.js.map',
- '*/dist/about-page.mainpage.html',
- '*/dist/contact-page.mainpage.html',
- '*/dist/donate-page.mainpage.html',
- '*/dist/get-started-page.mainpage.html',
- '*/dist/privacy-page.mainpage.html',
- '*/dist/splash-page.mainpage.html',
- '*/dist/splash_at0.html',
- '*/dist/splash_at1.html',
- '*/dist/teach-page.mainpage.html',
- '*/dist/terms-page.mainpage.html',
- '*/dist/terms-page.mainpage.html',
- '*/dist/thanks-page.mainpage.html')
+ 'webpack_bundles/about-page.mainpage.html',
+ 'webpack_bundles/contact-page.mainpage.html',
+ 'webpack_bundles/donate-page.mainpage.html',
+ 'webpack_bundles/get-started-page.mainpage.html',
+ 'webpack_bundles/privacy-page.mainpage.html',
+ 'webpack_bundles/splash-page.mainpage.html',
+ 'webpack_bundles/teach-page.mainpage.html',
+ 'webpack_bundles/terms-page.mainpage.html',
+ 'webpack_bundles/thanks-page.mainpage.html')
# Hashes for files with these paths should be provided to the frontend in
# JS hashes object.
@@ -144,16 +145,15 @@
def generate_app_yaml():
"""Generate app.yaml from app_dev.yaml."""
- dev_file_prefix = 'core/templates/dev/head'
- prod_file_prefix = 'build/templates/head'
+ prod_file_prefix = 'build/'
content = '# THIS FILE IS AUTOGENERATED, DO NOT MODIFY\n'
with python_utils.open_file(APP_DEV_YAML_FILEPATH, 'r') as yaml_file:
content += yaml_file.read()
for file_path in FILEPATHS_NOT_TO_RENAME:
- if '/dist/' in file_path:
+ if 'webpack_bundles/' in file_path:
content = content.replace(
- dev_file_prefix + file_path[1:],
- prod_file_prefix + file_path[1:])
+ file_path,
+ prod_file_prefix + file_path)
content = content.replace('version: default', '')
if os.path.isfile(APP_YAML_FILEPATH):
os.remove(APP_YAML_FILEPATH)
@@ -603,7 +603,8 @@ def build_third_party_libs(third_party_directory_path):
def build_using_webpack():
"""Execute webpack build process. This takes all TypeScript files we have in
/templates/dev/head and generates JS bundles according the require() imports
- and also compiles HTML pages into the /templates/dev/head/dist folder.
+ and also compiles HTML pages into the /backend_prod_files/webpack_bundles
+ folder. The files are later copied into /build/webpack_bundles.
The settings for this are specified in webpack.prod.config.ts.
"""
@@ -689,7 +690,8 @@ def generate_copy_tasks_to_copy_from_source_to_target(
source_path.endswith(p) for p in FILE_EXTENSIONS_TO_IGNORE):
target_path = source_path
relative_path = os.path.relpath(source_path, source)
- if hash_should_be_inserted(source + relative_path):
+ if (hash_should_be_inserted(source + relative_path) and
+ relative_path in file_hashes):
relative_path = (
_insert_hash(relative_path, file_hashes[relative_path]))
@@ -807,7 +809,7 @@ def filter_hashes(file_hashes):
return filtered_hashes
-def get_hashes_json_file_contents(file_hashes):
+def save_hashes_to_file(file_hashes):
"""Return JS code that loads hashes needed for frontend into variable.
Args:
@@ -820,8 +822,11 @@ def get_hashes_json_file_contents(file_hashes):
# Only some of the hashes are needed in the frontend.
filtered_hashes = filter_hashes(file_hashes)
- hashes_json = json.dumps(filtered_hashes)
- return 'var hashes = JSON.parse(\'%s\');' % (hashes_json)
+ ensure_directory_exists(HASHES_TS_FILEPATH)
+ with python_utils.open_file(HASHES_TS_FILEPATH, 'w+') as hashes_json_file:
+ hashes_json_file.write(
+ unicode(json.dumps(filtered_hashes, ensure_ascii=False)))
+ hashes_json_file.write(u'\n')
def minify_func(source_path, target_path, file_hashes, filename):
@@ -1138,6 +1143,8 @@ def _verify_filepath_hash(relative_filepath, file_hashes):
hash_string_from_filename = filename_partitions[-2]
# Ensure hash string obtained from filename follows MD5 hash format.
if not re.search(r'([a-fA-F\d]{32})', relative_filepath):
+ if relative_filepath not in file_hashes:
+ return
raise ValueError(
'%s is expected to contain MD5 hash' % relative_filepath)
if hash_string_from_filename not in file_hashes.values():
@@ -1173,7 +1180,7 @@ def _verify_hashes(output_dirnames, file_hashes):
_verify_filepath_hash(relative_filepath, file_hashes)
hash_final_filename = _insert_hash(
- HASHES_JS_FILENAME, file_hashes[HASHES_JS_FILENAME])
+ HASHES_TS_FILENAME, file_hashes[HASHES_TS_FILENAME])
third_party_js_final_filename = _insert_hash(
MINIFIED_THIRD_PARTY_JS_RELATIVE_FILEPATH,
@@ -1191,19 +1198,13 @@ def _verify_hashes(output_dirnames, file_hashes):
THIRD_PARTY_GENERATED_OUT_DIR, third_party_css_final_filename)])
-def generate_build_directory():
- """Generates hashes for files. Minifies files and interpolates paths
- in HTMLs to include hashes. Renames the files to include hashes and copies
- them into build directory.
- """
- python_utils.PRINT('Building Oppia in production mode...')
+def generate_hashes():
+ """Generates hashes for files."""
# The keys for hashes are filepaths relative to the subfolders of the future
# /build folder. This is so that the replacing inside the HTML files works
# correctly.
hashes = dict()
- build_tasks = collections.deque()
- copy_tasks = collections.deque()
# Create hashes for all directories and files.
HASH_DIRS = [
@@ -1214,16 +1215,27 @@ def generate_build_directory():
THIRD_PARTY_GENERATED_DEV_DIR]
for HASH_DIR in HASH_DIRS:
hashes.update(get_file_hashes(HASH_DIR))
+
# Save hashes as JSON and write the JSON into JS file
# to make the hashes available to the frontend.
- ensure_directory_exists(HASHES_JS_FILEPATH)
- with python_utils.open_file(HASHES_JS_FILEPATH, 'w+') as hashes_js_file:
- write_to_file_stream(
- hashes_js_file, get_hashes_json_file_contents(hashes))
- # Update hash dict with newly created hashes.js.
- hashes.update({HASHES_JS_FILENAME: generate_md5_hash(HASHES_JS_FILEPATH)})
+ save_hashes_to_file(hashes)
+
+ # Update hash dict with newly created hashes.json.
+ hashes.update({HASHES_TS_FILENAME: generate_md5_hash(HASHES_TS_FILEPATH)})
# Make sure /assets/hashes.js is available to the frontend.
- _ensure_files_exist([HASHES_JS_FILEPATH])
+ _ensure_files_exist([HASHES_TS_FILEPATH])
+ return hashes
+
+
+def generate_build_directory(hashes):
+ """Generates hashes for files. Minifies files and interpolates paths
+ in HTMLs to include hashes. Renames the files to include hashes and copies
+ them into build directory.
+ """
+ python_utils.PRINT('Building Oppia in production mode...')
+
+ build_tasks = collections.deque()
+ copy_tasks = collections.deque()
# Build files in /extensions and copy them into staging directory.
build_tasks += generate_build_tasks_to_build_directory(
@@ -1237,11 +1249,12 @@ def generate_build_directory():
COPY_INPUT_DIRS = [
ASSETS_DEV_DIR, EXTENSIONS_DIRNAMES_TO_DIRPATHS['staging_dir'],
TEMPLATES_CORE_DIRNAMES_TO_DIRPATHS['staging_dir'],
- THIRD_PARTY_GENERATED_DEV_DIR]
+ THIRD_PARTY_GENERATED_DEV_DIR,
+ WEBPACK_DIRNAMES_TO_DIRPATHS['staging_dir']]
COPY_OUTPUT_DIRS = [
ASSETS_OUT_DIR, EXTENSIONS_DIRNAMES_TO_DIRPATHS['out_dir'],
TEMPLATES_CORE_DIRNAMES_TO_DIRPATHS['out_dir'],
- THIRD_PARTY_GENERATED_OUT_DIR]
+ THIRD_PARTY_GENERATED_OUT_DIR, WEBPACK_DIRNAMES_TO_DIRPATHS['out_dir']]
assert len(COPY_INPUT_DIRS) == len(COPY_OUTPUT_DIRS)
for i in python_utils.RANGE(len(COPY_INPUT_DIRS)):
safe_delete_directory_tree(COPY_OUTPUT_DIRS[i])
@@ -1260,6 +1273,11 @@ def generate_build_directory():
_compare_file_count(
SOURCE_DIRS_FOR_THIRD_PARTY, OUTPUT_DIRS_FOR_THIRD_PARTY)
+ SOURCE_DIRS_FOR_WEBPACK = [WEBPACK_DIRNAMES_TO_DIRPATHS['staging_dir']]
+ OUTPUT_DIRS_FOR_WEBPACK = [WEBPACK_DIRNAMES_TO_DIRPATHS['out_dir']]
+ _compare_file_count(
+ SOURCE_DIRS_FOR_WEBPACK, OUTPUT_DIRS_FOR_WEBPACK)
+
SOURCE_DIRS_FOR_EXTENSIONS = [
EXTENSIONS_DIRNAMES_TO_DIRPATHS['dev_dir'],
EXTENSIONS_DIRNAMES_TO_DIRPATHS['compiled_js_dir']]
@@ -1273,8 +1291,7 @@ def generate_build_directory():
TEMPLATES_CORE_DIRNAMES_TO_DIRPATHS['out_dir']]
_compare_file_count(SOURCE_DIRS_FOR_TEMPLATES, OUTPUT_DIRS_FOR_TEMPLATES)
- # Clean up un-hashed hashes.js.
- safe_delete_file(HASHES_JS_FILEPATH)
+ save_hashes_to_file(dict())
python_utils.PRINT('Build completed.')
@@ -1360,11 +1377,14 @@ def build():
raise Exception(
'minify_third_party_libs_only should not be set in non-prod mode.')
if options.prod_mode:
- build_using_webpack()
minify_third_party_libs(THIRD_PARTY_GENERATED_DEV_DIR)
+ hashes = generate_hashes()
+ build_using_webpack()
generate_app_yaml()
if not options.minify_third_party_libs_only:
- generate_build_directory()
+ generate_build_directory(hashes)
+ else:
+ save_hashes_to_file(dict())
# The 'no coverage' pragma is used as this line is un-testable. This is because
diff --git a/scripts/build_test.py b/scripts/build_test.py
index df9cdef6a0c8..4c77308ef845 100644
--- a/scripts/build_test.py
+++ b/scripts/build_test.py
@@ -221,6 +221,10 @@ def test_verify_filepath_hash(self):
ValueError, '%s is expected to contain MD5 hash' % base_filename):
build._verify_filepath_hash(base_filename, file_hashes)
+ base_without_hash_filename = 'base_without_hash.html'
+ self.assertIsNone(build._verify_filepath_hash(
+ base_without_hash_filename, file_hashes))
+
bad_filepath = 'README'
with self.assertRaisesRegexp(
ValueError, 'Filepath has less than 2 partitions after splitting'):
@@ -470,22 +474,28 @@ def test_filter_hashes(self):
self.assertNotIn('/path/path/file.js', filtered_hashes)
self.assertNotIn('/file.html', filtered_hashes)
- def test_get_hashes_json_file_contents(self):
- """Test get_hashes_json_file_contents parses provided hash dict
- correctly to JSON format.
+ def test_save_hashes_to_file(self):
+ """Test save_hashes_to_file saves provided hash dict correctly to
+ JSON file.
"""
+ hashes_path = os.path.join(MOCK_ASSETS_OUT_DIR, 'hashes.json')
+
# Set constant to provide everything to frontend.
with self.swap(build, 'FILEPATHS_PROVIDED_TO_FRONTEND', ('*',)):
- hashes = {'path/file.js': '123456'}
- self.assertEqual(
- build.get_hashes_json_file_contents(hashes),
- 'var hashes = JSON.parse(\'{"/path/file.js": "123456"}\');')
-
- hashes = {'file.js': '123456', 'file.min.js': '654321'}
- self.assertEqual(
- build.get_hashes_json_file_contents(hashes),
- ('var hashes = JSON.parse(\'{"/file.min.js": "654321", '
- '"/file.js": "123456"}\');'))
+ with self.swap(build, 'HASHES_TS_FILEPATH', hashes_path):
+ hashes = {'path/file.js': '123456'}
+ build.save_hashes_to_file(hashes)
+ with python_utils.open_file(hashes_path, 'r') as hashes_file:
+ self.assertEqual(
+ hashes_file.read(), '{"/path/file.js": "123456"}\n')
+
+ hashes = {'file.js': '123456', 'file.min.js': '654321'}
+ build.save_hashes_to_file(hashes)
+ with python_utils.open_file(hashes_path, 'r') as hashes_file:
+ self.assertEqual(
+ hashes_file.read(),
+ '{"/file.min.js": "654321", "/file.js": "123456"}\n')
+ os.remove(hashes_path)
def test_execute_tasks(self):
"""Test _execute_tasks joins all threads after executing all tasks."""
diff --git a/scripts/pre_commit_linter.py b/scripts/pre_commit_linter.py
index 370f964cce39..7d0d9a57c901 100644
--- a/scripts/pre_commit_linter.py
+++ b/scripts/pre_commit_linter.py
@@ -108,8 +108,8 @@
'core/tests/protractor.conf.js',
'core/tests/karma.conf.ts',
'core/templates/dev/head/mathjaxConfig.ts',
- 'assets/constants.js',
- 'assets/rich_text_components_definitions.js')
+ 'assets/constants.ts',
+ 'assets/rich_text_components_definitions.ts')
BAD_PATTERNS = {
'__author__': {
@@ -489,7 +489,7 @@
REQUIRED_STRINGS_CONSTANTS = {
'DEV_MODE: true': {
- 'message': 'Please set the DEV_MODE variable in constants.js'
+ 'message': 'Please set the DEV_MODE variable in constants.ts'
'to true before committing.',
'excluded_files': ()
}
@@ -517,8 +517,8 @@
'core/tests/protractor.conf.js',
'core/tests/karma.conf.ts',
'core/templates/dev/head/mathjaxConfig.ts',
- 'assets/constants.js',
- 'assets/rich_text_components_definitions.js',
+ 'assets/constants.ts',
+ 'assets/rich_text_components_definitions.ts',
'webpack.config.ts',
'webpack.dev.config.ts',
'webpack.prod.config.ts')
@@ -1530,7 +1530,7 @@ def _check_bad_patterns(self):
failed = failed or temp_failed
total_error_count += temp_count
- if filepath == 'constants.js':
+ if filepath == 'constants.ts':
for pattern in REQUIRED_STRINGS_CONSTANTS:
if pattern not in file_content:
failed = True
diff --git a/scripts/run_backend_tests.sh b/scripts/run_backend_tests.sh
index 4eb90853a28d..a01202dca302 100755
--- a/scripts/run_backend_tests.sh
+++ b/scripts/run_backend_tests.sh
@@ -85,8 +85,14 @@ for arg in "$@"; do
fi
done
+$PYTHON_CMD scripts/build.py
+
+# Compile typescript files
+echo "Compiling typescript..."
+$NODE_MODULE_DIR/typescript/bin/tsc --project .
+
echo "Compiling webpack..."
-$NODE_MODULE_DIR/webpack/bin/webpack.js --config webpack.prod.config.ts
+$NODE_MODULE_DIR/webpack/bin/webpack.js --config webpack.dev.config.ts
$PYTHON_CMD scripts/backend_tests.py $@
diff --git a/scripts/run_e2e_tests.sh b/scripts/run_e2e_tests.sh
index 49b483292b9d..88e600fe446d 100755
--- a/scripts/run_e2e_tests.sh
+++ b/scripts/run_e2e_tests.sh
@@ -103,12 +103,12 @@ fi
trap cleanup EXIT
# Argument passed to feconf.py to help choose production templates folder.
-FORCE_PROD_MODE=False
+DEV_MODE=true
RUN_ON_BROWSERSTACK=False
for arg in "$@"; do
# Used to emulate running Oppia in a production environment.
if [ "$arg" == "--prod_env" ]; then
- FORCE_PROD_MODE=True
+ DEV_MODE=false
echo " Generating files for production mode..."
fi
@@ -119,20 +119,20 @@ for arg in "$@"; do
fi
done
-if [[ "$FORCE_PROD_MODE" == "True" ]]; then
- constants_env_variable="\"DEV_MODE\": false"
- sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.js
- $PYTHON_CMD scripts/build.py --prod_env
- APP_YAML_FILEPATH="app.yaml"
-else
+if [[ "DEV_MODE" == "true" ]]; then
constants_env_variable="\"DEV_MODE\": true"
- sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.js
+ sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.ts
$PYTHON_CMD scripts/build.py
APP_YAML_FILEPATH="app_dev.yaml"
+else
+ constants_env_variable="\"DEV_MODE\": false"
+ sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.ts
+ $PYTHON_CMD scripts/build.py --prod_env
+ APP_YAML_FILEPATH="app.yaml"
fi
# Delete the modified feconf.py file(-i.bak)
-rm assets/constants.js.bak
+rm assets/constants.ts.bak
# Start a selenium server using chromedriver 2.41.
# The 'detach' option continues the flow once the server is up and runnning.
@@ -209,14 +209,14 @@ done
# TODO(bhenning): Figure out if this is a bug with protractor.
if [ "$RUN_ON_BROWSERSTACK" == "False" ]; then
if [ "$SHARDING" = "false" ] || [ "$SHARD_INSTANCES" = "1" ]; then
- $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor.conf.js --suite "$SUITE"
+ $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor.conf.js --suite "$SUITE" --params.devMode="$DEV_MODE"
else
- $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor.conf.js --capabilities.shardTestFiles="$SHARDING" --capabilities.maxInstances=$SHARD_INSTANCES --suite "$SUITE"
+ $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor.conf.js --capabilities.shardTestFiles="$SHARDING" --capabilities.maxInstances=$SHARD_INSTANCES --suite "$SUITE" --params.devMode="$DEV_MODE"
fi
else
if [ "$SHARDING" = "false" ] || [ "$SHARD_INSTANCES" = "1" ]; then
- $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor-browserstack.conf.js --suite "$SUITE"
+ $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor-browserstack.conf.js --suite "$SUITE" --params.devMode="$DEV_MODE"
else
- $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor-browserstack.conf.js --capabilities.shardTestFiles="$SHARDING" --capabilities.maxInstances=$SHARD_INSTANCES --suite "$SUITE"
+ $NODE_MODULE_DIR/protractor/bin/protractor core/tests/protractor-browserstack.conf.js --capabilities.shardTestFiles="$SHARDING" --capabilities.maxInstances=$SHARD_INSTANCES --suite "$SUITE" --params.devMode="$DEV_MODE"
fi
fi
diff --git a/scripts/start.sh b/scripts/start.sh
index 07028f85ed13..92a0ed88267c 100755
--- a/scripts/start.sh
+++ b/scripts/start.sh
@@ -89,18 +89,18 @@ done
if [[ "$FORCE_PROD_MODE" == "True" ]]; then
constants_env_variable="\"DEV_MODE\": false"
- sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.js
+ sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.ts
$PYTHON_CMD scripts/build.py --prod_env --enable_watcher
APP_YAML_FILEPATH="app.yaml"
else
constants_env_variable="\"DEV_MODE\": true"
- sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.js
+ sed -i.bak -e s/"\"DEV_MODE\": .*"/"$constants_env_variable"/ assets/constants.ts
$PYTHON_CMD scripts/build.py --enable_watcher
APP_YAML_FILEPATH="app_dev.yaml"
fi
# Delete the modified feconf.py file(-i.bak)
-rm assets/constants.js.bak
+rm assets/constants.ts.bak
# Set up a local dev instance.
# TODO(sll): do this in a new shell.
@@ -112,8 +112,8 @@ if ! [[ "$FORCE_PROD_MODE" == "True" ]]; then
($NODE_PATH/bin/node $NODE_MODULE_DIR/gulp/bin/gulp.js watch)&
# In prod mode webpack is launched through scripts/build.py
echo Compiling webpack...
- $NODE_MODULE_DIR/webpack/bin/webpack.js --config webpack.dev.config.ts
($NODE_MODULE_DIR/webpack/bin/webpack.js --config webpack.dev.config.ts --watch)&
+ sleep 10 # Give webpack few seconds to do the initíal compilation
fi
echo Starting GAE development server
(python $GOOGLE_APP_ENGINE_HOME/dev_appserver.py $CLEAR_DATASTORE_ARG $ENABLE_CONSOLE_ARG --admin_host 0.0.0.0 --admin_port 8000 --host 0.0.0.0 --port 8181 --skip_sdk_update_check true $APP_YAML_FILEPATH)&
diff --git a/scripts/update_configs.py b/scripts/update_configs.py
index 2188c4e532ad..e483b6a24615 100644
--- a/scripts/update_configs.py
+++ b/scripts/update_configs.py
@@ -34,7 +34,7 @@
CONSTANTS_CONFIG_PATH = os.path.join(
os.getcwd(), os.pardir, 'release-scripts', 'constants_updates.config')
LOCAL_FECONF_PATH = os.path.join(os.getcwd(), 'feconf.py')
-LOCAL_CONSTANTS_PATH = os.path.join(os.getcwd(), 'assets', 'constants.js')
+LOCAL_CONSTANTS_PATH = os.path.join(os.getcwd(), 'assets', 'constants.ts')
def _apply_changes_based_on_config(
@@ -86,7 +86,7 @@ def _apply_changes_based_on_config(
def _update_configs():
- """Updates the 'feconf.py' and 'constants.js' files after doing the
+ """Updates the 'feconf.py' and 'constants.ts' files after doing the
prerequisite checks.
"""
# Do prerequisite checks.
diff --git a/tsconfig-for-compile-check.json b/tsconfig-for-compile-check.json
index 9a4df9d1391d..7e2a6a766c7d 100644
--- a/tsconfig-for-compile-check.json
+++ b/tsconfig-for-compile-check.json
@@ -22,7 +22,16 @@
"interactions/*": ["extensions/interactions/*"]
}
},
- "files": ["assets/constants.js", "assets/rich_text_components_definitions.js", "core/tests/karma-globals.ts", "core/tests/karma.conf.ts"],
+ "files": [
+ "assets/constants.ts",
+ "assets/rich_text_components_definitions.ts",
+ "core/tests/karma-globals.ts",
+ "core/tests/karma.conf.ts"
+ ],
"include": ["core", "extensions", "typings"],
- "exclude": ["core/tests", "core/templates/dev/head/dist"]
+ "exclude": [
+ "core/tests",
+ "core/templates/dev/head/dist",
+ "core/templates/dev/head/google-analytics.initializer.ts"
+ ]
}
diff --git a/tsconfig.json b/tsconfig.json
index 62b4fd86758d..a3e6fae64118 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,6 +10,7 @@
"typeRoots": ["./node_modules/@types"],
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
+ "allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"baseUrl": ".",
"paths": {
@@ -24,12 +25,9 @@
},
"files_explanation": "These files are included separately since we still do not have webpack in extensions folder and these files are still included through scripts tags, so they need to be compiled separately.",
"files": [
- "assets/constants.js",
- "assets/rich_text_components_definitions.js",
- "core/tests/karma-globals.ts",
- "core/tests/karma.conf.ts",
"core/templates/dev/head/mathjaxConfig.ts",
- "core/templates/dev/head/expressions/ExpressionParserService.js"
+ "core/templates/dev/head/expressions/ExpressionParserService.js",
+ "core/tests/karma-globals.ts"
],
"include_explanation": "The files in extensions/ckeditor_plugins are yet to be integrated into webpack (#6732).",
"include": [
diff --git a/webpack.config.ts b/webpack.common.config.ts
similarity index 88%
rename from webpack.config.ts
rename to webpack.common.config.ts
index 7672bbfc0778..4ba24cd43a47 100644
--- a/webpack.config.ts
+++ b/webpack.common.config.ts
@@ -16,12 +16,13 @@
* @fileoverview General config file for Webpack.
*/
-var CleanWebpackPlugin = require('clean-webpack-plugin');
-var ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
-var HtmlWebpackPlugin = require('html-webpack-plugin');
-
const CKEditorWebpackPlugin = require(
- '@ckeditor/ckeditor5-dev-webpack-plugin' );
+ '@ckeditor/ckeditor5-dev-webpack-plugin');
+const CleanWebpackPlugin = require('clean-webpack-plugin');
+const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const path = require('path');
+const { styles } = require('@ckeditor/ckeditor5-dev-utils/lib/');
var htmlMinifyConfig = {
ignoreCustomFragments: [
@@ -29,7 +30,6 @@ var htmlMinifyConfig = {
/<\{%[\s\S]*?%\}/,
/<\[[\s\S]*?\]>/]
};
-
var commonPrefix = './core/templates/dev/head';
var defaultMeta = {
name: 'Personalized Online Learning from Oppia',
@@ -38,7 +38,21 @@ var defaultMeta = {
};
module.exports = {
- entries: {
+ resolve: {
+ modules: [
+ path.resolve(__dirname, 'assets'),
+ path.resolve(__dirname, 'core/templates/dev/head'),
+ path.resolve(__dirname, 'extensions'),
+ path.resolve(__dirname, 'node_modules'),
+ path.resolve(__dirname, 'third_party')
+ ],
+ extensions: ['.ts', '.js', '.json', '.html', '.svg', '.png'],
+ alias: {
+ '@angular/upgrade/static': (
+ '@angular/upgrade/bundles/upgrade-static.umd.js')
+ }
+ },
+ entry: {
about: commonPrefix + '/pages/about-page/about-page.scripts.ts',
admin: commonPrefix + '/pages/admin-page/admin-page.scripts.ts',
collection_editor:
@@ -104,9 +118,6 @@ module.exports = {
commonPrefix + '/pages/story-editor-page/story-editor-page.scripts.ts',
story_viewer:
commonPrefix + '/pages/story-viewer-page/story-viewer-page.scripts.ts',
- subtopic_viewer:
- commonPrefix + '/pages/subtopic-viewer-page/' +
- 'subtopic-viewer-page.scripts.ts',
teach: commonPrefix + '/pages/teach-page/teach-page.scripts.ts',
terms: commonPrefix + '/pages/terms-page/terms-page.scripts.ts',
thanks: commonPrefix + '/pages/thanks-page/thanks-page.scripts.ts',
@@ -253,6 +264,13 @@ module.exports = {
minify: htmlMinifyConfig,
inject: false
}),
+ new HtmlWebpackPlugin({
+ chunks: ['error'],
+ filename: 'error-iframed.mainpage.html',
+ template: commonPrefix + '/pages/error-pages/error-iframed.mainpage.html',
+ minify: htmlMinifyConfig,
+ inject: false
+ }),
new HtmlWebpackPlugin({
chunks: ['error'],
filename: 'error-page.mainpage.html',
@@ -561,6 +579,74 @@ module.exports = {
minify: htmlMinifyConfig,
inject: false
}),
- new ForkTsCheckerWebpackPlugin({ checkSyntacticErrors: true })
- ]
+ new CleanWebpackPlugin({
+ cleanAfterEveryBuildPatterns: ['**/*', '!*.html'],
+ }),
+ new ForkTsCheckerWebpackPlugin({
+ checkSyntacticErrors: true
+ })
+ ],
+ module: {
+ rules: [{
+ test: /ckeditor5-[^\/]+\/theme\/icons\/[^\/]+\.svg$/,
+ use: ['raw-loader']
+ },
+ {
+ test: /ckeditor5-[^\/]+\/theme\/[-\w\/]+\.css$/,
+ use: [{
+ loader: 'style-loader',
+ options: {
+ singleton: true
+ }
+ },
+ {
+ loader: 'postcss-loader',
+ options: styles.getPostCssConfig( {
+ themeImporter: {
+ themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' )
+ },
+ minify: true
+ })
+ },
+ ]
+ },
+ {
+ test: /\.ts$/,
+ include: [
+ path.resolve(__dirname, 'assets'),
+ path.resolve(__dirname, 'core/templates/dev/head'),
+ path.resolve(__dirname, 'extensions'),
+ path.resolve(__dirname, 'typings')
+ ],
+ use: [
+ 'cache-loader',
+ 'thread-loader',
+ {
+ loader: 'ts-loader',
+ options: {
+ // this is needed for thread-loader to work correctly
+ happyPackMode: true
+ }
+ }
+ ]
+ },
+ {
+ test: /\.html$/,
+ loader: 'underscore-template-loader'
+ },
+ {
+ test: /\.css$/,
+ include: [
+ path.resolve(__dirname, 'extensions'),
+ ],
+ use: ['style-loader', 'css-loader']
+ }]
+ },
+ optimization: {
+ splitChunks: {
+ chunks: 'all',
+ minSize: 1024 * 10,
+ maxInitialRequests: 9,
+ }
+ }
};
diff --git a/webpack.dev.config.ts b/webpack.dev.config.ts
index beda26bb6e8b..a19c9e8e460b 100644
--- a/webpack.dev.config.ts
+++ b/webpack.dev.config.ts
@@ -16,97 +16,19 @@
* @fileoverview Development environment config file for Webpack.
*/
-var commonWebpackConfig = require('./webpack.config.ts');
-var path = require('path');
+const merge = require('webpack-merge');
+const common = require('./webpack.common.config.ts');
+const path = require('path');
-const { styles } = require('@ckeditor/ckeditor5-dev-utils/lib/');
-
-module.exports = {
+module.exports = merge(common, {
mode: 'development',
- resolve: {
- modules: [
- path.resolve(__dirname, 'core/templates/dev/head'),
- path.resolve(__dirname, 'extensions'),
- path.resolve(__dirname, 'node_modules'),
- path.resolve(__dirname, 'third_party')
- ],
- extensions: ['.ts', '.js', '.json', '.html', '.svg', '.png'],
- alias: {
- '@angular/upgrade/static': (
- '@angular/upgrade/bundles/upgrade-static.umd.js')
- }
- },
- entry: commonWebpackConfig.entries,
- plugins: commonWebpackConfig.plugins,
- module: {
- rules: [{
- test: /ckeditor5-[^\/]+\/theme\/icons\/[^\/]+\.svg$/,
- use: ['raw-loader']
- },
- {
- test: /ckeditor5-[^\/]+\/theme\/[-\w\/]+\.css$/,
- use: [{
- loader: 'style-loader',
- options: {
- singleton: true
- }
- },
- {
- loader: 'postcss-loader',
- options: styles.getPostCssConfig( {
- themeImporter: {
- themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' )
- },
- minify: true
- })
- },
- ]
- },
- {
- test: /\.ts$/,
- include: [
- path.resolve(__dirname, 'core/templates/dev/head'),
- path.resolve(__dirname, 'extensions'),
- path.resolve(__dirname, 'typings')
- ],
- use: [
- 'cache-loader',
- 'thread-loader',
- {
- loader: 'ts-loader',
- options: {
- // this is needed for thread-loader to work correctly
- happyPackMode: true
- }
- }
- ]
- },
- {
- test: /\.html$/,
- loader: 'underscore-template-loader'
- },
- {
- test: /\.css$/,
- include: [
- path.resolve(__dirname, 'extensions'),
- ],
- use: ['style-loader', 'css-loader']
- }]
- },
output: {
filename: '[name].bundle.js',
- path: path.resolve(__dirname, 'core/templates/dev/head/dist')
+ path: path.resolve(__dirname, 'webpack_bundles')
},
devtool: 'inline-source-map',
- optimization: {
- splitChunks: {
- chunks: 'all',
- minSize: 1024 * 10,
- maxInitialRequests: 9,
- }
- },
watchOptions: {
aggregateTimeout: 500,
poll: 1000
}
-};
+});
diff --git a/webpack.prod.config.ts b/webpack.prod.config.ts
index 515408fe4c82..f6ce4156c535 100644
--- a/webpack.prod.config.ts
+++ b/webpack.prod.config.ts
@@ -16,92 +16,15 @@
* @fileoverview Production environment config file for Webpack.
*/
-var commonWebpackConfig = require('./webpack.config.ts');
-var path = require('path');
+const merge = require('webpack-merge');
+const common = require('./webpack.common.config.ts');
+const path = require('path');
-const { styles } = require('@ckeditor/ckeditor5-dev-utils/lib/');
-
-module.exports = {
+module.exports = merge(common, {
mode: 'production',
- resolve: {
- modules: [
- path.resolve(__dirname, 'core/templates/dev/head'),
- path.resolve(__dirname, 'extensions'),
- path.resolve(__dirname, 'node_modules')
- ],
- extensions: ['.ts', '.js', '.json', '.html', '.svg', '.png'],
- alias: {
- '@angular/upgrade/static': (
- '@angular/upgrade/bundles/upgrade-static.umd.js')
- }
- },
- entry: commonWebpackConfig.entries,
- plugins: commonWebpackConfig.plugins,
- module: {
- rules: [{
- test: /ckeditor5-[^\/]+\/theme\/icons\/[^\/]+\.svg$/,
- use: ['raw-loader']
- },
- {
- test: /ckeditor5-[^\/]+\/theme\/[-\w\/]+\.css$/,
- use: [{
- loader: 'style-loader',
- options: {
- singleton: true
- }
- },
- {
- loader: 'postcss-loader',
- options: styles.getPostCssConfig( {
- themeImporter: {
- themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' )
- },
- minify: true
- })
- },
- ]
- },
- {
- test: /\.ts$/,
- include: [
- path.resolve(__dirname, 'core/templates/dev/head'),
- path.resolve(__dirname, 'extensions'),
- path.resolve(__dirname, 'typings')
- ],
- use: [
- 'cache-loader',
- 'thread-loader',
- {
- loader: 'ts-loader',
- options: {
- // this is needed for thread-loader to work correctly
- happyPackMode: true
- }
- }
- ]
- },
- {
- test: /\.html$/,
- loader: 'underscore-template-loader'
- },
- {
- test: /\.css$/,
- include: [
- path.resolve(__dirname, 'extensions'),
- ],
- use: ['style-loader', 'css-loader']
- }]
- },
output: {
filename: '[name].[contenthash].bundle.js',
- path: path.resolve(__dirname, 'core/templates/dev/head/dist')
+ path: path.resolve(__dirname, 'backend_prod_files/webpack_bundles')
},
- devtool: 'source-map',
- optimization: {
- splitChunks: {
- chunks: 'all',
- minSize: 1024 * 10,
- maxInitialRequests: 9,
- }
- }
-};
+ devtool: 'source-map'
+});