UNPKG

2.49 kBJavaScriptView Raw
1"use strict";
2
3const 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
13let concatArray = arrayreduce.arrayConcat(),
14 rejectEmpty = arrayfilter.emptyReject();
15
16/** @lends apemanInfr */
17function 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
81module.exports = apemanInfr;