Files
gitbook/lib/models/pluginDependency.js
T
Ryan Swanson 465e8d6c0a Fixed two issues for handling git URLs for plugins that are published to git repositories rather than on npmjs.org.
Fixed issue in pluginDependency to dereference 'name' and 'version' using Immutable Map.get(...) accessors since config values are now wrapped by Immutable.fromJS(...) in config.js > setValue(...).  Added associated unit test.

Fixed issue in resolveVersion where a plugin may be using a git URL rather than a semver for the version portion of the plugin config definition.  In addition, refactored the resolveVersion function into a new module to allow for unit testing.  Added associated unit test.
2016-05-26 14:30:29 -04:00

134 lines
2.9 KiB
JavaScript

var is = require('is');
var Immutable = require('immutable');
var DEFAULT_VERSION = '*';
/*
PluginDependency represents the informations about a plugin
stored in config.plugins
*/
var PluginDependency = Immutable.Record({
name: String(),
// Requirement version (ex: ">1.0.0")
version: String(DEFAULT_VERSION),
// Is this plugin enabled or disabled?
enabled: Boolean(true)
}, 'PluginDependency');
PluginDependency.prototype.getName = function() {
return this.get('name');
};
PluginDependency.prototype.getVersion = function() {
return this.get('version');
};
PluginDependency.prototype.isEnabled = function() {
return this.get('enabled');
};
/**
Create a plugin with a name and a plugin
@param {String}
@return {Plugin|undefined}
*/
PluginDependency.create = function(name, version, enabled) {
if (is.undefined(enabled)) {
enabled = true;
}
return new PluginDependency({
name: name,
version: version || DEFAULT_VERSION,
enabled: Boolean(enabled)
});
};
/**
Create a plugin from a string
@param {String}
@return {Plugin|undefined}
*/
PluginDependency.createFromString = function(s) {
var parts = s.split('@');
var name = parts[0];
var version = parts.slice(1).join('@');
var enabled = true;
if (name[0] === '-') {
enabled = false;
name = name.slice(1);
}
return new PluginDependency({
name: name,
version: version || DEFAULT_VERSION,
enabled: enabled
});
};
/**
Create a PluginDependency from a string
@param {String}
@return {List<PluginDependency>}
*/
PluginDependency.listFromString = function(s) {
var parts = s.split(',');
return PluginDependency.listFromArray(parts);
};
/**
Create a PluginDependency from an array
@param {Array}
@return {List<PluginDependency>}
*/
PluginDependency.listFromArray = function(arr) {
return Immutable.List(arr)
.map(function(entry) {
if (is.string(entry)) {
return PluginDependency.createFromString(entry);
} else {
return PluginDependency({
name: entry.get('name'),
version: entry.get('version')
});
}
})
.filter(function(dep) {
return Boolean(dep.getName());
});
};
/**
Export plugin dependencies as an array
@param {List<PluginDependency>} list
@return {Array<String>}
*/
PluginDependency.listToArray = function(list) {
return list
.map(function(dep) {
var result = '';
if (!dep.isEnabled()) {
result += '-';
}
result += dep.getName();
if (dep.getVersion() !== DEFAULT_VERSION) {
result += '@' + dep.getVersion();
}
return result;
})
.toJS();
};
module.exports = PluginDependency;