forked from Munter/bower-to-jspm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
101 lines (81 loc) · 3.08 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
var bower = require('bower');
var when = require('when');
var semver = require('semver')
var bowerConfig = require(process.cwd() + '/bower.json');
var jspmConfig = require(process.cwd() + '/package.json').jspm;
var chalk = require('chalk');
var npmView;
function findNpmModule(moduleName, version) {
return npmView([moduleName], true).then(function (result) {
var meta = result[Object.keys(result)[0]];
var resolvedVersion = semver.valid(version) || semver.validRange(version);
if (resolvedVersion) {
var matchedVersion = semver.maxSatisfying(meta.versions, resolvedVersion);
if (matchedVersion) {
return when.resolve('npm:' + moduleName + '@' + matchedVersion);
} else {
return when.reject(moduleName);
}
} else {
return when.resolve('npm:' + moduleName);
}
});
}
function findGithubModule(moduleName, version) {
var resolvedVersion = semver.valid(version) || semver.validRange(version);
var repository;
var jspmEndpoint;
if (!resolvedVersion) {
if (version.indexOf('github') === -1) {
return when.reject(new Error('Invalid module version: ' + moduleName + '@' + version));
}
var endpoint = version.replace(/^.*github\.com[:/]/, 'github:').replace(/\.git/, '').replace('#', '@');
var label = endpoint.split('/')[1].split('@')[0];
return when.resolve(label + '=' + endpoint);
}
return when.promise(function (resolve, reject) {
bower.commands.info(moduleName)
.on('log', function (log) {
if (log.level === 'action') {
repository = log.data.resolver.source.replace(/^.*github\.com[:/]/, 'github:').replace(/\.git$/, '');
jspmEndpoint = log.data.resolver.name + '=' + repository;
}
})
.on('end', function (meta) {
if (resolvedVersion) {
var matchedVersion = semver.maxSatisfying(meta.versions, resolvedVersion);
return resolve(jspmEndpoint + '@' + matchedVersion);
} else {
return resolve(jspmEndpoint);
}
});
});
}
require('npm').load(process.cwd() + '/package.json', function (err, npm) {
npmView = require('when/node').lift(npm.commands.view);
['dependencies', 'devDependencies'].forEach(function (key) {
if (!Array.isArray(bowerConfig[key])) {
return;
}
Object.keys(bowerConfig[key]).filter(function (moduleName) {
return !(moduleName in jspmConfig[key]);
}).map(function (moduleName) {
var version = bowerConfig[key][moduleName];
return when.settle([findNpmModule(moduleName, version), findGithubModule(moduleName, version)])
.then(function (results) {
return results.filter(function (result) {
return result.state === 'fulfilled';
})
.map(function (result) {
return result.value;
});
})
.then(function (endpoints) {
console.log(chalk.yellow(moduleName));
endpoints.forEach(function (endpoint) {
console.log(' jspm install ' + (key === 'devDependencies' ? '--dev ' : '') + endpoint);
});
});
});
});
});