1 | "use strict";
|
2 |
|
3 | const argx = require('argx'),
|
4 | async = require('async'),
|
5 | arrayreduce = require('arrayreduce'),
|
6 | arrayfilter = require('arrayfilter'),
|
7 | apemanfile = require('apemanfile'),
|
8 | apemancwd = require('apemancwd'),
|
9 | listInfrs = require('./infring/list_infrs'),
|
10 | buildInfrs = require('./infring/build_infrs'),
|
11 | removeInfrs = require('./infring/remove_infrs');
|
12 |
|
13 | let concatArray = arrayreduce.arrayConcat(),
|
14 | rejectEmpty = arrayfilter.emptyReject();
|
15 |
|
16 |
|
17 | function apemanInfr(names, options, callback) {
|
18 | let args = argx(arguments);
|
19 | callback = args.pop('function') || argx.noop;
|
20 | options = args.pop('object') || {};
|
21 | names = args.remain().filter(rejectEmpty).reduce(concatArray, []);
|
22 |
|
23 | let cwd = apemancwd.create({prefix: 'apeman-infr'});
|
24 |
|
25 | async.waterfall([
|
26 | (callback) => {
|
27 | apemanfile.load(options.configuration, callback);
|
28 | },
|
29 | (apemanfile, callback) => {
|
30 | cwd.chdir(apemanfile.$cwd);
|
31 |
|
32 | let duplicate = [
|
33 | options.list,
|
34 | options.delete,
|
35 | options.rebuild
|
36 | ].filter((command) => {
|
37 | return !!command;
|
38 | }).length > 1;
|
39 | if (duplicate) {
|
40 | callback(new Error(`Invalid option: ${JSON.stringify(options, null, 2)}`));
|
41 | return;
|
42 | }
|
43 |
|
44 | if (options.rebuild) {
|
45 | async.series([
|
46 | (callback) => {
|
47 | removeInfrs(apemanfile, names, {
|
48 | force: options.force
|
49 | }, callback);
|
50 | },
|
51 | (callback) => {
|
52 | buildInfrs(apemanfile, names, {
|
53 | force: options.force
|
54 | }, callback);
|
55 | }
|
56 | ], callback);
|
57 | return;
|
58 | }
|
59 |
|
60 | if (options.list) {
|
61 | listInfrs(apemanfile, names, {}, callback);
|
62 | return;
|
63 | }
|
64 | if (options.delete) {
|
65 | removeInfrs(apemanfile, names, {
|
66 | force: options.force
|
67 | }, callback);
|
68 | return;
|
69 | }
|
70 | buildInfrs(apemanfile, names, {
|
71 | force: options.force
|
72 | }, callback);
|
73 | }
|
74 | ], (err) => {
|
75 | cwd.restoreAll();
|
76 | callback(err);
|
77 | });
|
78 | }
|
79 |
|
80 |
|
81 | module.exports = apemanInfr;
|