mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-16 23:55:20 +00:00
fa17f16716
Improve plugins installation
107 lines
2.0 KiB
JavaScript
107 lines
2.0 KiB
JavaScript
var is = require('is');
|
|
var Immutable = require('immutable');
|
|
|
|
var File = require('./file');
|
|
var configDefault = require('../constants/configDefault');
|
|
|
|
var Config = Immutable.Record({
|
|
file: File(),
|
|
values: configDefault
|
|
}, 'Config');
|
|
|
|
Config.prototype.getFile = function() {
|
|
return this.get('file');
|
|
};
|
|
|
|
Config.prototype.getValues = function() {
|
|
return this.get('values');
|
|
};
|
|
|
|
/**
|
|
Return a configuration value by its key path
|
|
|
|
@param {String} key
|
|
@return {Mixed}
|
|
*/
|
|
Config.prototype.getValue = function(keyPath, def) {
|
|
var values = this.getValues();
|
|
keyPath = Config.keyToKeyPath(keyPath);
|
|
|
|
if (!values.hasIn(keyPath)) {
|
|
return def;
|
|
}
|
|
|
|
return values.getIn(keyPath);
|
|
};
|
|
|
|
/**
|
|
Update a configuration value
|
|
|
|
@param {String} key
|
|
@param {Mixed} value
|
|
@return {Mixed}
|
|
*/
|
|
Config.prototype.setValue = function(keyPath, value) {
|
|
keyPath = Config.keyToKeyPath(keyPath);
|
|
|
|
value = Immutable.fromJS(value);
|
|
|
|
var values = this.getValues();
|
|
values = values.setIn(keyPath, value);
|
|
|
|
return this.set('values', values);
|
|
};
|
|
|
|
/**
|
|
Create a new config for a file
|
|
|
|
@param {File} file
|
|
@param {Object} values
|
|
@returns {Config}
|
|
*/
|
|
Config.create = function(file, values) {
|
|
return new Config({
|
|
file: file,
|
|
values: Immutable.fromJS(values)
|
|
});
|
|
};
|
|
|
|
/**
|
|
Create a new config
|
|
|
|
@param {Object} values
|
|
@returns {Config}
|
|
*/
|
|
Config.createWithValues = function(values) {
|
|
return new Config({
|
|
values: Immutable.fromJS(values)
|
|
});
|
|
};
|
|
|
|
/**
|
|
Update values for an existing configuration
|
|
|
|
@param {Config} config
|
|
@param {Object} values
|
|
@returns {Config}
|
|
*/
|
|
Config.updateValues = function(config, values) {
|
|
values = Immutable.fromJS(values);
|
|
|
|
return config.set('values', values);
|
|
};
|
|
|
|
|
|
/**
|
|
Convert a keyPath to an array of keys
|
|
|
|
@param {String|Array}
|
|
@return {Array}
|
|
*/
|
|
Config.keyToKeyPath = function(keyPath) {
|
|
if (is.string(keyPath)) keyPath = keyPath.split('.');
|
|
return keyPath;
|
|
};
|
|
|
|
module.exports = Config;
|