enb
Version:
Faster BEM/BEViS assembler
115 lines (104 loc) • 4.61 kB
JavaScript
/**
* bemdecl-test
* ============
*
* Технология устарела и будет удалена.
*/
var inherit = require('inherit');
var vowFs = require('../lib/fs/async-fs');
var fs = require('fs');
var vm = require('vm');
var FileList = require('../lib/file-list');
var DepsResolver = require('../lib/deps/deps-resolver');
module.exports = inherit(require('../lib/tech/base-tech'), {
getName: function () {
return 'bemdecl-test';
},
configure: function () {
this._fileMask = this.getOption('fileMask', /.*/);
this._target = this.getOption('target', this.node.getTargetName('test.bemdecl.js'));
this._levelsTarget = this.node.unmaskTargetName(
this.getOption('levelsTarget', this.node.getTargetName('levels'))
);
},
getTargets: function () {
return [
this._target
];
},
build: function () {
var bemdeclTarget = this.node.unmaskTargetName(this._target);
var bemdeclTargetPath = this.node.resolvePath(bemdeclTarget);
var _this = this;
var cache = this.node.getNodeCache(bemdeclTarget);
var logger = this.node.getLogger();
logger.logTechIsDeprecated(this._target, this.getName(), 'enb');
return this.node.requireSources([this._levelsTarget]).spread(function (files) {
var sourceFiles = files.getFilesBySuffix('test.js');
var depsFiles = files.getFilesBySuffix('test.deps.js');
var filterFunction;
if (typeof _this._fileMask === 'function') {
filterFunction = _this._fileMask;
} else {
filterFunction = function (file) {
return _this._fileMask.test(file.fullname);
};
}
sourceFiles = sourceFiles.filter(filterFunction);
depsFiles = depsFiles.filter(filterFunction);
if (cache.needRebuildFile('bemdecl-file', bemdeclTargetPath) ||
cache.needRebuildFileList('source-files', sourceFiles) ||
cache.needRebuildFileList('deps-files', depsFiles)
) {
var deps = [];
sourceFiles.forEach(function (file) {
var fileDeps = FileList.parseFilename(file.name).bem;
if (fileDeps.hasOwnProperty('modName')) {
fileDeps.mod = fileDeps.modName;
}
if (fileDeps.hasOwnProperty('modVal')) {
fileDeps.val = fileDeps.modVal;
}
deps.push(fileDeps);
});
var depsResolver = new DepsResolver(files);
depsFiles.forEach(function (file) {
var fileDecl = FileList.parseFilename(file.name).bem;
var fileDeps = vm.runInThisContext(fs.readFileSync(file.fullname, 'utf8'));
var allDeps = [];
if (fileDeps.mustDeps) {
allDeps = allDeps.concat(
depsResolver.normalizeDeps(fileDeps.mustDeps, fileDecl.block, fileDecl.elem)
);
}
if (fileDeps.shouldDeps) {
allDeps = allDeps.concat(
depsResolver.normalizeDeps(fileDeps.shouldDeps, fileDecl.block, fileDecl.elem)
);
}
allDeps.forEach(function (dep) {
dep.block = dep.name;
if (dep.hasOwnProperty('modName')) {
dep.mod = dep.modName;
}
if (dep.hasOwnProperty('modVal')) {
dep.val = dep.modVal;
}
});
deps = deps.concat(allDeps);
});
var bemdeclContent = 'exports.deps = ' + JSON.stringify(deps, null, 4) + ';';
return vowFs.write(bemdeclTargetPath, bemdeclContent).then(function () {
cache.cacheFileInfo('bemdecl-file', bemdeclTargetPath);
cache.cacheFileList('source-files', sourceFiles);
cache.cacheFileList('deps-files', depsFiles);
_this.node.resolveTarget(bemdeclTarget);
});
} else {
_this.node.isValidTarget(bemdeclTarget);
_this.node.resolveTarget(bemdeclTarget);
return null;
}
});
}
});