UNPKG

1.57 kBJavaScriptView Raw
1var _ = require('lodash');
2var async = require('async');
3var fs = require('fs-extra');
4var path = require('path');
5
6var util = require('any2api-util');
7
8
9
10var downloadDeps = function(metadata, dir, done) {
11 if (_.isEmpty(metadata.dependencies)) return done();
12
13 async.eachSeries(_.keys(metadata.dependencies), function(dep, callback) {
14 var depDir = path.join(dir, dep);
15
16 if (fs.existsSync(depDir)) return callback();
17
18 var url = 'https://supermarket.getchef.com/cookbooks/' + dep + '/download';
19
20 util.download({ dir: depDir, url: url }, function(err) {
21 if (err) {
22 fs.removeSync(depDir);
23
24 return callback(err);
25 }
26
27 var metadataFile = path.join(depDir, 'metadata.json');
28
29 if (fs.existsSync(metadataFile)) {
30 var metadata = JSON.parse(fs.readFileSync(metadataFile));
31
32 downloadDeps(metadata, dir, callback);
33 }
34 });
35 }, done);
36};
37
38
39
40util.readInput(null, function(err, apiSpec, params) {
41 if (err) throw err;
42
43 var executable = apiSpec.executables[params._.executable_name];
44 var execPath = path.resolve(apiSpec.apispec_path, '..', executable.path);
45 var metadata = JSON.parse(fs.readFileSync(path.join(execPath, 'metadata.json')));
46 var depsSubdir = 'cookbook_dependencies';
47 var depsPath = path.join(execPath, depsSubdir);
48
49 fs.mkdirsSync(depsPath);
50
51 downloadDeps(metadata, depsPath, function(err) {
52 if (err) throw err;
53
54 executable.dependencies_subdir = depsSubdir;
55
56 util.writeSpec({ apiSpec: apiSpec }, function(err) {
57 if (err) throw err;
58 });
59 });
60});