UNPKG

enb

Version:

Faster BEM/BEViS assembler

123 lines (112 loc) 5.53 kB
/** * deps * ==== * * Технология переехала в пакет `enb-bem-techs`. */ var vowFs = require('../lib/fs/async-fs'); var DepsResolver = require('../lib/deps/deps-resolver'); var inherit = require('inherit'); var asyncRequire = require('../lib/fs/async-require'); var dropRequireCache = require('../lib/fs/drop-require-cache'); module.exports = inherit(require('../lib/tech/base-tech'), { getName: function () { return 'deps'; }, configure: function () { this._target = this.node.unmaskTargetName( this.getOption('depsTarget', this.node.getTargetName('deps.js'))); this._bemdeclTarget = this.node.unmaskTargetName( this.getOption('bemdeclTarget', this.node.getTargetName('bemdecl.js'))); this._levelsTarget = this.node.unmaskTargetName( this.getOption('levelsTarget', this.node.getTargetName('levels'))); }, getTargets: function () { return [this._target]; }, build: function () { var _this = this; var depsTarget = this._target; var depsTargetPath = this.node.resolvePath(depsTarget); var cache = this.node.getNodeCache(depsTarget); var bemdeclSource = this._bemdeclTarget; var bemdeclSourcePath = this.node.resolvePath(bemdeclSource); var logger = this.node.getLogger(); logger.logTechIsDeprecated(this._target, this.getName(), 'enb', 'deps', 'enb-bem-techs'); return this.node.requireSources([this._levelsTarget, bemdeclSource]).spread(function (levels) { var depFiles = levels.getFilesBySuffix('deps.js').concat(levels.getFilesBySuffix('deps.yaml')); if (cache.needRebuildFile('deps-file', depsTargetPath) || cache.needRebuildFile('bemdecl-file', bemdeclSourcePath) || cache.needRebuildFileList('deps-file-list', depFiles) ) { dropRequireCache(require, bemdeclSourcePath); return asyncRequire(bemdeclSourcePath).then(function (bemdecl) { var decls = []; var dep = new DepsResolver(levels); if (bemdecl.blocks) { bemdecl.blocks.forEach(function (block) { decls.push({ name: block.name }); if (block.mods) { block.mods.forEach(function (mod) { if (mod.vals) { mod.vals.forEach(function (val) { decls.push({ name: block.name, modName: mod.name, modVal: val.name }); }); } }); } if (block.elems) { block.elems.forEach(function (elem) { decls.push({ name: block.name, elem: elem.name }); if (elem.mods) { elem.mods.forEach(function (mod) { if (mod.vals) { mod.vals.forEach(function (val) { decls.push({ name: block.name, elem: elem.name, modName: mod.name, modVal: val.name }); }); } }); } }); } }); } if (bemdecl.deps) { decls = decls.concat(dep.normalizeDeps(bemdecl.deps)); } return dep.addDecls(decls).then(function () { var resolvedDeps = dep.resolve(); return vowFs.write( depsTargetPath, 'exports.deps = ' + JSON.stringify(resolvedDeps, null, 4) + ';\n', 'utf8' ).then(function () { cache.cacheFileInfo('deps-file', depsTargetPath); cache.cacheFileInfo('bemdecl-file', bemdeclSourcePath); cache.cacheFileList('deps-file-list', depFiles); _this.node.resolveTarget(depsTarget, resolvedDeps); }); }); }); } else { _this.node.isValidTarget(depsTarget); dropRequireCache(require, depsTargetPath); _this.node.resolveTarget(depsTarget, require(depsTargetPath).deps); return null; } }); } });