<commit_before>/**
 * NodeConfig
 * ==========
 */
var path = require('path');
var inherit = require('inherit');
var ModeConfig = require('./mode-config');

/**
 * NodeConfig передается в коллбэки при объявлении ноды (ProjectConfig::node)
 * и при матчинге ноды (ProjectConfig::nodeMask).
 * @name NodeConfig
 */
module.exports = inherit(require('./configurable'), /** @lends NodeConfig.prototype */ {
    /**
     * Конструктор.
     * @param {String} nodePath Относительный путь к ноде.
     * @param {String} root Абсолютный путь к корню проекта.
     * @param {ProjectConfig} projectConfig Ссылка на конфигурацию проекта.
     */
    __constructor: function (nodePath, root, projectConfig) {
        this.__base();
        this._baseName = path.basename(nodePath);
        this._path = nodePath;
        this._root = root;
        this._targets = [];
        this._cleanTargets = [];
        this._techs = [];
        this._languages = null;
        this._projectConfig = projectConfig;
        this._modes = {};
    },

    /**
     * Конфигурирует ноду для заданного режима.
     * Например:
     * ```javascript
     * config.node('pages/index', function (nodeConfig) {
     *     ...
     *     nodeConfig.mode('development', function (nodeConfig) {
     *         nodeConfig.addTech(require('file-copy'), { sourceTarget: '?.js', destTarget: '_?.js' });
     *     });
     *     nodeConfig.mode('production', function (nodeConfig) {
     *         nodeConfig.addTech(require('borschik'), { sourceTarget: '?.js', destTarget: '_?.js' });
     *     });
     * });
     * ```
     * @param {String} modeName
     * @param {Function} cb
     * @returns {NodeConfig}
     */
    mode: function (modeName, cb) {
        var modeConfig = this._modes[modeName];
        if (!modeConfig) {
            modeConfig = this._modes[modeName] = new ModeConfig(modeName);
        }
        modeConfig.addChain(cb);
        return this;
    },

    /**
     * Возвращает конфигуратор ноды для заданного режима.
     * @param {String} modeName
     * @returns {ModeConfig|undefined}
     */
    getModeConfig: function (modeName) {
        return this._modes[modeName];
    },

    /**
     * Устанавливает языки для ноды.
     * @param {String[]} languages
     * @return {NodeConfig}
     */
    setLanguages: function (languages) {
        this._languages = languages;
        return this;
    },

    /**
     * Возвращает языки для ноды.
     * @returns {String[]}
     */
    getLanguages: function () {
        return this._languages;
    },

    /**
     * Возвращает абсолютный путь к ноде.
     * @returns {String}
     */
    getNodePath: function () {
        return this._root + '/' + this._path;
    },

    /**
     * Возвращает абсолютный путь к файлу на основе пути, относительно ноды.
     * @param {String} path
     * @returns {String}
     */
    resolvePath: function (path) {
        return this._root + '/' + this._path + (path ? '/' + path : '');
    },

    _processTarget: function (target) {
        var targetSources = {
            'lang': this._languages || this._projectConfig.getLanguages()
        };<commit_msg>Using path.sep when building node path and resolving file paths<commit_after>/**
 * NodeConfig
 * ==========
 */
var path = require('path');
var inherit = require('inherit');
var ModeConfig = require('./mode-config');

/**
 * NodeConfig передается в коллбэки при объявлении ноды (ProjectConfig::node)
 * и при матчинге ноды (ProjectConfig::nodeMask).
 * @name NodeConfig
 */
module.exports = inherit(require('./configurable'), /** @lends NodeConfig.prototype */ {
    /**
     * Конструктор.
     * @param {String} nodePath Относительный путь к ноде.
     * @param {String} root Абсолютный путь к корню проекта.
     * @param {ProjectConfig} projectConfig Ссылка на конфигурацию проекта.
     */
    __constructor: function (nodePath, root, projectConfig) {
        this.__base();
        this._baseName = path.basename(nodePath);
        this._path = nodePath;
        this._root = root;
        this._targets = [];
        this._cleanTargets = [];
        this._techs = [];
        this._languages = null;
        this._projectConfig = projectConfig;
        this._modes = {};
    },

    /**
     * Конфигурирует ноду для заданного режима.
     * Например:
     * ```javascript
     * config.node('pages/index', function (nodeConfig) {
     *     ...
     *     nodeConfig.mode('development', function (nodeConfig) {
     *         nodeConfig.addTech(require('file-copy'), { sourceTarget: '?.js', destTarget: '_?.js' });
     *     });
     *     nodeConfig.mode('production', function (nodeConfig) {
     *         nodeConfig.addTech(require('borschik'), { sourceTarget: '?.js', destTarget: '_?.js' });
     *     });
     * });
     * ```
     * @param {String} modeName
     * @param {Function} cb
     * @returns {NodeConfig}
     */
    mode: function (modeName, cb) {
        var modeConfig = this._modes[modeName];
        if (!modeConfig) {
            modeConfig = this._modes[modeName] = new ModeConfig(modeName);
        }
        modeConfig.addChain(cb);
        return this;
    },

    /**
     * Возвращает конфигуратор ноды для заданного режима.
     * @param {String} modeName
     * @returns {ModeConfig|undefined}
     */
    getModeConfig: function (modeName) {
        return this._modes[modeName];
    },

    /**
     * Устанавливает языки для ноды.
     * @param {String[]} languages
     * @return {NodeConfig}
     */
    setLanguages: function (languages) {
        this._languages = languages;
        return this;
    },

    /**
     * Возвращает языки для ноды.
     * @returns {String[]}
     */
    getLanguages: function () {
        return this._languages;
    },

    /**
     * Возвращает абсолютный путь к ноде.
     * @returns {String}
     */
    getNodePath: function () {
        return this._root + path.sep + this._path;
    },

    /**
     * Возвращает абсолютный путь к файлу на основе пути, относительно ноды.
     * @param {String} path
     * @returns {String}
     */
    resolvePath: function (path) {
        return this._root + path.sep + this._path + (path ? path.sep + path : '');
    },

    _processTarget: function (target) {
        var targetSources = {
            'lang': this._languages || this._projectConfig.getLanguages()
        };
{'fraction_non_alphanumeric': 0.14339801230477994, 'fraction_numerical': 0.0, 'mean_word_length': 2.2832729155877782, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2941151', 'n_tokens_mistral': 1992, 'n_tokens_neox': 2066, 'n_words': 428}