build-strap 3.0.0 → 4.0.0-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -34
  3. package/ant.d.ts +19 -0
  4. package/ant.js +12 -37
  5. package/cert.d.ts +12 -0
  6. package/cert.js +89 -151
  7. package/clean.d.ts +4 -0
  8. package/clean.js +7 -16
  9. package/copy.d.ts +7 -0
  10. package/copy.js +49 -76
  11. package/cp.d.ts +17 -0
  12. package/cp.js +85 -170
  13. package/docker.container.d.ts +73 -0
  14. package/docker.container.js +219 -362
  15. package/docker.d.ts +68 -0
  16. package/docker.js +167 -347
  17. package/docker.network.d.ts +42 -0
  18. package/docker.network.js +69 -144
  19. package/docker.volume.d.ts +26 -0
  20. package/docker.volume.js +52 -126
  21. package/dockerCleanup.d.ts +38 -0
  22. package/dockerCleanup.js +66 -141
  23. package/dockerCompose.d.ts +154 -0
  24. package/dockerCompose.js +400 -727
  25. package/fs.d.ts +5 -0
  26. package/fs.js +38 -95
  27. package/git.d.ts +9 -0
  28. package/git.js +19 -30
  29. package/index.d.ts +20 -0
  30. package/index.js +20 -27
  31. package/maps.d.ts +33 -0
  32. package/maps.js +16 -87
  33. package/npm.d.ts +48 -0
  34. package/npm.js +133 -135
  35. package/package.json +23 -19
  36. package/pkg.d.ts +39 -0
  37. package/pkg.js +26 -74
  38. package/publish.d.ts +27 -0
  39. package/publish.js +52 -140
  40. package/run.d.ts +13 -0
  41. package/run.js +39 -85
  42. package/tgz.d.ts +13 -0
  43. package/tgz.js +61 -96
  44. package/version.d.ts +34 -0
  45. package/version.js +86 -127
  46. package/yarn.d.ts +44 -0
  47. package/yarn.js +150 -119
  48. package/ant.js.flow +0 -42
  49. package/artifactory.js +0 -617
  50. package/artifactory.js.flow +0 -616
  51. package/cert.conf +0 -20
  52. package/cert.js.flow +0 -152
  53. package/clean.js.flow +0 -19
  54. package/copy.js.flow +0 -79
  55. package/cp.js.flow +0 -172
  56. package/docker.container.js.flow +0 -389
  57. package/docker.js.flow +0 -367
  58. package/docker.network.js.flow +0 -159
  59. package/docker.volume.js.flow +0 -136
  60. package/dockerCleanup.js.flow +0 -151
  61. package/dockerCompose.js.flow +0 -765
  62. package/flow.js +0 -21
  63. package/flow.js.flow +0 -20
  64. package/fs.js.flow +0 -96
  65. package/git.js.flow +0 -34
  66. package/hg.js +0 -35
  67. package/hg.js.flow +0 -34
  68. package/index.js.flow +0 -26
  69. package/inline-resources.js +0 -158
  70. package/inline-resources.js.flow +0 -157
  71. package/maps.js.flow +0 -111
  72. package/npm.js.flow +0 -144
  73. package/pkg.js.flow +0 -80
  74. package/publish.js.flow +0 -144
  75. package/run.js.flow +0 -89
  76. package/src/ant.js +0 -42
  77. package/src/artifactory.js +0 -616
  78. package/src/cert.conf +0 -20
  79. package/src/cert.js +0 -152
  80. package/src/clean.js +0 -19
  81. package/src/copy.js +0 -79
  82. package/src/cp.js +0 -172
  83. package/src/docker.container.js +0 -389
  84. package/src/docker.js +0 -367
  85. package/src/docker.network.js +0 -159
  86. package/src/docker.volume.js +0 -136
  87. package/src/dockerCleanup.js +0 -151
  88. package/src/dockerCompose.js +0 -765
  89. package/src/flow.js +0 -20
  90. package/src/fs.js +0 -96
  91. package/src/git.js +0 -34
  92. package/src/hg.js +0 -34
  93. package/src/index.js +0 -26
  94. package/src/inline-resources.js +0 -157
  95. package/src/maps.js +0 -111
  96. package/src/npm.js +0 -144
  97. package/src/pkg.js +0 -80
  98. package/src/publish.js +0 -144
  99. package/src/run.js +0 -89
  100. package/src/test.js +0 -55
  101. package/src/tgz.js +0 -101
  102. package/src/version.js +0 -141
  103. package/src/yarn.js +0 -123
  104. package/test.js +0 -56
  105. package/test.js.flow +0 -55
  106. package/tgz.js.flow +0 -101
  107. package/version.js.flow +0 -141
  108. package/yarn.js.flow +0 -123
package/cp.js CHANGED
@@ -1,173 +1,88 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.spawnAdv = spawnAdv;exports.spawn = spawn;exports.onKillSignal = exports.exec = void 0;
2
- var _child_process = _interopRequireDefault(require("child_process"));
3
- var _crossSpawn = _interopRequireDefault(require("cross-spawn"));
4
- var _run = require("./run");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
- async function spawnAdv(
35
- command,
36
- args,
37
- opts)
38
- {
39
- const {
40
- pipeOutput = false,
41
- captureOutput = false,
42
- rejectOnErrorCode = false,
43
- ...options } =
44
- opts || {};
45
-
46
- return new Promise((resolve, reject) => {
47
- try {
48
- const toStr = () => `${command}${args ? ` ${args.join(' ')}` : ''}`;
49
- const p = (0, _crossSpawn.default)(command, args, {
50
- ...options,
51
- // $FlowFixMe
52
- ...(pipeOutput && !captureOutput && !(options && options.stdio) ?
53
- { stdio: 'inherit' } :
54
- {}) });
55
-
56
-
57
- let output = '';
58
- let stdout = '';
59
- let stderr = '';
60
- if (captureOutput) {
61
- if (p.stdout) {
62
- if (pipeOutput) {
63
- p.stdout.pipe(process.stdout);
64
- }
65
- p.stdout.on('data', (d) => {
66
- const str = d.toString();
67
- stdout += str;
68
- output += str;
69
- });
70
- } else {
71
- (0, _run.buildLog)(`Warning: cannot capture stdout for \`${toStr()}\``);
1
+ import cp from 'child_process';
2
+ import crossSpawn from 'cross-spawn';
3
+ import { promisify } from 'util';
4
+ import { buildLog } from './run.js';
5
+ export async function spawn(command, args, opts) {
6
+ const { captureOutput = false, pipeOutput = false, rejectOnErrorCode = true, ...options } = opts || {};
7
+ return new Promise((resolve, reject) => {
8
+ try {
9
+ const toStr = () => `${command}${args ? ` ${args.join(' ')}` : ''}`;
10
+ const p = crossSpawn(command, args, {
11
+ ...(pipeOutput && !captureOutput ? { stdio: 'inherit' } : {}),
12
+ ...options,
13
+ });
14
+ let output = '';
15
+ let stdout = '';
16
+ let stderr = '';
17
+ if (captureOutput) {
18
+ if (p.stdout) {
19
+ if (pipeOutput) {
20
+ p.stdout.pipe(process.stdout);
21
+ }
22
+ p.stdout.on('data', (d) => {
23
+ const str = d.toString();
24
+ stdout += str;
25
+ output += str;
26
+ });
27
+ }
28
+ else {
29
+ buildLog(`Warning: cannot capture stdout for \`${toStr()}\``);
30
+ }
31
+ if (p.stderr) {
32
+ if (pipeOutput) {
33
+ p.stderr.pipe(process.stderr);
34
+ }
35
+ p.stderr.on('data', (d) => {
36
+ const str = d.toString();
37
+ stderr += str;
38
+ output += str;
39
+ });
40
+ }
41
+ else {
42
+ buildLog(`Warning: cannot capture stderr for \`${toStr()}\``);
43
+ }
44
+ }
45
+ let exitHandled = false;
46
+ const handleExit = (code, signal) => {
47
+ if (!exitHandled) {
48
+ if (rejectOnErrorCode && code) {
49
+ reject(new Error(`${toStr()} => ${code} (error)`));
50
+ }
51
+ else {
52
+ resolve({
53
+ code,
54
+ output,
55
+ signal,
56
+ stderr,
57
+ stdout,
58
+ });
59
+ }
60
+ exitHandled = true;
61
+ }
62
+ };
63
+ p.on('close', handleExit);
64
+ p.on('exit', handleExit);
65
+ // only fires if we failed to spawn
66
+ p.on('error', (err) => {
67
+ // Here we have a workaround that reverses a "feature" of cross-spawn on Windows. See:
68
+ // https://github.com/moxystudio/node-cross-spawn/blob/master/lib/enoent.js#L23
69
+ // https://github.com/moxystudio/node-cross-spawn/issues/104
70
+ if (process.platform === 'win32' &&
71
+ err.code === 'ENOENT' &&
72
+ err.errno === 'ENOENT') {
73
+ handleExit(1, 'ENOENT');
74
+ }
75
+ else {
76
+ reject(err);
77
+ }
78
+ });
72
79
  }
73
- if (p.stderr) {
74
- if (pipeOutput) {
75
- p.stderr.pipe(process.stderr);
76
- }
77
- p.stderr.on('data', (d) => {
78
- const str = d.toString();
79
- stderr += str;
80
- output += str;
81
- });
82
- } else {
83
- (0, _run.buildLog)(`Warning: cannot capture stderr for \`${toStr()}\``);
80
+ catch (err) {
81
+ reject(err);
84
82
  }
85
- }
86
-
87
- let exitHandled = false;
88
- const handleExit = (code, signal) => {
89
- if (!exitHandled) {
90
- if (rejectOnErrorCode && code) {
91
- reject(new Error(`${toStr()} => ${code} (error)`));
92
- } else {
93
- resolve({
94
- output,
95
- stdout,
96
- stderr,
97
- code,
98
- signal });
99
-
100
- }
101
- exitHandled = true;
102
- }
103
- };
104
-
105
- p.on('close', handleExit);
106
-
107
- p.on('exit', handleExit);
108
-
109
- // only fires if we failed to spawn
110
- p.on('error', (err) => {
111
- // Here we have a workaround that reverses a "feature" of cross-spawn on Windows. See:
112
- // https://jira.mmodal.com/browse/BTN-8
113
- // https://github.com/moxystudio/node-cross-spawn/blob/master/lib/enoent.js#L23
114
- // https://github.com/moxystudio/node-cross-spawn/issues/104
115
- if (
116
- process.platform === 'win32' &&
117
- err.code === 'ENOENT' &&
118
- err.errno === 'ENOENT')
119
- {
120
- handleExit(1, 'ENOENT');
121
- } else {
122
- reject(err);
123
- }
124
- });
125
- } catch (err) {
126
- reject(err);
127
- }
128
- });
129
- }
130
-
131
- // older, simpler interface that just returns a string
132
- async function spawn(
133
- command,
134
- args,
135
- opts)
136
- {
137
- return spawnAdv(command, args, { rejectOnErrorCode: true, ...opts }).then(
138
- (r) => r.output);
139
-
83
+ });
140
84
  }
141
-
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
-
154
-
155
- const exec = async (
156
- command,
157
- options) =>
158
-
159
- new Promise((resolve, reject) => {
160
- _child_process.default.exec(command, options, (err, stdout, stderr) => {
161
- if (err) {
162
- reject(err);
163
- return;
164
- }
165
-
166
- resolve({ stdout, stderr });
167
- });
168
- });exports.exec = exec;
169
-
170
- const onKillSignal = (cbFn) => {
171
- ['SIGINT', 'SIGTERM'].forEach((sig) => process.on(sig, cbFn));
172
- };exports.onKillSignal = onKillSignal;
173
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcC5qcyJdLCJuYW1lcyI6WyJzcGF3bkFkdiIsImNvbW1hbmQiLCJhcmdzIiwib3B0cyIsInBpcGVPdXRwdXQiLCJjYXB0dXJlT3V0cHV0IiwicmVqZWN0T25FcnJvckNvZGUiLCJvcHRpb25zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0b1N0ciIsImpvaW4iLCJwIiwic3RkaW8iLCJvdXRwdXQiLCJzdGRvdXQiLCJzdGRlcnIiLCJwaXBlIiwicHJvY2VzcyIsIm9uIiwiZCIsInN0ciIsInRvU3RyaW5nIiwiZXhpdEhhbmRsZWQiLCJoYW5kbGVFeGl0IiwiY29kZSIsInNpZ25hbCIsIkVycm9yIiwiZXJyIiwicGxhdGZvcm0iLCJlcnJubyIsInNwYXduIiwidGhlbiIsInIiLCJleGVjIiwiY3AiLCJvbktpbGxTaWduYWwiLCJjYkZuIiwiZm9yRWFjaCIsInNpZyJdLCJtYXBwaW5ncyI6IjtBQUNBO0FBQ0E7QUFDQSw0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJPLGVBQWVBLFFBQWY7QUFDTEMsT0FESztBQUVMQyxJQUZLO0FBR0xDLElBSEs7QUFJaUI7QUFDdEIsUUFBTTtBQUNKQyxJQUFBQSxVQUFVLEdBQUcsS0FEVDtBQUVKQyxJQUFBQSxhQUFhLEdBQUcsS0FGWjtBQUdKQyxJQUFBQSxpQkFBaUIsR0FBRyxLQUhoQjtBQUlKLE9BQUdDLE9BSkM7QUFLRkosRUFBQUEsSUFBSSxJQUFJLEVBTFo7O0FBT0EsU0FBTyxJQUFJSyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDLFFBQUk7QUFDRixZQUFNQyxLQUFLLEdBQUcsTUFBTyxHQUFFVixPQUFRLEdBQUVDLElBQUksR0FBSSxJQUFHQSxJQUFJLENBQUNVLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFBdEIsR0FBMEIsRUFBRyxFQUFsRTtBQUNBLFlBQU1DLENBQUMsR0FBRyx5QkFBV1osT0FBWCxFQUFvQkMsSUFBcEIsRUFBMEI7QUFDbEMsV0FBR0ssT0FEK0I7QUFFbEM7QUFDQSxZQUFJSCxVQUFVLElBQUksQ0FBQ0MsYUFBZixJQUFnQyxFQUFFRSxPQUFPLElBQUlBLE9BQU8sQ0FBQ08sS0FBckIsQ0FBaEM7QUFDQSxVQUFFQSxLQUFLLEVBQUUsU0FBVCxFQURBO0FBRUEsVUFGSixDQUhrQyxFQUExQixDQUFWOzs7QUFRQSxVQUFJQyxNQUFNLEdBQUcsRUFBYjtBQUNBLFVBQUlDLE1BQU0sR0FBRyxFQUFiO0FBQ0EsVUFBSUMsTUFBTSxHQUFHLEVBQWI7QUFDQSxVQUFJWixhQUFKLEVBQW1CO0FBQ2pCLFlBQUlRLENBQUMsQ0FBQ0csTUFBTixFQUFjO0FBQ1osY0FBSVosVUFBSixFQUFnQjtBQUNkUyxZQUFBQSxDQUFDLENBQUNHLE1BQUYsQ0FBU0UsSUFBVCxDQUFjQyxPQUFPLENBQUNILE1BQXRCO0FBQ0Q7QUFDREgsVUFBQUEsQ0FBQyxDQUFDRyxNQUFGLENBQVNJLEVBQVQsQ0FBWSxNQUFaLEVBQW9CLENBQUNDLENBQUQsS0FBTztBQUN6QixrQkFBTUMsR0FBRyxHQUFHRCxDQUFDLENBQUNFLFFBQUYsRUFBWjtBQUNBUCxZQUFBQSxNQUFNLElBQUlNLEdBQVY7QUFDQVAsWUFBQUEsTUFBTSxJQUFJTyxHQUFWO0FBQ0QsV0FKRDtBQUtELFNBVEQsTUFTTztBQUNMLDZCQUFVLHdDQUF1Q1gsS0FBSyxFQUFHLElBQXpEO0FBQ0Q7QUFDRCxZQUFJRSxDQUFDLENBQUNJLE1BQU4sRUFBYztBQUNaLGNBQUliLFVBQUosRUFBZ0I7QUFDZFMsWUFBQUEsQ0FBQyxDQUFDSSxNQUFGLENBQVNDLElBQVQsQ0FBY0MsT0FBTyxDQUFDRixNQUF0QjtBQUNEO0FBQ0RKLFVBQUFBLENBQUMsQ0FBQ0ksTUFBRixDQUFTRyxFQUFULENBQVksTUFBWixFQUFvQixDQUFDQyxDQUFELEtBQU87QUFDekIsa0JBQU1DLEdBQUcsR0FBR0QsQ0FBQyxDQUFDRSxRQUFGLEVBQVo7QUFDQU4sWUFBQUEsTUFBTSxJQUFJSyxHQUFWO0FBQ0FQLFlBQUFBLE1BQU0sSUFBSU8sR0FBVjtBQUNELFdBSkQ7QUFLRCxTQVRELE1BU087QUFDTCw2QkFBVSx3Q0FBdUNYLEtBQUssRUFBRyxJQUF6RDtBQUNEO0FBQ0Y7O0FBRUQsVUFBSWEsV0FBVyxHQUFHLEtBQWxCO0FBQ0EsWUFBTUMsVUFBVSxHQUFHLENBQUNDLElBQUQsRUFBT0MsTUFBUCxLQUFrQjtBQUNuQyxZQUFJLENBQUNILFdBQUwsRUFBa0I7QUFDaEIsY0FBSWxCLGlCQUFpQixJQUFJb0IsSUFBekIsRUFBK0I7QUFDN0JoQixZQUFBQSxNQUFNLENBQUMsSUFBSWtCLEtBQUosQ0FBVyxHQUFFakIsS0FBSyxFQUFHLE9BQU1lLElBQUssVUFBaEMsQ0FBRCxDQUFOO0FBQ0QsV0FGRCxNQUVPO0FBQ0xqQixZQUFBQSxPQUFPLENBQUM7QUFDTk0sY0FBQUEsTUFETTtBQUVOQyxjQUFBQSxNQUZNO0FBR05DLGNBQUFBLE1BSE07QUFJTlMsY0FBQUEsSUFKTTtBQUtOQyxjQUFBQSxNQUxNLEVBQUQsQ0FBUDs7QUFPRDtBQUNESCxVQUFBQSxXQUFXLEdBQUcsSUFBZDtBQUNEO0FBQ0YsT0FmRDs7QUFpQkFYLE1BQUFBLENBQUMsQ0FBQ08sRUFBRixDQUFLLE9BQUwsRUFBY0ssVUFBZDs7QUFFQVosTUFBQUEsQ0FBQyxDQUFDTyxFQUFGLENBQUssTUFBTCxFQUFhSyxVQUFiOztBQUVBO0FBQ0FaLE1BQUFBLENBQUMsQ0FBQ08sRUFBRixDQUFLLE9BQUwsRUFBYyxDQUFDUyxHQUFELEtBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFVixRQUFBQSxPQUFPLENBQUNXLFFBQVIsS0FBcUIsT0FBckI7QUFDQUQsUUFBQUEsR0FBRyxDQUFDSCxJQUFKLEtBQWEsUUFEYjtBQUVBRyxRQUFBQSxHQUFHLENBQUNFLEtBQUosS0FBYyxRQUhoQjtBQUlFO0FBQ0FOLFVBQUFBLFVBQVUsQ0FBQyxDQUFELEVBQUksUUFBSixDQUFWO0FBQ0QsU0FORCxNQU1PO0FBQ0xmLFVBQUFBLE1BQU0sQ0FBQ21CLEdBQUQsQ0FBTjtBQUNEO0FBQ0YsT0FkRDtBQWVELEtBOUVELENBOEVFLE9BQU9BLEdBQVAsRUFBWTtBQUNabkIsTUFBQUEsTUFBTSxDQUFDbUIsR0FBRCxDQUFOO0FBQ0Q7QUFDRixHQWxGTSxDQUFQO0FBbUZEOztBQUVEO0FBQ08sZUFBZUcsS0FBZjtBQUNML0IsT0FESztBQUVMQyxJQUZLO0FBR0xDLElBSEs7QUFJWTtBQUNqQixTQUFPSCxRQUFRLENBQUNDLE9BQUQsRUFBVUMsSUFBVixFQUFnQixFQUFFSSxpQkFBaUIsRUFBRSxJQUFyQixFQUEyQixHQUFHSCxJQUE5QixFQUFoQixDQUFSLENBQThEOEIsSUFBOUQ7QUFDTCxHQUFDQyxDQUFELEtBQU9BLENBQUMsQ0FBQ25CLE1BREosQ0FBUDs7QUFHRDs7Ozs7Ozs7Ozs7Ozs7O0FBZU0sTUFBTW9CLElBQUksR0FBRztBQUNsQmxDLE9BRGtCO0FBRWxCTSxPQUZrQjs7QUFJbEIsSUFBSUMsT0FBSixDQUFZLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUMvQjBCLHlCQUFHRCxJQUFILENBQVFsQyxPQUFSLEVBQWlCTSxPQUFqQixFQUEwQixDQUFDc0IsR0FBRCxFQUFNYixNQUFOLEVBQWNDLE1BQWQsS0FBeUI7QUFDakQsUUFBSVksR0FBSixFQUFTO0FBQ1BuQixNQUFBQSxNQUFNLENBQUNtQixHQUFELENBQU47QUFDQTtBQUNEOztBQUVEcEIsSUFBQUEsT0FBTyxDQUFDLEVBQUVPLE1BQUYsRUFBVUMsTUFBVixFQUFELENBQVA7QUFDRCxHQVBEO0FBUUQsQ0FURCxDQUpLLEM7O0FBZUEsTUFBTW9CLFlBQVksR0FBRyxDQUFDQyxJQUFELEtBQXFCO0FBQy9DLEdBQUMsUUFBRCxFQUFXLFNBQVgsRUFBc0JDLE9BQXRCLENBQThCLENBQUNDLEdBQUQsS0FBU3JCLE9BQU8sQ0FBQ0MsRUFBUixDQUFXb0IsR0FBWCxFQUFnQkYsSUFBaEIsQ0FBdkM7QUFDRCxDQUZNLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IGNyb3NzU3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nO1xuaW1wb3J0IHsgYnVpbGRMb2cgfSBmcm9tICcuL3J1bic7XG5cbmV4cG9ydCB0eXBlIE5hdGl2ZVNwYXduT3B0aW9ucyA9IHt8XG4gIGN3ZD86IHN0cmluZyxcbiAgZW52PzogT2JqZWN0LFxuICBhcmd2MD86IHN0cmluZyxcbiAgc3RkaW8/OiBzdHJpbmcgfCBBcnJheTxhbnk+LFxuICBkZXRhY2hlZD86IGJvb2xlYW4sXG4gIHVpZD86IG51bWJlcixcbiAgZ2lkPzogbnVtYmVyLFxuICBzaGVsbD86IGJvb2xlYW4gfCBzdHJpbmcsXG4gIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cz86IGJvb2xlYW4sXG4gIHdpbmRvd3NIaWRlPzogYm9vbGVhbixcbnx9O1xuXG5leHBvcnQgdHlwZSBTcGF3bk9wdGlvbnMgPSB7fFxuICAuLi5OYXRpdmVTcGF3bk9wdGlvbnMsXG4gIHBpcGVPdXRwdXQ/OiBib29sZWFuLFxuICBjYXB0dXJlT3V0cHV0PzogYm9vbGVhbixcbiAgcmVqZWN0T25FcnJvckNvZGU/OiBib29sZWFuLFxufH07XG5cbmV4cG9ydCB0eXBlIFNwYXduUmVzdWx0ID0ge3xcbiAgb3V0cHV0OiBzdHJpbmcsXG4gIHN0ZG91dDogc3RyaW5nLFxuICBzdGRlcnI6IHN0cmluZyxcbiAgY29kZTogbnVtYmVyLFxuICBzaWduYWw6IHN0cmluZyxcbnx9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3Bhd25BZHYoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJncz86IHN0cmluZ1tdLFxuICBvcHRzPzogP1NwYXduT3B0aW9ucyxcbik6IFByb21pc2U8U3Bhd25SZXN1bHQ+IHtcbiAgY29uc3Qge1xuICAgIHBpcGVPdXRwdXQgPSBmYWxzZSxcbiAgICBjYXB0dXJlT3V0cHV0ID0gZmFsc2UsXG4gICAgcmVqZWN0T25FcnJvckNvZGUgPSBmYWxzZSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSBvcHRzIHx8IHt9O1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRvU3RyID0gKCkgPT4gYCR7Y29tbWFuZH0ke2FyZ3MgPyBgICR7YXJncy5qb2luKCcgJyl9YCA6ICcnfWA7XG4gICAgICBjb25zdCBwID0gY3Jvc3NTcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgLi4uKHBpcGVPdXRwdXQgJiYgIWNhcHR1cmVPdXRwdXQgJiYgIShvcHRpb25zICYmIG9wdGlvbnMuc3RkaW8pXG4gICAgICAgICAgPyB7IHN0ZGlvOiAnaW5oZXJpdCcgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICAgIGxldCBzdGRlcnIgPSAnJztcbiAgICAgIGlmIChjYXB0dXJlT3V0cHV0KSB7XG4gICAgICAgIGlmIChwLnN0ZG91dCkge1xuICAgICAgICAgIGlmIChwaXBlT3V0cHV0KSB7XG4gICAgICAgICAgICBwLnN0ZG91dC5waXBlKHByb2Nlc3Muc3Rkb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcC5zdGRvdXQub24oJ2RhdGEnLCAoZCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RyID0gZC50b1N0cmluZygpO1xuICAgICAgICAgICAgc3Rkb3V0ICs9IHN0cjtcbiAgICAgICAgICAgIG91dHB1dCArPSBzdHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVpbGRMb2coYFdhcm5pbmc6IGNhbm5vdCBjYXB0dXJlIHN0ZG91dCBmb3IgXFxgJHt0b1N0cigpfVxcYGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwLnN0ZGVycikge1xuICAgICAgICAgIGlmIChwaXBlT3V0cHV0KSB7XG4gICAgICAgICAgICBwLnN0ZGVyci5waXBlKHByb2Nlc3Muc3RkZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcC5zdGRlcnIub24oJ2RhdGEnLCAoZCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RyID0gZC50b1N0cmluZygpO1xuICAgICAgICAgICAgc3RkZXJyICs9IHN0cjtcbiAgICAgICAgICAgIG91dHB1dCArPSBzdHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVpbGRMb2coYFdhcm5pbmc6IGNhbm5vdCBjYXB0dXJlIHN0ZGVyciBmb3IgXFxgJHt0b1N0cigpfVxcYGApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBleGl0SGFuZGxlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgaGFuZGxlRXhpdCA9IChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgaWYgKCFleGl0SGFuZGxlZCkge1xuICAgICAgICAgIGlmIChyZWplY3RPbkVycm9yQ29kZSAmJiBjb2RlKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGAke3RvU3RyKCl9ID0+ICR7Y29kZX0gKGVycm9yKWApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgc3Rkb3V0LFxuICAgICAgICAgICAgICBzdGRlcnIsXG4gICAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBleGl0SGFuZGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHAub24oJ2Nsb3NlJywgaGFuZGxlRXhpdCk7XG5cbiAgICAgIHAub24oJ2V4aXQnLCBoYW5kbGVFeGl0KTtcblxuICAgICAgLy8gb25seSBmaXJlcyBpZiB3ZSBmYWlsZWQgdG8gc3Bhd25cbiAgICAgIHAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAvLyBIZXJlIHdlIGhhdmUgYSB3b3JrYXJvdW5kIHRoYXQgcmV2ZXJzZXMgYSBcImZlYXR1cmVcIiBvZiBjcm9zcy1zcGF3biBvbiBXaW5kb3dzLiBTZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vamlyYS5tbW9kYWwuY29tL2Jyb3dzZS9CVE4tOFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW94eXN0dWRpby9ub2RlLWNyb3NzLXNwYXduL2Jsb2IvbWFzdGVyL2xpYi9lbm9lbnQuanMjTDIzXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3h5c3R1ZGlvL25vZGUtY3Jvc3Mtc3Bhd24vaXNzdWVzLzEwNFxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgIGVyci5jb2RlID09PSAnRU5PRU5UJyAmJlxuICAgICAgICAgIGVyci5lcnJubyA9PT0gJ0VOT0VOVCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFuZGxlRXhpdCgxLCAnRU5PRU5UJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gb2xkZXIsIHNpbXBsZXIgaW50ZXJmYWNlIHRoYXQganVzdCByZXR1cm5zIGEgc3RyaW5nXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3Bhd24oXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJncz86IHN0cmluZ1tdLFxuICBvcHRzPzogP1NwYXduT3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBzcGF3bkFkdihjb21tYW5kLCBhcmdzLCB7IHJlamVjdE9uRXJyb3JDb2RlOiB0cnVlLCAuLi5vcHRzIH0pLnRoZW4oXG4gICAgKHIpID0+IHIub3V0cHV0LFxuICApO1xufVxuXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IHt8XG4gIGN3ZD86IHN0cmluZyxcbiAgZW52PzogT2JqZWN0LFxuICBlbmNvZGluZz86IHN0cmluZyxcbiAgc2hlbGw/OiBzdHJpbmcsXG4gIHRpbWVvdXQ/OiBudW1iZXIsXG4gIG1heEJ1ZmZlcj86IG51bWJlcixcbiAga2lsbFNpZ25hbD86IHN0cmluZyB8IG51bWJlcixcbiAgdWlkPzogbnVtYmVyLFxuICBnaWQ/OiBudW1iZXIsXG4gIHdpbmRvd3NIaWRlPzogYm9vbGVhbixcbnx9O1xuXG5leHBvcnQgY29uc3QgZXhlYyA9IGFzeW5jIChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBvcHRpb25zPzogRXhlY09wdGlvbnMsXG4pOiBQcm9taXNlPHsgc3Rkb3V0OiBzdHJpbmcgfCBCdWZmZXIsIHN0ZGVycjogc3RyaW5nIHwgQnVmZmVyIH0+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjcC5leGVjKGNvbW1hbmQsIG9wdGlvbnMsIChlcnIsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBvbktpbGxTaWduYWwgPSAoY2JGbjogKCkgPT4gYW55KSA9PiB7XG4gIFsnU0lHSU5UJywgJ1NJR1RFUk0nXS5mb3JFYWNoKChzaWcpID0+IHByb2Nlc3Mub24oc2lnLCBjYkZuKSk7XG59O1xuIl19
85
+ export const exec = promisify(cp.exec);
86
+ export const onKillSignal = (cbFn) => {
87
+ ['SIGINT', 'SIGTERM'].forEach((sig) => process.on(sig, cbFn));
88
+ };
@@ -0,0 +1,73 @@
1
+ import { SpawnOptions } from './cp.js';
2
+ interface DockerContainerInspectOutput {
3
+ State: {
4
+ Running: boolean;
5
+ };
6
+ }
7
+ interface Port {
8
+ dest: number;
9
+ iface: string;
10
+ src: number;
11
+ }
12
+ export interface DockerContainer {
13
+ command: string;
14
+ created: Date;
15
+ exists: () => Promise<boolean>;
16
+ exited: boolean;
17
+ id: string;
18
+ image: string;
19
+ inspect: () => Promise<DockerContainerInspectOutput | undefined>;
20
+ isRunning: () => Promise<boolean>;
21
+ kill: (ignoreError?: boolean) => Promise<void>;
22
+ labels: string[];
23
+ mounts: string[];
24
+ name: string;
25
+ names: string[];
26
+ networks: string[];
27
+ ports: Port[];
28
+ restart: () => Promise<void>;
29
+ rm: (ignoreError?: boolean) => Promise<void>;
30
+ runningFor: string;
31
+ size: number;
32
+ start: () => Promise<void>;
33
+ status: string;
34
+ stop: (ignoreError?: boolean) => Promise<void>;
35
+ teardown: (verbose?: boolean) => Promise<void>;
36
+ }
37
+ interface DockerContainerLsOptions {
38
+ all?: boolean;
39
+ filter?: (container: DockerContainer) => boolean;
40
+ }
41
+ export declare function unthrottledDockerContainerLs({ all, filter, }?: DockerContainerLsOptions): Promise<DockerContainer[]>;
42
+ export declare const dockerContainerLs: (options: DockerContainerLsOptions | undefined) => Promise<DockerContainer[]> | undefined;
43
+ export declare function dockerContainerFind(search: string, options?: DockerContainerLsOptions): Promise<DockerContainer | null>;
44
+ export declare function dockerContainerStop(id: string | string[], ignoreErrors?: boolean): Promise<void>;
45
+ export declare function dockerContainerKill(id: string | string[], ignoreErrors?: boolean): Promise<void>;
46
+ export declare function dockerTryStopContainer(id: string | null, name?: string): Promise<void>;
47
+ export declare function dockerContainerRm(id: string | string[], ignoreErrors?: boolean): Promise<void>;
48
+ export declare function dockerContainerRestart(id: string | string[]): Promise<void>;
49
+ export declare function dockerContainerStart(id: string | string[]): Promise<void>;
50
+ export declare function unthrottledDockerContainerInspect(id: string | string[]): Promise<DockerContainerInspectOutput[]>;
51
+ export declare const dockerContainerInspect: (id: string | string[]) => Promise<DockerContainerInspectOutput[]> | undefined;
52
+ interface DockerContainerRunDaemonArgs {
53
+ cmd?: string[];
54
+ image: string;
55
+ runArgs?: string[];
56
+ waitAttempts?: number;
57
+ waitDuration?: number;
58
+ }
59
+ interface DockerContainerRunArgs extends DockerContainerRunDaemonArgs {
60
+ spawnOptions?: SpawnOptions | null;
61
+ }
62
+ export declare function dockerContainerRun({ image, runArgs, cmd, spawnOptions, }: DockerContainerRunArgs): Promise<string>;
63
+ export declare function dockerContainerRunDaemon({ image, runArgs, cmd, waitAttempts, waitDuration, }: DockerContainerRunDaemonArgs): Promise<DockerContainer>;
64
+ /**
65
+ * Waits for the given container to be fully started. Checks that the container is
66
+ * running, and test with the provided testFn every second until it returns true.
67
+ * @param {DockerContainer} container The container to test
68
+ * @param {Function} testFn A function that validates that the container is ready (e.g. by calling an API on the container)
69
+ * @param {number} timeoutMs The amount of time to wait between attempts.
70
+ * @param {number} maxAttempts The maximum number of attempts before giving up (rejects promise)
71
+ */
72
+ export declare const dockerContainerWaitForStart: (container: DockerContainer, testFn: (container: DockerContainer) => Promise<boolean>, timeoutMs?: number, maxAttempts?: number) => Promise<void>;
73
+ export {};