/**
 * html-from-bemjson-i18n
 * ======================
 *
 * Собирает *html*-файл с помощью *bemjson*, *bemhtml*, *lang.all* и *lang.{lang}*.
 *
 * **Опции**
 *
 * * *String* **bemhtmlFile** — Исходный BEMHTML-файл. По умолчанию — `?.bemhtml.js`.
 * * *String* **bemjsonFile** — Исходный BEMJSON-файл. По умолчанию — `?.bemjson.js`.
 * * *String* **langAllFile** — Исходный langAll-файл. По умолчанию — `?.lang.all.js`.
 * * *String* **langFile** — Исходный lang-файл. По умолчанию — `?.lang.{lang}.js`.
 *   Если параметр lang не указан, берется первый из объявленных в проекте языков
 * * *String* **target** — Результирующий HTML-файл. По умолчанию — `?.{lang}.html`.
 *
 * **Пример**
 *
 * ```javascript
 * nodeConfig.addTech(require('enb-xjst/techs/html-from-bemjson-i18n'));
 * ```
 */
var vm = require('vm');
var vow = require('vow');
var vfs = require('enb/lib/fs/async-fs');
var requireOrEval = require('enb/lib/fs/require-or-eval');
var asyncRequire = require('enb/lib/fs/async-require');
var dropRequireCache = require('enb/lib/fs/drop-require-cache');

module.exports = require('enb/lib/build-flow').create()
    .name('html-from-bemjson-i18n')
    .target('target', '?.{lang}.html')
    .useSourceFilename('bemhtmlFile', '?.bemhtml.js')
    .useSourceFilename('bemjsonFile', '?.bemjson.js')
    .useSourceFilename('langAllFile', '?.lang.all.js')
    .useSourceFilename('langFile', '?.lang.{lang}.js')
    .optionAlias('bemhtmlFile', 'bemhtmlTarget')
    .optionAlias('bemjsonFile', 'bemjsonTarget')
    .optionAlias('langAllFile', 'langAllTarget')
    .optionAlias('langFile', 'langTarget')
    .optionAlias('target', 'destTarget')
    .needRebuild(function (cache) {
        return cache.needRebuildFile('bemhtml-file', this.node.resolvePath(this._bemhtmlTarget)) ||
            cache.needRebuildFile('bemjson-file', this.node.resolvePath(this._bemjsonTarget)) ||
            cache.needRebuildFile('allLang-file', this.node.resolvePath(this._langAllTarget)) ||
            cache.needRebuildFile('lang-file', this.node.resolvePath(this._langTarget)) ||
            cache.needRebuildFile('html-file', this.node.resolvePath(this._destTarget));
    })
    .saveCache(function (cache) {
        cache.cacheFileInfo('bemhtml-file', this.node.resolvePath(this._bemhtmlTarget));
        cache.cacheFileInfo('bemjson-file', this.node.resolvePath(this._bemjsonTarget));
        cache.cacheFileInfo('allLang-file', this.node.resolvePath(this._langAllTarget));
        cache.cacheFileInfo('lang-file', this.node.resolvePath(this._langTarget));
        cache.cacheFileInfo('html-file', this.node.resolvePath(this._destTarget));
    })
    .builder(function (bemhtmlFilename, bemjsonFilename, allLangFilename, langFilename) {
        dropRequireCache(require, bemhtmlFilename);
        dropRequireCache(require, bemjsonFilename);
        return vow.all([
            asyncRequire(bemhtmlFilename),
            requireOrEval(bemjsonFilename),
            vfs.read(allLangFilename),
            vfs.read(langFilename)
        ]).spread(function (bemhtml, bemjson, allLangSource, langSource) {
            vm.runInThisContext(allLangSource, allLangFilename);
            vm.runInThisContext(langSource, langFilename);

            return bemhtml.BEMHTML.apply(bemjson);
        });
    })
    .createTech();

@@ -1763,22 +1763,20 @@
 _bemhtml
-Target
+File
 )) %7C%7C%0A  
@@ -1858,22 +1858,20 @@
 _bemjson
-Target
+File
 )) %7C%7C%0A  
@@ -1953,22 +1953,20 @@
 _langAll
-Target
+File
 )) %7C%7C%0A  
@@ -2042,22 +2042,20 @@
 is._lang
-Target
+File
 )) %7C%7C%0A  
@@ -2119,37 +2119,33 @@
 solvePath(this._
-destT
+t
 arget));%0A    %7D)%0A
@@ -2257,22 +2257,20 @@
 _bemhtml
-Target
+File
 ));%0A    
@@ -2344,22 +2344,20 @@
 _bemjson
-Target
+File
 ));%0A    
@@ -2431,22 +2431,20 @@
 _langAll
-Target
+File
 ));%0A    
@@ -2512,22 +2512,20 @@
 is._lang
-Target
+File
 ));%0A    
@@ -2589,21 +2589,17 @@
 h(this._
-destT
+t
 arget));

Fix caches in html-from-bemjson-i18n tech