diff --git a/bower.json b/bower.json
index ac76883bce..565796f114 100644
--- a/bower.json
+++ b/bower.json
@@ -9,6 +9,7 @@
"private": true,
"dependencies": {
"app-layout": "^2.0.0",
+ "app-localize-behavior": "PolymerElements/app-localize-behavior#~2.0.0",
"app-route": "PolymerElements/app-route#^2.0.0",
"app-storage": "^2.0.2",
"fecha": "~2.3.0",
diff --git a/gulp/tasks/build.js b/gulp/tasks/build.js
index 09437feb3e..d39e622d23 100644
--- a/gulp/tasks/build.js
+++ b/gulp/tasks/build.js
@@ -30,7 +30,7 @@ function renamePanel(path) {
}
}
-gulp.task('build', ['ru_all'], () => {
+gulp.task('build', ['ru_all', 'build-translations'], () => {
const strategy = composeStrategies([
generateShellMergeStrategy(polymerConfig.shell),
stripImportsStrategy([
diff --git a/gulp/tasks/gen-service-worker.js b/gulp/tasks/gen-service-worker.js
index a1851608ef..ca1a7a1e52 100755
--- a/gulp/tasks/gen-service-worker.js
+++ b/gulp/tasks/gen-service-worker.js
@@ -39,6 +39,7 @@ var staticFingerprinted = [
'mdi.html',
'core.js',
'compatibility.js',
+ 'translations/en.json',
];
// These panels will always be registered inside HA and thus can
@@ -62,9 +63,10 @@ gulp.task('gen-service-worker', () => {
// Create fingerprinted versions of our dependencies.
staticFingerprinted.forEach(fn => {
var parts = path.parse(fn);
- var hash = md5(rootDir + '/' + parts.name + parts.ext);
- var url = '/static/' + parts.name + '-' + hash + parts.ext;
- var fpath = rootDir + '/' + parts.name + parts.ext;
+ var base = parts.dir.length > 0 ? parts.dir + '/' + parts.name : parts.name;
+ var hash = md5(rootDir + '/' + base + parts.ext);
+ var url = '/static/' + base + '-' + hash + parts.ext;
+ var fpath = rootDir + '/' + base + parts.ext;
dynamicUrlToDependencies[url] = [fpath];
});
@@ -89,6 +91,10 @@ gulp.task('gen-service-worker', () => {
rootDir + '/fonts/roboto/Roboto-Bold.ttf',
rootDir + '/images/card_media_player_bg.png',
],
+ runtimeCaching: [{
+ urlPattern: /\/static\/translations\//,
+ handler: 'cacheFirst',
+ }],
stripPrefix: 'hass_frontend',
replacePrefix: 'static',
verbose: true,
diff --git a/gulp/tasks/translations.js b/gulp/tasks/translations.js
new file mode 100755
index 0000000000..e6ea318ab7
--- /dev/null
+++ b/gulp/tasks/translations.js
@@ -0,0 +1,111 @@
+const path = require('path');
+const gulp = require('gulp');
+const foreach = require('gulp-foreach');
+const hash = require('gulp-hash');
+const insert = require('gulp-insert');
+const merge = require('gulp-merge-json');
+const minify = require('gulp-jsonminify');
+const rename = require('gulp-rename');
+const transform = require('gulp-json-transform');
+
+const inDir = 'translations'
+const outDir = 'build/translations';
+
+const tasks = [];
+
+function recursive_flatten (prefix, data) {
+ var output = {};
+ Object.keys(data).forEach(function (key) {
+ if (typeof(data[key]) === 'object') {
+ output = Object.assign({}, output, recursive_flatten(key + '.', data[key]));
+ } else {
+ output[prefix + key] = data[key];
+ }
+ });
+ return output
+}
+
+function flatten (data) {
+ return recursive_flatten('', data);
+}
+
+var taskName = 'build-translation-native-names';
+gulp.task(taskName, function() {
+ return gulp.src(inDir + '/*.json')
+ .pipe(transform(function(data, file) {
+ // Look up the native name for each language and generate a json
+ // object with all available languages and native names
+ const lang = path.basename(file.relative, '.json');
+ return {[lang]: {nativeName: data.language[lang]}};
+ }))
+ .pipe(merge({
+ fileName: 'translationNativeNames.json',
+ }))
+ .pipe(gulp.dest('build-temp'));
+});
+tasks.push(taskName);
+
+var taskName = 'build-merged-translations';
+gulp.task(taskName, function () {
+ return gulp.src(inDir + '/*.json')
+ .pipe(foreach(function(stream, file) {
+ // For each language generate a merged json file. It begins with en.json as
+ // a failsafe for untranslated strings, and merges all parent tags into one
+ // file for each specific subtag
+ const tr = path.basename(file.history[0], '.json');
+ const subtags = tr.split('-');
+ const src = [inDir + '/en.json']; // Start with en as a fallback for missing translations
+ for (i = 1; i <= subtags.length; i++) {
+ const lang = subtags.slice(0, i).join('-');
+ src.push(inDir + '/' + lang + '.json');
+ }
+ return gulp.src(src)
+ .pipe(merge({
+ fileName: tr + '.json',
+ }))
+ .pipe(transform(function(data, file) {
+ // Polymer.AppLocalizeBehavior requires flattened json
+ return flatten(data);
+ }))
+ .pipe(minify())
+ .pipe(gulp.dest(outDir));
+ }));
+});
+tasks.push(taskName);
+
+var taskName = 'build-translation-fingerprints';
+gulp.task(taskName, ['build-merged-translations'], function() {
+ return gulp.src(outDir + '/*.json')
+ .pipe(rename({
+ extname: "",
+ }))
+ .pipe(hash({
+ algorithm: 'md5',
+ hashLength: 32,
+ template: '<%= name %>-<%= hash %>.json',
+ }))
+ .pipe(hash.manifest('translationFingerprints.json'))
+ .pipe(transform(function(data, file) {
+ Object.keys(data).map(function(key, index) {
+ data[key] = {fingerprint: data[key]};
+ });
+ return data;
+ }))
+ .pipe(gulp.dest('build-temp'));
+});
+tasks.push(taskName);
+
+var taskName = 'build-translations';
+gulp.task(taskName, ['build-translation-fingerprints', 'build-translation-native-names'], function() {
+ return gulp.src([
+ 'build-temp/translationFingerprints.json',
+ 'build-temp/translationNativeNames.json',
+ ])
+ .pipe(merge({}))
+ .pipe(insert.wrap(''))
+ .pipe(rename('translationMetadata.html'))
+ .pipe(gulp.dest('build-temp'));
+});
+tasks.push(taskName);
+
+module.exports = tasks;
diff --git a/package.json b/package.json
index 16e6017adc..a41fa915f0 100644
--- a/package.json
+++ b/package.json
@@ -39,8 +39,14 @@
"gulp-babel": "^7.0.0",
"gulp-file": "^0.3.0",
"gulp-filter": "^5.0.1",
+ "gulp-foreach": "^0.1.0",
+ "gulp-hash": "^4.0.1",
"gulp-html-minifier": "^0.1.8",
"gulp-if": "^2.0.2",
+ "gulp-insert": "^0.5.0",
+ "gulp-json-transform": "^0.4.2",
+ "gulp-jsonminify": "^1.0.0",
+ "gulp-merge-json": "^1.0.0",
"gulp-rename": "^1.2.2",
"gulp-rollup-each": "^2.0.0",
"gulp-uglify": "^3.0.0",
diff --git a/panels/config/core/ha-config-core.html b/panels/config/core/ha-config-core.html
index 627aac14c9..ed79e49075 100644
--- a/panels/config/core/ha-config-core.html
+++ b/panels/config/core/ha-config-core.html
@@ -7,6 +7,7 @@
+
@@ -53,6 +54,14 @@
hass='[[hass]]'
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Choose a Language
+
+ Choose a language for the Home Assistant interface on this device.
+
+
+
+
+
+
+
+ [[item.nativeName]]
+
+
+ >
+
+
+
+
+
+
+
diff --git a/script/build_frontend b/script/build_frontend
index 06f3494840..0880e58bd2 100755
--- a/script/build_frontend
+++ b/script/build_frontend
@@ -21,6 +21,10 @@ cp build/*.js build/*.html $OUTPUT_DIR
mkdir $OUTPUT_DIR/panels
cp build/panels/*.html $OUTPUT_DIR/panels
+# Panels
+mkdir $OUTPUT_DIR/translations
+cp build/translations/*.json $OUTPUT_DIR/translations
+
# Local Roboto
cp -r bower_components/font-roboto-local/fonts $OUTPUT_DIR
@@ -43,7 +47,13 @@ cp build/service_worker.js $OUTPUT_DIR
# GZIP frontend
cd $OUTPUT_DIR
-gzip -f -n -k -9 *.html *.js ./panels/*.html ./fonts/roboto/*.ttf ./fonts/robotomono/*.ttf
+gzip -f -n -k -9 \
+ *.html \
+ *.js \
+ ./panels/*.html \
+ ./translations/*.json \
+ ./fonts/roboto/*.ttf \
+ ./fonts/robotomono/*.ttf
cd ..
# Generate the __init__ file
diff --git a/src/components/ha-sidebar.html b/src/components/ha-sidebar.html
index c66bf42f26..2dbd1ca36f 100644
--- a/src/components/ha-sidebar.html
+++ b/src/components/ha-sidebar.html
@@ -9,6 +9,7 @@
+
@@ -105,19 +106,19 @@
- States
+ {{localize('panel', 'states')}}
- [[item.title]]
+ {{localize('panel', item.title)}}
- Log Out
+ {{localize('panel', 'log_out')}}
@@ -171,7 +172,12 @@
diff --git a/src/util/hass-translation.html b/src/util/hass-translation.html
new file mode 100644
index 0000000000..efdeeb4ffa
--- /dev/null
+++ b/src/util/hass-translation.html
@@ -0,0 +1,84 @@
+
+
+
diff --git a/translations/en.json b/translations/en.json
new file mode 100644
index 0000000000..2b47cf614c
--- /dev/null
+++ b/translations/en.json
@@ -0,0 +1,12 @@
+{
+ "language": {
+ "en": "English"
+ },
+ "panel": {
+ "states": "States",
+ "map": "Map",
+ "logbook": "Logbook",
+ "history": "History",
+ "log_out": "Log Out"
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 417cf3c858..593a68a3eb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2378,6 +2378,10 @@ depd@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa"
+deprecate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/deprecate/-/deprecate-1.0.0.tgz#661490ed2428916a6c8883d8834e5646f4e4a4a8"
+
deprecated@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"
@@ -2673,7 +2677,7 @@ es6-object-assign@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c"
-es6-promise@^2.1.0:
+es6-promise@^2.1.0, es6-promise@^2.1.1:
version "2.3.0"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc"
@@ -3646,6 +3650,23 @@ gulp-filter@^5.0.1:
multimatch "^2.0.0"
streamfilter "^1.0.5"
+gulp-foreach@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/gulp-foreach/-/gulp-foreach-0.1.0.tgz#2547abfd1a1b75f569b54194190ef1c0b0289538"
+ dependencies:
+ gulp-util "~2.2.14"
+ through2 "~0.6.3"
+
+gulp-hash@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/gulp-hash/-/gulp-hash-4.1.1.tgz#7779910f6c378686b62f88abbb57ebeef20945d0"
+ dependencies:
+ es6-promise "^2.1.1"
+ gulp-util "^2.2.17"
+ lodash.assign "^2.4.1"
+ lodash.template "^2.4.1"
+ through2 "^2.0.0"
+
gulp-html-minifier@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/gulp-html-minifier/-/gulp-html-minifier-0.1.8.tgz#b0dd99d96ad01c0a88d79465ed44f94d6a2b549a"
@@ -3663,12 +3684,45 @@ gulp-if@^2.0.0, gulp-if@^2.0.2:
ternary-stream "^2.0.1"
through2 "^2.0.1"
+gulp-insert@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/gulp-insert/-/gulp-insert-0.5.0.tgz#32313f13e4a23cf5acca5ce5f0c080923c778602"
+ dependencies:
+ readable-stream "^1.0.26-4"
+ streamqueue "0.0.6"
+
+gulp-json-transform@^0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/gulp-json-transform/-/gulp-json-transform-0.4.2.tgz#2245ed252fa309c97b8bdd9d1a19cdd149e32685"
+ dependencies:
+ gulp-util "^3.0.7"
+ promise "^7.1.1"
+ through2 "^2.0.1"
+
+gulp-jsonminify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gulp-jsonminify/-/gulp-jsonminify-1.0.0.tgz#c42b68812c657e6e0a12e93c2aa217b3eb38c70a"
+ dependencies:
+ gulp-util "~3.0.4"
+ jsonminify "~0.2.3"
+ through2 "~0.6.5"
+
gulp-match@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.0.3.tgz#91c7c0d7f29becd6606d57d80a7f8776a87aba8e"
dependencies:
minimatch "^3.0.3"
+gulp-merge-json@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/gulp-merge-json/-/gulp-merge-json-1.2.0.tgz#8b68f297505278a8143a6fa5bb9830192e4e3ea1"
+ dependencies:
+ deprecate "^1.0.0"
+ gulp-util "^3.0.8"
+ json5 "^0.5.1"
+ lodash "^4.17.4"
+ through "^2.3.8"
+
gulp-rename@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817"
@@ -3703,7 +3757,7 @@ gulp-uglify@^3.0.0:
uglify-js "^3.0.5"
vinyl-sourcemaps-apply "^0.2.0"
-gulp-util@^2.2.14, gulp-util@^2.2.20:
+gulp-util@^2.2.14, gulp-util@^2.2.17, gulp-util@^2.2.20, gulp-util@~2.2.14:
version "2.2.20"
resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c"
dependencies:
@@ -3716,7 +3770,7 @@ gulp-util@^2.2.14, gulp-util@^2.2.20:
through2 "^0.5.0"
vinyl "^0.2.1"
-gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.8:
+gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@^3.0.8, gulp-util@~3.0.4:
version "3.0.8"
resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
dependencies:
@@ -4488,6 +4542,10 @@ jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+jsonminify@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/jsonminify/-/jsonminify-0.2.3.tgz#4b842c8a3fe5d6aa48b2f8f95a1cf9a80c019d8e"
+
jsonpointer@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
@@ -4608,6 +4666,15 @@ lodash._baseassign@^3.0.0:
lodash._basecopy "^3.0.0"
lodash.keys "^3.0.0"
+lodash._basebind@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._basebind/-/lodash._basebind-2.4.1.tgz#e940b9ebdd27c327e0a8dab1b55916c5341e9575"
+ dependencies:
+ lodash._basecreate "~2.4.1"
+ lodash._setbinddata "~2.4.1"
+ lodash._slice "~2.4.1"
+ lodash.isobject "~2.4.1"
+
lodash._basecopy@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
@@ -4616,6 +4683,32 @@ lodash._basecreate@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+lodash._basecreate@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz#f8e6f5b578a9e34e541179b56b8eeebf4a287e08"
+ dependencies:
+ lodash._isnative "~2.4.1"
+ lodash.isobject "~2.4.1"
+ lodash.noop "~2.4.1"
+
+lodash._basecreatecallback@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz#7d0b267649cb29e7a139d0103b7c11fae84e4851"
+ dependencies:
+ lodash._setbinddata "~2.4.1"
+ lodash.bind "~2.4.1"
+ lodash.identity "~2.4.1"
+ lodash.support "~2.4.1"
+
+lodash._basecreatewrapper@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz#4d31f2e7de7e134fbf2803762b8150b32519666f"
+ dependencies:
+ lodash._basecreate "~2.4.1"
+ lodash._setbinddata "~2.4.1"
+ lodash._slice "~2.4.1"
+ lodash.isobject "~2.4.1"
+
lodash._basetostring@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
@@ -4624,6 +4717,15 @@ lodash._basevalues@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
+lodash._createwrapper@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz#51d6957973da4ed556e37290d8c1a18c53de1607"
+ dependencies:
+ lodash._basebind "~2.4.1"
+ lodash._basecreatewrapper "~2.4.1"
+ lodash._slice "~2.4.1"
+ lodash.isfunction "~2.4.1"
+
lodash._escapehtmlchar@~2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d"
@@ -4681,12 +4783,38 @@ lodash._root@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
+lodash._setbinddata@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz#f7c200cd1b92ef236b399eecf73c648d17aa94d2"
+ dependencies:
+ lodash._isnative "~2.4.1"
+ lodash.noop "~2.4.1"
+
lodash._shimkeys@~2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203"
dependencies:
lodash._objecttypes "~2.4.1"
+lodash._slice@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._slice/-/lodash._slice-2.4.1.tgz#745cf41a53597b18f688898544405efa2b06d90f"
+
+lodash.assign@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-2.4.1.tgz#84c39596dd71181a97b0652913a7c9675e49b1aa"
+ dependencies:
+ lodash._basecreatecallback "~2.4.1"
+ lodash._objecttypes "~2.4.1"
+ lodash.keys "~2.4.1"
+
+lodash.bind@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-2.4.1.tgz#5d19fa005c8c4d236faf4742c7b7a1fcabe29267"
+ dependencies:
+ lodash._createwrapper "~2.4.1"
+ lodash._slice "~2.4.1"
+
lodash.cond@^4.3.0:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
@@ -4724,6 +4852,10 @@ lodash.escape@~2.4.1:
lodash._reunescapedhtml "~2.4.1"
lodash.keys "~2.4.1"
+lodash.identity@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash.identity/-/lodash.identity-2.4.1.tgz#6694cffa65fef931f7c31ce86c74597cf560f4f1"
+
lodash.isarguments@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
@@ -4736,6 +4868,10 @@ lodash.isequal@^4.0.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+lodash.isfunction@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz#2cfd575c73e498ab57e319b77fa02adef13a94d1"
+
lodash.isobject@~2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5"
@@ -4770,6 +4906,10 @@ lodash.mapvalues@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
+lodash.noop@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-2.4.1.tgz#4fb54f816652e5ae10e8f72f717a388c7326538a"
+
lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
@@ -4778,6 +4918,12 @@ lodash.some@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
+lodash.support@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash.support/-/lodash.support-2.4.1.tgz#320e0b67031673c28d7a2bb5d9e0331a45240515"
+ dependencies:
+ lodash._isnative "~2.4.1"
+
lodash.template@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz#9e611007edf629129a974ab3c48b817b3e1cf20d"
@@ -6139,7 +6285,7 @@ read-pkg@^2.0.0:
normalize-package-data "^2.3.2"
path-type "^2.0.0"
-readable-stream@1.1.x, readable-stream@~1.1.9:
+readable-stream@1.1.x, readable-stream@^1.0.26-2, readable-stream@^1.0.26-4, readable-stream@~1.1.9:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
dependencies:
@@ -6979,6 +7125,12 @@ streamfilter@^1.0.5:
dependencies:
readable-stream "^2.0.2"
+streamqueue@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/streamqueue/-/streamqueue-0.0.6.tgz#66f5f5ec94e9b8af249e4aec2dd1f741bfe94de3"
+ dependencies:
+ readable-stream "^1.0.26-2"
+
streamsearch@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
@@ -7266,7 +7418,7 @@ through2@^0.5.0:
readable-stream "~1.0.17"
xtend "~3.0.0"
-through2@^0.6.0, through2@^0.6.1:
+through2@^0.6.0, through2@^0.6.1, through2@~0.6.3, through2@~0.6.5:
version "0.6.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
dependencies:
@@ -7280,7 +7432,7 @@ through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0:
readable-stream "^2.1.5"
xtend "~4.0.1"
-through@2, through@^2.3.6, through@~2.3, through@~2.3.1:
+through@2, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"