UNPKG

5.74 kBJavaScriptView Raw
1"use strict";
2var _ = require('lodash');
3var child_process = require('child_process');
4var os = require('os');
5var nodeify_ts_1 = require('nodeify-ts');
6var cli_table_2_json_1 = require('cli-table-2-json');
7var dockermachine_cli_js_1 = require('dockermachine-cli-js');
8var exec = child_process.exec;
9var array2Oject = function (lines) {
10 return lines.reduce(function (object, linep) {
11 var line = linep.trim();
12 if (line.length === 0) {
13 return object;
14 }
15 var parts = line.split(':');
16 var key = parts[0];
17 var value = parts.slice(1).join(':');
18 key = _.snakeCase(key);
19 object[key] = value.trim();
20 return object;
21 }, {});
22};
23var extractResult = function (result) {
24 var extracterArray = [
25 {
26 re: / build /,
27 run: function (resultp) {
28 var lines = resultp.raw.split(os.EOL);
29 lines.forEach(function (line) {
30 var re = /Successfully built (.*)$/;
31 var str = line;
32 var m;
33 if ((m = re.exec(str)) !== null) {
34 if (m.index === re.lastIndex) {
35 re.lastIndex++;
36 }
37 resultp.success = true;
38 resultp.imageId = m[1];
39 }
40 });
41 resultp.response = lines;
42 return resultp;
43 },
44 },
45 {
46 re: / run /,
47 run: function (resultp) {
48 resultp.containerId = resultp.raw.trim();
49 return resultp;
50 },
51 },
52 {
53 re: / ps /,
54 run: function (resultp) {
55 var lines = resultp.raw.split(os.EOL);
56 resultp.containerList = cli_table_2_json_1.cliTable2Json(lines);
57 return resultp;
58 },
59 },
60 {
61 re: / images /,
62 run: function (resultp) {
63 var lines = resultp.raw.split(os.EOL);
64 resultp.images = cli_table_2_json_1.cliTable2Json(lines);
65 return resultp;
66 },
67 },
68 {
69 re: / network ls /,
70 run: function (resultp) {
71 var lines = resultp.raw.split(os.EOL);
72 resultp.network = cli_table_2_json_1.cliTable2Json(lines);
73 return resultp;
74 },
75 },
76 {
77 re: / inspect /,
78 run: function (resultp) {
79 var object = JSON.parse(resultp.raw);
80 resultp.object = object;
81 return resultp;
82 },
83 },
84 {
85 re: / info /,
86 run: function (resultp) {
87 var lines = resultp.raw.split(os.EOL);
88 resultp.object = array2Oject(lines);
89 return resultp;
90 },
91 },
92 ];
93 extracterArray.forEach(function (extracter) {
94 var re = extracter.re;
95 var str = result.command;
96 var m;
97 if ((m = re.exec(str)) !== null) {
98 if (m.index === re.lastIndex) {
99 re.lastIndex++;
100 }
101 return extracter.run(result);
102 }
103 });
104 return result;
105};
106var Docker = (function () {
107 function Docker(options) {
108 if (options === void 0) { options = {
109 currentWorkingDirectory: null,
110 machineName: null,
111 }; }
112 this.options = options;
113 }
114 Docker.prototype.command = function (command, callback) {
115 var docker = this;
116 var execCommand = 'docker ';
117 var machineconfig = '';
118 var promise = Promise.resolve().then(function () {
119 if (docker.options.machineName) {
120 var dockerMachine = new dockermachine_cli_js_1.DockerMachine();
121 return dockerMachine.command('config ' + docker.options.machineName).then(function (data) {
122 machineconfig = data.machine.config;
123 });
124 }
125 }).then(function () {
126 execCommand += ' ' + machineconfig + ' ' + command + ' ';
127 var execOptions = {
128 cwd: docker.options.currentWorkingDirectory,
129 env: {
130 DEBUG: '',
131 HOME: process.env.HOME,
132 PATH: process.env.PATH,
133 },
134 maxBuffer: 200 * 1024 * 1024,
135 };
136 return new Promise(function (resolve, reject) {
137 exec(execCommand, execOptions, function (error, stdout, stderr) {
138 if (error) {
139 var message = "error: '" + error + "' stdout = '" + stdout + "' stderr = '" + stderr + "'";
140 console.error(message);
141 reject(message);
142 }
143 resolve({ result: stdout });
144 });
145 });
146 }).then(function (data) {
147 var result = {
148 command: execCommand,
149 raw: data.result,
150 };
151 return extractResult(result);
152 });
153 return nodeify_ts_1.default(promise, callback);
154 };
155 return Docker;
156}());
157exports.Docker = Docker;
158var Options = (function () {
159 function Options(machineName, currentWorkingDirectory) {
160 this.machineName = machineName;
161 this.currentWorkingDirectory = currentWorkingDirectory;
162 }
163 return Options;
164}());
165exports.Options = Options;
166//# sourceMappingURL=index.js.map
\No newline at end of file