summaryrefslogtreecommitdiffstats
path: root/lib/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins')
-rw-r--r--lib/plugins/__tests__/resolveVersion.js14
-rw-r--r--lib/plugins/installPlugins.js67
-rw-r--r--lib/plugins/resolveVersion.js71
3 files changed, 86 insertions, 66 deletions
diff --git a/lib/plugins/__tests__/resolveVersion.js b/lib/plugins/__tests__/resolveVersion.js
new file mode 100644
index 0000000..164611f
--- /dev/null
+++ b/lib/plugins/__tests__/resolveVersion.js
@@ -0,0 +1,14 @@
+var PluginDependency = require('../../models/pluginDependency');
+var resolveVersion = require('../resolveVersion');
+
+describe('resolveVersion', function() {
+ it('must skip resolving and return non-semver versions', function(done) {
+ var plugin = PluginDependency.createFromString('plugin-ga@git+ssh://samy@github.com/GitbookIO/plugin-ga.git');
+
+ resolveVersion(plugin)
+ .then(function(version) {
+ expect(version).toBe('git+ssh://samy@github.com/GitbookIO/plugin-ga.git');
+ done();
+ });
+ });
+});
diff --git a/lib/plugins/installPlugins.js b/lib/plugins/installPlugins.js
index 5adae04..ed9316c 100644
--- a/lib/plugins/installPlugins.js
+++ b/lib/plugins/installPlugins.js
@@ -1,75 +1,10 @@
-var npm = require('npm');
var npmi = require('npmi');
-var semver = require('semver');
-var Immutable = require('immutable');
var pkg = require('../../package.json');
var DEFAULT_PLUGINS = require('../constants/defaultPlugins');
var Promise = require('../utils/promise');
-var Plugin = require('../models/plugin');
-var gitbook = require('../gitbook');
var listForBook = require('./listForBook');
-
-var npmIsReady;
-
-/**
- Initialize and prepare NPM
-
- @return {Promise}
-*/
-function initNPM() {
- if (npmIsReady) return npmIsReady;
-
- npmIsReady = Promise.nfcall(npm.load, {
- silent: true,
- loglevel: 'silent'
- });
-
- return npmIsReady;
-}
-
-
-
-/**
- Resolve a plugin to a version
-
- @param {Plugin}
- @return {Promise<String>}
-*/
-function resolveVersion(plugin) {
- var npmId = Plugin.nameToNpmID(plugin.getName());
- var requiredVersion = plugin.getVersion();
-
- return initNPM()
- .then(function() {
- return Promise.nfcall(npm.commands.view, [npmId + '@' + requiredVersion, 'engines'], true);
- })
- .then(function(versions) {
- versions = Immutable.Map(versions).entrySeq();
-
- var result = versions
- .map(function(entry) {
- return {
- version: entry[0],
- gitbook: (entry[1].engines || {}).gitbook
- };
- })
- .filter(function(v) {
- return v.gitbook && gitbook.satisfies(v.gitbook);
- })
- .sort(function(v1, v2) {
- return semver.lt(v1.version, v2.version)? 1 : -1;
- })
- .get(0);
-
- if (!result) {
- return undefined;
- } else {
- return result.version;
- }
- });
-}
-
+var resolveVersion = require('./resolveVersion');
/**
Install a plugin for a book
diff --git a/lib/plugins/resolveVersion.js b/lib/plugins/resolveVersion.js
new file mode 100644
index 0000000..a24c8a0
--- /dev/null
+++ b/lib/plugins/resolveVersion.js
@@ -0,0 +1,71 @@
+var npm = require('npm');
+var semver = require('semver');
+var Immutable = require('immutable');
+
+var Promise = require('../utils/promise');
+var Plugin = require('../models/plugin');
+var gitbook = require('../gitbook');
+
+var npmIsReady;
+
+/**
+ Initialize and prepare NPM
+
+ @return {Promise}
+*/
+function initNPM() {
+ if (npmIsReady) return npmIsReady;
+
+ npmIsReady = Promise.nfcall(npm.load, {
+ silent: true,
+ loglevel: 'silent'
+ });
+
+ return npmIsReady;
+}
+
+/**
+ Resolve a plugin to a version
+
+ @param {Plugin}
+ @return {Promise<String>}
+*/
+function resolveVersion(plugin) {
+ var npmId = Plugin.nameToNpmID(plugin.getName());
+ var requiredVersion = plugin.getVersion();
+
+ if (!semver.validRange(requiredVersion)) {
+ return Promise.resolve(requiredVersion);
+ }
+
+ return initNPM()
+ .then(function() {
+ return Promise.nfcall(npm.commands.view, [npmId + '@' + requiredVersion, 'engines'], true);
+ })
+ .then(function(versions) {
+ versions = Immutable.Map(versions).entrySeq();
+
+ var result = versions
+ .map(function(entry) {
+ return {
+ version: entry[0],
+ gitbook: (entry[1].engines || {}).gitbook
+ };
+ })
+ .filter(function(v) {
+ return v.gitbook && gitbook.satisfies(v.gitbook);
+ })
+ .sort(function(v1, v2) {
+ return semver.lt(v1.version, v2.version)? 1 : -1;
+ })
+ .get(0);
+
+ if (!result) {
+ return undefined;
+ } else {
+ return result.version;
+ }
+ });
+}
+
+module.exports = resolveVersion;