1 |
|
2 | (function() {
|
3 | var bluebird, info, request;
|
4 |
|
5 | bluebird = require('bluebird');
|
6 |
|
7 | request = require('sync-request');
|
8 |
|
9 | request = bluebird.promisifyAll(request);
|
10 |
|
11 | info = function(opts) {
|
12 | var crystal, export_name, import_name, mod_name, mod_version, module, module_export, module_import, name, resp, type;
|
13 | crystal = this;
|
14 | if (typeof opts === 'object') {
|
15 | if (opts._ && opts._[1]) {
|
16 | name = opts._[1];
|
17 | } else if (opts.name) {
|
18 | name = opts.name;
|
19 | }
|
20 | } else if (typeof name === 'string') {
|
21 | name = opts;
|
22 | }
|
23 | if (!name) {
|
24 | throw new Error("'name' is required for crystal search");
|
25 | }
|
26 | type = name.match(/\./) ? 'module' : 'collection';
|
27 | console.log(("Getting info for " + type + " (" + name + ")...").blue);
|
28 | resp = request('get', crystal.url('api', "modules/" + name));
|
29 | if (resp.statusCode !== 200) {
|
30 | if (resp.statusCode === 404) {
|
31 | throw new Error("Module does not exist: " + name);
|
32 | } else {
|
33 | throw new Error('Unable to get info.');
|
34 | }
|
35 | }
|
36 | module = JSON.parse(resp.body);
|
37 | console.log(("\n" + module.name + " v" + module.version).bold);
|
38 | console.log("" + module.description);
|
39 | console.log("\nModules:".bold);
|
40 | for (mod_name in module.modules) {
|
41 | mod_version = module.modules[mod_name];
|
42 | console.log("- " + mod_name + "@" + mod_version);
|
43 | }
|
44 | console.log("\nImports:".bold);
|
45 | for (import_name in module.imports) {
|
46 | module_import = module.imports[import_name];
|
47 | console.log("- " + import_name);
|
48 | }
|
49 | console.log("\nExports:".bold);
|
50 | for (export_name in module.exports) {
|
51 | module_export = module.exports[export_name];
|
52 | console.log("- " + export_name + " (" + module_export.type + ")");
|
53 | }
|
54 | return console.log("");
|
55 | };
|
56 |
|
57 | module.exports = info;
|
58 |
|
59 | }).call(this);
|